From e3b6e03067de22a83e45ab37a1a2d1b9ae4ca627 Mon Sep 17 00:00:00 2001 From: Estrella Pan Date: Sun, 26 Jul 2026 11:08:19 +0200 Subject: [PATCH] fix(rss): re-enable disabled RSS on re-subscribe (#1095) Deleting a bangumi disables its orphan standalone RSS feed (#1053), but re-subscribing the same feed hit the duplicate-URL early return in RSSDatabase.add() and never reset enabled, so the rebuilt bangumi silently stopped updating. Re-enable the existing row and report it as a successful add. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_019WTfJZ3EzCpY8SLhzXT6Sf --- backend/src/module/database/rss.py | 8 ++++++++ backend/src/test/test_database.py | 14 ++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/backend/src/module/database/rss.py b/backend/src/module/database/rss.py index cc345b24..2316ab26 100644 --- a/backend/src/module/database/rss.py +++ b/backend/src/module/database/rss.py @@ -17,6 +17,14 @@ class RSSDatabase: result = await self.session.execute(statement) db_data = result.scalar_one_or_none() if db_data: + if not db_data.enabled: + # 删除番剧时孤儿 RSS 会被停用(#1053);重新订阅同一 URL 表达了 + # 恢复更新的意图,必须重新启用,否则番剧会静默断更(#1095)。 + db_data.enabled = True + self.session.add(db_data) + await self.session.commit() + logger.info("Re-enabled disabled RSS Item %s.", data.url) + return True logger.debug("RSS Item %s already exists.", data.url) return False else: diff --git a/backend/src/test/test_database.py b/backend/src/test/test_database.py index b827f598..d60039d3 100644 --- a/backend/src/test/test_database.py +++ b/backend/src/test/test_database.py @@ -112,6 +112,20 @@ async def test_rss_database(db_session): assert result.url == rss_url +async def test_rss_add_reenables_disabled_duplicate(db_session): + """重新订阅已存在但被停用的 RSS(删除番剧后孤儿停用,#1095)应重新启用。""" + rss_url = "https://mikanani.me/RSS/Bangumi?bangumiId=4020&subgroupid=583" + db = RSSDatabase(db_session) + + await db.add(RSSItem(url=rss_url, name="Test RSS")) + item = await db.search_url(rss_url) + await db.disable(item.id) + + assert await db.add(RSSItem(url=rss_url, name="Test RSS")) is True + item = await db.search_url(rss_url) + assert item.enabled is True + + # --------------------------------------------------------------------------- # TorrentDatabase qb_hash methods # ---------------------------------------------------------------------------