using JellyGlass.Models; using JellyGlass.Models.JellyfinApi; namespace JellyGlass.Services; public class LibraryService : ILibraryService { private IClientService _clientService; public LibraryService(IClientService serverService) { _clientService = serverService; } public async Task GetLibraries() { var clients = await _clientService.GetJellyfinClients(); var libraries = new Dictionary(); foreach (var client in clients) { var clientLibraries = await client.GetInstanceLibraries(); foreach (var library in clientLibraries) { if (library.Name == "Collections" || library.Name == "Playlists") { continue; } if (!libraries.ContainsKey(library.Name)) { libraries.Add(library.Name, new Library() { Name = library.Name, ThumbnailUrl = $"{client.InstanceUrl}/Items/{library.Id}/Primary" }); } } } return libraries.Values.ToArray(); } public async Task GetLibrary(string libraryName, string serverId) { var client = await _clientService.GetClientForServerId(serverId); if (client == null) { throw new Exception($"Could not find client with ID of {serverId}"); } var libraries = await client.GetInstanceLibraries(); foreach (var library in libraries) { if (library.Name == libraryName) { return library; } } throw new Exception("Couldn't find library"); } public async Task GetItemsFromLibrary(string libraryName, string serverId) { var client = await _clientService.GetClientForServerId(serverId); var library = await GetLibrary(libraryName, serverId); var items = await client.GetItemChildren(library.Id); var dtos = new List(); foreach (var item in items) { dtos.Add(new ItemDTO(item, client.InstanceUrl)); } return dtos.ToArray(); } public async Task GetLibrariesFromServer(string serverId) { var client = await _clientService.GetClientForServerId(serverId); var libraries = new Dictionary(); var clientLibraries = await client.GetInstanceLibraries(); foreach (var library in clientLibraries) { if (library.Name == "Collections" || library.Name == "Playlists") { continue; } if (!libraries.ContainsKey(library.Name)) { libraries.Add(library.Name, new Library() { Name = library.Name, ThumbnailUrl = $"{client.InstanceUrl}/Items/{library.Id}/Primary" }); } } return libraries.Values.ToArray(); } // public async Task GetChildrenFromItems(ItemDTO[] items) // { // var children = new List(); // foreach (var item in items) // { // var client = _serverService.GetClientForServerId(item.ServerID); // var itemChildren = await client.GetItemChildren(item.ID); // foreach (var child in itemChildren.Items) // { // children.Add(new ItemDTO(child, client.InstanceUrl)); // } // } // return children.ToArray(); // } // public async Task GetItemsByName(string name, string itemType) // { // } // public async Task GetItemsByType(string itemType) // { // } }