docs: update documentation for 3.2 beta features

- Update changelog/3.2.md with beta.5-10 features:
  - Season/episode offset auto-detection
  - Bangumi archive functionality
  - Search provider configuration API
  - RSS connection status tracking
  - iOS-style notification badges
  - Performance improvements (backend & frontend)

- Update feature documentation:
  - search.md: Add search provider settings panel docs
  - bangumi.md: Add archive, offset detection, badges docs
  - rss.md: Add connection status documentation
  - rename.md: Add episode offset section
  - calendar.md: New documentation for calendar view

- Add screenshots for new features:
  - Login page (glassmorphism design)
  - Bangumi list and edit modals
  - Rule selection popup
  - RSS manager with connection status
  - Calendar view
  - Search panel and provider settings

- Update VitePress config to include Calendar in sidebar

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
This commit is contained in:
Estrella Pan
2026-01-25 23:00:48 +01:00
parent a0a21a71e5
commit 6b6ba75d80
17 changed files with 250 additions and 5 deletions

View File

@@ -87,6 +87,7 @@ export default defineConfig({
items: [
{ text: 'RSS Management', link: '/feature/rss' },
{ text: 'Bangumi Management', link: '/feature/bangumi' },
{ text: 'Calendar View', link: '/feature/calendar' },
{ text: 'File Renaming', link: '/feature/rename' },
{ text: 'Torrent Search', link: '/feature/search' },
],

View File

@@ -10,6 +10,21 @@
- Clone attack protection (sign_count verification)
- Authentication strategy pattern unifying password and Passkey login interfaces
- Usernameless login support via discoverable credentials (resident keys)
- Added season/episode offset auto-detection
- Analyzes TMDB episode air dates to detect "virtual seasons" (e.g., Frieren S1 split into two parts)
- Auto-identifies different parts when broadcast gap exceeds 6 months
- Calculates episode offset (e.g., RSS shows S2E1 → TMDB S1E29)
- Background scan thread automatically detects offset issues in existing subscriptions
- New API endpoints: `POST /bangumi/detect-offset`, `PATCH /bangumi/dismiss-review/{id}`
- Added bangumi archive functionality
- Manual archive/unarchive support
- Auto-archive completed series
- New API endpoints: `PATCH /bangumi/archive/{id}`, `PATCH /bangumi/unarchive/{id}`, `GET /bangumi/refresh/metadata`
- Added search provider configuration API
- `GET /search/provider/config` - Get search provider config
- `PUT /search/provider/config` - Update search provider config
- Added RSS connection status tracking
- Records `connection_status` (healthy/error), `last_checked_at`, and `last_error` after each refresh
- Added first-run setup wizard
- 7-step guided configuration: account, downloader, RSS source, media path, notifications
- Downloader connection test, RSS source validation
@@ -27,6 +42,22 @@
- Backend migrated to `uv` package manager (pyproject.toml + uv.lock)
- Server startup uses background tasks to avoid blocking (fixes #891, #929)
- Database migration auto-fills NULL values with model defaults
- Database adds `needs_review` and `needs_review_reason` fields for offset detection
### Performance
- Shared HTTP client connection pool, reuses TCP/SSL connections
- RSS refresh now concurrent (`asyncio.gather`), ~10x faster with multiple sources
- Torrent file download now concurrent, ~5x faster for multiple torrents
- Rename module concurrent file list fetching, ~20x faster
- Notification sending now concurrent, removed 2-second hardcoded delay
- Added TMDB and Mikan parser result caching to avoid duplicate API calls
- Database indexes added for `Torrent.url`, `Torrent.rss_id`, `Bangumi.title_raw`, `Bangumi.deleted`, `RSSItem.url`
- RSS batch enable/disable uses single transaction instead of per-item commits
- Pre-compiled regex patterns for torrent name parsing and filter matching
- `SeasonCollector` created outside loops, reuses single authentication
- RSS parsing deduplication changed from O(n²) list lookup to O(1) set lookup
- `Episode`/`SeasonInfo` dataclasses use `__slots__` for reduced memory footprint
### Changes
@@ -89,6 +120,21 @@
- Added log level filter in log view
- Redesigned LLM settings panel (fixes #938)
- Redesigned settings, downloader, player, and log page styles
- Added search provider settings panel
- View, add, edit, delete search sources in UI
- Default sources (mikan, nyaa, dmhy) cannot be deleted
- URL template validation ensures `%s` placeholder
- Added iOS-style notification badge system
- Yellow badge + purple border for subscriptions needing review
- Combined display support (e.g., `! | 2` for warning + multiple rules)
- Yellow glow animation on cards needing attention
- Edit modal warning banner with one-click auto-detect and dismiss
- Rule selection modal highlights rules with warnings
- Calendar page bangumi grouping: same anime with multiple rules merged, click to select specific rule
- Bangumi list page collapsible "Archived" section
- Bangumi list page skeleton loading animation
- Rule editor episode offset field with "Auto Detect" button
- RSS management page connection status labels: green "Connected" when healthy, red "Error" with tooltip for details
- New mobile-first responsive design
- Three-tier breakpoint system: mobile (<640px), tablet (640-1023px), desktop (≥1024px)
- Mobile bottom navigation bar (with icons and text labels)
@@ -114,6 +160,16 @@
- `ab-mobile-nav` — Enhanced bottom navigation bar (icon + label + active indicator)
- `useSafeArea` — Safe area composable
### Performance
- Downloader store uses `shallowRef` instead of `ref` to avoid deep reactive proxy on large arrays
- Table column definitions moved to `computed` to avoid rebuilding on each render
- RSS table columns separated from data, column config not rebuilt on data changes
- Calendar page removed duplicate `getAll()` calls
- `ab-select` `watchEffect` changed to `watch`, eliminates invalid emit on mount
- `useClipboard` hoisted to store top level, avoids creating new instance on each `copy()`
- `setInterval` replaced with `useIntervalFn` for automatic lifecycle management
### Changes
- Refactored search logic, removed rxjs dependency

View File

@@ -2,7 +2,67 @@
Click an anime poster on the homepage to manage individual anime entries.
![Edit Bangumi](../image/feature/edit.png)
![Bangumi List](../image/feature/bangumi-list.png)
If an anime has multiple download rules (e.g., different subtitle groups), a rule selection popup will appear:
![Rule Selection](../image/feature/rule-select.png)
After selecting a rule, the edit modal opens:
![Edit Bangumi](../image/feature/bangumi-edit.png)
## Notification Badges
Since v3.2, bangumi cards display iOS-style notification badges to indicate status:
- **Yellow badge with `!`**: Subscription needs review (e.g., offset issues detected)
- **Number badge**: Multiple rules exist for this anime
- **Combined badge** (e.g., `! | 2`): Has warning and multiple rules
Cards with warnings also display a yellow glow animation to draw attention.
## Episode Offset Auto-Detection
Some anime have complex season structures that cause mismatches between RSS episode numbers and TMDB data. For example:
- "Frieren: Beyond Journey's End" Season 1 was broadcast in two parts with a 6-month gap
- RSS may show "S2E01" while TMDB considers it "S1E29"
AB v3.2 can automatically detect these issues:
1. Click the **Auto Detect** button in the edit modal
2. AB analyzes TMDB episode air dates to identify "virtual seasons"
3. If a mismatch is found, AB suggests the correct offset values
4. Click **Apply** to save the offset
The background scan thread also periodically checks existing subscriptions for offset issues and marks them for review.
## Archive / Unarchive Anime
Since v3.2, you can archive completed or inactive anime to keep your list organized.
### Manual Archive
1. Click on an anime poster
2. In the edit modal, click the **Archive** button
3. The anime moves to the "Archived" section at the bottom of the list
### Automatic Archive
AB can automatically archive anime when:
- The series status on TMDB shows as "Ended" or "Canceled"
- Use **Config** → refresh metadata to trigger auto-archive
### Viewing Archived Anime
Archived anime appear in a collapsible "Archived" section at the bottom of the bangumi list. Click to expand and view archived items.
### Unarchive
To restore an archived anime:
1. Expand the "Archived" section
2. Click on the anime poster
3. Click the **Unarchive** button
## Disable / Delete Anime
@@ -11,3 +71,13 @@ Since AB continuously parses **aggregated RSS** feeds, for download rules from a
- Remove the subscription from the aggregated RSS
If you delete the anime entry, it will be recreated on the next parse cycle.
## Advanced Settings
Click **Advanced Settings** in the edit modal to access additional options:
![Advanced Settings](../image/feature/bangumi-edit-advanced.png)
- **Season Offset**: Adjust the season number offset
- **Episode Offset**: Adjust the episode number offset
- **Filter**: Custom regex filter for torrent matching

40
docs/feature/calendar.md Normal file
View File

@@ -0,0 +1,40 @@
# Calendar View
Since v3.2, AB includes a calendar view that shows your subscribed anime organized by broadcast day.
![Calendar](../image/feature/calendar.png)
## Features
### Weekly Schedule
The calendar displays anime organized by their broadcast weekday (Monday through Sunday), plus an "Unknown" column for anime without broadcast schedule data.
### Bangumi.tv Integration
AB fetches broadcast schedule data from Bangumi.tv to accurately display when each anime airs.
Click the **Refresh schedule** button to update the broadcast data.
### Grouped Display
Since v3.2, anime with multiple download rules are grouped together:
- Same anime appears once, even with multiple subtitle group rules
- Click on a grouped anime to see all available rules
- Select a specific rule to edit
This keeps the calendar clean while still providing access to all your rules.
## Navigation
Click on any anime poster in the calendar to:
- View anime details
- Edit download rules
- Access archive/disable options
## Tips
::: tip
If an anime appears in the "Unknown" column, it may not have broadcast data on Bangumi.tv, or the anime title couldn't be matched.
:::

View File

@@ -38,3 +38,24 @@ AB can also rename subtitle files in the first-level directory.
After renaming, episodes and directories are placed in the `Season` folder.
Renamed collections are moved and categorized under `BangumiCollection`.
## Episode Offset
Since v3.2, AB supports episode offset for renaming. This is useful when:
- RSS shows different episode numbers than expected (e.g., S2E01 should be S1E29)
- Anime has "virtual seasons" due to broadcast gaps
When an offset is configured for a bangumi, AB automatically applies it during renaming:
```
Original: S02E01.mkv
With offset (season: -1, episode: +28): S01E29.mkv
```
To configure offset:
1. Click on the anime poster
2. Open Advanced Settings
3. Set Season Offset and/or Episode Offset values
4. Or use "Auto Detect" to let AB suggest the correct offset
See [Bangumi Management](./bangumi.md#episode-offset-auto-detection) for more details on auto-detection.

View File

@@ -4,6 +4,25 @@ title: RSS Management
# RSS Management
## RSS Manager Page
The RSS Manager page displays all your RSS subscriptions with their connection status.
![RSS Manager](../image/feature/rss-manager.png)
### Connection Status
Since v3.2, AB tracks the connection status of each RSS source:
| Status | Description |
|--------|-------------|
| **Connected** (green) | RSS source is reachable and returning valid data |
| **Error** (red) | RSS source failed to respond or returned invalid data |
When a source shows an error, hover over the status label to see the error details in a tooltip.
AB automatically updates the connection status on each RSS refresh cycle.
## Adding Collections
AB provides two manual download methods:

View File

@@ -8,7 +8,9 @@ Since v3.1, AB includes a search feature for quickly finding anime.
The search feature relies on the main program's parser. The current version does not support parsing collections. A `warning` when parsing collections is normal behavior.
:::
The search bar is located in the AB top bar. You can select the source site on the right side of the search bar, such as: Mikan Project, Nyaa, etc.
The search bar is located in the AB top bar. Click to open the search panel.
![Search Panel](../image/feature/search-panel.png)
Select the source site, enter keywords, and AB will automatically parse and display search results. To add an anime, click the add button on the right side of the card.
@@ -16,11 +18,47 @@ Select the source site, enter keywords, and AB will automatically parse and disp
When the source is **Mikan**, AB uses the `mikan` parser by default. For other sources, the TMDB parser is used.
:::
## Adding Custom Sources
## Managing Search Sources
Users can manually add source sites by editing `config/search_provider.json`.
Since v3.2, you can manage search sources directly in the Settings page without editing JSON files.
### Search Provider Settings Panel
Navigate to **Config****Search Provider** to access the settings panel.
![Search Provider Settings](../image/feature/search-provider.png)
From here you can:
- **View** all configured search sources
- **Add** new search sources with the "Add Provider" button
- **Edit** existing source URLs
- **Delete** custom sources (default sources mikan, nyaa, dmhy cannot be deleted)
### URL Template Format
When adding a custom source, the URL must contain `%s` as a placeholder for the search keyword.
Example:
```
https://example.com/rss/search?q=%s
```
The `%s` will be replaced with the user's search query.
### Default Sources
The following sources are built-in and cannot be deleted:
| Source | URL Template |
|--------|--------------|
| mikan | `https://mikanani.me/RSS/Search?searchstr=%s` |
| nyaa | `https://nyaa.si/?page=rss&q=%s&c=0_0&f=0` |
| dmhy | `http://dmhy.org/topics/rss/rss.xml?keyword=%s` |
### Adding Sources via Config File
You can also manually add sources by editing `config/search_provider.json`:
Default configuration:
```json
{
"mikan": "https://mikanani.me/RSS/Search?searchstr=%s",

Binary file not shown.

After

Width:  |  Height:  |  Size: 640 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 579 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 942 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 506 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB