Plugin-repositories
Deze pagina is vertaald door PageTurner AI (beta). Niet officieel goedgekeurd door het project. Een fout gevonden? Probleem melden →
Er zijn verschillende wijzigingen aan plugins voor de nieuwe release. Hier is een korte post met de belangrijkste updates voor zowel ontwikkelaars als gebruikers.
De meest opvallende verandering voor iedereen is dat repositories van derden nu beschikbaar zijn! Je kunt de huidige lijst vinden via Dashboard -> Plugins -> Repositories, waar je items naar wens kunt toevoegen of verwijderen. Zelfs de officiële repository kun je verwijderen als je liever geen externe verbindingen met onze server wilt.
Voor ontwikkelaars is de enige vereiste aanpassing een JSON-manifest op elke locatie, met versies die verwijzen naar binaire releases op elke locatie. We eisen geen specifieke methode voor het hosten van deze bestanden, omdat dit indruist tegen de idealen van het project. De officiële repository gebruikt nginx voor het manifest en GitHub Releases voor de binaire bestanden, maar je zou het manifest ook op GitHub kunnen hosten. Hier is een voorbeeldmanifest met alle eigenschappen. Let op: de GUID moet uniek zijn (zowel in het manifest als de plugin zelf) om conflicten met andere plugins te voorkomen.
[
{
"category": "Metadata",
"guid": "a4df60c5-6ab4-412a-8f79-2cab93fb2bc5",
"name": "Anime",
"description": "This plugin supports several different metadata providers and options for organizing your collection.",
"owner": "jellyfin",
"overview": "Manage Your Anime in Jellyfin",
"versions": [
{
"checksum": "ad6db5175f4732308b5dd166f79a1c2d",
"changelog": "bug fixes and improvements",
"targetAbi": "10.6.0.0",
"sourceUrl": "https://repo.jellyfin.org/releases/other/whats-this-plugin.zip.gif",
"timestamp": "2020-03-27 06:02:58",
"version": "1.0.3.0"
}
]
}
]
The official repository manifest for stable plugins can be used for more examples. You can also find the deprecated manifest on the same domain for the old format. However, all new plugin updates (on the official repository) will go to the new manifest, so older verions of Jellyfin won't receive plugin updates. Plugins do have official documentation on our DocFX instance. Please be aware that our documentation is still a work in progress, since a lot of the C# code still has very little information for tools like this. Things are improving thanks to the diligent server team though, who have been slowly adding information throughout the codebase.
Tools
One excellent tool that might help with repository management is jellyfin-plugin-repository-manager by Oddstr13, a frequent contributor. He did mention that his tool works much better with nginx than GitHub releases, but feel free to check it out! Another useful tool might be the jellyfin-build repository, which used to be the method used for updates on the official repository. We'll probably be migrating to the repository manager linked above though, since most of the other build systems have moved to Azure.
Code
Er zijn altijd enkele ABI-wijzigingen waar je van op de hoogte moet zijn als je een plugin onderhoudt. Ik noem hier de belangrijkste voor versie 10.6.0 om eventuele problemen met de update te minimaliseren.
The first batch comes from the HTML for settings on the web client, which has been going through an overhaul lately. One of the long term goals we have is deprecating jQuery entirely, since it's not 2008 anymore and better tools have come along. That does mean plugin pages will have to migrate off it at some point, but we haven't made the full transition yet, don't worry. Although jQuery will stick around a bit longer, we did remove two custom scripts in the web source that...extended the functionality a bit. There was one for select menus and yet another for checkbox elements. I can only assume the goal was compatibility with older browsers or clients at the time, but we've been pushing extremely hard to modernize the web client. That means avoiding abandoned libraries, ancient JavaScript practices, and definitely custom extensions for dependencies we don't even want in the code. The easiest fix for this change is to migrate from jQuery to vanilla JavaScript for checkboxes and select menus in the HTML source.
Er waren ook verschillende wijzigingen in de C# ABI die je plugin kunnen beïnvloeden. De lastigste is waarschijnlijk de aanpassing aan ILogger, die werd doorgevoerd om serverlogs te verbeteren door de klassenaam aan elke regel toe te voegen. Je zult ook diverse wijzigingen tegenkomen door de nieuwe databasemigratie (Jellyfin.Data is de nieuwe namespace voor deze objecten) en enkele niet-gerelateerde aanpassingen.
IExternalID.Name -> IExternalID.ProviderName
MediaBrowser.Controller.Entities.User -> Jellyfin.Data.Entities.User
MetadataProviders -> MetadataProvider
CompressionMethod -> CompressionMethods
RequestContentBytes = request -> RequestContent = Encoding.UTF8.GetString(request)
User.Name -> User.Username
item.GetDisplayExtras() -> item.GetExtras(BaseItem.DisplayExtraTypes)
user.RootFolder -> libraryManager.GetUserRootFolder()
Toekomst
Repositories van derden zijn de eerste stap in een groter plan om plugingebruik in de codebase sterk te vergroten. Hiermee kan iedereen zijn eigen plugin onderhouden en updates zo snel uitrollen als gewenst, zonder afhankelijk te zijn van een gecentraliseerd systeem. Gebruikers krijgen bovendien de mogelijkheid hun afhankelijkheid van internet te verminderen door alle repositories naar believen te verwijderen.
We begrijpen dat sommige aanpassingen vervelend kunnen zijn voor je plugin, maar hopelijk verbetert dit snel. Het volgende doel (nu meerdere repositories tegelijk gebruikt kunnen worden) is een onstabiele repository voor plugins. Dit vervult de lang bestaande vraag naar betere pluginondersteuning in de onstabiele versie, wat voor veel gebruikers een struikelblok was. Het vereist ook een onstabiele NuGet-repository voor de C# ABI, waardoor ontwikkelaars van derden hun plugins kunnen testen tegen ABI-wijzigingen vóór een serverupdate.
Ontwikkel je een plugin (of client) en wil je op onze mailinglijst voor ontwikkelaars van derden? Neem dan contact op via Matrix of stuur een e-mail voor details. Ons hoofddoel is uitstekende ondersteuning voor plugins en niet-officiële clients, dus heb je suggesties? Laat het zeker weten op een van onze openbare forums. Hopelijk stabiliseert de C# ABI mettertijd en worden grote wijzigingen zeldzamer, zodat we ons kunnen richten op het optimaliseren van plugins!