def list_warnings(self, internet_available: bool) -> List[str]: if snap.is_installed(): if not snap.is_snapd_running(): snap_bold = bold('Snap') return [ self.i18n['snap.notification.snapd_unavailable'].format( bold('snapd'), snap_bold), self.i18n['snap.notification.snap.disable'].format( snap_bold, bold('{} > {}'.format( self.i18n['settings'].capitalize(), self.i18n['core.config.tab.types']))) ] elif internet_available: available, output = snap.is_api_available() if not available: self.logger.warning( 'It seems Snap API is not available. Search output: {}' .format(output)) return [ self.i18n['snap.notifications.api.unavailable'].format( bold('Snaps'), bold('Snap')) ]
def search(self, words: str, disk_loader: DiskCacheLoader, limit: int = -1) -> SearchResult: if snap.is_snapd_running(): installed = self.read_installed(disk_loader).installed res = SearchResult([], [], 0) for app_json in snap.search(words): already_installed = None if installed: already_installed = [ i for i in installed if i.id == app_json.get('name') ] already_installed = already_installed[ 0] if already_installed else None if already_installed: res.installed.append(already_installed) else: res.new.append( self.map_json(app_json, installed=False, disk_loader=disk_loader)) res.total = len(res.installed) + len(res.new) return res else: return SearchResult([], [], 0)
def list_suggestions(self, limit: int) -> List[PackageSuggestion]: res = [] if snap.is_snapd_running(): sugs = [(i, p) for i, p in suggestions.ALL.items()] sugs.sort(key=lambda t: t[1].value, reverse=True) threads = [] self.categories_downloader.join() for sug in sugs: if limit <= 0 or len(res) < limit: t = Thread(target=self._fill_suggestion, args=(sug[0], sug[1], res)) t.start() threads.append(t) time.sleep(0.001) # to avoid being blocked else: break for t in threads: t.join() res.sort(key=lambda s: s.priority.value, reverse=True) return res
def list_suggestions(self, limit: int, filter_installed: bool) -> List[PackageSuggestion]: res = [] if snap.is_snapd_running(): self.logger.info( 'Downloading suggestions file {}'.format(SUGGESTIONS_FILE)) file = self.http_client.get(SUGGESTIONS_FILE) if not file or not file.text: self.logger.warning( "No suggestion found in {}".format(SUGGESTIONS_FILE)) return res else: self.logger.info('Mapping suggestions') self.categories_downloader.join() suggestions, threads = [], [] installed = { i.name.lower() for i in self.read_installed(disk_loader=None).installed } if filter_installed else None for l in file.text.split('\n'): if l: if limit <= 0 or len(suggestions) < limit: sug = l.strip().split('=') name = sug[1] if not installed or name not in installed: cached_sug = self.suggestions_cache.get(name) if cached_sug: res.append(cached_sug) else: t = Thread(target=self._fill_suggestion, args=(name, SuggestionPriority( int(sug[0])), res)) t.start() threads.append(t) time.sleep(0.001) # to avoid being blocked else: break for t in threads: t.join() res.sort(key=lambda s: s.priority.value, reverse=True) return res
def read_installed(self, disk_loader: DiskCacheLoader, limit: int = -1, only_apps: bool = False, pkg_types: Set[Type[SoftwarePackage]] = None, internet_available: bool = None) -> SearchResult: if snap.is_snapd_running(): self.categories_downloader.join() installed = [ self.map_json(app_json, installed=True, disk_loader=disk_loader, internet=internet_available) for app_json in snap.read_installed(self.ubuntu_distro) ] return SearchResult(installed, None, len(installed)) else: return SearchResult([], None, 0)
def read_installed(self, disk_loader: DiskCacheLoader, limit: int = -1, only_apps: bool = False, pkg_types: Set[Type[SoftwarePackage]] = None, internet_available: bool = None) -> SearchResult: info_path = self.get_info_path() if snap.is_snapd_running() and info_path: installed = [ self.map_json(app_json, installed=True, disk_loader=disk_loader, internet=internet_available) for app_json in snap.read_installed(info_path) ] return SearchResult(installed, None, len(installed)) else: return SearchResult([], None, 0)
def list_warnings(self) -> List[str]: if snap.is_installed() and not snap.is_snapd_running(): snap_bold = bold('Snap') return [self.i18n['snap.notification.snapd_unavailable'].format(bold('snapd'), snap_bold), self.i18n['snap.notification.snap.disable'].format(snap_bold, bold(self.i18n['manage_window.settings.gems']))]