diff options
author | Dominik Schürmann <dominik@dominikschuermann.de> | 2015-01-26 16:30:21 +0100 |
---|---|---|
committer | Dominik Schürmann <dominik@dominikschuermann.de> | 2015-01-26 16:30:21 +0100 |
commit | 34a7728cec5c17ef25f3d5cd56421e4f5258862d (patch) | |
tree | f8fcf0aced9b106facff2e50405a19288931da6b /Graphics/android-icon-copier/copy | |
parent | b73ad7d87e7ddef03c17b4983f526c0613403df6 (diff) | |
parent | e049895b9f8f5f9996ac678acf6810768e859695 (diff) | |
download | open-keychain-34a7728cec5c17ef25f3d5cd56421e4f5258862d.tar.gz open-keychain-34a7728cec5c17ef25f3d5cd56421e4f5258862d.tar.bz2 open-keychain-34a7728cec5c17ef25f3d5cd56421e4f5258862d.zip |
Merge branch 'development' into detached-sigs-api
Conflicts:
OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/OpenPgpService.java
OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeychainIntentService.java
Diffstat (limited to 'Graphics/android-icon-copier/copy')
-rwxr-xr-x | Graphics/android-icon-copier/copy | 162 |
1 files changed, 162 insertions, 0 deletions
diff --git a/Graphics/android-icon-copier/copy b/Graphics/android-icon-copier/copy new file mode 100755 index 000000000..995a8789e --- /dev/null +++ b/Graphics/android-icon-copier/copy @@ -0,0 +1,162 @@ +#!/usr/bin/env python + +import os +import sys +import shutil +import requests +from os.path import expanduser +import classic + +resolutions = { + 'material': ("m", "h", "xh", "xxh", "xxxh"), + 'fa': ("l", "m", "h", "xh", "xxh"), + 'classic': ("m", "h", "xh", "xxh"), +} + + +class AppError(Exception): + pass + + +def make_filename(filename_format, cat, name, color, size): + args = { + 'cat': cat or '', + 'name': name, + 'color': color, + 'size': size, + } + bg = {'white': 'dark', 'grey': 'light', 'black': 'bright'}.get(color) or '' + bg_suffix = '_dark' if bg == 'dark' else '' + args['bgSuffix'] = bg_suffix + args['bg'] = bg + return filename_format.format(**args) + + +def download_url(url, target_path): + print("Downloading {} to {} ...".format(url, target_path)) + print("") + #r = requests.get(url, stream=True) + r = requests.get(url) + if r.status_code != 200: + raise AppError("url not found, perhaps invalid name, size or color") + with open(target_path, 'wb') as fd: + for chunk in r.iter_content(4096): + fd.write(chunk) + + +def make_material_icon_url(cat, res, name, color, size): + if color == 'grey': + color = 'grey600' + elif color not in ('white', 'black'): + raise AppError('invalid color') + return ('https://raw.githubusercontent.com/google/material-design-icons/master/' + + '{}/drawable-{}dpi/ic_{}_{}_{}dp.png').format(cat, res, name, color, size) + + +def make_fa_icon_url(res, name, color): + if color == 'white': + holo = 'dark' + elif color == 'grey': + holo = 'light' + else: + raise AppError('invalid color') + return ('https://raw.githubusercontent.com/svenkapudija/Android-Action-Bar-Icons/' + + 'master/Font Awesome/holo_{2}/ic_fa_{1}/drawable-{0}dpi/ic_fa_{1}.png').format(res, name, holo) + + +def make_classic_icon_url(res, name, color): + dirname = classic.CLASSIC_MAP.get(name) + if not dirname: + raise AppError('invalid name') + if color == 'white': + holo = 'dark' + elif color == 'grey': + holo = 'light' + else: + raise AppError('invalid color') + return ('https://raw.githubusercontent.com/svenkapudija/Android-Action-Bar-Icons/' + + 'master/Android Stock/holo_{2}/{3}/drawable-{0}dpi/ic_action_{1}.png').format(res, name, holo, dirname) + + +def make_target_path(base_path, proj, res, filename): + res_path1 = os.path.join(base_path, proj, 'src', 'main', 'res') + res_path2 = os.path.join(base_path, proj, 'res') + if os.path.isdir(res_path1): + res_path = res_path1 + elif os.path.isdir(res_path2): + res_path = res_path2 + else: + raise AppError('missing res dir') + res_specific_path = os.path.join(res_path, 'drawable-' + res + 'dpi') + try: + os.mkdir(res_specific_path) + except OSError: + pass + return os.path.join(res_specific_path, filename) + + +def do_material(options, proj_path, cat, name, color, size): + base_path = expanduser(options['basePath']) + filename_map = options['filenameMap'] + + for res in resolutions['material']: + filename = make_filename(filename_map['material'], cat, name, color, size) + target_path = make_target_path(base_path, proj_path, res, filename) + url = make_material_icon_url(cat, res, name, color, size) + download_url(url, target_path) + + +def do_classic_or_fa(options, proj_path, cat, name, color): + base_path = expanduser(options['basePath']) + filename_map = options['filenameMap'] + + for res in resolutions[cat]: + filename = make_filename(filename_map[cat], cat, name, color, size=32) + target_path = make_target_path(base_path, proj_path, res, filename) + url = globals()['make_' + cat + '_icon_url'](res, name, color) + download_url(url, target_path) + + +def print_usage(): + print("Usage:") + print("Material : ./copy <proj path> <category> <color> <icon name> [size]") + print("Classic & FA: ./copy <proj path> <fa/classic> <color> <icon name>") + print("") + + +def main(): + import json + + if len(sys.argv) < 5: + print_usage() + return + + option_filename = 'options.json' + if not os.path.exists(option_filename): + option_filename = 'options.templ.json' + print("WARNING: using the template options file") + print("You should create your own options.json") + + with open(option_filename, 'r') as fd: + options = json.load(fd) + + proj_path = sys.argv[1] + cat = sys.argv[2] + color = sys.argv[3] + name = sys.argv[4] + + if cat == 'classic' or cat == 'fa': + do_classic_or_fa(options, proj_path, cat, name, color) + else: + size = sys.argv[5] if len(sys.argv) >= 6 else 0 + size = int(size) or 24 + do_material(options, proj_path, cat, name, color, size) + + +if __name__ == "__main__": + try: + main() + except AppError as e: + print(e.message) + + |