def _load_catalogs(self, refresh=False): expiration = datetime.timedelta(hours=4) self._update_status_bar('Loading, catalogs...', idle=True) self.catalog_plugins = plugins.ClientCatalogManager( self.application.user_data_path) catalog_cache = self.catalog_plugins.get_cache() now = datetime.datetime.utcnow() for catalog_url in self.config['catalogs']: catalog_cache_dict = catalog_cache.get_catalog_by_url(catalog_url) if not refresh and catalog_cache_dict and catalog_cache_dict[ 'created'] + expiration > now: try: catalog = Catalog(catalog_cache_dict['value']) except (KeyError, TypeError) as error: self.logger.warning( "{0} error when trying to add catalog dict to manager". format(error.__class__.__name)) else: self.catalog_plugins.add_catalog( catalog, catalog_url=catalog_cache_dict['url'], cache=False) continue self.logger.debug("downloading catalog: {}".format(catalog_url)) self._update_status_bar( "Loading, downloading catalog: {}".format(catalog_url)) catalog = self._load_catalog_from_url(catalog_url) if not catalog: continue self.catalog_plugins.add_catalog(catalog, catalog_url=catalog_url, cache=True) self._load_plugins()
def _load_catalogs(self): self._update_status_bar('Loading, downloading catalogs...', idle=True) self.catalog_plugins = plugins.ClientCatalogManager(self.application.user_data_path) for catalog in self.config['catalogs']: self.logger.debug("downloading catalog: {}".format(catalog)) self._update_status_bar("Loading, downloading catalog: {}".format(catalog)) self.catalog_plugins.add_catalog_url(catalog) self._load_plugins()
def _load_catalogs(self, refresh=False): expiration = datetime.timedelta(hours=4) self._update_status_bar('Loading, catalogs...', idle=True) self.catalog_plugins = plugins.ClientCatalogManager( self.application.user_data_path) catalog_cache = self.catalog_plugins.get_cache() now = datetime.datetime.utcnow() for catalog_url in self.config['catalogs']: catalog_cache_dict = catalog_cache.get_catalog_by_url(catalog_url) if not refresh and catalog_cache_dict and catalog_cache_dict[ 'created'] + expiration > now: try: catalog = Catalog(catalog_cache_dict['value']) except (KeyError, TypeError) as error: self.logger.warning( "{0} error when trying to add catalog dict to manager". format(error.__class__.__name)) else: self.catalog_plugins.add_catalog( catalog, catalog_url=catalog_cache_dict['url'], cache=False) continue self.logger.debug("downloading catalog: {}".format(catalog_url)) self._update_status_bar( "Loading, downloading catalog: {}".format(catalog_url)) try: catalog = Catalog.from_url(catalog_url) except requests.exceptions.ConnectionError: self.logger.warning( "connection error trying to download catalog url: {}". format(catalog)) self.idle_show_dialog_error( 'Catalog Loading Error', "Failed to download catalog, check your internet connection." ) except Exception: self.logger.warning("failed to add catalog by url", exc_info=True) self.idle_show_dialog_error('Catalog Loading Error', "Failed to add catalog") else: self.catalog_plugins.add_catalog(catalog, catalog_url=catalog_url, cache=True) self._load_plugins()
def __init__(self, *args, **kwargs): super(PluginManagerWindow, self).__init__(*args, **kwargs) self.catalog_plugins = plugins.ClientCatalogManager( self.application.user_data_path) self.plugin_path = os.path.join(self.application.user_data_path, 'plugins') self.status_bar = self.gobjects['statusbar'] self._installed_plugins_treeview_tracker = None """ This is used to track and make sure all plugins make it into the treeview. It is set each time catalogs are loaded or refreshed. Once the loading operation is complete, plugins that remain were not loaded due their data (repo or id) missing from the catalog, likely due to it having been removed. """ self._worker_thread = None self._worker_thread_start(self._load_catalogs_tsafe) self.__load_errors = {} self.__installing_plugin = None tvm = managers.TreeViewManager(self.gobjects['treeview_plugins']) toggle_renderer_enable = Gtk.CellRendererToggle() toggle_renderer_enable.connect('toggled', self.signal_renderer_toggled_enable) toggle_renderer_install = Gtk.CellRendererToggle() toggle_renderer_install.connect('toggled', self.signal_renderer_toggled_install) tvm.set_column_titles( ('Installed', 'Enabled', 'Title', 'Compatible', 'Version'), column_offset=1, renderers=(toggle_renderer_install, toggle_renderer_enable, Gtk.CellRendererText(), Gtk.CellRendererText(), Gtk.CellRendererText())) tvm.column_views['Enabled'].set_cell_data_func( toggle_renderer_enable, self._toggle_enabled_cell_data_func) tvm.column_views['Enabled'].add_attribute(toggle_renderer_enable, 'visible', 6) tvm.column_views['Enabled'].add_attribute(toggle_renderer_enable, 'sensitive', 1) tvm.column_views['Installed'].set_cell_data_func( toggle_renderer_install, self._toggle_install_cell_data_func) tvm.column_views['Installed'].add_attribute(toggle_renderer_install, 'visible', 7) tvm.column_views['Installed'].add_attribute(toggle_renderer_install, 'sensitive', 8) self._model = Gtk.TreeStore(str, bool, bool, str, str, str, bool, bool, bool, str) self._model.set_sort_column_id(3, Gtk.SortType.ASCENDING) self.gobjects['treeview_plugins'].set_model(self._model) self._tv_popup_menu = managers.MenuManager(tvm.get_popup_menu()) self._tv_popup_menu.append_item(Gtk.SeparatorMenuItem()) self._tv_popup_menu.append('Reload', self.signal_popup_menu_activate_reload) self._tv_popup_menu.append('Reload All', self.signal_popup_menu_activate_reload_all) self._tv_popup_menu.append_item(Gtk.SeparatorMenuItem()) self._tv_popup_menu.append( 'Show Documentation', self.signal_popup_menu_activate_show_documentation) self._tv_popup_menu.append('Update', self.signal_popup_menu_activate_update) self._info_popup_menu = managers.MenuManager() self._info_popup_menu.append('Reload', self.signal_popup_menu_activate_reload) self._info_popup_menu.append_item(Gtk.SeparatorMenuItem()) self._info_popup_menu.append( 'Show Documentation', self.signal_popup_menu_activate_show_documentation) self._info_popup_menu.append('Update', self.signal_popup_menu_activate_update) self.gobjects['menubutton_plugin_info'].set_popup( self._info_popup_menu.menu) self._update_status_bar('Loading...') self.window.show() paned = self.gobjects['paned_plugins'] self._paned_offset = paned.get_allocation( ).height - paned.get_position()