85 lines
2.6 KiB
Python
85 lines
2.6 KiB
Python
"""Entry point.
|
|
|
|
Run with no arguments to open the app. The verbs (`--toggle`, `--status`, …)
|
|
talk to a *running* instance over D-Bus instead of starting a second one, which
|
|
is what makes them usable as global shortcuts:
|
|
|
|
kadence-desktop --toggle # bind this to a key in System Settings
|
|
kadence-desktop --status # prints "Focus 18:42 · Write the docs · 3/8 today"
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import argparse
|
|
import logging
|
|
import os
|
|
import sys
|
|
|
|
REMOTE_VERBS = {
|
|
"toggle": "Toggle",
|
|
"start": "StartWork",
|
|
"break": "StartBreak",
|
|
"pause": "Pause",
|
|
"resume": "Resume",
|
|
"complete": "Complete",
|
|
"stop": "Stop",
|
|
"extend": "Extend",
|
|
"interrupt": "Interrupt",
|
|
"status": "Status",
|
|
"report": "SendReport",
|
|
"show": "Raise",
|
|
}
|
|
|
|
|
|
def _remote(verb: str) -> int:
|
|
"""Call the running instance. Returns a process exit code."""
|
|
from PyQt6.QtCore import QCoreApplication
|
|
from PyQt6.QtDBus import QDBusConnection, QDBusInterface
|
|
|
|
_app = QCoreApplication(sys.argv) # noqa: F841 - needed for the D-Bus loop
|
|
interface = QDBusInterface(
|
|
"org.kadence.Desktop", "/Timer", "org.kadence.Timer", QDBusConnection.sessionBus()
|
|
)
|
|
if not interface.isValid():
|
|
print("Kadence is not running.", file=sys.stderr)
|
|
return 1
|
|
reply = interface.call(REMOTE_VERBS[verb])
|
|
arguments = reply.arguments()
|
|
if arguments:
|
|
print(arguments[0])
|
|
return 0
|
|
|
|
|
|
def main() -> int:
|
|
parser = argparse.ArgumentParser(prog="kadence-desktop", description=__doc__)
|
|
parser.add_argument("--minimized", action="store_true", help="start in the tray only")
|
|
parser.add_argument("--verbose", action="store_true")
|
|
for verb in REMOTE_VERBS:
|
|
parser.add_argument(
|
|
f"--{verb}", action="store_true", help=f"ask the running instance to {verb}"
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
logging.basicConfig(
|
|
level=logging.DEBUG if args.verbose else os.environ.get("KADENCE_LOG", "INFO").upper(),
|
|
format="%(asctime)s %(levelname)-7s %(name)s: %(message)s",
|
|
)
|
|
|
|
for verb in REMOTE_VERBS:
|
|
if getattr(args, verb):
|
|
return _remote(verb)
|
|
|
|
from kadence_desktop.app import KadenceApp
|
|
from kadence_desktop.integrations.dbus_service import call_existing
|
|
|
|
# Single instance: if somebody already owns the name, just raise their window.
|
|
if call_existing("Raise"):
|
|
print("Kadence is already running — raised its window.")
|
|
return 0
|
|
|
|
return KadenceApp(sys.argv, minimized=args.minimized).run()
|
|
|
|
|
|
if __name__ == "__main__":
|
|
raise SystemExit(main())
|