2047 Commits

Author SHA1 Message Date
Xingyu (Estrella) Pan
0b9d7eb1eb Merge pull request #1153 from EstrellaXD/3.3-dev
3.3.7
3.3.7
2026-10-24 11:25:02 +02:00
Xingyu (Estrella) Pan
f8a8d745d4 Merge pull request #1152 from EstrellaXD/fix/3.3.7-major-filter
fix(update): 应用内更新只提供同一主版本的发布(3.3.7)
2026-10-24 11:18:06 +02:00
Estrella Pan
f84e31d8e0 fix(update): 镜像版本无法解析时不提供任何更新(Codex 审查) 2026-10-24 11:09:21 +02:00
Estrella Pan
29dc558789 fix(update): 应用内更新只提供同一主版本的发布,准备 3.3.7
4.0 的更新包要求 4.0 镜像,3.3 镜像上无法应用;稳定版与测试版渠道都不再提供 4.x。
发布列表每页取 100 条,4.x 发布增多后仍能找到 3.x 发布。
2026-10-24 11:03:45 +02:00
Xingyu (Estrella) Pan
ca3cd42105 Merge pull request #1109 from OctoBored/fix/star-history-chart
docs: fix broken star history chart
2026-10-21 08:54:42 +02:00
Estrella Pan
ccb3f8d257 Merge pull request #1118 from EstrellaXD/fix/3.3.5-issues
Release 3.3.6
3.3.6
2026-09-19 18:07:59 +02:00
Estrella Pan
aaa464193b chore(release): prepare 3.3.6
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KU9GqKzULrNb7MN5T9TYix
2026-09-19 17:58:18 +02:00
Estrella Pan
37fa6b4ea5 fix: RSS matching, proxy pool, parser, healthcheck and log issues (#1103 #1104 #1105 #1106 #1108 #1114 #1117)
- match_bangumi_in_list: also accept a torrent whose rebuilt title equals
  the stored title_raw (#1103, #1114)
- download_bangumi / collect_season: drop items whose season or type
  conflicts with the bangumi (#1105)
- request_url: swap in a fresh shared client on PoolTimeout without
  closing the old one (#1104)
- classic parser: Unicode Roman numeral season, strip fullwidth dash
  wrapper (#1108)
- Docker HEALTHCHECK: healthcheck.py reads the configured WebUI port and
  probes IPv4 then IPv6 loopback (#1106)
- scheduler: non-positive interval falls back to 1s; deploy docs cap
  container logs at 10 MB x 3 (#1117)

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KU9GqKzULrNb7MN5T9TYix
2026-09-19 17:58:17 +02:00
OctoBored
67eddde741 docs: point star history chart to a working data source
The star history chart in the README has been broken for a while due to GitHub's stargazer API restrictions, so visitors no longer see an up-to-date chart. Update the chart image and link to a working mirror at star-history.dera.page so the graph renders correctly again. The chart was originally added in e9367e3.
2026-08-13 11:46:37 +00:00
Estrella Pan
fd798519fe chore: add GitHub Sponsors funding 2026-08-04 21:11:05 +02:00
Estrella Pan
2befeb4933 Merge pull request #1102 from EstrellaXD/3.3-dev
Release 3.3.5 (mypy fix)
3.3.5
2026-07-26 15:53:23 +02:00
Estrella Pan
5cc2fabc64 fix(types): correct type-ignore codes and narrow Optional in tests
CI mypy (not run locally before) flagged the is_not() ignores as
union-attr and the un-narrowed RSSItem | None in the re-enable test.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019WTfJZ3EzCpY8SLhzXT6Sf
2026-07-26 15:53:14 +02:00
Estrella Pan
3d7b4d8417 Merge pull request #1101 from EstrellaXD/3.3-dev
Release 3.3.5
2026-07-26 15:49:29 +02:00
Estrella Pan
f54df55754 chore(release): prepare 3.3.5
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019WTfJZ3EzCpY8SLhzXT6Sf
2026-07-26 15:49:06 +02:00
Estrella Pan
d33a43f201 Merge fix/config-mask-empty (#1100): stop masking empty secrets, scrub corrupted sentinels 2026-07-26 15:46:16 +02:00
Estrella Pan
8b8a15f322 Merge fix/reset-all-fk (#1099): clear FK references before bangumi reset-all 2026-07-26 15:46:16 +02:00
Estrella Pan
0916bf688a Merge fix/issue-1092-episodeless-special (#1098): admit unmarked episode-less releases 2026-07-26 15:45:48 +02:00
Estrella Pan
900328928e Merge fix/issue-1094-telegram-poster (#1097): Telegram poster via source URL with fallbacks 2026-07-26 15:45:48 +02:00
Estrella Pan
708b937108 Merge fix/issue-1095-rss-reenable (#1096): re-enable disabled RSS on re-subscribe 2026-07-26 15:45:48 +02:00
Estrella Pan
2f1a18f37e fix(config): stop masking empty secrets and scrub corrupted mask sentinels
Empty sensitive fields were masked to '********' in GET /config, so the
UI showed a phantom password where none was set. Worse, 3.2.3/3.2.4
masked without restoring on save, so users who saved config on those
versions had the literal sentinel written into stored proxy/downloader
credentials, breaking authentication until manually cleared.

- _sanitize_dict now masks only non-empty values.
- Settings._migrate_old_config scrubs literal '********' sentinels from
  sensitive fields on load (original values are unrecoverable), logging
  a warning so users know to re-enter real secrets.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019WTfJZ3EzCpY8SLhzXT6Sf
2026-07-26 15:39:11 +02:00
Estrella Pan
f1ca52cbe8 fix(database): clear FK references before bangumi reset-all
BangumiDatabase.delete_all() issued a bare DELETE FROM bangumi while
torrent.bangumi_id and aria2_gid.bangumi_id rows still referenced it;
with PRAGMA foreign_keys=ON the whole reset rolled back with
IntegrityError, and the surviving torrent dedup rows made re-added
bangumi skip episodes as already downloaded. Delete bangumi-linked
torrent records (same semantics as delete_rule) and detach aria2_gid
mappings before the table wipe.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019WTfJZ3EzCpY8SLhzXT6Sf
2026-07-26 15:36:02 +02:00
Estrella Pan
dee536cdc9 fix(parser): admit unmarked episode-less releases on classic engine (#1092)
Subtitle groups sometimes release TV specials without an episode number
or any special/movie marker (e.g. LoliHouse's ONE PIECE HEROINES). The
Preview engine's admission policy already accepts such evidence-backed
single releases as eps_collect bangumi, but the classic engine's legacy
Episode projection rejected them outright, so default installs silently
skipped the torrent.

Align classic admission with the Preview persistence policy for exactly
this shape (no episode, unknown media type, admissible under
persistence_target). The frozen legacy Episode contract and its golden
corpus stay untouched; numbered legacy rejections (e.g. fractional
episodes) keep their behavior.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019WTfJZ3EzCpY8SLhzXT6Sf
2026-07-26 11:39:24 +02:00
Estrella Pan
cadaf1fe59 fix(notification): send Telegram posters by source URL with text fallback (#1094)
Download-complete notifications were silently dropped when sendPhoto
failed: post_form returned None on any error and the provider crashed
on resp.status_code, with no text fallback. HTTP rejections were also
logged as "Cannot connect", hiding the real cause.

- save_image now records the poster's source URL in a .url sidecar;
  Telegram prefers sendPhoto with that URL (server-side fetch), falls
  back to local multipart upload, then to a plain text message.
- load_image returns None instead of raising when the cached file is
  missing.
- post_url/post_form log HTTP status and response body separately from
  connection errors.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019WTfJZ3EzCpY8SLhzXT6Sf
2026-07-26 11:13:15 +02:00
Estrella Pan
e3b6e03067 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 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019WTfJZ3EzCpY8SLhzXT6Sf
2026-07-26 11:08:19 +02:00
Estrella Pan
520873f035 test(e2e): align standalone movie contract (#1080) 2026-07-15 15:33:36 +02:00
Estrella Pan
bd6d35dbe5 Merge 3.3-dev for 3.3.4 3.3.4 2026-07-13 20:37:28 +02:00
Estrella Pan
f354a63959 chore(release): prepare 3.3.4 2026-07-13 20:36:26 +02:00
Estrella Pan
a99b78931c Merge fix/issue-1078-revision-replace into 3.3-dev 3.3.4-beta.2 2026-07-13 01:37:10 +02:00
Estrella Pan
37d794db0d chore(release): prepare 3.3.4-beta.2 2026-07-13 01:36:29 +02:00
Estrella Pan
9d5b1c3998 fix(renamer): safely replace higher revisions (#1078) 2026-07-13 01:36:17 +02:00
Estrella Pan
00b78dfa64 docs(renamer): design revision replacement for #1078 2026-07-13 00:31:34 +02:00
Estrella Pan
01534b802c test(e2e): assert the standalone movie contract 2026-07-12 21:18:54 +02:00
Estrella Pan
32dcbc53df fix(webui): type template event handlers 2026-07-12 21:07:33 +02:00
Estrella Pan
4cb2b369ab fix(parser): preserve CJK movie words in titles 2026-07-12 21:07:33 +02:00
Estrella Pan
e8bcece42f feat(parser): add selectable preview engine 2026-07-12 21:07:33 +02:00
Estrella Pan
060b602aaf docs(parser): design classic and preview engine switch 2026-07-12 21:07:33 +02:00
Estrella Pan
e744b3601a fix(parser): handle ranges and mixed collections safely 2026-07-12 21:07:33 +02:00
Estrella Pan
8ceec47174 perf(parser): add reproducible tokenizer benchmark 2026-07-12 21:07:33 +02:00
Estrella Pan
56ce4dbe21 docs(parser): record resolved tokenizer architecture 2026-07-12 21:07:33 +02:00
Estrella Pan
274977e665 fix(rss): preserve typed media identities 2026-07-12 21:07:33 +02:00
Estrella Pan
24f060b4b9 refactor(parser): migrate consumers to parsed releases 2026-07-12 21:07:33 +02:00
Estrella Pan
cd9ae7b03b refactor(parser): resolve immutable release candidates 2026-07-12 21:07:33 +02:00
Estrella Pan
5748892c41 docs(parser): design candidate resolver migration 2026-07-12 21:07:33 +02:00
Estrella Pan
0741a23a6a fix(parser): handle movie results in search and rss 2026-07-12 21:07:33 +02:00
Estrella Pan
3f1feb8655 refactor(parser): support generic anime release titles 2026-07-12 21:07:33 +02:00
Estrella Pan
fd1936fb1d refactor(parser): replace regex raw_parser with pipeline tokenizer
Replaces the monolithic regex-based parser with a multi-stage tokenizer
pipeline (normalize, tokenize, classify, resolve). Fixes multiple parsing
bugs: Atlas format (#986), VTuber/Lv2 title splits (#798, #766),
Pre-episode format (#794), western S01E05 format (#764), and separator
dash leaking into titles (#819).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-12 21:07:33 +02:00
Estrella Pan
f75b8e55cd feat(parser): add movie/gekijouban support with full DB model
Add detection and handling for anime movies (剧场版/劇場版) as a
separate entity from TV series. Previously, movies in RSS feeds were
either parsed as episode 0 or skipped entirely.

- Add TokenKind.MOVIE and movie keyword/pattern detection in tokenizer
- Add is_movie flag to Episode dataclass
- Create Movie SQLModel, MovieDatabase with CRUD + TTL cache
- Add migration v10 to create movie table
- Route TitleParser.raw_parser() to return Movie or Bangumi
- Update RSS analyser/engine for movie-aware parsing and downloads
- Add movie save path (no Season subfolder) and rename logic
- Add Movie REST API endpoints (get/update/delete/disable/enable)
- Add 11 tests for movie marker detection and non-movie regression

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-07-12 21:07:33 +02:00
Estrella Pan
5cc5f57e91 docs: design beta tokenizer lineage integration 2026-07-12 20:44:31 +02:00
Estrella Pan
be8d23c319 fix(webui): hide archived anime from calendar 2026-07-11 12:36:50 +02:00
Estrella Pan
86e39811d1 fix(ci): track e2e fixture and sync beta lock 3.3.4-beta.1 2026-07-10 14:12:00 +02:00