3.2.3#972
Merged
Merged
Conversation
- Fix qBittorrent rename verification (verify file actually renamed) - Add pending rename cooldown to prevent spam when rename delayed - Add torrent tagging API for accurate offset lookup - Add auto calendar refresh every 24 hours - Fix frontend error handling (don't logout on server errors) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add batch offset lookup to reduce N database connections to 1-3 per cycle - Add search_by_qb_hashes() and search_ids() for batch queries - Throttle pending rename cache cleanup to once per minute max - Use exponential backoff for rename verification (0.1s->0.2s->0.4s) - Skip verification for subtitle renames to reduce latency Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Fixes IndexError when parsing torrent names that don't follow the standard [Group] format. Now returns empty string instead of crashing. Fixes #973 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add NotificationProvider base class with send() and test() methods
- Add NotificationManager for handling multiple providers simultaneously
- Add new providers: Discord, Gotify, Pushover, generic Webhook
- Migrate existing providers (Telegram, Bark, Server Chan, WeChat Work) to new architecture
- Add API endpoints for testing providers (/notification/test, /notification/test-config)
- Auto-migrate legacy single-provider configs to new multi-provider format
- Update WebUI with card-based multi-provider settings UI
- Add test button for each provider in settings
- Generic webhook supports template variables: {{title}}, {{season}}, {{episode}}, {{poster_url}}
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
…rmatting Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace non-existent ab-dialog with ab-popup for proper modal behavior, use ab-button/ab-label components and consistent spacing/styles matching other settings panels (search-provider, proxy). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix(ui): align notification settings with project design system Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add 13 new test cases across three parser test files: - raw_parser: Chinese 第二季, 2160p resolution, bracketed Season N, multi-group with Chinese punctuation, English-only title - torrent_parser: EP format, tc/zh-tw subtitle, no-language subtitle (ValidationError), multi-level path, [NNvN] version suffix - path_parser: season=2/no-offset, large positive offset, offset yielding exactly Season 1 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
When a bangumi was deleted, its associated Torrent records remained in the database. This prevented re-downloading the same torrents if the user re-added the anime, because check_new() deduplicates by URL and would filter out the orphaned records. Now delete_rule() removes Torrent records before deleting the Bangumi, so re-adding the same anime correctly treats those torrents as new. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
67 tests across 11 phases exercising the full AutoBangumi workflow against Docker infrastructure (qBittorrent + mock RSS server). Covers setup wizard, auth, config, RSS CRUD, bangumi, downloader, program lifecycle, log, search, notification, and credential updates with both happy paths and error conditions. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Persist JWT secret to config/.jwt_secret (survives restarts) - Change active_user from list to dict with timestamps - Extract username from cookie token instead of list index - Add SSRF protection (_validate_url) for setup test endpoints - Mask sensitive config fields (password, api_key, token, secret) - Add auth guards to notification test endpoints - Fix path traversal in /posters endpoint using resolved path check - Add CORS middleware with empty allow_origins - WebAuthn: add challenge TTL (300s), max capacity (100), cleanup - Remove hardcoded default password from User model - Use timezone-aware datetime in passkey models - Adapt unit tests for active_user dict and cookie-based auth Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Use per-task stop events instead of shared stop_event to prevent stopping one task from killing all others - Track running state via _tasks_started flag instead of stop_event - Add error handling in RSS, rename, scan, and calendar loops - Make restart() resilient to stop failures (catch and continue) - Cache downloader status check with 60s TTL - Fix _startup_done set before start() completes (race condition) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Database: - Add error handling and per-step version tracking in migrations - Enable SQLite foreign keys via PRAGMA on connect - Fix SQLAlchemy .is_(None) usage, add session.merge() for detached - Batch commit for semantic alias merges - Quote table/field names in fill-null-defaults SQL - Guard against empty user data in migration Parsers: - TMDB: bounded LRU cache (512), asyncio.gather for parallel season fetches, fix season regex \d -> \d+, null-safe year, fix id shadowing - Raw parser: re.escape() for group/prefix regex, None guard on match - OpenAI: handle Pydantic model_dump, catch ValueError Network: - Null-safe get_html() return - Error handling per RSS item in mikan parser - Progressive retry delays (5/15/45/120/300s) with specific exceptions - Platform detection via sys.platform instead of path heuristic - Move filter cache to instance variable Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Aria2: add stub methods for full duck-typing compatibility - MockDownloader: add verify parameter to rename_file signature - DownloadClient: raise ConnectionError on auth failure - Path: fallback bangumi_name from torrent_name when path is flat - Renamer: remove unused check_pool and dead compare_ep_version - Pass torrent_name to _path_to_bangumi for better name resolution - Remove check_pool unit test (feature removed) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- useAuth: replace watcher with explicit router.replace on login/logout - useMyI18n: create single i18n instance at module level (avoid dupes) - usePasskey: detect WebAuthn support synchronously (no onMounted) - main.ts: import i18n from hook module instead of calling composable - ab-add-rss: hoist useApi composables outside functions to avoid recreating them on each call - calendar: prevent duplicate refreshes when already refreshing - downloader: guard interval polling against stale activation state - router: only mark setupChecked on successful status check - log store: stop SSE log updates on logout - i18n: add missing "edit" translation key (en + zh-CN) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…er regex - Skip episode offset for episode 0 (specials/OVAs) to prevent overwriting regular episodes (fixes #977) - Catch re.PatternError in RSS filter compilation and fall back to literal matching when user filter contains invalid regex chars (fixes #974) - Remove Aria2 and Transmission from README supported downloaders list (addresses #987) - Add regression tests for issues #974, #976, #977, #986 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The BangumiDatabase.search_all() uses a module-level TTL cache that persists across tests using different in-memory SQLite databases. This caused test_migrate_preserves_existing_data and test_migrate_idempotent to return stale cached results (1 bangumi instead of 2). Add an autouse fixture in conftest.py to clear the cache before and after each test. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
3.2.3
Added
/mcp/sseFixes
[字幕组)导致程序崩溃 ([错误报告] 更新RSS报错Task exception was never retrieved #974)title_raw为空导致TypeError([错误报告]RSS聚合mikan源时出现错误,无法正确抓取番剧 #976)IndexError([错误报告]程序抓取番剧信息时报错,首页无法获取特定番剧信息 #973)Performance
RotatingFileHandler轮转 +QueueHandler异步写入 + 限读 512 KB%s格式化Tests
Test Plan
[等特殊字符的 RSS 过滤器不再导致崩溃Full diff: 130 files changed, 7298 insertions(+), 762 deletions(-)
🤖 Generated with Claude Code