`
-element, or disable the "Nfo" metadata reader for the library.
+
+Behaviour notes and limitations
-The task itself will **not** modify or create `.nfo` files - it saves below Jellyfin's "manual edit"
-threshold precisely so the NFO savers stay out of the way. Verified against a hand-written `.nfo`:
-byte-identical after a full run.
+
-### Turning the setting off
-
-Disabling it stops the plugin supplying season names, but Jellyfin keeps the names it already stored;
-a refresh alone will not revert them. Run the **Rebuild playlist seasons** task to return the library
-to upload-year seasons.
-
-### Notes and limitations
-
-- **Season names come from TubeArchivist**, with whitespace normalised and a 120-character cap.
- Punctuation is preserved so seasons read as they do in TubeArchivist.
-- **A video in several playlists** is placed in the lowest-numbered matching season, chosen
+- **Turning the setting off** stops the plugin supplying names, but Jellyfin keeps the names it
+ already stored. Run the rebuild task to return to upload-year seasons.
+- **Season names** come from TubeArchivist with whitespace normalised and a 120-character cap.
+ Punctuation is preserved.
+- **A video in several playlists** goes to the lowest-numbered matching season, chosen
deterministically so it does not move between refreshes.
- **If TubeArchivist is unreachable**, episodes fall back to upload-year grouping and a warning is
- logged. They are not swept into *Unsorted*, because that would be sticky and unrepairable.
-- **Playlist data is cached for 30 minutes.** A newly created playlist may take that long to appear;
- restart Jellyfin to pick it up immediately.
-- **Season 0 is never used.** Jellyfin reserves it for Specials and force-renames it.
-- The playlist-to-season map is stored in the plugin configuration and survives restarts. Season
- numbers outside the valid range are rejected and reallocated automatically.
-- Season numbers are allocated across the whole library, so a second channel's first playlist
- continues from where the previous channel left off rather than restarting at 1. This is invisible
- while playlist names are shown.
+ logged. They are not swept into *Unsorted*, which would be sticky and unrepairable.
+- **Playlist data is cached for 30 minutes.** A new playlist may take that long to appear; restart
+ Jellyfin to pick it up immediately.
+- **Season 0 is never used** — Jellyfin reserves it for Specials and force-renames it.
+- **Season numbers are allocated library-wide**, so a second channel's first playlist continues from
+ where the previous channel left off rather than restarting at 1. Invisible while names are shown.
+- The playlist-to-season map lives in the plugin configuration and survives restarts. Out-of-range
+ numbers are rejected and reallocated automatically.
+
+
### Other fixes in this fork
-- **TubeArchivist playlists were fetched twice.** Paging continued from `CurrentPage + 1`, but
- TubeArchivist treats `?page=0` and `?page=1` as the same first page, so every playlist on it was
- duplicated (50 results for 29 real playlists). This also affected the playlist-sync tasks.
+- **Playlists were fetched twice.** Paging continued from `CurrentPage + 1`, but TubeArchivist
+ treats `?page=0` and `?page=1` as the same first page, duplicating every playlist on it (50
+ results for 29 real playlists). Also affected the playlist-sync tasks.
- **Redirects during playlist paging.** The base URL was prefixed onto an already-absolute
- `Location` header, producing an invalid URI. Redirects are now followed as-is.
+ `Location` header, producing an invalid URI. Now followed as-is.
## Tasks intervals
Since many of the feature are implemented as background tasks periodically executing, in the `Tasks intervals` section you will find the settings to adjust this period in seconds.
@@ -288,15 +334,27 @@ The options correlate with:
## Build
-1. To build this plugin you will need [.Net 9.x](https://dotnet.microsoft.com/download/dotnet/9.0).
+Build and install instructions are in [Installation](#installation) above.
-2. Build plugin with following command
- ```
- $ dotnet publish Jellyfin.Plugin.TubeArchivistMetadata --configuration Release --output bin
- ```
+For development, `dotnet build` is the lint gate — the project sets `TreatWarningsAsErrors`
+with StyleCop and the Jellyfin ruleset, so warnings fail the build.
-3. Place **only** `bin/Jellyfin.Plugin.TubeArchivistMetadata.dll` in the `plugins/TubeArchivistMetadata` folder (you might need to create the folders) of your Jellyfin installation. `dotnet publish` also emits around 30 Jellyfin dependency DLLs into `bin/`; copying those shadows the server's own assemblies and can stop the plugin loading
+## Contributing
+
+This is a personal fork with a narrow purpose, so it is not looking for feature contributions.
+
+- **Bugs in playlist seasons** — open an issue here, and include your Jellyfin version, the
+ plugin version from the dashboard, and the relevant log lines.
+- **Anything else** — please take it
+ [upstream](https://github.com/tubearchivist/tubearchivist-jf-plugin). Fixes landing there benefit
+ everyone and eventually reach this fork.
+
+Two upstream bug fixes carried here (playlist pagination and redirect handling) are independent of
+the season feature and are welcome to be taken upstream by anyone.
## License
This plugins code and packages are distributed under the GPLv3 License. See [LICENSE](./LICENSE) for more information.
+
+Forked from [tubearchivist/tubearchivist-jf-plugin](https://github.com/tubearchivist/tubearchivist-jf-plugin).
+All credit for the original plugin goes to its authors.