]> glassweightruler.freedombox.rocks Git - waydroid.git/blobdiff - tools/__init__.py
app_manager: Allow install/remove/list while frozen
[waydroid.git] / tools / __init__.py
index 65f0efc68be70abf7ecbbecd5b272c07c565ae54..9a4701b0bc961a4fb2ba7cf89423b3e5f616f68b 100644 (file)
@@ -5,6 +5,9 @@ import sys
 import logging
 import os
 import traceback
 import logging
 import os
 import traceback
+import dbus.mainloop.glib
+import dbus
+import dbus.exceptions
 
 from . import actions
 from . import config
 
 from . import actions
 from . import config
@@ -39,10 +42,19 @@ def main():
 
         tools_logging.init(args)
 
 
         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:
         if not actions.initializer.is_initialized(args) and \
                 args.action and args.action not in ("init", "first-launch", "log"):
             if args.wait_for_init:
-                actions.wait_for_init(args)
+                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
             else:
                 print('ERROR: WayDroid is not initialized, run "waydroid init"')
                 return 0
@@ -65,6 +77,12 @@ def main():
         elif args.action == "container":
             actionNeedRoot(args.action)
             if args.subaction == "start":
         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)
                 actions.container_manager.start(args)
             elif args.subaction == "stop":
                 actions.container_manager.stop(args)