Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
	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)
Exemplo n.º 3
0
    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"])
Exemplo n.º 4
0
	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)
Exemplo n.º 5
0
 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
Exemplo n.º 6
0
	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
Exemplo n.º 7
0
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)
Exemplo n.º 8
0
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)
Exemplo n.º 9
0
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)
Exemplo n.º 10
0
			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
Exemplo n.º 11
0
	def initialize(self):
		application_dirs = config.get_data_dirs("", "applications")
		self.monitor_token = self.monitor_directories(*application_dirs)
Exemplo n.º 12
0
    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"])
Exemplo n.º 13
0
 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)
Exemplo n.º 14
0
	def initialize(self):
		application_dirs = config.get_data_dirs("", "applications")
		self.monitor_token = self.monitor_directories(*application_dirs)
Exemplo n.º 15
0
 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)