diff --git a/CHANGELOG.md b/CHANGELOG.md index 8be05b62..0e2e3317 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). ## [0.5.1] ### Improvements: - suggestions are now retrieved asynchronously. Response time takes 45% less. +- search response time takes an average of 20% less ( reaching 35% for several results ) ### Fixes: - [flatpak dependency](https://github.com/vinifmor/fpakman/issues/36) diff --git a/fpakman/core/controller.py b/fpakman/core/controller.py index f7f89dea..02a3c110 100755 --- a/fpakman/core/controller.py +++ b/fpakman/core/controller.py @@ -138,21 +138,28 @@ class GenericApplicationManager(ApplicationManager): else: return man.is_enabled() + def _search(self, word: str, man: ApplicationManager, disk_loader, res: dict): + if self._is_enabled(man): + apps_found = man.search(word=word, disk_loader=disk_loader) + res['installed'].extend(apps_found['installed']) + res['new'].extend(apps_found['new']) + def search(self, word: str, disk_loader: DiskCacheLoader = None) -> Dict[str, List[Application]]: res = {'installed': [], 'new': []} norm_word = word.strip().lower() - disk_loader = None + disk_loader = self.disk_loader_factory.new() + disk_loader.start() + + threads = [] for man in self.managers: - if self._is_enabled(man): - if not disk_loader: - disk_loader = self.disk_loader_factory.new() - disk_loader.start() + t = Thread(target=self._search, args=(norm_word, man, disk_loader, res)) + t.start() + threads.append(t) - apps_found = man.search(word=norm_word, disk_loader=disk_loader) - res['installed'].extend(apps_found['installed']) - res['new'].extend(apps_found['new']) + for t in threads: + t.join() if disk_loader: disk_loader.stop = True