Skip to content

Commit

Permalink
sources tab: show links
Browse files Browse the repository at this point in the history
  • Loading branch information
bobermilk committed Sep 11, 2022
1 parent 530ae3d commit 21c9e3b
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 25 deletions.
10 changes: 2 additions & 8 deletions entity.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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
Expand All @@ -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):
Expand Down
9 changes: 5 additions & 4 deletions main.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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):
Expand Down
13 changes: 3 additions & 10 deletions misc.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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):
Expand Down
12 changes: 9 additions & 3 deletions scraper.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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

Expand Down

0 comments on commit 21c9e3b

Please sign in to comment.