mirror of
https://github.com/lutris/lutris
synced 2024-10-14 11:42:36 +00:00
Cache banner and icon misses in the store
This commit is contained in:
parent
e653254761
commit
e7471193c4
|
@ -94,6 +94,8 @@ class GameStore(GObject.Object):
|
||||||
self.modelsort.connect("sort-column-changed", self.on_sort_column_changed)
|
self.modelsort.connect("sort-column-changed", self.on_sort_column_changed)
|
||||||
self.sort_view(sort_key, sort_ascending)
|
self.sort_view(sort_key, sort_ascending)
|
||||||
self.medias = {"banner": {}, "icon": {}}
|
self.medias = {"banner": {}, "icon": {}}
|
||||||
|
self.banner_misses = set()
|
||||||
|
self.icon_misses = set()
|
||||||
self.media_loaded = False
|
self.media_loaded = False
|
||||||
self.connect("media-loaded", self.on_media_loaded)
|
self.connect("media-loaded", self.on_media_loaded)
|
||||||
self.connect("icon-loaded", self.on_icon_loaded)
|
self.connect("icon-loaded", self.on_icon_loaded)
|
||||||
|
@ -130,13 +132,17 @@ class GameStore(GObject.Object):
|
||||||
def get_missing_media(self, slugs=None):
|
def get_missing_media(self, slugs=None):
|
||||||
"""Query the Lutris.net API for missing icons"""
|
"""Query the Lutris.net API for missing icons"""
|
||||||
slugs = slugs or self.game_slugs
|
slugs = slugs or self.game_slugs
|
||||||
unavailable_banners = [
|
unavailable_banners = {
|
||||||
slug for slug in slugs if not self.has_icon(slug, "banner")
|
slug for slug in slugs
|
||||||
]
|
if not self.has_icon(slug, "banner")
|
||||||
unavailable_icons = [slug for slug in slugs if not self.has_icon(slug, "icon")]
|
}
|
||||||
|
unavailable_icons = {
|
||||||
|
slug for slug in slugs
|
||||||
|
if not self.has_icon(slug, "icon")
|
||||||
|
}
|
||||||
|
|
||||||
# Remove duplicate slugs
|
# Remove duplicate slugs
|
||||||
missing_media_slugs = list(set(unavailable_banners) | set(unavailable_icons))
|
missing_media_slugs = (unavailable_banners - self.banner_misses) | (unavailable_icons - self.icon_misses)
|
||||||
if not missing_media_slugs:
|
if not missing_media_slugs:
|
||||||
return
|
return
|
||||||
if len(missing_media_slugs) > 10:
|
if len(missing_media_slugs) > 10:
|
||||||
|
@ -148,15 +154,19 @@ class GameStore(GObject.Object):
|
||||||
"Requesting missing icons from API for %s", ", ".join(missing_media_slugs)
|
"Requesting missing icons from API for %s", ", ".join(missing_media_slugs)
|
||||||
)
|
)
|
||||||
|
|
||||||
lutris_media = api.get_api_games(missing_media_slugs, inject_aliases=True)
|
lutris_media = api.get_api_games(list(missing_media_slugs), inject_aliases=True)
|
||||||
if not lutris_media:
|
if not lutris_media:
|
||||||
return
|
return
|
||||||
|
|
||||||
for game in lutris_media:
|
for game in lutris_media:
|
||||||
if game["slug"] in unavailable_banners and game["banner_url"]:
|
if game["slug"] in unavailable_banners and game["banner_url"]:
|
||||||
self.medias["banner"][game["slug"]] = game["banner_url"]
|
self.medias["banner"][game["slug"]] = game["banner_url"]
|
||||||
|
unavailable_banners.remove(game["slug"])
|
||||||
if game["slug"] in unavailable_icons and game["icon_url"]:
|
if game["slug"] in unavailable_icons and game["icon_url"]:
|
||||||
self.medias["icon"][game["slug"]] = game["icon_url"]
|
self.medias["icon"][game["slug"]] = game["icon_url"]
|
||||||
|
unavailable_icons.remove(game["slug"])
|
||||||
|
self.banner_misses = unavailable_banners
|
||||||
|
self.icon_misses = unavailable_icons
|
||||||
self.media_loaded = True
|
self.media_loaded = True
|
||||||
self.emit("media-loaded")
|
self.emit("media-loaded")
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue