knackebrot / jellyfin-plugin-enigma2

Creative Commons Zero v1.0 Universal
25 stars 8 forks source link

vuplus 4.0.0.0 malfunctionned - jellyfin 10.0.8-beta3 - en-US is an invalid culture identifier #9

Closed IamMattM closed 2 years ago

IamMattM commented 2 years ago

Emby.Server.Implementations.ApplicationHost: Error creating "MediaBrowser.Plugins.VuPlus.LiveTvService" System.Globalization.CultureNotFoundException: Only the invariant culture is supported in globalization-invariant mode en-US is an invalid culture identifier

[2022-05-28 13:38:36.783 +01:00] [ERR] [1] Emby.Server.Implementations.ApplicationHost: Error creating "MediaBrowser.Plugins.VuPlus.LiveTvService" System.Globalization.CultureNotFoundException: Only the invariant culture is supported in globalization-invariant mode. See https://aka.ms/GlobalizationInvariantMode for more information. (Parameter 'name') en-US is an invalid culture identifier. at System.Globalization.CultureInfo..ctor(String name, Boolean useUserOverride) at System.Globalization.CultureInfo..ctor(String name) at MediaBrowser.Plugins.VuPlus.LiveTvService..ctor(ILogger1 logger, IHttpClientFactory httpClientFactory) at System.RuntimeMethodHandle.InvokeMethod(Object target, Span1& arguments, Signature sig, Boolean constructor, Boolean wrapExceptions) at System.Reflection.RuntimeConstructorInfo.Invoke(BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.ConstructorMatcher.CreateInstance(IServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.CreateInstance(IServiceProvider provider, Type instanceType, Object[] parameters) at Emby.Server.Implementations.ApplicationHost.CreateInstanceSafe(Type type)

IamMattM commented 2 years ago

Changed Jellyfin docker environment variable to "0" instead of "1" and the vuplus plugin appears to run and says "active" now.

neseih commented 2 years ago

The plugin seems to be broken with version 10.8. Even with this workaround, no channels / recordings, ... are displayed.

Exception in log is:

Jellyfin.Server.Middleware.ExceptionMiddleware: Error processing request. URL "GET" "/LiveTv/Recordings".
System.MissingMethodException: Method not found: 'Void MediaBrowser.Controller.Channels.ChannelItemResult.set_Items(System.Collections.Generic.List`1<MediaBrowser.Controller.Channels.ChannelItemInfo>)'.
   at MediaBrowser.Plugins.VuPlus.RecordingsChannel.GetChannelItems(InternalChannelItemQuery query, CancellationToken cancellationToken)
   at Emby.Server.Implementations.Channels.ChannelManager.GetChannelItems(IChannel channel, User user, String externalFolderId, Nullable`1 sortField, Boolean sortDescending, CancellationToken cancellationToken)
   at Emby.Server.Implementations.Channels.ChannelManager.GetChannelItemsInternal(InternalItemsQuery query, IProgress`1 progress, CancellationToken cancellationToken)
   at Emby.Server.Implementations.Channels.ChannelManager.RefreshLatestChannelItems(IChannel channel, CancellationToken cancellationToken)
   at Emby.Server.Implementations.Channels.ChannelManager.GetChannelsInternal(ChannelQuery query)
   at Emby.Server.Implementations.LiveTv.LiveTvManager.GetRecordingFolders(User user, Boolean refreshChannels)
   at Emby.Server.Implementations.LiveTv.LiveTvManager.GetEmbyRecordings(RecordingQuery query, DtoOptions dtoOptions, User user)
   at Emby.Server.Implementations.LiveTv.LiveTvManager.GetRecordings(RecordingQuery query, DtoOptions options)
   at Jellyfin.Api.Controllers.LiveTvController.GetRecordings(String channelId, Nullable`1 userId, Nullable`1 startIndex, Nullable`1 limit, Nullable`1 status, Nullable`1 isInProgress, String seriesTimerId, Nullable`1 enableImages, Nullable`1 imageTypeLimit, ImageType[] enableImageTypes, ItemFields[] fields, Nullable`1 enableUserData, Nullable`1 isMovie, Nullable`1 isSeries, Nullable`1 isKids, Nullable`1 isSports, Nullable`1 isNews, Nullable`1 isLibraryItem, Boolean enableTotalRecordCount)
   at lambda_method953(Closure , Object , Object[] )
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.SyncObjectResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeActionMethodAsync()
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeNextActionFilterAsync()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.InvokeInnerFilterAsync()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextResourceFilter>g__Awaited|25_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Rethrow(ResourceExecutedContextSealed context)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.InvokeFilterPipelineAsync()
--- End of stack trace from previous location ---
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeAsync>g__Awaited|17_0(ResourceInvoker invoker, Task task, IDisposable scope)
   at Microsoft.AspNetCore.Routing.EndpointMiddleware.<Invoke>g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger)
   at Jellyfin.Server.Middleware.ServerStartupMessageMiddleware.Invoke(HttpContext httpContext, IServerApplicationHost serverApplicationHost, ILocalizationManager localizationManager)
   at Jellyfin.Server.Middleware.WebSocketHandlerMiddleware.Invoke(HttpContext httpContext, IWebSocketManager webSocketManager)
   at Jellyfin.Server.Middleware.IpBasedAccessValidationMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager)
   at Jellyfin.Server.Middleware.LanFilteringMiddleware.Invoke(HttpContext httpContext, INetworkManager networkManager, IServerConfigurationManager serverConfigurationManager)
   at Microsoft.AspNetCore.Authorization.Policy.AuthorizationMiddlewareResultHandler.HandleAsync(RequestDelegate next, HttpContext context, AuthorizationPolicy policy, PolicyAuthorizationResult authorizeResult)
   at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context)
   at Jellyfin.Server.Middleware.QueryStringDecodingMiddleware.Invoke(HttpContext httpContext)
   at Swashbuckle.AspNetCore.ReDoc.ReDocMiddleware.Invoke(HttpContext httpContext)
   at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext)
   at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider)
   at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context)
   at Jellyfin.Server.Middleware.RobotsRedirectionMiddleware.Invoke(HttpContext httpContext)
   at Jellyfin.Server.Middleware.LegacyEmbyRouteRewriteMiddleware.Invoke(HttpContext httpContext)
   at Microsoft.AspNetCore.ResponseCompression.ResponseCompressionMiddleware.InvokeCore(HttpContext context)
   at Jellyfin.Server.Middleware.ResponseTimeMiddleware.Invoke(HttpContext context)
   at Jellyfin.Server.Middleware.ExceptionMiddleware.Invoke(HttpContext context)
IamMattM commented 2 years ago

Yep. I could not get it to properly work in the end only to not break...disappointing.

neseih commented 2 years ago

Created a pull request for fixes (#10). You could try in the meantime to compile yourself from my repository.

IamMattM commented 2 years ago

Created a pull request for fixes (#10). You could try in the meantime to compile yourself from my repository.

Thanks @neseih

I would love to bring-in your changes to make the vuplus plugin run under jellyfin 10.0.8 but unfortunately I am inexperienced in doing so...

I see that when I install the current version 4.0.0.0 using the manifest.json URL , it creates two files under my jellyfin 10.0.0.8 instance under /plugins:

MediaBrowser.Plugins.VuPlus.dll meta.json

I imagine that compiling your repo would create the same files ? And compiling would need to be done on same machine as running instance of jellyfin ? I am running jellyfin in docker on a synology DS920+ (geminilake intel gen.)... Not too sure how I would need start the compilation to be honest. Out of my depth....damn !

Actually, reddit is your friend: https://www.reddit.com/r/jellyfin/comments/dgdchs/running_jellyfin_with_docker_how_to_compile/ And it looks like I might want to install code-server, possibly with some guidance from: https://mariushosting.com/how-to-install-code-server-on-your-synology-nas/

I got as far as running VS code-server on Synology NAS in docker, and cloned your repo into VScode workspace....now just need to figure out how I ask VScode to compile the .sln ? into a dll ?

I trust that your changes fixed whats was stopping it from running successfully and you have the plugin running just fine now under your jellyfin-10.0.8 install ?

neseih commented 2 years ago

So in short (I don‘t have acces to my computer)

There is another bug in Jellyfin since some time with Recordings. I created an issue with hints in the Jellyfin repo. That should be fixed soon. In the meantime, Live TV should work again 😀

IamMattM commented 2 years ago

@neseih : Thank you for your guidance. With your help I compiled the project on the "code-server" docker instance on same NAS as where jellyfin runs. 0 errors , 11 warnings - Very good

I got the new .dll (80.5KB approx) and did overwrite the current one : VuPlus plugin is now presenting itself as v4.1.0.0 and does not complain about the initial "bug" above ( invalid cullture etc....) - Brillant.

Now just need to figure out how to configure the plugin to fetch the relevant bouquet(s)/epg/picon....

I thought that the Vuplus plugin would appear under "Live TV / Tuner Device / Add tuner device" but that does not seem to be the case at the minute....will investigate more tomorrow.

It looks like I have the same problem as first post here (although relating to Emby-Vuplus plugin): https://emby.media/community/index.php?/topic/93550-vu-box-not-being-found-within-emby-live-tv/

knackebrot commented 2 years ago

The latest release now contains binaries for Jellyfin 10.8 and is referenced in the repository as well.

IamMattM commented 2 years ago

The latest release now contains binaries for Jellyfin 10.8 and is referenced in the repository as well.

@knackebrot

Thank you for bringing in the changes.

I have an issue when pointing the Jellyfin 10.8 plugin repositories to your manifest: https://raw.githubusercontent.com/knackebrot/jellyfin-repo/master/manifest.json

For a reason or another, only the first version 4.0.0.0 is listed in the menu and the version 5.0.0.0 that I can see listed in the manifest.json is not being offered in the plugin repository menu....?

Can the manifest.json perhaps reverse the order so that 5.0.0.0 is the first one in the list...

Not sure why the jellyfin 10.8.0 plugin repository meny does not list both ...I tried to resfresh the plugins under the "scheduled tasks" as well as "clear the cache" under same section for it always seem to only offer me thee 4.0.0.0 version...

I have downloaded the .zip that the manifest points to so can install the latest manually but thought that it was odd that I can't have the new one listed...

knackebrot commented 2 years ago

Strange, it appeared to me automatically. image

IamMattM commented 2 years ago

Fair enough...Must be something my end.Thanks for double-checking.