init
This commit is contained in:
121 files changed
+17641
No files matched your search
@@ -0,0 +1,84 @@
|
||||
"""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())
|
||||
Reference in new issue
Block a user