feat: prioritise and blacklist media and overview in setting page of progress in adding info
This commit is contained in:
@@ -37,6 +37,11 @@ Then install "JRay" from the plugin catalog and restart Jellyfin.
|
||||
- **Work discovery API** — a remote worker can poll for a random batch of library
|
||||
items that still need processing, so the backlog spreads naturally across
|
||||
workers without server-side task tracking.
|
||||
- **Prioritise / ignore rules** — steer that backlog by genre, series, or
|
||||
individual item: ignore what you never want extracted (e.g. anime), or push a
|
||||
series to the front of the queue.
|
||||
- **Coverage overview** — see at a glance how much of your library has actor
|
||||
data, broken down by genre and by media type (film vs TV).
|
||||
- **Extensible "context at time t" envelope** — the per-timestamp response is
|
||||
designed to grow (locations, trivia, …) without breaking existing clients.
|
||||
- **In-memory caching** — loaded truth files are cached with a configurable TTL.
|
||||
@@ -107,7 +112,12 @@ the `X-Emby-Token: <token>` header or `Authorization: MediaBrowser Token="<token
|
||||
| `GET /Items/{itemId}/Timeline` | user | Full truth file for an item, or `404` if none. |
|
||||
| `PUT /Items/{itemId}/Truth` | admin | Push managed truth data (schema v1). `204` on success, `400` on bad schema. |
|
||||
| `DELETE /Items/{itemId}/Truth` | admin | Remove managed truth data (idempotent, `204`). Falls back to sidecar. |
|
||||
| `GET /Tasks/Pending?limit=10` | admin | Random sample of items still needing truth data (default 10, max 100). |
|
||||
| `GET /Tasks/Pending?limit=10` | admin | Random sample of items still needing truth data (default 10, max 100); honours prioritise/ignore rules. |
|
||||
| `GET /Policy/Rules` | admin | List prioritise/ignore rules. |
|
||||
| `PUT /Policy/Rules` | admin | Add or replace a rule. `204`, or `400` if `value` is empty. |
|
||||
| `DELETE /Policy/Rules?scope=&value=` | admin | Remove a rule (idempotent, `204`). |
|
||||
| `GET /Coverage` | admin | Library coverage totals, plus breakdowns by media type and genre. |
|
||||
| `GET /Coverage/Genres` \| `/Series` \| `/Items?search=` | admin | Option lists for the config page's rule editor. |
|
||||
| `GET /ClientScript` | anon | The pause-overlay script injected into the web client. |
|
||||
|
||||
- **user** — any authenticated Jellyfin user token.
|
||||
@@ -225,6 +235,21 @@ Configure JRay in Jellyfin Dashboard → Plugins → JRay:
|
||||
client's `index.html`. Disabling it removes any previously injected script
|
||||
(default `on`).
|
||||
|
||||
The config page also shows a **coverage overview** (how much of your library has
|
||||
actor data, by genre and media type) and a **prioritise / ignore rules** editor.
|
||||
Rules steer the work-discovery API (`/Tasks/Pending`) only — they don't affect
|
||||
the overlay or read endpoints:
|
||||
|
||||
- **Ignore** — matching items are never offered to extraction workers. Use it to
|
||||
skip content you don't want processed (e.g. a whole genre like anime, a
|
||||
specific series, or one movie). Ignored items are excluded from the coverage
|
||||
"percent done" so they don't count against you.
|
||||
- **Prioritise** — matching items jump to the front of the work queue.
|
||||
|
||||
A rule targets a **genre**, a **series**, or a single **item**; the most specific
|
||||
matching rule wins (item > series > genre). Setting a rule for a target that
|
||||
already has one replaces it, so nothing can be both prioritised and ignored.
|
||||
|
||||
## Building the Plugin
|
||||
|
||||
### Prerequisites
|
||||
@@ -268,20 +293,28 @@ Jellyfin.Plugin.JRay/
|
||||
├── Controllers/
|
||||
│ ├── ActorsController.cs # /Timeline and /jray?t= read endpoints
|
||||
│ ├── TruthController.cs # PUT/DELETE managed truth data
|
||||
│ ├── TasksController.cs # /Tasks/Pending work discovery
|
||||
│ ├── TasksController.cs # /Tasks/Pending work discovery (policy-aware)
|
||||
│ ├── PolicyController.cs # /Policy/Rules prioritise/ignore CRUD
|
||||
│ ├── CoverageController.cs # /Coverage overview + genre/series/item pickers
|
||||
│ └── WebController.cs # /ClientScript overlay script
|
||||
├── Models/
|
||||
│ ├── TruthFile.cs # Root truth-file schema (schema_version 1)
|
||||
│ ├── TruthActor.cs # Per-actor entry with scene windows
|
||||
│ ├── ActorAtTime.cs # Actor entry in the "context at t" envelope
|
||||
│ ├── JRayContext.cs # Extensible "context at time t" envelope
|
||||
│ └── PendingExtractionItem.cs # Item descriptor for the work-discovery API
|
||||
│ ├── PendingExtractionItem.cs # Item descriptor for the work-discovery API
|
||||
│ ├── MediaPolicyRule.cs # A prioritise/ignore rule (+ PolicyScope/PolicyAction)
|
||||
│ ├── CoverageReport.cs # Coverage overview (+ CoverageCounts / breakdown rows)
|
||||
│ └── PickerOption.cs # value/label option for the config-page pickers
|
||||
├── Services/
|
||||
│ ├── Interfaces/
|
||||
│ │ ├── ITruthDataService.cs
|
||||
│ │ └── IManagedTruthStore.cs
|
||||
│ │ ├── IManagedTruthStore.cs
|
||||
│ │ └── IMediaPolicyStore.cs
|
||||
│ ├── TruthDataService.cs # Resolves + caches truth (managed > sidecar)
|
||||
│ ├── ManagedTruthStore.cs # Storage for pushed/managed truth data
|
||||
│ ├── MediaPolicyStore.cs # Persists prioritise/ignore rules (policy.json)
|
||||
│ ├── PolicyResolver.cs # Resolves an item's effective rule (item>series>genre)
|
||||
│ └── WebClientPatchService.cs # Injects/removes overlay script in index.html
|
||||
├── Web/
|
||||
│ └── jray-overlay.js # Pause-overlay client script (embedded resource)
|
||||
|
||||
Reference in New Issue
Block a user