From 9f95387b4bda05497478c372f97966351b79369a Mon Sep 17 00:00:00 2001 From: Faerbit Date: Thu, 18 Nov 2021 21:55:09 +0100 Subject: [PATCH] Create desktop icon --- setup.cfg | 1 + src/fime/config.py | 4 ++-- src/fime/data.py | 12 ++++-------- src/fime/main.py | 39 +++++++++++++++++++++++++++++++++++++-- 4 files changed, 44 insertions(+), 12 deletions(-) diff --git a/setup.cfg b/setup.cfg index f1bbe1d..da17cf3 100644 --- a/setup.cfg +++ b/setup.cfg @@ -21,6 +21,7 @@ python_requires = >=3.8 install_requires = requests requests-futures + desktop-file [options.packages.find] where = src diff --git a/src/fime/config.py b/src/fime/config.py index aedebef..0fc9f38 100644 --- a/src/fime/config.py +++ b/src/fime/config.py @@ -19,8 +19,8 @@ def dequotify(string): class Config: def __init__(self): self._configparser = ConfigParser() - config_dir_path = Path(QtCore.QStandardPaths.writableLocation(QtCore.QStandardPaths.ConfigLocation)) - config_path = config_dir_path / "fime" / "fime.conf" + config_dir_path = Path(QtCore.QStandardPaths.writableLocation(QtCore.QStandardPaths.AppConfigLocation)) + config_path = config_dir_path / "fime.conf" if config_path.exists(): print(f'Reading config file "{config_path}"') with open(config_path) as f: diff --git a/src/fime/data.py b/src/fime/data.py index ab9dbc2..4609f8f 100644 --- a/src/fime/data.py +++ b/src/fime/data.py @@ -12,12 +12,6 @@ try: except ImportError: from PySide2 import QtCore -data_dir_path = os.path.join(QtCore.QStandardPaths.writableLocation(QtCore.QStandardPaths.AppDataLocation), - "fime") - -tasks_path = os.path.join(data_dir_path, "tasks.json") - -data_path = os.path.join(data_dir_path, "data_{}.json") save_delay = 3 * 60 max_jira_tasks = 50 @@ -84,6 +78,8 @@ class Tasks: class Data(MutableMapping): def __init__(self): + data_dir_path = QtCore.QStandardPaths.writableLocation(QtCore.QStandardPaths.AppDataLocation) + self.data_path = os.path.join(data_dir_path, "data_{}.json") if not os.path.exists(data_dir_path): os.mkdir(data_dir_path) self._cache = {} @@ -101,7 +97,7 @@ class Data(MutableMapping): atexit.register(cleanup) def __getitem__(self, key): - dpath = data_path.format(key) + dpath = self.data_path.format(key) if key not in self._cache and os.path.exists(dpath): with open(dpath, "r") as f: self._cache[key] = json.loads(f.read()) @@ -128,7 +124,7 @@ class Data(MutableMapping): for key in self._hot_keys: print(f"... saving dict {key} ...") to_write = self._cache[key] # apparently thread-safe - with open(data_path.format(key), "w+") as f: + with open(self.data_path.format(key), "w+") as f: f.write(json.dumps(to_write)) self._hot_keys = set() self._saving = False diff --git a/src/fime/main.py b/src/fime/main.py index aeff3b2..6b9138d 100755 --- a/src/fime/main.py +++ b/src/fime/main.py @@ -1,8 +1,10 @@ #!/usr/bin/env python3 - import signal import sys from functools import partial +from pathlib import Path + +import desktop_file from fime.config import Config @@ -131,8 +133,39 @@ class App: print(f'handling signal "{signal.strsignal(signo)}"') self.app.quit() + @staticmethod + def write_icon(): + icon_path = str(Path(__file__).parent / "fime.svg") + if "main" not in sys.argv[0]: + QtCore.QFile.copy(":/icons/appointment-new.svg", icon_path) + return icon_path + + @staticmethod + def create_shortcut(icon_path): + shortcut_file = Path(QtCore.QStandardPaths.writableLocation(QtCore.QStandardPaths.AppDataLocation)) \ + / "shortcut" + print(f"shortcut file: {shortcut_file}") + shortcut_file_contents = "" + if shortcut_file.exists(): + with open(shortcut_file, "r") as f: + shortcut_file_contents = f.read() + if shortcut_file_contents.strip() == __file__: + return + shortcut = desktop_file.Shortcut(desktop_file.getMenuPath(), "fime", sys.argv[0]) + shortcut.setTitle("Fime") + shortcut.setComment("Simple time tracking app written with Python and Qt") + shortcut.setIcon(icon_path) + shortcut.save() + if "main" not in sys.argv[0]: + print("Successfully created menu shortcut") + shortcut_file.parent.mkdir(parents=True, exist_ok=True) + with open(shortcut_file, "w") as f: + f.write(__file__) + def run(self): - timer = QtCore.QTimer() + icon_path = self.write_icon() + self.create_shortcut(icon_path) + timer = QtCore.QTimer(None) # interrupt event loop regularly for signal handling timer.timeout.connect(lambda: None) timer.start(500) @@ -161,6 +194,8 @@ class App: def main(): try: + # important for QStandardPath to be correct + QtCore.QCoreApplication.setApplicationName("fime") app = App() app.run() except FimeException as e: