def search(self, words: str, disk_loader: DiskCacheLoader, limit: int = -1, is_url: bool = False) -> SearchResult: if is_url: return SearchResult([], [], 0) remote_level = self._get_search_remote() res = SearchResult([], [], 0) apps_found = flatpak.search(flatpak.get_version(), words, remote_level) if apps_found: already_read = set() installed_apps = self.read_installed( disk_loader=disk_loader, internet_available=True).installed if installed_apps: for app_found in apps_found: for installed_app in installed_apps: if app_found['id'] == installed_app.id: res.installed.append(installed_app) already_read.add(app_found['id']) if len(apps_found) > len(already_read): for app_found in apps_found: if app_found['id'] not in already_read: res.new.append( self._map_to_model(app_found, False, disk_loader)) res.total = len(res.installed) + len(res.new) return res
def search(self, words: str, disk_loader: DiskCacheLoader, limit: int = -1) -> SearchResult: res = SearchResult([], [], 0) apps_found = flatpak.search(flatpak.get_version(), words) if apps_found: already_read = set() installed_apps = self.read_installed( disk_loader=disk_loader).installed if installed_apps: for app_found in apps_found: for installed_app in installed_apps: if app_found['id'] == installed_app.id: res.installed.append(installed_app) already_read.add(app_found['id']) if len(apps_found) > len(already_read): for app_found in apps_found: if app_found['id'] not in already_read: res.new.append( self._map_to_model(app_found, False, disk_loader)) res.total = len(res.installed) + len(res.new) return res
def _fill_suggestion(self, appid: str, priority: SuggestionPriority, flatpak_version: Version, remote: str, output: List[PackageSuggestion]): app_json = flatpak.search(flatpak_version, appid, remote, app_id=True) if app_json: model = PackageSuggestion(self._map_to_model(app_json[0], False, None)[0], priority) self.suggestions_cache.add(appid, model) output.append(model) else: self.logger.warning(f"Could not find Flatpak suggestions '{appid}'")
def list_suggestions(self, limit: int, filter_installed: bool) -> List[PackageSuggestion]: cli_version = flatpak.get_version() res = [] self.logger.info( "Downloading the 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") remote_level = self._get_search_remote() installed = { i.id for i in self.read_installed(disk_loader=None).installed } if filter_installed else None for line in file.text.split('\n'): if line: if limit <= 0 or len(res) < limit: sug = line.split('=') appid = sug[1].strip() if installed and appid in installed: continue priority = SuggestionPriority(int(sug[0])) cached_sug = self.suggestions_cache.get(appid) if cached_sug: res.append(cached_sug) else: app_json = flatpak.search(cli_version, appid, remote_level, app_id=True) if app_json: model = PackageSuggestion( self._map_to_model(app_json[0], False, None), priority) self.suggestions_cache.add(appid, model) res.append(model) else: break res.sort(key=lambda s: s.priority.value, reverse=True) return res
def list_suggestions(self, limit: int) -> List[PackageSuggestion]: cli_version = flatpak.get_version() res = [] sugs = [(i, p) for i, p in suggestions.ALL.items()] sugs.sort(key=lambda t: t[1].value, reverse=True) for sug in sugs: if limit <= 0 or len(res) < limit: app_json = flatpak.search(cli_version, sug[0], app_id=True) if app_json: res.append( PackageSuggestion( self._map_to_model(app_json[0], False, None), sug[1])) else: break res.sort(key=lambda s: s.priority.value, reverse=True) return res