def install_kmp_user(inputfile, online=False): packageID = extract_package_id(inputfile) packageDir=user_keyboard_dir(packageID) if not os.path.isdir(packageDir): os.makedirs(packageDir) extract_kmp(inputfile, packageDir) #restart IBus so it knows about the keyboards being installed restart_ibus() info, system, options, keyboards, files = get_metadata(packageDir) if keyboards: logging.info("Installing %s", info['name']['description']) if online: process_keyboard_data(packageID, packageDir) if len(keyboards) > 1: for kb in keyboards: if kb['id'] != packageID: process_keyboard_data(kb['id'], packageDir) for f in files: fpath = os.path.join(packageDir, f['name']) ftype = f['type'] if ftype == KMFileTypes.KM_FONT: #Special handling of font to hard link it into font dir fontsdir = os.path.join(user_keyman_font_dir(), packageID) if not os.path.isdir(fontsdir): os.makedirs(fontsdir) os.link(fpath, os.path.join(fontsdir, f['name'])) logging.info("Installing %s as font", f['name']) elif ftype == KMFileTypes.KM_OSK: # Special handling to convert kvk into LDML logging.info("Converting %s to LDML and installing both as as keyman file", f['name']) ldml = convert_kvk_to_ldml(fpath) name, ext = os.path.splitext(f['name']) ldmlfile = os.path.join(packageDir, name+".ldml") output_ldml(ldmlfile, ldml) 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_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) logging.info("Contents of %s:", inputfile) for o in os.listdir(packageDir): logging.info(o) rmtree(packageDir) message = "install_kmp.py: error: No kmp.json or kmp.inf found in %s" % (inputfile) raise InstallError(InstallStatus.Abort, message)
def uninstall_keyboards_from_ibus(keyboards, packageDir): bus = get_ibus_bus() if bus: # install all kmx for first lang not just packageID for kb in keyboards: ibus_keyboard_id = get_ibus_keyboard_id(kb, packageDir) uninstall_from_ibus(bus, ibus_keyboard_id) restart_ibus(bus) else: logging.warning("could not uninstall keyboards from IBus")
def install_keyboards_to_ibus(keyboards, packageDir, language=None): bus = get_ibus_bus() if bus: # install all kmx for first lang not just packageID for kb in keyboards: ibus_keyboard_id = get_ibus_keyboard_id(kb, packageDir, language) install_to_ibus(bus, ibus_keyboard_id) restart_ibus(bus) bus.destroy() else: logging.debug("could not install keyboards to IBus")
def uninstall_keyboards_from_ibus(keyboards, packageDir): bus = get_ibus_bus() if bus: # install all kmx for first lang not just packageID for kb in keyboards: kmx_file = os.path.join(packageDir, kb['id'] + ".kmx") if "languages" in kb and len(kb["languages"]) > 0: logging.debug(kb["languages"][0]) keyboard_id = "%s:%s" % (kb["languages"][0]['id'], kmx_file) else: keyboard_id = kmx_file uninstall_from_ibus(bus, keyboard_id) restart_ibus(bus) else: logging.warning("could not uninstall keyboards from IBus")
def install_kmp_shared(inputfile, online=False, language=None): """ Install a kmp file to /usr/local/share/keyman Args: inputfile (str): path to kmp file online (bool, default=False): whether to attempt to get online keyboard data """ check_keyman_dir( '/usr/local/share', _("You do not have permissions to install the keyboard files to the shared area " "/usr/local/share/keyman")) 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 = 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) if not os.path.isdir(packageDir): os.makedirs(packageDir) extract_kmp(inputfile, packageDir) # restart IBus so it knows about the keyboards being installed logging.debug("restarting IBus") restart_ibus() info, system, options, keyboards, files = get_metadata(packageDir) if keyboards: logging.info("Installing %s", info['name']['description']) if online: process_keyboard_data(packageID, packageDir) if len(keyboards) > 1: for kb in keyboards: if kb['id'] != packageID: process_keyboard_data(kb['id'], packageDir) for f in files: fpath = os.path.join(packageDir, f['name']) ftype = f['type'] if ftype == KMFileTypes.KM_DOC or ftype == KMFileTypes.KM_IMAGE: # Special handling of doc and images to hard link them into doc dir logging.info("Installing %s as documentation", f['name']) if not os.path.isdir(kmpdocdir): os.makedirs(kmpdocdir) os.link(fpath, os.path.join(kmpdocdir, f['name'])) elif ftype == KMFileTypes.KM_FONT: # Special handling of font to hard link it into font dir logging.info("Installing %s as font", f['name']) if not os.path.isdir(kmpfontdir): os.makedirs(kmpfontdir) os.link(fpath, os.path.join(kmpfontdir, f['name'])) elif ftype == KMFileTypes.KM_SOURCE: # TODO for the moment just leave it for ibus-kmfl to ignore if it doesn't load logging.info("Installing %s as keyman file", f['name']) elif ftype == KMFileTypes.KM_OSK: # Special handling to convert kvk into LDML logging.info( "Converting %s to LDML and installing both as as keyman file", f['name']) ldml = convert_kvk_to_ldml(fpath) name, ext = os.path.splitext(f['name']) ldmlfile = os.path.join(packageDir, name + ".ldml") output_ldml(ldmlfile, ldml) 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')) fpath = os.path.join(packageDir, kb['id'] + '.kmx') extractico(fpath) install_keyboards_to_ibus(keyboards, packageDir, language) else: logging.error( "install_kmp.py: error: No kmp.json or kmp.inf found in %s", inputfile) logging.info("Contents of %s:", inputfile) for o in os.listdir(packageDir): logging.info(o) rmtree(packageDir) message = _( "install_kmp.py: error: No kmp.json or kmp.inf found in {package}" ).format(package=inputfile) raise InstallError(InstallStatus.Abort, message)
def install_kmp_user(inputfile, online=False, language=None): packageID = extract_package_id(inputfile) packageDir = user_keyboard_dir(packageID) if not os.path.isdir(packageDir): os.makedirs(packageDir) extract_kmp(inputfile, packageDir) restart_ibus() info, system, options, keyboards, files = get_metadata(packageDir) if keyboards: logging.info("Installing %s", info['name']['description']) if online: process_keyboard_data(packageID, packageDir) if len(keyboards) > 1: for kb in keyboards: if kb['id'] != packageID: process_keyboard_data(kb['id'], packageDir) for f in files: fpath = os.path.join(packageDir, f['name']) ftype = f['type'] if ftype == KMFileTypes.KM_FONT: # Special handling of font to hard link it into font dir fontsdir = os.path.join(user_keyman_font_dir(), packageID) if not os.path.isdir(fontsdir): os.makedirs(fontsdir) os.link(fpath, os.path.join(fontsdir, f['name'])) logging.info("Installing %s as font", f['name']) elif ftype == KMFileTypes.KM_OSK: # Special handling to convert kvk into LDML logging.info( "Converting %s to LDML and installing both as as keyman file", f['name']) ldml = convert_kvk_to_ldml(fpath) name, ext = os.path.splitext(f['name']) ldmlfile = os.path.join(packageDir, name + ".ldml") output_ldml(ldmlfile, ldml) 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_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')) fpath = os.path.join(packageDir, kb['id'] + '.kmx') extractico(fpath) install_keyboards(keyboards, packageDir, language) else: logging.error( "install_kmp.py: error: No kmp.json or kmp.inf found in %s", inputfile) logging.info("Contents of %s:", inputfile) for o in os.listdir(packageDir): logging.info(o) rmtree(packageDir) message = _( "install_kmp.py: error: No kmp.json or kmp.inf found in {packageFile}" ).format(packageFile=inputfile) raise InstallError(InstallStatus.Abort, message)
def install_kmp_shared(inputfile, online=False): """ Install a kmp file to /usr/local/share/keyman Args: inputfile (str): path to kmp file online(bool, default=False): whether to attempt to get a source kmn and ico for the keyboard """ check_keyman_dir('/usr/local/share', "You do not have permissions to install the keyboard files to the shared area /usr/local/share/keyman") 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 = 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) if not os.path.isdir(packageDir): os.makedirs(packageDir) extract_kmp(inputfile, packageDir) #restart IBus so it knows about the keyboards being installed logging.debug("restarting IBus") restart_ibus() info, system, options, keyboards, files = get_metadata(packageDir) if keyboards: logging.info("Installing %s", info['name']['description']) if online: process_keyboard_data(packageID, packageDir) if len(keyboards) > 1: for kb in keyboards: if kb['id'] != packageID: process_keyboard_data(kb['id'], packageDir) for f in files: fpath = os.path.join(packageDir, f['name']) ftype = f['type'] if ftype == KMFileTypes.KM_DOC or ftype == KMFileTypes.KM_IMAGE: #Special handling of doc and images to hard link them into doc dir logging.info("Installing %s as documentation", f['name']) if not os.path.isdir(kmpdocdir): os.makedirs(kmpdocdir) os.link(fpath, os.path.join(kmpdocdir, f['name'])) elif ftype == KMFileTypes.KM_FONT: #Special handling of font to hard link it into font dir logging.info("Installing %s as font", f['name']) if not os.path.isdir(kmpfontdir): os.makedirs(kmpfontdir) os.link(fpath, os.path.join(kmpfontdir, f['name'])) elif ftype == KMFileTypes.KM_SOURCE: #TODO for the moment just leave it for ibus-kmfl to ignore if it doesn't load logging.info("Installing %s as keyman file", f['name']) elif ftype == KMFileTypes.KM_OSK: # Special handling to convert kvk into LDML logging.info("Converting %s to LDML and installing both as as keyman file", f['name']) ldml = convert_kvk_to_ldml(fpath) name, ext = os.path.splitext(f['name']) ldmlfile = os.path.join(packageDir, name+".ldml") output_ldml(ldmlfile, ldml) 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") install_to_ibus(lang, kmx_file) else: logging.error("install_kmp.py: error: No kmp.json or kmp.inf found in %s", inputfile) logging.info("Contents of %s:", inputfile) for o in os.listdir(packageDir): logging.info(o) rmtree(packageDir) message = "install_kmp.py: error: No kmp.json or kmp.inf found in %s" % (inputfile) raise InstallError(InstallStatus.Abort, message)