X-Git-Url: https://glassweightruler.freedombox.rocks/gitweb/waydroid.git/blobdiff_plain/65df4922950433b7769224cf843fe2003f0a3d11..refs/heads/electrikjesus-patch-1:/tools/__init__.py?ds=sidebyside diff --git a/tools/__init__.py b/tools/__init__.py index 62c2b92..819d54a 100644 --- a/tools/__init__.py +++ b/tools/__init__.py @@ -5,6 +5,9 @@ import sys import logging import os import traceback +import dbus.mainloop.glib +import dbus +import dbus.exceptions from . import actions from . import config @@ -21,28 +24,40 @@ def main(): # Wrap everything to display nice error messages args = None try: - os.umask(0o000) # Parse arguments, set up logging args = helpers.arguments() args.cache = {} args.work = config.defaults["work"] args.config = args.work + "/waydroid.cfg" - args.log = args.work + "/tools.log" + args.log = args.work + "/waydroid.log" args.sudo_timer = True args.timeout = 1800 - if not os.path.isfile(args.config): - if args.action and args.action != "init": - print('ERROR: WayDroid is not initialized, run "waydroid init"') - return 0 - elif os.geteuid() == 0 and args.action == "init": - if not os.path.exists(args.work): - os.mkdir(args.work) - else: - args.log = "/tmp/tools.log" + if os.geteuid() == 0: + if not os.path.exists(args.work): + os.mkdir(args.work) + elif not os.path.exists(args.log): + args.log = "/tmp/tools.log" tools_logging.init(args) + dbus.mainloop.glib.DBusGMainLoop(set_as_default=True) + dbus.mainloop.glib.threads_init() + dbus_name_scope = None + + if not actions.initializer.is_initialized(args) and \ + args.action and args.action not in ("init", "first-launch", "log"): + if args.wait_for_init: + try: + dbus_name_scope = dbus.service.BusName("id.waydro.Container", dbus.SystemBus(), do_not_queue=True) + actions.wait_for_init(args) + except dbus.exceptions.NameExistsException: + print('ERROR: WayDroid service is already awaiting initialization') + return 1 + else: + print('ERROR: WayDroid is not initialized, run "waydroid init"') + return 0 + # Initialize or require config if args.action == "init": actionNeedRoot(args.action) @@ -61,6 +76,12 @@ def main(): elif args.action == "container": actionNeedRoot(args.action) if args.subaction == "start": + if dbus_name_scope is None: + try: + dbus_name_scope = dbus.service.BusName("id.waydro.Container", dbus.SystemBus(), do_not_queue=True) + except dbus.exceptions.NameExistsException: + print('ERROR: WayDroid container service is already running') + return 1 actions.container_manager.start(args) elif args.subaction == "stop": actions.container_manager.stop(args) @@ -80,6 +101,8 @@ def main(): actions.app_manager.remove(args) elif args.subaction == "launch": actions.app_manager.launch(args) + elif args.subaction == "intent": + actions.app_manager.intent(args) elif args.subaction == "list": actions.app_manager.list(args) else: @@ -87,11 +110,9 @@ def main(): "Run waydroid {} -h for usage information.".format(args.action)) elif args.action == "prop": if args.subaction == "get": - ret = helpers.props.get(args, args.key) - if ret: - print(ret) + actions.prop.get(args) elif args.subaction == "set": - helpers.props.set(args, args.key, args.value) + actions.prop.set(args) else: logging.info( "Run waydroid {} -h for usage information.".format(args.action)) @@ -103,13 +124,20 @@ def main(): helpers.lxc.logcat(args) elif args.action == "show-full-ui": actions.app_manager.showFullUI(args) + elif args.action == "first-launch": + actions.remote_init_client(args) + if actions.initializer.is_initialized(args): + actions.app_manager.showFullUI(args) elif args.action == "status": actions.status.print_status(args) elif args.action == "log": if args.clear_log: helpers.run.user(args, ["truncate", "-s", "0", args.log]) - helpers.run.user( - args, ["tail", "-n", args.lines, "-F", args.log], output="tui") + try: + helpers.run.user( + args, ["tail", "-n", args.lines, "-F", args.log], output="tui") + except KeyboardInterrupt: + pass else: logging.info("Run waydroid -h for usage information.")