def get_items(self): plugin_dirs = [] # accept in kupfer data dirs plugin_dirs.extend(config.get_data_dirs("searchplugins")) # firefox in home directory ffx_home = firefox_support.get_firefox_home_file("searchplugins") if ffx_home: plugin_dirs.append(ffx_home) plugin_dirs.extend( config.get_data_dirs("searchplugins", package="firefox")) plugin_dirs.extend( config.get_data_dirs("searchplugins", package="iceweasel")) addon_dir = "/usr/lib/firefox-addons/searchplugins" cur_lang, _ignored = locale.getlocale(locale.LC_MESSAGES) suffixes = ["en-US"] if cur_lang: suffixes = [cur_lang.replace("_", "-"), cur_lang[:2]] + suffixes for suffix in suffixes: addon_lang_dir = os.path.join(addon_dir, suffix) if os.path.exists(addon_lang_dir): plugin_dirs.append(addon_lang_dir) break self.output_debug("Found following searchplugins directories", sep="\n", *plugin_dirs) @coroutine def collect(seq): """Collect items in list @seq""" while True: seq.append((yield)) searches = [] collector = collect(searches) parser = self._parse_opensearch(collector) # files are unique by filename to allow override visited_files = set() for pdir in plugin_dirs: try: for f in os.listdir(pdir): if f in visited_files: continue parser.send(os.path.join(pdir, f)) visited_files.add(f) except EnvironmentError, exc: self.output_error(exc)
def get_items(self): plugin_dirs = [] # accept in kupfer data dirs plugin_dirs.extend(config.get_data_dirs("searchplugins")) # firefox in home directory ffx_home = firefox_support.get_firefox_home_file("searchplugins") if ffx_home: plugin_dirs.append(ffx_home) plugin_dirs.extend(config.get_data_dirs("searchplugins", package="firefox")) plugin_dirs.extend(config.get_data_dirs("searchplugins", package="iceweasel")) addon_dir = "/usr/lib/firefox-addons/searchplugins" cur_lang, _ignored = locale.getlocale(locale.LC_MESSAGES) suffixes = ["en-US"] if cur_lang: suffixes = [cur_lang.replace("_", "-"), cur_lang[:2]] + suffixes for suffix in suffixes: addon_lang_dir = os.path.join(addon_dir, suffix) if os.path.exists(addon_lang_dir): plugin_dirs.append(addon_lang_dir) break self.output_debug("Found following searchplugins directories", sep="\n", *plugin_dirs) @coroutine def collect(seq): """Collect items in list @seq""" while True: seq.append((yield)) searches = [] collector = collect(searches) parser = self._parse_opensearch(collector) # files are unique by filename to allow override visited_files = set() for pdir in plugin_dirs: try: for f in os.listdir(pdir): if f in visited_files: continue parser.send(os.path.join(pdir, f)) visited_files.add(f) except EnvironmentError, exc: self.output_error(exc)
def get_items(self): plugin_dirs = [] # accept in kupfer data dirs plugin_dirs.extend(config.get_data_dirs("searchplugins")) self.output_debug("Found following searchplugins directories", sep="\n", *plugin_dirs) @coroutine def collect(seq): """Collect items in list @seq""" while True: seq.append((yield)) searches = [] collector = collect(searches) parser = self._parse_opensearch(collector) # files are unique by filename to allow override visited_files = set() for pdir in plugin_dirs: try: for f in os.listdir(pdir): if f in visited_files: continue parser.send(os.path.join(pdir, f)) visited_files.add(f) except EnvironmentError as exc: self.output_error(exc) for s in searches: yield SearchEngine(s, s["ShortName"])
def get_items(self): for data_dir in config.get_data_dirs("sendto", package="Thunar"): for filename in os.listdir(data_dir): if not filename.endswith('.desktop'): continue file_path = os.path.join(data_dir, filename) if not os.path.isfile(file_path): continue item = gio.unix.desktop_app_info_new_from_filename(file_path) if item: yield AppLeaf(item)
def get_items(self): for data_dir in config.get_data_dirs("sendto", package="Thunar"): for filename in os.listdir(data_dir): if not filename.endswith('.desktop'): continue file_path = os.path.join(data_dir, filename) if not os.path.isfile(file_path): continue try: yield AppLeaf(init_path=file_path, require_x=False) except InvalidDataError: pass
def _extend_path(): # Inside a function to not leak variables to module namespace import os from kupfer import config from kupfer import pretty if not config.has_capability("CUSTOM_PLUGINS"): return # Add plugins in data directories __path__.extend(config.get_data_dirs("plugins")) # Add .zip files in plugins directories for directory in list(__path__): try: filenames = os.listdir(directory) except OSError, error: pretty.print_error(__name__, error) continue zipnames = [f for f in filenames if f.endswith(".zip")] if zipnames: pretty.print_debug(__name__, "Adding", directory, zipnames) __path__.extend(os.path.join(directory, z) for z in zipnames)
def _extend_path(): # Inside a function to not leak variables to module namespace import os from kupfer import config from kupfer import pretty if not config.has_capability("CUSTOM_PLUGINS"): return # Add plugins in data directories __path__.extend(config.get_data_dirs("plugins")) # Add .zip files in plugins directories for directory in list(__path__): try: filenames = os.listdir(directory) except OSError as error: pretty.print_error(__name__, error) continue zipnames = [f for f in filenames if f.endswith(".zip")] if zipnames: pretty.print_debug(__name__, "Adding", directory, zipnames) __path__.extend(os.path.join(directory, z) for z in zipnames)
def get_plugin_ids(): """Enumerate possible plugin ids; return a sequence of possible plugin ids, not guaranteed to be plugins""" import pkgutil import os from kupfer import plugin def is_plugname(plug): return plug != "__init__" and not plug.endswith("_support") plugin_ids = set() for importer, modname, ispkg in pkgutil.iter_modules(plugin.__path__): if is_plugname(modname): plugin_ids.add(modname) for plugin_dir in config.get_data_dirs("plugins"): name = lambda f: os.path.splitext(f)[0] try: plugin_ids.update(name(f) for f in os.listdir(plugin_dir) if is_plugname(name(f))) except (OSError, IOError), exc: pretty.print_error(__name__, exc)
pretty.print_debug(__name__, "Loading %s" % plugin.__name__) pretty.print_debug(__name__, " from %s" % plugin.__file__) return plugin plugin = None try: try: plugin = importit(("kupfer", "plugin", name)) except ImportError, e: if name not in e.args[0]: raise oldpath = sys.path try: # Look in datadir kupfer/plugins for plugins # (and in current directory) extra_paths = list(config.get_data_dirs("plugins")) sys.path = extra_paths + sys.path plugin = importit((name,)) finally: sys.path = oldpath except ImportError, e: # Reraise to send this up raise except Exception, e: # catch any other error for plugins and write traceback import traceback traceback.print_exc() pretty.print_error(__name__, "Could not import plugin '%s'" % name) finally: # store nonexistant plugins as None here imported_plugins[name] = plugin
def initialize(self): application_dirs = config.get_data_dirs("", "applications") self.monitor_token = self.monitor_directories(*application_dirs)
def get_items(self): plugin_dirs = [] # accept in kupfer data dirs plugin_dirs.extend(config.get_data_dirs("searchplugins")) # firefox in home directory ffx_home = firefox.get_firefox_home_file("searchplugins") if ffx_home and os.path.isdir(ffx_home): plugin_dirs.append(ffx_home) plugin_dirs.extend( config.get_data_dirs("searchplugins", package="firefox")) plugin_dirs.extend( config.get_data_dirs("searchplugins", package="iceweasel")) addon_dir = "/usr/lib/firefox-addons/searchplugins" cur_lang, _ignored = locale.getlocale(locale.LC_MESSAGES) suffixes = ["en-US"] if cur_lang: suffixes = [cur_lang.replace("_", "-"), cur_lang[:2]] + suffixes for suffix in suffixes: addon_lang_dir = os.path.join(addon_dir, suffix) if os.path.exists(addon_lang_dir): plugin_dirs.append(addon_lang_dir) break # debian iceweasel if os.path.isdir("/etc/iceweasel/searchplugins/common"): plugin_dirs.append("/etc/iceweasel/searchplugins/common") for suffix in suffixes: addon_dir = os.path.join("/etc/iceweasel/searchplugins/locale", suffix) if os.path.isdir(addon_dir): plugin_dirs.append(addon_dir) # try to find all versions of firefox for prefix in ('/usr/lib', '/usr/share'): for dirname in os.listdir(prefix): if dirname.startswith("firefox") or \ dirname.startswith("iceweasel"): addon_dir = os.path.join(prefix, dirname, "searchplugins") if os.path.isdir(addon_dir): plugin_dirs.append(addon_dir) addon_dir = os.path.join(prefix, dirname, "distribution", "searchplugins", "common") if os.path.isdir(addon_dir): plugin_dirs.append(addon_dir) self.output_debug("Found following searchplugins directories", sep="\n", *plugin_dirs) @coroutine def collect(seq): """Collect items in list @seq""" while True: seq.append((yield)) searches = [] collector = collect(searches) parser = self._parse_opensearch(collector) # files are unique by filename to allow override visited_files = set() for pdir in plugin_dirs: try: for f in os.listdir(pdir): if f in visited_files: continue fpath = os.path.join(pdir, f) if os.path.isdir(fpath): continue parser.send(fpath) visited_files.add(f) except EnvironmentError as exc: self.output_error(exc) for s in searches: yield SearchEngine(s, s["ShortName"])
def initialize(self): application_dirs = config.get_data_dirs("", "applications") self.monitor_token = self.monitor_directories(*application_dirs) gobject_connect_weakly(__kupfer_settings__, "plugin-setting-changed", self._on_setting_change)