Git Product home page Git Product logo

themerr-jellyfin's Introduction

Overview

LizardByte has the full documentation hosted on Read the Docs.

About

Themerr-jellyfin is a plugin for Jellyfin that adds theme songs to movies using ThemerrDB.

Integrations

GitHub Workflow Status (CI)

Read the Docs

Codecov

Downloads

GitHub Releases

Docker

themerr-jellyfin's People

Contributors

1xff avatar dependabot[bot] avatar lizardbyte-bot avatar reenignearcher avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

themerr-jellyfin's Issues

Error processing request. URL "POST"

Describe the Bug

I'm receiving the following error when trying to run Themerr-jellyfin.

Jellyfin Version : 10.8.8

Themerr-Jellyfin Version : 0.0.1.0

Operating System: Linux

Architecture: X64`

[2023-02-16 09:56:01.828 +00:00] [ERR] [123] Jellyfin.Server.Middleware.ExceptionMiddleware: Error processing request. URL "POST" "/Themerr/DownloadMovies".
Newtonsoft.Json.JsonReaderException: Additional text encountered after finished reading JSON content: }. Path '', line 1, position 120.
   at Newtonsoft.Json.JsonTextReader.Read()
   at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent)
   at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType)
   at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings)
   at Jellyfin.Plugin.Themerr.ThemerrManager.DownloadAllThemerr()
   at Jellyfin.Plugin.Themerr.Api.ThemerrController.DownloadMovieThemerrRequest()
   at lambda_method1017(Closure , Object )
   at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
   at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
   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, IServerConfigurationManager serverConfigurationManager)
   at Jellyfin.Server.Middleware.ExceptionMiddleware.Invoke(HttpContext context)

Is there anyway to fix this?

Expected Behavior

No response

Additional Context

No response

Not working in my Jellyfin install

Describe the Bug

The plugin can`t find theme songs. My jellyfin is pt-BR (the translations are missing).
2024-05-10-16-17-tv darklyn org

Expected Behavior

No response

Additional Context

Logs:

[15:38:06] [INF] [43] Jellyfin.Plugin.Themerr.ScheduledTasks.ThemerrTasks: Starting plugin, Downloading supported Theme Songs...
[15:38:07] [WRN] [43] Jellyfin.Plugin.Themerr.ThemerrManager: Missing from ThemerrDB: O Despertar de uma Paixão, contribute:
  https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20O%20Despertar%20de%20uma%20Paixão%20(2006)&database_url=https://www.themoviedb.org/movie/14202
System.AggregateException: One or more errors occurred. (Response status code does not indicate success: 404 (Not Found).)
 ---> System.Net.Http.HttpRequestException: Response status code does not indicate success: 404 (Not Found).
   at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
   at System.Net.Http.HttpClient.GetStringAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at Jellyfin.Plugin.Themerr.ThemerrManager.GetYoutubeThemeUrl(String themerrDbUrl, BaseItem item)
[15:38:37] [WRN] [43] Jellyfin.Plugin.Themerr.ThemerrManager: Missing from ThemerrDB: Sou Louco Por Você, contribute:
  https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20Sou%20Louco%20Por%20Você%20(2012)&database_url=https://www.themoviedb.org/movie/109689
System.AggregateException: One or more errors occurred. (Response status code does not indicate success: 404 (Not Found).)
 ---> System.Net.Http.HttpRequestException: Response status code does not indicate success: 404 (Not Found).
   at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
   at System.Net.Http.HttpClient.GetStringAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at Jellyfin.Plugin.Themerr.ThemerrManager.GetYoutubeThemeUrl(String themerrDbUrl, BaseItem item)
[15:39:08] [WRN] [43] Jellyfin.Plugin.Themerr.ThemerrManager: Missing from ThemerrDB: A Árvore do Amor, contribute:
  https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20A%20Árvore%20do%20Amor%20(2010)&database_url=https://www.themoviedb.org/movie/50542
System.AggregateException: One or more errors occurred. (Response status code does not indicate success: 404 (Not Found).)
 ---> System.Net.Http.HttpRequestException: Response status code does not indicate success: 404 (Not Found).
   at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
   at System.Net.Http.HttpClient.GetStringAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at Jellyfin.Plugin.Themerr.ThemerrManager.GetYoutubeThemeUrl(String themerrDbUrl, BaseItem item)
[15:39:38] [WRN] [43] Jellyfin.Plugin.Themerr.ThemerrManager: Missing from ThemerrDB: A Pior Pessoa do Mundo, contribute:
  https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20A%20Pior%20Pessoa%20do%20Mundo%20(2021)&database_url=https://www.themoviedb.org/movie/660120
System.AggregateException: One or more errors occurred. (Response status code does not indicate success: 404 (Not Found).)
 ---> System.Net.Http.HttpRequestException: Response status code does not indicate success: 404 (Not Found).
   at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
   at System.Net.Http.HttpClient.GetStringAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at Jellyfin.Plugin.Themerr.ThemerrManager.GetYoutubeThemeUrl(String themerrDbUrl, BaseItem item)
[15:41:09] [WRN] [43] Jellyfin.Plugin.Themerr.ThemerrManager: Missing from ThemerrDB: Mommy, contribute:
  https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20Mommy%20(2014)&database_url=https://www.themoviedb.org/movie/265177
System.AggregateException: One or more errors occurred. (Response status code does not indicate success: 404 (Not Found).)
 ---> System.Net.Http.HttpRequestException: Response status code does not indicate success: 404 (Not Found).
   at System.Net.Http.HttpResponseMessage.EnsureSuccessStatusCode()
   at System.Net.Http.HttpClient.GetStringAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
   at Jellyfin.Plugin.Themerr.ThemerrManager.GetYoutubeThemeUrl(String themerrDbUrl, BaseItem item)```



More logs:

   
```[16:15:45] [INF] [19] Jellyfin.Plugin.Themerr.Api.ThemerrController: Server culture: pt-BR
[16:15:45] [WRN] [19] Jellyfin.Plugin.Themerr.Api.ThemerrController: Locale resource does not exist: Jellyfin.Plugin.Themerr.Locale.pt_BR.json
[16:15:45] [WRN] [19] Jellyfin.Plugin.Themerr.Api.ThemerrController: Locale resource does not exist: Jellyfin.Plugin.Themerr.Locale.pt.json
[16:15:46] [INF] [40] Jellyfin.Plugin.Themerr.Api.ThemerrController: Progress Items: {"items":[{"name":"A Árvore do Amor","id":"075c1889-db4e-f8e7-daba-377a381c3e6b","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20A%20Árvore%20do%20Amor%20(2010)&database_url=https://www.themoviedb.org/movie/50542","theme_provider":null,"type":"Movie","year":2010},{"name":"A Baleia","id":"80161451-0d55-dd60-1b0c-2ffca36aef24","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20A%20Baleia%20(2022)&database_url=https://www.themoviedb.org/movie/785084","theme_provider":null,"type":"Movie","year":2022},{"name":"A Pior Pessoa do Mundo","id":"0e097417-3246-9685-812d-604a085f5123","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20A%20Pior%20Pessoa%20do%20Mundo%20(2021)&database_url=https://www.themoviedb.org/movie/660120","theme_provider":null,"type":"Movie","year":2021},{"name":"A Sociedade da Neve","id":"c388bdb7-976e-c3ba-519b-347329e9b2fa","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20A%20Sociedade%20da%20Neve%20(2023)&database_url=https://www.themoviedb.org/movie/906126","theme_provider":null,"type":"Movie","year":2023},{"name":"Ahsoka","id":"50a5cd45-4f13-c970-aa4b-fedea3638f8d","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[TV SHOW]:%20Ahsoka%20(2023)&database_url=https://www.themoviedb.org/tv/114461","theme_provider":null,"type":"Series","year":2023},{"name":"Amnésia","id":"94ea2869-9297-6413-812a-327fed1802da","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20Amnésia%20(2000)&database_url=https://www.themoviedb.org/movie/77","theme_provider":null,"type":"Movie","year":2000},{"name":"Andrei Rublev","id":"c38e8c59-6cac-e38d-a8c0-12d36795f839","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20Andrei%20Rublev%20(1966)&database_url=https://www.themoviedb.org/movie/895","theme_provider":null,"type":"Movie","year":1966},{"name":"Barbie","id":"05879b5d-ac54-996b-41c5-798a7ff88baa","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20Barbie%20(2023)&database_url=https://www.themoviedb.org/movie/346698","theme_provider":null,"type":"Movie","year":2023},{"name":"Ben-Hur","id":"c1dc96f7-4272-20b5-0d51-37646abdc37a","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20Ben-Hur%20(1959)&database_url=https://www.themoviedb.org/movie/665","theme_provider":null,"type":"Movie","year":1959},{"name":"Blade II: O Caçador de Vampiros","id":"22ed2f8d-29ae-9480-9687-eb797a562820","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20Blade%20II:%20O%20Caçador%20de%20Vampiros%20(2002)&database_url=https://www.themoviedb.org/movie/36586","theme_provider":null,"type":"Movie","year":2002},{"name":"Bob Marley: One Love","id":"c722cd5e-7fbe-d4a3-f0e8-01b6d37c5f00","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20Bob%20Marley:%20One%20Love%20(2024)&database_url=https://www.themoviedb.org/movie/802219","theme_provider":null,"type":"Movie","year":2024},{"name":"Cartas de Iwo Jima","id":"2b075921-c16d-7d74-5f9c-aaa32899808d","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20Cartas%20de%20Iwo%20Jima%20(2006)&database_url=https://www.themoviedb.org/movie/1251","theme_provider":null,"type":"Movie","year":2006},{"name":"Cidadão Kane","id":"52393ac3-4901-6bc0-404f-54a9fa1990c3","issue_url":"https://github.com/LizardByte/ThemerrDB/issues/new?assignees=&labels=request-theme&template=theme.yml&title=[MOVIE]:%20Cidadão%20Kane%20(1941)&database_url=https://www.themoviedb.org/movie/15","theme_provider":null,"type":"Movie","year":1941}[...]```

Not loading any theme songs

Describe the Bug

I have Themer and TMDb installed, and hit download theme songs, but nothing happens and it never plays any when browsing movies.

Any suggestions? this plugin seems awesome if I could only get it working, thanks!

Expected Behavior

I am hoping to get it to play theme songs

Additional Context

No response

Volume too high on movie page

Describe the Bug

Theme starts at the maximum volume when opening a movie/series page without any option to set volume.

Expected Behavior

Option to set volume in settings

Additional Context

No response

All downloaded mp3 get corrupted

Describe the Bug

Plugin works fine, creates Themerr.json and downloads theme.mp3, however all mp3 get corrupted.

Expected Behavior

No response

Additional Context

Running latest linuxserver jellyfin image and nightly Themerr-jellyfin docker mod.
LOGS:

[2023-09-15 10:51:04.807 +01:00] [INF] [132] Jellyfin.Api.Controllers.UniversalAudioController: GetPostedPlaybackInfo profile: DeviceProfile { Name: null, Id: null, Identification: null, FriendlyName: null, Manufacturer: null, ManufacturerUrl: null, ModelName: null, ModelDescription: null, ModelNumber: null, ModelUrl: null, SerialNumber: null, EnableAlbumArtInDidl: False, EnableSingleAlbumArtLimit: False, EnableSingleSubtitleLimit: False, SupportedMediaTypes: "Audio,Photo,Video", UserId: null, AlbumArtPn: null, MaxAlbumArtWidth: null, MaxAlbumArtHeight: null, MaxIconWidth: null, MaxIconHeight: null, MaxStreamingBitrate: 8000000, MaxStaticBitrate: 8000000, MusicStreamingTranscodingBitrate: 128000, MaxStaticMusicBitrate: 8000000, SonyAggregationFlags: null, ProtocolInfo: null, TimelineOffsetSeconds: 0, RequiresPlainVideoItems: False, RequiresPlainFolders: False, EnableMSMediaReceiverRegistrar: False, IgnoreTranscodeByteRangeRequests: False, XmlRootAttributes: [], DirectPlayProfiles: [DirectPlayProfile { Container: "mp3", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "aac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4a", AudioCodec: "aac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4b", AudioCodec: "aac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "flac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "alac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4a", AudioCodec: "alac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4b", AudioCodec: "alac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "webma", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "webm", AudioCodec: "webma", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "wav", AudioCodec: null, VideoCodec: null, Type: Audio }], TranscodingProfiles: [TranscodingProfile { Container: "aac", Type: Audio, VideoCodec: "", AudioCodec: "aac", Protocol: "hls", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: null, MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False, Conditions: [] }], ContainerProfiles: [], CodecProfiles: [], ResponseProfiles: [], SubtitleProfiles: [] }
[2023-09-15 10:51:04.808 +01:00] [INF] [132] Jellyfin.Api.Helpers.MediaInfoHelper: User policy for "tiagalho". EnableAudioPlaybackTranscoding: True
[2023-09-15 10:51:04.850 +01:00] [INF] [10] Jellyfin.Api.Controllers.UniversalAudioController: GetPostedPlaybackInfo profile: DeviceProfile { Name: null, Id: null, Identification: null, FriendlyName: null, Manufacturer: null, ManufacturerUrl: null, ModelName: null, ModelDescription: null, ModelNumber: null, ModelUrl: null, SerialNumber: null, EnableAlbumArtInDidl: False, EnableSingleAlbumArtLimit: False, EnableSingleSubtitleLimit: False, SupportedMediaTypes: "Audio,Photo,Video", UserId: null, AlbumArtPn: null, MaxAlbumArtWidth: null, MaxAlbumArtHeight: null, MaxIconWidth: null, MaxIconHeight: null, MaxStreamingBitrate: 8000000, MaxStaticBitrate: 8000000, MusicStreamingTranscodingBitrate: 128000, MaxStaticMusicBitrate: 8000000, SonyAggregationFlags: null, ProtocolInfo: null, TimelineOffsetSeconds: 0, RequiresPlainVideoItems: False, RequiresPlainFolders: False, EnableMSMediaReceiverRegistrar: False, IgnoreTranscodeByteRangeRequests: False, XmlRootAttributes: [], DirectPlayProfiles: [DirectPlayProfile { Container: "mp3", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "aac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4a", AudioCodec: "aac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4b", AudioCodec: "aac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "flac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "alac", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4a", AudioCodec: "alac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "m4b", AudioCodec: "alac", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "webma", AudioCodec: null, VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "webm", AudioCodec: "webma", VideoCodec: null, Type: Audio }, DirectPlayProfile { Container: "wav", AudioCodec: null, VideoCodec: null, Type: Audio }], TranscodingProfiles: [TranscodingProfile { Container: "aac", Type: Audio, VideoCodec: "", AudioCodec: "aac", Protocol: "hls", EstimateContentLength: False, EnableMpegtsM2TsMode: False, TranscodeSeekInfo: Auto, CopyTimestamps: False, Context: Streaming, EnableSubtitlesInManifest: False, MaxAudioChannels: null, MinSegments: 0, SegmentLength: 0, BreakOnNonKeyFrames: False, Conditions: [] }], ContainerProfiles: [], CodecProfiles: [], ResponseProfiles: [], SubtitleProfiles: [] }
[2023-09-15 10:51:04.852 +01:00] [INF] [10] Jellyfin.Api.Helpers.MediaInfoHelper: User policy for "tiagalho". EnableAudioPlaybackTranscoding: True
[2023-09-15 10:51:05.112 +01:00] [INF] [10] Emby.Server.Implementations.Session.SessionManager: Playback stopped reported by app "Jellyfin Web" "10.8.10" playing "theme". Stopped at "1097" ms

Dockermod causes jellyfin to crash due to config files ownership

Describe the Bug

TLDR: The DOCKER_MOD installs the config dir and files with root ownership instead of the user that jellyfin runs as, causing jellyfin to crash on startup.

I have jellyfin running in a docker container on linux which has been working well for some time. I'm using the linuxserver/jellyfin image, along with their recommended PUID and PGUID options set to 1000, and UMASK_SET of 022.

Following the install docs, I added DOCKER_MODS=lizardbyte/themerr-jellyfin:latest to the environment variables in my docker-compose.yaml and issued a docker-compose up -d.

Examining the jellyfin logs reveals that the server repeatedly crashes due to an exception in the Themerr plugin with System.UnauthorizedAccessException: Access to the path '/config/data/plugins/Themerr/meta.json' is denied.

I noticed that the directory /config/data/plugins/Themerr and its files are all owned by root instead of the UID configured for the container, hence why the plugin is unable to access them once it starts up in jellyfin.

I manually chmod'd the files and everything fired up OK.

From looking at the linuxserver s6 init scripts I am guessing the fix would be to place an init script so that s6 changes ownership to the abc user on startup. Their own docker-mods docs don't seem to cover this situation, but maybe some other docker-mods out there have a simple solution.

It's likely this only happens if the mod is installed after jellyfin has already been initialised previously.

Expected Behavior

The jellyfin server should start and begin answering network requests instead of crashing.

Additional Context

Complete cycle from the logfile - this pattern repeats as docker restarts the container:

jellyfin_1   | [22:59:28] [INF] [1] Main: Jellyfin version: 10.8.10
jellyfin_1   | [22:59:28] [INF] [1] Main: Environment Variables: ["[JELLYFIN_WEB_DIR, /usr/share/jellyfin/web]", "[JELLYFIN_CACHE_DIR, /config/cache]", "[JELLYFIN_PublishedServerUrl, https://XXXXXXXXXXX/]", "[JELLYFIN_CONFIG_DIR, /config]", "[JELLYFIN_LOG_DIR, /config/log]", "[JELLYFIN_DATA_DIR, /config/data]"]
jellyfin_1   | [22:59:28] [INF] [1] Main: Arguments: ["/usr/lib/jellyfin/bin/jellyfin.dll", "--ffmpeg=/usr/lib/jellyfin-ffmpeg/ffmpeg"]
jellyfin_1   | [22:59:28] [INF] [1] Main: Operating system: Linux
jellyfin_1   | [22:59:28] [INF] [1] Main: Architecture: X64
jellyfin_1   | [22:59:28] [INF] [1] Main: 64-Bit Process: True
jellyfin_1   | [22:59:28] [INF] [1] Main: User Interactive: True
jellyfin_1   | [22:59:28] [INF] [1] Main: Processor count: 32
jellyfin_1   | [22:59:28] [INF] [1] Main: Program data path: /config/data
jellyfin_1   | [22:59:28] [INF] [1] Main: Web resources path: /usr/share/jellyfin/web
jellyfin_1   | [22:59:28] [INF] [1] Main: Application directory: /usr/lib/jellyfin/bin/
jellyfin_1   | [22:59:29] [INF] [1] Emby.Server.Implementations.AppBase.BaseConfigurationManager: Setting cache path: /config/cache
jellyfin_1   | [22:59:29] [INF] [1] Emby.Server.Implementations.ApplicationHost: Loading assemblies
jellyfin_1   | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly Jellyfin.Plugin.Bookshelf, Version=9.0.0.0, Culture=neutral, PublicKeyToken=null from /config/data/plugins/Bookshelf_9.0.0.0/Jellyfin.Plugin.Bookshelf.dll
jellyfin_1   | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly Jellyfin.Plugin.CoverArtArchive, Version=7.0.0.0, Culture=neutral, PublicKeyToken=null from /config/data/plugins/Cover Art Archive_7.0.0.0/Jellyfin.Plugin.CoverArtArchive.dll
jellyfin_1   | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly MetaBrainz.Common.Json, Version=5.0.0.0, Culture=neutral, PublicKeyToken=be12cbb629c03021 from /config/data/plugins/Cover Art Archive_7.0.0.0/MetaBrainz.Common.Json.dll
jellyfin_1   | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly MetaBrainz.MusicBrainz.CoverArt, Version=4.0.0.0, Culture=neutral, PublicKeyToken=be12cbb629c03021 from /config/data/plugins/Cover Art Archive_7.0.0.0/MetaBrainz.MusicBrainz.CoverArt.dll
jellyfin_1   | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly Jellyfin.Plugin.Fanart, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null from /config/data/plugins/Fanart_10.0.0.0/Jellyfin.Plugin.Fanart.dll
jellyfin_1   | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly Jellyfin.Plugin.Opds, Version=4.0.0.0, Culture=neutral, PublicKeyToken=null from /config/data/plugins/OPDS_4.0.0.0/Jellyfin.Plugin.Opds.dll
jellyfin_1   | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly Jellyfin.Plugin.OpenSubtitles, Version=19.0.0.0, Culture=neutral, PublicKeyToken=null from /config/data/plugins/Open Subtitles_19.0.0.0/Jellyfin.Plugin.OpenSubtitles.dll
jellyfin_1   | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly Jellyfin.Plugin.Themerr, Version=0.0.1.0, Culture=neutral, PublicKeyToken=null from /config/data/plugins/Themerr/Jellyfin.Plugin.Themerr.dll
jellyfin_1   | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly YoutubeExplode, Version=6.2.5.0, Culture=neutral, PublicKeyToken=null from /config/data/plugins/Themerr/YoutubeExplode.dll
jellyfin_1   | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly Jellyfin.Plugin.Tvdb, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null from /config/data/plugins/TheTVDB_10.0.0.0/Jellyfin.Plugin.Tvdb.dll
jellyfin_1   | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly TvDbSharper, Version=3.2.2.0, Culture=neutral, PublicKeyToken=null from /config/data/plugins/TheTVDB_10.0.0.0/TvDbSharper.dll
jellyfin_1   | [22:59:29] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded assembly Jellyfin.Plugin.TMDbBoxSets, Version=10.0.0.0, Culture=neutral, PublicKeyToken=null from /config/data/plugins/TMDb Box Sets_10.0.0.0/Jellyfin.Plugin.TMDbBoxSets.dll
jellyfin_1   | [22:59:29] [INF] [1] Jellyfin.Networking.Manager.NetworkManager: Defined LAN addresses : [192.168.0.0/16,10.0.0.0/8]
jellyfin_1   | [22:59:29] [INF] [1] Jellyfin.Networking.Manager.NetworkManager: Defined LAN exclusions : []
jellyfin_1   | [22:59:29] [INF] [1] Jellyfin.Networking.Manager.NetworkManager: Using LAN addresses: [192.168.0.0/16,10.0.0.0/8]
jellyfin_1   | [22:59:29] [INF] [1] Jellyfin.Networking.Manager.NetworkManager: Using bind addresses: []
jellyfin_1   | [22:59:29] [INF] [1] Jellyfin.Networking.Manager.NetworkManager: Using bind exclusions: []
jellyfin_1   | [22:59:40] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded plugin: Bookshelf 9.0.0.0
jellyfin_1   | [22:59:40] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded plugin: Cover Art Archive 7.0.0.0
jellyfin_1   | [22:59:40] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded plugin: Fanart 10.0.0.0
jellyfin_1   | [22:59:40] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded plugin: OPDS Feed 4.0.0.0
jellyfin_1   | [22:59:40] [INF] [1] Emby.Server.Implementations.Plugins.PluginManager: Loaded plugin: Open Subtitles 19.0.0.0
jellyfin_1   | [22:59:40] [ERR] [1] Emby.Server.Implementations.Plugins.PluginManager: Error creating Jellyfin.Plugin.Themerr.Plugin
jellyfin_1   | System.UnauthorizedAccessException: Access to the path '/config/data/plugins/Themerr/meta.json' is denied.
jellyfin_1   |  ---> System.IO.IOException: Permission denied
jellyfin_1   |    --- End of inner exception stack trace ---
jellyfin_1   |    at Interop.ThrowExceptionForIoErrno(ErrorInfo errorInfo, String path, Boolean isDirectory, Func`2 errorRewriter)
jellyfin_1   |    at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String path, OpenFlags flags, Int32 mode)
jellyfin_1   |    at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
jellyfin_1   |    at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
jellyfin_1   |    at System.IO.Strategies.FileStreamHelpers.ChooseStrategy(FileStream fileStream, String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, Int64 preallocationSize)
jellyfin_1   |    at System.IO.StreamWriter.ValidateArgsAndOpenPath(String path, Boolean append, Encoding encoding, Int32 bufferSize)
jellyfin_1   |    at System.IO.File.WriteAllText(String path, String contents)
jellyfin_1   |    at Emby.Server.Implementations.Plugins.PluginManager.SaveManifest(PluginManifest manifest, String path)
jellyfin_1   |    at Emby.Server.Implementations.Plugins.PluginManager.CreatePluginInstance(Type type)
jellyfin_1   | [22:59:40] [FTL] [1] Main: Error while starting server.
jellyfin_1   | System.UnauthorizedAccessException: Access to the path '/config/data/plugins/Themerr/meta.json' is denied.
jellyfin_1   |  ---> System.IO.IOException: Permission denied
jellyfin_1   |    --- End of inner exception stack trace ---
jellyfin_1   |    at Interop.ThrowExceptionForIoErrno(ErrorInfo errorInfo, String path, Boolean isDirectory, Func`2 errorRewriter)
jellyfin_1   |    at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String path, OpenFlags flags, Int32 mode)
jellyfin_1   |    at Microsoft.Win32.SafeHandles.SafeFileHandle.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
jellyfin_1   |    at System.IO.Strategies.OSFileStreamStrategy..ctor(String path, FileMode mode, FileAccess access, FileShare share, FileOptions options, Int64 preallocationSize)
jellyfin_1   |    at System.IO.Strategies.FileStreamHelpers.ChooseStrategy(FileStream fileStream, String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, Int64 preallocationSize)
jellyfin_1   |    at System.IO.StreamWriter.ValidateArgsAndOpenPath(String path, Boolean append, Encoding encoding, Int32 bufferSize)
jellyfin_1   |    at System.IO.File.WriteAllText(String path, String contents)
jellyfin_1   |    at Emby.Server.Implementations.Plugins.PluginManager.SaveManifest(PluginManifest manifest, String path)
jellyfin_1   |    at Emby.Server.Implementations.Plugins.PluginManager.ChangePluginState(LocalPlugin plugin, PluginStatus state)
jellyfin_1   |    at Emby.Server.Implementations.Plugins.PluginManager.CreatePluginInstance(Type type)
jellyfin_1   |    at Emby.Server.Implementations.ApplicationHost.<>c__DisplayClass99_0`1.<GetExports>b__0(Type i)
jellyfin_1   |    at System.Linq.Enumerable.SelectEnumerableIterator`2.MoveNext()
jellyfin_1   |    at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
jellyfin_1   |    at System.Linq.Enumerable.CastIterator[TResult](IEnumerable source)+MoveNext()
jellyfin_1   |    at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
jellyfin_1   |    at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
jellyfin_1   |    at Emby.Server.Implementations.ApplicationHost.GetExports[T](CreationDelegateFactory defaultFunc, Boolean manageLifetime)
jellyfin_1   |    at Emby.Server.Implementations.Plugins.PluginManager.CreatePlugins()
jellyfin_1   |    at Emby.Server.Implementations.ApplicationHost.FindParts()
jellyfin_1   |    at Emby.Server.Implementations.ApplicationHost.InitializeServices()
jellyfin_1   |    at Jellyfin.Server.Program.StartApp(StartupOptions options)
jellyfin_1   | [22:59:40] [INF] [1] Main: Running query planner optimizations in the database... This might take a while
jellyfin_1   | [22:59:40] [INF] [1] Emby.Server.Implementations.ApplicationHost: Disposing CoreAppHost
jellyfin_1   | [22:59:40] [INF] [2] Main: Received a SIGTERM signal, shutting down

Semicolons in titles truncates them

Describe the Bug

If a show or movie contains a semicolon, for example "Steins;Gate", then trying to add an theme request will truncate the issues title resulting in "[TV SHOW]: Steins"
I've created a patch that fixes this that I'll PR shortly.

Expected Behavior

The full issue title should be preserved, for the given example it should be "[TV SHOW]: Steins;Gate (2011)" and not "[TV SHOW]: Steins"

Additional Context

This can be seen in the edited title of this theme request:
LizardByte/ThemerrDB#3849

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.