コード例 #1
0
    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
コード例 #2
0
ファイル: controller.py プロジェクト: jayvdb/bauh
    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
コード例 #3
0
ファイル: controller.py プロジェクト: vinifmor/bauh
    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}'")
コード例 #4
0
    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
コード例 #5
0
ファイル: controller.py プロジェクト: jayvdb/bauh
    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