mirror of
https://github.com/spalencsar/bearhub.git
synced 2026-07-07 02:24:16 +02:00
[improvement][flatpak][snap] caching suggestions
This commit is contained in:
@@ -10,6 +10,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
|||||||
- Adding all english (**en**) i18n keys to help people with the application translation
|
- Adding all english (**en**) i18n keys to help people with the application translation
|
||||||
- AppImage
|
- AppImage
|
||||||
- AppImage updater daemon replaced by a default Python thread to reduce memory usage
|
- AppImage updater daemon replaced by a default Python thread to reduce memory usage
|
||||||
|
- Caching Snap and Flatpak suggestions (https://github.com/vinifmor/bauh/issues/23)
|
||||||
|
- i18n:
|
||||||
|
- Italian contributions by [albanobattistella](https://github.com/albanobattistella)
|
||||||
|
|
||||||
### Fixes
|
### Fixes
|
||||||
- Flatpak
|
- Flatpak
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ class FlatpakManager(SoftwareManager):
|
|||||||
context.disk_loader_factory.map(FlatpakApplication, self.api_cache)
|
context.disk_loader_factory.map(FlatpakApplication, self.api_cache)
|
||||||
self.enabled = True
|
self.enabled = True
|
||||||
self.http_client = context.http_client
|
self.http_client = context.http_client
|
||||||
|
self.suggestions_cache = context.cache_factory.new()
|
||||||
|
|
||||||
def get_managed_types(self) -> Set["type"]:
|
def get_managed_types(self) -> Set["type"]:
|
||||||
return {FlatpakApplication}
|
return {FlatpakApplication}
|
||||||
@@ -264,12 +265,18 @@ class FlatpakManager(SoftwareManager):
|
|||||||
sugs.sort(key=lambda t: t[1].value, reverse=True)
|
sugs.sort(key=lambda t: t[1].value, reverse=True)
|
||||||
|
|
||||||
for sug in sugs:
|
for sug in sugs:
|
||||||
|
|
||||||
if limit <= 0 or len(res) < limit:
|
if limit <= 0 or len(res) < limit:
|
||||||
app_json = flatpak.search(cli_version, sug[0], app_id=True)
|
cached_sug = self.suggestions_cache.get(sug[0])
|
||||||
|
|
||||||
if app_json:
|
if cached_sug:
|
||||||
res.append(PackageSuggestion(self._map_to_model(app_json[0], False, None), sug[1]))
|
res.append(cached_sug)
|
||||||
|
else:
|
||||||
|
app_json = flatpak.search(cli_version, sug[0], app_id=True)
|
||||||
|
|
||||||
|
if app_json:
|
||||||
|
model = PackageSuggestion(self._map_to_model(app_json[0], False, None), sug[1])
|
||||||
|
self.suggestions_cache.add(sug[0], model)
|
||||||
|
res.append(model)
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ class SnapManager(SoftwareManager):
|
|||||||
self.categories = {}
|
self.categories = {}
|
||||||
self.categories_downloader = CategoriesDownloader('snap', self.http_client, self.logger, self, context.disk_cache,
|
self.categories_downloader = CategoriesDownloader('snap', self.http_client, self.logger, self, context.disk_cache,
|
||||||
URL_CATEGORIES_FILE, SNAP_CACHE_PATH, CATEGORIES_FILE_PATH)
|
URL_CATEGORIES_FILE, SNAP_CACHE_PATH, CATEGORIES_FILE_PATH)
|
||||||
|
self.suggestions_cache = context.cache_factory.new()
|
||||||
|
|
||||||
def map_json(self, app_json: dict, installed: bool, disk_loader: DiskCacheLoader, internet: bool = True) -> SnapApplication:
|
def map_json(self, app_json: dict, installed: bool, disk_loader: DiskCacheLoader, internet: bool = True) -> SnapApplication:
|
||||||
app = SnapApplication(publisher=app_json.get('publisher'),
|
app = SnapApplication(publisher=app_json.get('publisher'),
|
||||||
@@ -222,7 +223,9 @@ class SnapManager(SoftwareManager):
|
|||||||
pkg['rev'] = pkg['revision']
|
pkg['rev'] = pkg['revision']
|
||||||
pkg['name'] = pkg_name
|
pkg['name'] = pkg_name
|
||||||
|
|
||||||
out.append(PackageSuggestion(self.map_json(pkg, installed=False, disk_loader=None), priority))
|
sug = PackageSuggestion(self.map_json(pkg, installed=False, disk_loader=None), priority)
|
||||||
|
self.suggestions_cache.add(pkg_name, sug)
|
||||||
|
out.append(sug)
|
||||||
else:
|
else:
|
||||||
self.logger.warning("Could not retrieve suggestion '{}'".format(pkg_name))
|
self.logger.warning("Could not retrieve suggestion '{}'".format(pkg_name))
|
||||||
|
|
||||||
@@ -239,10 +242,15 @@ class SnapManager(SoftwareManager):
|
|||||||
for sug in sugs:
|
for sug in sugs:
|
||||||
|
|
||||||
if limit <= 0 or len(res) < limit:
|
if limit <= 0 or len(res) < limit:
|
||||||
t = Thread(target=self._fill_suggestion, args=(sug[0], sug[1], res))
|
cached_sug = self.suggestions_cache.get(sug[0])
|
||||||
t.start()
|
|
||||||
threads.append(t)
|
if cached_sug:
|
||||||
time.sleep(0.001) # to avoid being blocked
|
res.append(cached_sug)
|
||||||
|
else:
|
||||||
|
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:
|
else:
|
||||||
break
|
break
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user