diff --git a/src/forceful_timer/app_utils.py b/src/forceful_timer/app_utils.py index b85fd8f..c1f019c 100644 --- a/src/forceful_timer/app_utils.py +++ b/src/forceful_timer/app_utils.py @@ -11,7 +11,11 @@ def is_app_running(app_id: str) -> bool: app_ids = [x.split()[0] for x in get_running_apps_raw()] return app_id in app_ids elif os_type() == "windows": - raise NotImplementedError + output = subprocess.check_output(["tasklist"]).decode() + return app_id in [line.split()[1] for line in output.split("\n")[3:-1]] + elif os_type() == "darwin": + output = subprocess.check_output(["ps", "-A"]).decode() + return app_id in [line.split()[0] for line in output.split("\n")[1:-1]] return False @@ -24,7 +28,13 @@ def get_running_apps_raw() -> list: decoded_output = subprocess.check_output(["wmctrl", "-l"]) output = decoded_output.decode().split("\n")[:-1] elif os_type() == "windows": - raise NotImplementedError + output = subprocess.check_output(["tasklist"]).decode() + output = output.split("\n")[3:-1] + output = [line.split()[0:2] for line in output] + elif os_type() == "darwin": + output = subprocess.check_output(["ps", "-A"]).decode() + output = output.split("\n")[1:-1] + output = [line.split()[0:2] for line in output] return output @@ -48,8 +58,8 @@ def get_running_apps() -> list: """ if os_type() == "linux": apps = [extract_app_data_values(x) for x in get_running_apps_raw()] - elif os_type() == "windows": - raise NotImplementedError + elif os_type() == "windows" or os_type() == "darwin": + apps = [tuple(x) for x in get_running_apps_raw()] return apps diff --git a/src/forceful_timer/main.py b/src/forceful_timer/main.py index 6fe840d..b1b6a22 100644 --- a/src/forceful_timer/main.py +++ b/src/forceful_timer/main.py @@ -59,6 +59,8 @@ def shutdown(): subprocess.call(["shutdown", "now"]) elif os_type() == "windows": subprocess.call(["shutdown", "/s", "/t", "0"]) + elif os_type() == "darwin": + subprocess.call(["sudo", "shutdown", "-h", "now"]) def cancel_shutdown(apps): @@ -66,7 +68,14 @@ def cancel_shutdown(apps): for app in apps: if app_utils.is_app_running(app[0]): - subprocess.call(["wmctrl", "-i", "-c", app[0]]) + if os_type() == "linux": + subprocess.call(["wmctrl", "-i", "-c", app[0]]) + elif os_type() == "windows": + subprocess.call(["taskkill", "/F", "/IM", app[1]]) + elif os_type() == "darwin": + subprocess.call( + ["osascript", "-e", f"tell application {app[1]} to quit"] + ) print("Terminating: {}".format(app)) else: print("Skipping app, because it's not running anymore: {}".format(app)) diff --git a/src/forceful_timer/ui_utils.py b/src/forceful_timer/ui_utils.py index 6b82338..19c786c 100644 --- a/src/forceful_timer/ui_utils.py +++ b/src/forceful_timer/ui_utils.py @@ -10,6 +10,8 @@ def clear_terminal(): subprocess.run("clear", shell=True) elif os_type() == "windows": subprocess.run("cls", shell=True) + elif os_type() == "darwin": + subprocess.run("clear", shell=True) def get_title() -> list: diff --git a/src/forceful_timer/utils.py b/src/forceful_timer/utils.py index b976c40..ed1256f 100644 --- a/src/forceful_timer/utils.py +++ b/src/forceful_timer/utils.py @@ -2,7 +2,7 @@ def check_os(): - if os_type_str not in ["linux", "windows"]: + if os_type_str not in ["linux", "windows", "darwin"]: raise OSError("Your operating system is not supported!", os_type_str)