From ea1edfd79f41b40b054d099baf2c91faada03d5b Mon Sep 17 00:00:00 2001 From: glasseyes Date: Mon, 24 Sep 2018 09:52:01 +0700 Subject: [PATCH] [linux] user_keyboard_dir and user_keyman_dir factor ~/.local/share/keyman location into a function also keyman_cache_dir for the cache location --- linux/keyman-config/keyman_config/get_kmp.py | 13 ++++++++++--- linux/keyman-config/keyman_config/install_kmp.py | 12 +++++++++--- .../keyman_config/list_installed_kmp.py | 4 ++-- linux/keyman-config/keyman_config/uninstall_kmp.py | 5 ++--- linux/keyman-config/keyman_config/view_installed.py | 6 +++--- 5 files changed, 26 insertions(+), 14 deletions(-) diff --git a/linux/keyman-config/keyman_config/get_kmp.py b/linux/keyman-config/keyman_config/get_kmp.py index 4c286d4e8e..e2dfa0d0c3 100755 --- a/linux/keyman-config/keyman_config/get_kmp.py +++ b/linux/keyman-config/keyman_config/get_kmp.py @@ -23,11 +23,9 @@ def get_keyboard_data(keyboardid): api_url = "https://api.keyman.com/keyboard/" + keyboardid logging.debug("At URL %s", api_url) home = str(Path.home()) - cache_dir = os.path.join(home, ".local/share/keyman") + cache_dir = keyman_cache_dir() current_dir = os.getcwd() expire_after = datetime.timedelta(days=1) - if not os.path.isdir(cache_dir): - os.makedirs(cache_dir) os.chdir(cache_dir) requests_cache.install_cache(cache_name='keyman_cache', backend='sqlite', expire_after=expire_after) now = time.ctime(int(time.time())) @@ -44,6 +42,15 @@ def get_download_folder(): """ Folder where downloaded files will be saved. + Returns: + str: path of user keyman cache folder + """ + return keyman_cache_dir() + +def keyman_cache_dir() + """ + User keyman cache folder + Returns: str: path of user keyman cache folder """ diff --git a/linux/keyman-config/keyman_config/install_kmp.py b/linux/keyman-config/keyman_config/install_kmp.py index 64829cffc5..5380ac5fef 100755 --- a/linux/keyman-config/keyman_config/install_kmp.py +++ b/linux/keyman-config/keyman_config/install_kmp.py @@ -41,6 +41,14 @@ from keyman_config.kvk2ldml import convert_kvk_to_ldml, output_ldml # /usr/local/shared/keyman/kbid and link the files # to dirs in uls/doc and uls/fonts +def user_keyman_dir(): + home = os.path.expanduser("~") + datahome = os.environ.get("XDG_DATA_HOME", os.path.join(home, ".local", "share")) + return os.path.join(datahome, "keyman") + +def user_keyboard_dir(keyboardid): + return os.path.join(user_keyman_dir(), keyboardid) + def list_files(directory, extension): return (f for f in listdir(directory) if f.endswith('.' + extension)) @@ -212,9 +220,7 @@ def install_kmp_shared(inputfile, online=False): def install_kmp_user(inputfile, online=False): do_install_to_ibus = False keyboardid, ext = os.path.splitext(os.path.basename(inputfile)) - home = os.path.expanduser("~") - datahome = os.environ.get("XDG_DATA_HOME", os.path.join(home, ".local", "share")) - kbdir=os.path.join(datahome, "keyman", keyboardid) + kbdir=user_keyboard_dir(keyboardid) if not os.path.isdir(kbdir): os.makedirs(kbdir) diff --git a/linux/keyman-config/keyman_config/list_installed_kmp.py b/linux/keyman-config/keyman_config/list_installed_kmp.py index 19516b7ec9..f983542454 100755 --- a/linux/keyman-config/keyman_config/list_installed_kmp.py +++ b/linux/keyman-config/keyman_config/list_installed_kmp.py @@ -6,6 +6,7 @@ import os import json from enum import Enum, auto from keyman_config.kmpmetadata import parsemetadata, parseinfdata +from keyman_config.install_kmp import user_keyman_dir class InstallArea(Enum): IA_OS = auto() @@ -36,8 +37,7 @@ def get_installed_kmp(area): check_paths = [] if area == InstallArea.IA_USER: home = os.path.expanduser("~") - datahome = os.environ.get("XDG_DATA_HOME", os.path.join(home, ".local", "share")) - check_paths = [ os.path.join(datahome, "keyman"), os.path.join(home, ".kmfl") ] + check_paths = [ user_keyman_dir(), os.path.join(home, ".kmfl") ] elif area == InstallArea.IA_SHARED: check_paths = [ "/usr/local/share/keyman" ] elif area == InstallArea.IA_OS: diff --git a/linux/keyman-config/keyman_config/uninstall_kmp.py b/linux/keyman-config/keyman_config/uninstall_kmp.py index 7fdd429325..0771a454ab 100755 --- a/linux/keyman-config/keyman_config/uninstall_kmp.py +++ b/linux/keyman-config/keyman_config/uninstall_kmp.py @@ -6,6 +6,7 @@ import subprocess import sys import os.path from shutil import rmtree +from keyman_config.install_kmp import user_keyboard_dir def uninstall_from_ibus(kmnfile): if sys.version_info.major == 3 and sys.version_info.minor < 6: @@ -79,9 +80,7 @@ def uninstall_kmp_user(keyboardid): Args: keyboardid (str): Keyboard ID """ - home = os.path.expanduser("~") - datahome = os.environ.get("XDG_DATA_HOME", os.path.join(home, ".local", "share")) - kbdir=os.path.join(datahome, "keyman", keyboardid) + kbdir=user_keyboard_dir(keyboardid) if not os.path.isdir(kbdir): logging.error("Keyboard directory for %s does not exist. Aborting", keyboardid) exit(3) diff --git a/linux/keyman-config/keyman_config/view_installed.py b/linux/keyman-config/keyman_config/view_installed.py index 426cf58e4e..3009772238 100755 --- a/linux/keyman-config/keyman_config/view_installed.py +++ b/linux/keyman-config/keyman_config/view_installed.py @@ -14,6 +14,7 @@ from keyman_config.downloadkeyboard import DownloadKmpWindow from keyman_config.install_window import InstallKmpWindow, find_keyman_image from keyman_config.uninstall_kmp import uninstall_kmp from keyman_config.accelerators import bind_accelerator, init_accel +from keyman_config.install_kmp import user_keyboard_dir class KeyboardBox(Gtk.Box): def __init__(self, kmp, window, area): @@ -22,9 +23,7 @@ class KeyboardBox(Gtk.Box): self.kmp = kmp if area == InstallArea.IA_USER: - home = os.path.expanduser("~") - datahome = os.environ.get("XDG_DATA_HOME", os.path.join(home, ".local", "share")) - self.kbhome = os.path.join(datahome, "keyman", self.kmp["id"]) + self.kbhome = user_keyboard_dir(self.kmp["id"]) self.kbdoc = self.kbhome elif area == InstallArea.IA_SHARED: self.kbhome = os.path.join("/usr/local/share/keyman", self.kmp["id"]) @@ -95,6 +94,7 @@ class KeyboardBox(Gtk.Box): dialog.destroy() if response == Gtk.ResponseType.YES: logging.info("Uninstalling keyboard" + self.kmp["name"]) + # can only uninstall with the gui from user area uninstall_kmp(self.kmp["id"]) logging.info("need to refresh window after uninstalling a keyboard") self.parent.refresh_installed_kmp()