Commit Graph
47 Commits
Author SHA1 Message Date
dtourolleandClaude Opus 5.5 582c94f5f9 Build one plugin per Jellyfin generation (10.9, 10.11, 12)
🏗️ Build Plugin / build (push) Successful in 2m27s
Nightly Build / nightly-build (push) Failing after 1m18s
🧪 Test Plugin / test (push) Successful in 43s
🚀 Release Plugin / build-and-release (push) Failing after 1m12s
The single net8.0 build compiled against Jellyfin 10.9.11 still loads on
10.11 and 12, so channels and browsing keep working, but 10.11 changed
APIs in ways that only fail at runtime. A binary audit of the DLL against
the real server assemblies found 9 broken references on both 10.11 and
12 (none on 10.9/10.10):

- TaskTriggerInfo.Type became an enum. GetDefaultTriggers throws, so
  Jellyfin silently gives every SRF task a 24h fallback trigger. The
  recording scheduler therefore ran about once a day and scheduled
  recordings never started.
- ILibraryManager.GetItemList changed its return type: the expiration
  check crashed on every run.
- Jellyfin.Data.Entities.User moved (IUserManager.Users, GetUserData,
  SaveUserData, PlaybackProgressEventArgs.Users): resume cleanup returned
  500 and the playback-stop guard threw on every stop.

Jellyfin 12 also rejects the legacy X-Emby-Token header with an empty
401, which the recordings UI surfaced as "Unexpected end of JSON input".
The pages now send Authorization: MediaBrowser Token="...", verified on
10.9, 10.11 and 12.

The plugin now multi-targets net8.0/net9.0/net10.0 against Jellyfin
10.9.11/10.11.0/12.0.0 (the oldest package of each line, so each DLL
loads on every patch release of it), with JELLYFIN_10_11_OR_GREATER and
JELLYFIN_12_OR_GREATER for the differences. Trigger construction moves
into Utilities/TaskTriggers so the version switch lives in one place.

.gitea/scripts/build-plugins.sh builds one zip per generation. jprm has
no targetAbi flag, so it rewrites build.yaml per flavour and restores
it. Jellyfin installs the highest version whose targetAbi it satisfies,
so the flavour code goes into the last version segment:

  release v1.2.0 -> 1.2.0.9 / 1.2.0.11 / 1.2.0.12
  nightly        -> 1.0.<date>.<run>09 / 11 / 12

The PR, nightly and release workflows use the script and publish one
manifest entry per zip. Verified end to end against a three-entry
manifest: 10.11 installs the .11 build, 12.1 installs the .12 build.
The existing .NET 10 builder image builds all three unchanged.

Supporting changes: the test project multi-targets too, because jprm
publishes the whole solution for one framework at a time, and it drops
its Microsoft.Extensions.Logging 8.0.1 pin, which is a NU1605 downgrade
under the newer Jellyfin packages. CA1873 (new in the .NET 10 analyzers)
is silenced beside CA1848. The release manifest step checks out
origin/master like the nightly does since 7e1973a.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-09-24 01:42:38 +02:00
dtourolleandClaude Opus 5 390146e8d4 Clean up stale Continue Watching entries
🏗️ Build Plugin / build (push) Successful in 1m43s
🧪 Test Plugin / test (push) Successful in 34s
🚀 Release Plugin / build-and-release (push) Successful in 51s
Nightly Build / nightly-build (push) Failing after 50s
Livestreams and ended broadcasts accumulated in every user's resume row
because Jellyfin saves a playback position for channel items regardless
of whether the position means anything. A livestream has nothing to
return to, so the entry stayed pinned forever.

Two parts:

- PlaybackResumeGuard, an IHostedService on ISessionManager.PlaybackStopped.
  Jellyfin saves the resume point before raising the event, so the guard
  zeroes it afterwards for livestreams. Stops new entries at the source.
- ResumeCleanupService plus a daily 4 AM task (after the 3 AM expiration
  check) for the existing backlog. Clears livestreams, resume points older
  than N days, positions under N seconds and playback past N% of runtime,
  each threshold configurable.

Only plugin-owned items are touched, matched by the SRF provider ID with a
fallback to the owning channel ID so recordings are covered too. Clearing
sets PlaybackPositionTicks to 0 and leaves Played false: nothing is deleted
and the item stays unwatched.

Config page gains the thresholds plus "Clean Up Stale Entries Now" and
"Clear All SRF Play Entries" buttons, backed by MaintenanceController
under RequiresElevation.

Also folds the duplicated urn.Contains("livestream") check in
MediaSourceFactory and RecordingService into UrnHelper.IsLivestreamUrn.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-12 18:55:41 +02:00
dtourolle 4b5d7e2a7f info add github cross-login info 2026-06-27 11:17:57 +02:00
dtourolle 7c76402a4a Clean up dead code, consolidate duplication, fix redundancies
🏗️ Build Plugin / build (push) Failing after 9s
🧪 Test Plugin / test (push) Successful in 1m28s
🚀 Release Plugin / build-and-release (push) Failing after 5s
Remove 9 dead methods, 6 unused constants, and redundant
ReaderWriterLockSlim from MetadataCache. Consolidate repeated
patterns into HasChapters, IsPlayable, and ToLowerString helpers.
Extract shared API methods in SRFApiClient. Move variant manifest
rewriting from controller to StreamProxyService. Make Auto quality
distinct from HD. Update README architecture section.
2026-02-28 11:34:45 +01:00
dtourolle 2631c93444 moved repo install guide to top 2025-12-20 14:32:13 +01:00
dtourolle 7f71d3419c Add repo manifest
🏗️ Build Plugin / build (push) Successful in 2m49s
🧪 Test Plugin / test (push) Successful in 1m21s
🚀 Release Plugin / build-and-release (push) Successful in 2m46s
Use title cards when non provided or is livestream
2025-12-20 14:28:39 +01:00
dtourolle 89c41842a7 Update readme 2025-11-23 14:07:25 +01:00
dtourolle 31b2402a96 more readme refinement
🏗️ Build Plugin / build (push) Successful in 2m22s
🧪 Test Plugin / test (push) Successful in 1m7s
2025-11-14 22:01:17 +01:00
dtourolle e5f82c53da Update readme (acknowledge goggin/kodi plugin, clearer arch desc, problem with main channels)
🚀 Release Plugin / build-and-release (push) Failing after 2s
2025-11-14 21:25:22 +01:00
dtourolle ac6a3842dd first commit
🏗️ Build Plugin / call (push) Failing after 0s
📝 Create/Update Release Draft & Release Bump PR / call (push) Failing after 0s
🧪 Test Plugin / call (push) Failing after 0s
🔬 Run CodeQL / call (push) Failing after 0s
2025-11-12 22:05:36 +01:00
Shadowghost 3afa1fc407 Upgrade template to 10.9.x and .NET 8 2024-10-05 17:06:23 +02:00
Anthony LavadoandGitHub 2c1143b49f Merge pull request #65 from mrnoname1000/master 2024-10-05 11:01:52 -04:00
ErikandGitHub 2ddd08221d Updated to specify that you need to place the plugin DLL into a subfolder (#71) 2024-05-19 08:08:00 -06:00
mrnoname1000andGitHub 7fe332f29c README.md: Fix sh UUID generator
And make call to head POSIX-compliant
2023-10-19 23:35:44 +00:00
Johannes KauffmannandGitHub 0cb471baa2 Fix typo in interface name (#61) 2023-06-30 18:23:54 -06:00
Tuur VanhoutteandGitHub 6495c17c7f (chore: README.md) change codeblock language to jsonc
The markdown codeblocks in the README were using `json`, which has no support for comments, making them highlighted in red. `jsonc` does have support, correctly rendering the codeblocks.
2023-04-30 23:47:45 +02:00
Matthew Strasiotto 5e63c884e8 Update README to reflect new .vscode structure 2022-04-23 20:19:25 +10:00
Patrick Farwick 28a25a426c Add an example tasks.json file 2022-01-23 11:51:22 +01:00
Patrick Farwick d943670461 Automate the setup on visual studio code
This commit describes how to setup an automation for Visual Studio Code.
The automation aims to build the plugin and then start the server and
optionally the web-client. This way, only one IDE project has to be
opened which starts all necessary dependencies.
2022-01-22 23:00:50 +01:00
ldellisola f7a179e9eb Added information about debugging plugins using Visual Studio 2022-01-22 14:12:32 +01:00
Konrad RejandGitHub 503f7e4696 Update dotnet version
Change references to dotnet 5.0 to dotnet 6.0 as the plugin template has been updated to dotnet 6.0.
2022-01-12 00:04:39 +01:00
Cody RobiberoandGitHub c6e0e3414a Merge pull request #34 from jellyfin/BaronGreenback-patch-1 2021-11-17 17:46:46 -07:00
Patrick Farwick aec58cd20d Clarify the directory to copy the plugin to 2021-10-06 23:32:06 +02:00
Patrick Farwick 7c634d9ccc Describe how to debug the plugin
Close #15
2021-10-06 23:24:58 +02:00
BaronGreenbackandGitHub b44c58f11b Update README.md
Add caveat on IServerEntryPoint
2021-05-29 11:55:59 +01:00
David e65a260699 Remove more outdated interfaces 2021-01-24 17:35:49 +01:00
David f21f3f16f8 Remove no longer available interfaces from README 2021-01-24 17:21:24 +01:00
dkanadaandGitHub cc20076fbd fix trailing space 2021-01-10 20:30:04 +09:00
dkanadaandGitHub ee82d22666 readme changes 2021-01-10 20:23:01 +09:00
crobibero a2444f776c Update README.md 2020-12-09 16:29:14 -07:00
crobibero 50468fd108 Update dotnet sdk version and remove IIsoManager 2020-12-03 07:52:32 -07:00
artiumeandGitHub 8ae0207131 add additional UUID gen methods 2020-07-17 14:49:55 -04:00
Joshua M. Boniface edff9891d8 Add licensing blurb to README 2020-06-16 12:31:21 -04:00
dkanada 888677b117 update metadata and remove deprecated checkbox method 2020-05-26 22:11:35 +09:00
Niels van Velzen 126a0eb6b6 Update to .NET 2.1 and Jellyfin 10.5 2020-03-09 21:17:32 +01:00
dkanadaandGitHub e70a1f09df Merge branch 'master' into dkanada-patch-1 2020-01-21 14:53:23 +09:00
dkanada 644088bad2 make some readme changes 2020-01-21 13:03:21 +09:00
dkanadaandGitHub 6afbcbb0eb update some documentation links 2020-01-21 12:40:24 +09:00
Anthony LavadoandGitHub 3a9152eb8b Change link to contribution guide
Changes the link to the docs to be the contribution guide, as that will be the best starting point.
2019-09-30 18:08:23 -04:00
Anthony LavadoandGitHub 36d6c99a74 Update links
Removes reference to other GitHub repo for the template, and uses the one in this repo.
Updates documentation link to new location.
2019-09-30 18:05:39 -04:00
Arun MahapatraandGitHub e3fe274d51 Fix links to example project in readme 2019-08-17 15:52:46 +05:30
LogicalPhallacyandGitHub a14d1d988d remove missing weather interface
the interfaces in general need a little more attention and love.
2019-03-25 23:58:27 -07:00
LogicalPhallacyandGitHub dbe5b1f311 Added plugin license info, fixed urls 2019-03-07 23:53:59 -08:00
Phallacy 0f54a9b89d Updated readme with dotnet template 2019-03-03 01:51:09 -08:00
Phallacy 5af09f0fd5 Updated readme with example plugin link, minor gitignore update 2019-02-21 01:59:47 -08:00
Phallacy e2f35ac6cc initial readme, gitignore 2019-02-21 00:36:01 -08:00
LogicalPhallacyandGitHub b4d5cd8bb1 Initial commit 2019-02-20 21:59:28 -08:00