diff --git a/app/service/beatmapset_update_service.py b/app/service/beatmapset_update_service.py index 12a9c34..327931d 100644 --- a/app/service/beatmapset_update_service.py +++ b/app/service/beatmapset_update_service.py @@ -1,3 +1,4 @@ +import datetime from datetime import timedelta from enum import Enum import math @@ -161,6 +162,20 @@ class BeatmapsetUpdateService: try: if await self.add_missing_beatmapset(missing): total += 1 + except HTTPStatusError as e: + if e.response.status_code == 404: + logger.opt(colors=True).warning(f"beatmapset {missing} not found (404), skipping") + + session.add( + BeatmapSync( + beatmapset_id=missing, + beatmap_status=BeatmapRankStatus.GRAVEYARD, + next_sync_time=datetime.datetime.max, + beatmaps=[], + ) + ) + else: + logger.error(f"failed to add missing beatmapset {missing}: [{e.__class__.__name__}] {e}") except Exception as e: logger.error(f"failed to add missing beatmapset {missing}: {e}") if total > 0: @@ -199,12 +214,8 @@ class BeatmapsetUpdateService: processing = ProcessingBeatmapset(beatmapset, sync_record) next_time_delta = processing.calculate_next_sync_time() if not next_time_delta: - logger.opt(colors=True).info( - f"[{beatmapset.id}] beatmapset has transformed to " - "ranked or loved, removing from sync list" - ) - await session.delete(sync_record) - await session.commit() + # for qualified -> ranked, run immediate sync + await BeatmapsetUpdateService._sync_immediately(self, beatmapset) return sync_record.next_sync_time = utcnow() + next_time_delta logger.opt(colors=True).info(f"[{beatmapset.id}] next sync at {sync_record.next_sync_time}")