]> glassweightruler.freedombox.rocks Git - waydroid.git/blob - tools/actions/session_manager.py
session: Move waydroid user data to XDG_DATA_HOME
[waydroid.git] / tools / actions / session_manager.py
1 # Copyright 2021 Erfan Abdi
2 # SPDX-License-Identifier: GPL-3.0-or-later
3 import logging
4 import os
5 import time
6 import signal
7 import sys
8 import shutil
9 import tools.config
10 from tools import services
11
12
13 def start(args, unlocked_cb=None):
14 def signal_handler(sig, frame):
15 stop(args)
16 sys.exit(0)
17
18 xdg_session = os.getenv("XDG_SESSION_TYPE")
19 if xdg_session != "wayland":
20 logging.warning('XDG Session is not "wayland"')
21
22 cfg = tools.config.load_session()
23 waydroid_data = cfg["session"]["waydroid_data"]
24 #TODO: Drop me
25 old_user_waydroid = cfg["session"]["host_user"] + "/waydroid"
26 if os.path.isdir(old_user_waydroid):
27 if not os.path.isdir(waydroid_data):
28 shutil.move(old_user_waydroid, cfg["session"]["xdg_data_home"])
29 else:
30 os.removedirs(old_user_waydroid)
31 if not os.path.isdir(waydroid_data):
32 os.makedirs(waydroid_data)
33 dpi = tools.helpers.props.host_get(args, "ro.sf.lcd_density")
34 if dpi == "":
35 dpi = os.getenv("GRID_UNIT_PX")
36 if dpi is not None:
37 dpi = str(int(dpi) * 20)
38 else:
39 dpi = "0"
40 cfg["session"]["lcd_density"] = dpi
41 tools.config.save_session(cfg)
42
43 container_state = "IDLE"
44 signal.signal(signal.SIGINT, signal_handler)
45 while os.path.exists(tools.config.session_defaults["config_path"]):
46 session_cfg = tools.config.load_session()
47 if container_state != session_cfg["session"]["state"]:
48 if session_cfg["session"]["state"] == "RUNNING":
49 services.user_manager.start(args, unlocked_cb)
50 services.clipboard_manager.start(args)
51 if unlocked_cb:
52 unlocked_cb = None
53 elif session_cfg["session"]["state"] == "STOPPED":
54 services.user_manager.stop(args)
55 services.clipboard_manager.stop(args)
56 container_state = session_cfg["session"]["state"]
57 time.sleep(1)
58 services.user_manager.stop(args)
59 services.clipboard_manager.stop(args)
60
61 def stop(args):
62 config_path = tools.config.session_defaults["config_path"]
63 if os.path.isfile(config_path):
64 services.user_manager.stop(args)
65 services.clipboard_manager.stop(args)
66 os.remove(config_path)
67 else:
68 logging.error("WayDroid session is not started")