From 71194071412ab4576ff7282474149a8e4ae3de3c Mon Sep 17 00:00:00 2001 From: tidusjar Date: Sat, 24 Jul 2021 22:58:35 +0100 Subject: [PATCH] Fixed the jellyfin load libraries issue #4266 --- src/Ombi.Api.Jellyfin/IJellyfinApi.cs | 5 ++- src/Ombi.Api.Jellyfin/JellyfinApi.cs | 7 ++- .../Models/LibraryVirtualFolders.cs | 26 +++++++++++ .../Jobs/Jellyfin/JellyfinContentSync.cs | 8 ++++ .../V1/External/JellyfinController.cs | 43 ++++++++++++++++++- 5 files changed, 81 insertions(+), 8 deletions(-) create mode 100644 src/Ombi.Api.Jellyfin/Models/LibraryVirtualFolders.cs diff --git a/src/Ombi.Api.Jellyfin/IJellyfinApi.cs b/src/Ombi.Api.Jellyfin/IJellyfinApi.cs index 5dcf5741f..f84396b52 100644 --- a/src/Ombi.Api.Jellyfin/IJellyfinApi.cs +++ b/src/Ombi.Api.Jellyfin/IJellyfinApi.cs @@ -1,4 +1,5 @@ -using System.Threading.Tasks; +using System.Collections.Generic; +using System.Threading.Tasks; using Ombi.Api.Jellyfin.Models; namespace Ombi.Api.Jellyfin @@ -6,6 +7,6 @@ namespace Ombi.Api.Jellyfin public interface IJellyfinApi : IBaseJellyfinApi { Task LoginConnectUser(string username, string password); - Task> GetLibraries(string apiKey, string baseUrl); + Task> GetLibraries(string apiKey, string baseUrl); } } \ No newline at end of file diff --git a/src/Ombi.Api.Jellyfin/JellyfinApi.cs b/src/Ombi.Api.Jellyfin/JellyfinApi.cs index c16620710..2fafbfd86 100644 --- a/src/Ombi.Api.Jellyfin/JellyfinApi.cs +++ b/src/Ombi.Api.Jellyfin/JellyfinApi.cs @@ -87,13 +87,12 @@ namespace Ombi.Api.Jellyfin return await Api.Request>(request); } - public async Task> GetLibraries(string apiKey, string baseUrl) + public async Task> GetLibraries(string apiKey, string baseUrl) { - var request = new Request("library/mediafolders", baseUrl, HttpMethod.Get); + var request = new Request("library/virtualfolders", baseUrl, HttpMethod.Get); AddHeaders(request, apiKey); - var response = await Api.Request>(request); - response.Items = response.Items.Where(x => !x.CollectionType.Equals("playlists", StringComparison.InvariantCultureIgnoreCase)).ToList(); + var response = await Api.Request>(request); return response; } diff --git a/src/Ombi.Api.Jellyfin/Models/LibraryVirtualFolders.cs b/src/Ombi.Api.Jellyfin/Models/LibraryVirtualFolders.cs new file mode 100644 index 000000000..fbe56a398 --- /dev/null +++ b/src/Ombi.Api.Jellyfin/Models/LibraryVirtualFolders.cs @@ -0,0 +1,26 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Ombi.Api.Jellyfin.Models +{ + public class LibraryVirtualFolders + { + public string Name { get; set; } + public Libraryoptions LibraryOptions { get; set; } + public string ItemId { get; set; } + } + + public class Libraryoptions + { + public List TypeOptions { get; set; } = new List(); + } + + public class Typeoption + { + public string Type { get; set; } + } + +} diff --git a/src/Ombi.Schedule/Jobs/Jellyfin/JellyfinContentSync.cs b/src/Ombi.Schedule/Jobs/Jellyfin/JellyfinContentSync.cs index c806a5e95..2a950fcf4 100644 --- a/src/Ombi.Schedule/Jobs/Jellyfin/JellyfinContentSync.cs +++ b/src/Ombi.Schedule/Jobs/Jellyfin/JellyfinContentSync.cs @@ -96,6 +96,14 @@ namespace Ombi.Schedule.Jobs.Jellyfin _logger.LogInformation($"Scanning Lib '{tvParentIdFilter.Title}'"); await ProcessTv(server, tvParentIdFilter.Key); } + + var mixedLibs = server.JellyfinSelectedLibraries.Where(x => x.Enabled && x.CollectionType == "mixed"); + foreach (var m in mixedLibs) + { + _logger.LogInformation($"Scanning Lib '{m.Title}'"); + await ProcessTv(server, m.Key); + await ProcessMovies(server, m.Key); + } } else { diff --git a/src/Ombi/Controllers/V1/External/JellyfinController.cs b/src/Ombi/Controllers/V1/External/JellyfinController.cs index 5e8b87414..275ef30f6 100644 --- a/src/Ombi/Controllers/V1/External/JellyfinController.cs +++ b/src/Ombi/Controllers/V1/External/JellyfinController.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; @@ -71,7 +72,45 @@ namespace Ombi.Controllers.V1.External { var client = await JellyfinApi.CreateClient(); var result = await client.GetLibraries(server.ApiKey, server.FullUri); - return result; + var mediaFolders = new JellyfinItemContainer + { + TotalRecordCount = result.Count, + Items = new List() + }; + + foreach (var folder in result) + { + var toAdd = new MediaFolders + { + Name = folder.Name, + Id = folder.ItemId, + ServerId = server.ServerId + }; + + var types = folder?.LibraryOptions?.TypeOptions?.Select(x => x.Type).ToList(); + + if (!types.Any()) + { + continue; + } + + if (types.Where(x => x.Equals("Movie", System.StringComparison.InvariantCultureIgnoreCase) + || x.Equals("Episode", System.StringComparison.InvariantCultureIgnoreCase)).Count() >= 2) + { + toAdd.CollectionType = "mixed"; + } + else if (types.Any(x => x.Equals("Movie", StringComparison.InvariantCultureIgnoreCase))) + { + toAdd.CollectionType = "movies"; + } + else if (types.Any(x => x.Equals("Episode", StringComparison.InvariantCultureIgnoreCase))) + { + toAdd.CollectionType = "tvshows"; + } + + mediaFolders.Items.Add(toAdd); + } + return mediaFolders; } ///