From 21c9e3b9f5a3f02e277b36a63fb6d0ea5d9e2858 Mon Sep 17 00:00:00 2001 From: bobermilk Date: Sun, 11 Sep 2022 09:38:54 +0800 Subject: [PATCH] sources tab: show links --- entity.py | 10 ++-------- main.py | 9 +++++---- misc.py | 13 +++---------- scraper.py | 12 +++++++++--- 4 files changed, 19 insertions(+), 25 deletions(-) diff --git a/entity.py b/entity.py index 7aabdbe..82ef5c2 100644 --- a/entity.py +++ b/entity.py @@ -4,12 +4,11 @@ from copy import copy # Used to cache beatmaps retrieved from update_sources() and record beatmap ids -# Note: the beatmaps is a set of (beatmapset_id, beatmap_id, beatmap_checksum) +# Note: the beatmaps is a set of (beatmapset_id, beatmap_id, beatmap_checksum, beatmap_name) class Beatmaps(): def __init__(self): self.all_beatmaps=set() self.unavailable_beatmaps=set() # if api checksum is none, the beatmap will not be there forever - self.missing_beatmaps=set() # used solely for showing beatmap status on the sources tab def get_available_beatmaps(self): return list(self.all_beatmaps-self.unavailable_beatmaps) @@ -20,7 +19,7 @@ def get_unavailable_beatmaps(self): # tried to download but failed def get_missing_beatmaps(self): - return self.unavailable_beatmaps + return misc.diff_local_and_source(self) def query_cache(self, beatmapset_id): return beatmapset_id not in self.unavailable_beatmaps @@ -31,11 +30,6 @@ def cache_beatmaps(self, all_beatmaps): def cache_unavailable_beatmap(self, unavailable_beatmap): self.unavailable_beatmaps.add(unavailable_beatmap) - def cache_missing_beatmap(self, beatmap): - self.missing_beatmaps.add(beatmap) - def uncache_missing_beatmap(self, beatmap): - if beatmap in self.missing_beatmaps: - self.missing_beatmaps.remove(beatmap) # Note: ids is a set of pairs (user_id, gamemode) class UserpageSource(Beatmaps): diff --git a/main.py b/main.py index 6043ddc..deaa946 100644 --- a/main.py +++ b/main.py @@ -103,6 +103,7 @@ async def onDestroy(self, event): if add_source_window!=None: add_source_window.Destroy() self.Destroy() + sys.exit(0) # used to repopulate the source list after a edit def update_sources(self, event): @@ -112,13 +113,13 @@ def update_sources(self, event): for source_key, source in source_list: source_panel=gui.ListPanel(self.m_source_list) for i, beatmap in enumerate(source.get_available_beatmaps()): - source_panel.m_list.Insert("beatmapset_id="+str(beatmap[0]) + " beatmap_id="+str(beatmap[1])+" checksum="+str(beatmap[2]),i) + source_panel.m_list.Insert("https://osu.ppy.sh/beatmapsets/"+str(beatmap[0]) ,i) for i, beatmap in enumerate(source.get_unavailable_beatmaps()): - source_panel.m_list.Insert("beatmapset_id="+str(beatmap[0]) + " beatmap_id="+str(beatmap[1]) +" checksum="+str(beatmap[2])+ " (unavailable for download)",i) + source_panel.m_list.Insert("https://osu.ppy.sh/b/"+str(beatmap[1]) +" (unavailable for download)",i) for i, beatmap in enumerate(source.get_missing_beatmaps()): - source_panel.m_list.Insert("beatmapset_id="+str(beatmap[0]) + " beatmap_id="+str(beatmap[1]) +" checksum="+str(beatmap[2])+ " (missing)",i) + source_panel.m_list.Insert("https://osu.ppy.sh/beatmapsets/"+str(beatmap[0]) +" (missing in-game)",i) self.m_source_list.AddPage(source_panel, f"#{data.get_sources().collection_index[source_key]}: {source_key}") - self.m_source_list.GetListView().SetColumnWidth(0,-1) + self.m_source_list.GetListView().SetColumnWidth(0, 750) # used to repopulate the activity list after download completes def update_activity(self, event): diff --git a/misc.py b/misc.py index 6f252a1..bc3846f 100644 --- a/misc.py +++ b/misc.py @@ -43,13 +43,6 @@ async def do_job(job): if success==2: download_interval+=constants.osu_get_interval # add 3 seconds if its downloading from osu website await asyncio.sleep(download_interval) - - if not success: - source.cache_missing_beatmap(beatmap) - else: - source.uncache_missing_beatmap(beatmap) - else: - source.cache_unavailable_beatmap(beatmap) # Update progressbar pub.sendMessage("update.progress", value=i, range=len(downloads), progress_message=None) @@ -58,11 +51,11 @@ async def do_job(job): # called by job refresh to find out what to download def diff_local_and_source(source): - missing_beatmap=[] + missing_beatmaps=[] for beatmap in source.get_available_beatmaps(): if beatmap[0] != None and not database.query_osudb(beatmap): - missing_beatmap.append(beatmap) - return missing_beatmap + missing_beatmaps.append(beatmap) + return missing_beatmaps # The following creates source objects to be inserted into the Sources entities def create_userpage_source(links, scope): diff --git a/scraper.py b/scraper.py index 7ccfb83..989282c 100644 --- a/scraper.py +++ b/scraper.py @@ -34,8 +34,11 @@ async def get_userpage_beatmaps(source): pub.sendMessage("show.loading", msg=f"Getting beatmap data from osu! api ({i}/{len(j)})") if not beatmap_id in cached_beatmap_ids: beatmap_checksum, beatmapset_id = await api.query_osu_beatmap(session, beatmap_id) - beatmap=(beatmapset_id, beatmap_id, beatmap_checksum) - beatmaps.add(beatmap) + if beatmapset_id == None: + source.cache_unavailable_beatmap(beatmapset_id) + else: + beatmap=(beatmapset_id, beatmap_id, beatmap_checksum) + beatmaps.add(beatmap) pub.sendMessage("show.loading", msg=None) all_beatmaps.update(beatmaps) @@ -136,7 +139,10 @@ async def get_tournament_beatmaps(source): pub.sendMessage("show.loading", msg=f"Getting beatmap data from osu! api ({i}/{len(beatmaps)})") if not beatmap[1] in cached_beatmap_ids: checksum, beatmapset_id=await api.query_osu_beatmap(session, beatmap[1]) - all_beatmaps.add((beatmapset_id, beatmap[1], checksum)) + if beatmapset_id == None: + source.cache_unavailable_beatmap(beatmap[1]) + else: + all_beatmaps.add((beatmapset_id, beatmap[1], checksum)) pub.sendMessage("show.loading", msg=None) return all_beatmaps