From 4e10633155a95a4a6b8a8a561abf9473ee95f3ef Mon Sep 17 00:00:00 2001 From: Ethan Dalool Date: Fri, 26 Mar 2021 13:28:24 -0700 Subject: [PATCH] Add adb_install.py. --- adb_install.py | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 adb_install.py diff --git a/adb_install.py b/adb_install.py new file mode 100644 index 0000000..2b076f7 --- /dev/null +++ b/adb_install.py @@ -0,0 +1,62 @@ +import argparse +import os +import re +import sys + +from voussoirkit import interactive +from voussoirkit import pathclass +from voussoirkit import pipeable +from voussoirkit import vlogging +from voussoirkit import winglob + +log = vlogging.getLogger(__name__, 'adbinstall') + +def natural_sorter(x): + ''' + Used for sorting files in 'natural' order instead of lexicographic order, + so that you get 1 2 3 4 5 6 7 8 9 10 11 12 13 ... + instead of 1 10 11 12 13 2 3 4 5 ... + Thank you Mark Byers + http://stackoverflow.com/a/11150413 + ''' + convert = lambda text: int(text) if text.isdigit() else text.lower() + alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)] + return alphanum_key(x) + +def adbinstall_argparse(args): + patterns = pipeable.input_many(args.apks, skip_blank=True, strip=True) + apks = [file for pattern in patterns for file in winglob.glob(pattern)] + installs = [] + for apk in args.apks: + apk = pathclass.Path(apk) + if apk.is_dir: + files = apk.glob('*.apk') + files.sort(key=lambda x: natural_sorter(x.basename.lower())) + apk = files[-1] + installs.append(apk) + + if not args.autoyes: + for apk in installs: + print(apk.absolute_path) + if not interactive.getpermission('Is that okay?', must_pick=True): + return 1 + + for apk in installs: + command = f'adb install "{apk.absolute_path}"' + log.info(command) + os.system(command) + +def main(argv): + argv = vlogging.set_level_by_argv(log, argv) + + parser = argparse.ArgumentParser(description=__doc__) + + parser.add_argument('apks', nargs='+') + parser.add_argument('--yes', dest='autoyes', action='store_true') + parser.set_defaults(func=adbinstall_argparse) + + args = parser.parse_args(argv) + return args.func(args) + +if __name__ == '__main__': + raise SystemExit(main(sys.argv[1:]))