diff --git a/app/service/beatmapset_update_service.py b/app/service/beatmapset_update_service.py
index 555919f..da01e1f 100644
--- a/app/service/beatmapset_update_service.py
+++ b/app/service/beatmapset_update_service.py
@@ -15,7 +15,7 @@ from app.log import logger
from app.models.beatmap import BeatmapRankStatus
from app.utils import bg_tasks, utcnow
-from httpx import HTTPError
+from httpx import HTTPError, HTTPStatusError
from sqlmodel import col, select
if TYPE_CHECKING:
@@ -226,6 +226,13 @@ class BeatmapsetUpdateService:
try:
beatmapset = await self.fetcher.get_beatmapset(record.beatmapset_id)
except Exception as e:
+ if isinstance(e, HTTPStatusError) and e.response.status_code == 404:
+ logger.opt(colors=True).warning(
+ f"[{record.beatmapset_id}] beatmapset not found (404), removing from sync list"
+ )
+ await session.delete(record)
+ await session.commit()
+ continue
if isinstance(e, HTTPError):
logger.opt(colors=True).warning(
f"[{record.beatmapset_id}] "
@@ -312,6 +319,17 @@ class BeatmapsetUpdateService:
if change.type == BeatmapChangeType.MAP_ADDED:
try:
beatmap = await self.fetcher.get_beatmap(change.beatmap_id)
+ except HTTPStatusError as e:
+ if e.response.status_code == 404:
+ logger.opt(colors=True).warning(
+ f"[beatmap: {change.beatmap_id}] beatmap not found (404), skipping"
+ )
+ continue
+ logger.opt(colors=True).error(
+ f"[beatmap: {change.beatmap_id}] failed to fetch added beatmap: "
+ f"[{e.__class__.__name__}] {e}, skipping"
+ )
+ continue
except Exception as e:
logger.opt(colors=True).error(
f"[beatmap: {change.beatmap_id}] failed to fetch added beatmap: {e}, skipping"
@@ -322,6 +340,23 @@ class BeatmapsetUpdateService:
else:
try:
beatmap = await self.fetcher.get_beatmap(change.beatmap_id)
+ except HTTPStatusError as e:
+ if e.response.status_code == 404:
+ if change.type == BeatmapChangeType.MAP_DELETED:
+ logger.opt(colors=True).info(
+ f"[beatmap: {change.beatmap_id}] beatmap not found (404), assuming deleted"
+ )
+ await _process_update_or_delete_beatmaps(change.beatmap_id)
+ continue
+ logger.opt(colors=True).warning(
+ f"[beatmap: {change.beatmap_id}] beatmap not found (404), skipping"
+ )
+ continue
+ logger.opt(colors=True).error(
+ f"[beatmap: {change.beatmap_id}] failed to fetch changed beatmap: "
+ f"[{e.__class__.__name__}] {e}, skipping"
+ )
+ continue
except Exception as e:
logger.opt(colors=True).error(
f"[beatmap: {change.beatmap_id}] failed to fetch changed beatmap: {e}, skipping"