diff --git a/linux/history.md b/linux/history.md index edc3a9b2e1..a4980285d3 100644 --- a/linux/history.md +++ b/linux/history.md @@ -1,5 +1,11 @@ # Keyman for Linux Version History +## 2019-02-22 11.0.111 beta +* use lowercase ID and kmx filenames when installing .kmp packages (#1601) + +## 2019-02-20 11.0.110 beta +* update readme about launchpad (#1574) + ## 2019-02-18 11.0.109 beta * create appstream appdata for keyman-config (#1543) diff --git a/linux/keyman-config/keyman_config/ibus_util.py b/linux/keyman-config/keyman_config/ibus_util.py index 9108656367..afa9acc9fa 100644 --- a/linux/keyman-config/keyman_config/ibus_util.py +++ b/linux/keyman-config/keyman_config/ibus_util.py @@ -30,6 +30,7 @@ def install_to_ibus(bus, keyboard_id): preload_engines = ibus_settings.get_strv("preload-engines") logging.debug(preload_engines) if keyboard_id not in preload_engines: + # TODO: in the event preload_engines contains upper-case keyboards, we'll need to uninstall_from_ibus #1601 preload_engines.append(keyboard_id) logging.debug(preload_engines) ibus_settings.set_strv("preload-engines", preload_engines) diff --git a/linux/keyman-config/keyman_config/install_kmp.py b/linux/keyman-config/keyman_config/install_kmp.py index 9d02050eb0..5e9169fa5f 100755 --- a/linux/keyman-config/keyman_config/install_kmp.py +++ b/linux/keyman-config/keyman_config/install_kmp.py @@ -115,6 +115,10 @@ def check_keyman_dir(basedir, error_message): raise InstallError(InstallStatus.Abort, error_message) os.mkdir(keyman_dir) +def extract_package_id(inputfile): + packageID, ext = os.path.splitext(os.path.basename(inputfile)) + return packageID.lower() + def install_kmp_shared(inputfile, online=False): """ Install a kmp file to /usr/local/share/keyman @@ -127,7 +131,7 @@ def install_kmp_shared(inputfile, online=False): check_keyman_dir('/usr/local/share/doc', "You do not have permissions to install the documentation to the shared documentation area /usr/local/share/doc/keyman") check_keyman_dir('/usr/local/share/fonts', "You do not have permissions to install the font files to the shared font area /usr/local/share/fonts") - packageID, ext = os.path.splitext(os.path.basename(inputfile)) + packageID = extract_package_id(inputfile) packageDir = os.path.join('/usr/local/share/keyman', packageID) kmpdocdir = os.path.join('/usr/local/share/doc/keyman', packageID) kmpfontdir = os.path.join('/usr/local/share/fonts/keyman', packageID) @@ -173,10 +177,17 @@ def install_kmp_shared(inputfile, online=False): name, ext = os.path.splitext(f['name']) ldmlfile = os.path.join(packageDir, name+".ldml") output_ldml(ldmlfile, ldml) - # Special handling of icon to convert to PNG elif ftype == KMFileTypes.KM_ICON: + # Special handling of icon to convert to PNG logging.info("Converting %s to PNG and installing both as keyman files", f['name']) checkandsaveico(fpath) + elif ftype == KMFileTypes.KM_KMX: + # Sanitize keyboard filename if not lower case + kmx_id, ext = os.path.splitext(os.path.basename(f['name'])) + for kb in keyboards: + if kmx_id.lower() == kb['id'] and kmx_id != kb['id']: + os.rename(os.path.join(packageDir, f['name']), os.path.join(packageDir, kb['id']+'.kmx')) + for kb in keyboards: # install all kmx for first lang not just packageID kmx_file = os.path.join(packageDir, kb['id'] + ".kmx") @@ -191,7 +202,7 @@ def install_kmp_shared(inputfile, online=False): raise InstallError(InstallStatus.Abort, message) def install_kmp_user(inputfile, online=False): - packageID, ext = os.path.splitext(os.path.basename(inputfile)) + packageID = extract_package_id(inputfile) packageDir=user_keyboard_dir(packageID) if not os.path.isdir(packageDir): os.makedirs(packageDir) @@ -234,6 +245,13 @@ def install_kmp_user(inputfile, online=False): elif ftype == KMFileTypes.KM_SOURCE: #TODO for the moment just leave it for ibus-kmfl to ignore if it doesn't load pass + elif ftype == KMFileTypes.KM_KMX: + # Sanitize keyboard filename if not lower case + kmx_id, ext = os.path.splitext(os.path.basename(f['name'])) + for kb in keyboards: + if kmx_id.lower() == kb['id'] and kmx_id != kb['id']: + os.rename(os.path.join(packageDir, f['name']), os.path.join(packageDir, kb['id']+'.kmx')) + install_keyboards_to_ibus(keyboards, packageDir) else: logging.error("install_kmp.py: error: No kmp.json or kmp.inf found in %s", inputfile)