From c5b0858d4a40f2bf2604be1aa84d91ade8bfeab0 Mon Sep 17 00:00:00 2001 From: Zoe Roux Date: Sat, 6 Jun 2020 17:53:08 +0200 Subject: [PATCH] Implemnting relational data loading inside the repositories --- Kyoo.Common/Controllers/ILibraryManager.cs | 10 ++ Kyoo.Common/Controllers/IRepository.cs | 7 ++ Kyoo/Controllers/LibraryManager.cs | 30 ++++++ .../Repositories/EpisodeRepository.cs | 19 +++- .../Repositories/SeasonRepository.cs | 10 ++ Kyoo/Tasks/ReScan.cs | 6 +- Kyoo/Views/API/CollectionAPI.cs | 5 +- Kyoo/Views/API/EpisodesAPI.cs | 9 +- Kyoo/Views/API/GenresAPI.cs | 5 +- Kyoo/Views/API/LibrariesAPI.cs | 14 +-- Kyoo/Views/API/PeopleAPI.cs | 5 +- Kyoo/Views/API/SearchAPI.cs | 17 ++-- Kyoo/Views/API/ShowsAPI.cs | 11 +-- Kyoo/Views/API/StudioAPI.cs | 5 +- Kyoo/Views/API/SubtitleAPI.cs | 94 ++++++++++--------- Kyoo/Views/API/ThumbnailAPI.cs | 17 ++-- Kyoo/Views/API/VideoAPI.cs | 16 ++-- Kyoo/Views/API/WatchAPI.cs | 11 ++- 18 files changed, 189 insertions(+), 102 deletions(-) diff --git a/Kyoo.Common/Controllers/ILibraryManager.cs b/Kyoo.Common/Controllers/ILibraryManager.cs index 6a3234f4..133fa7c5 100644 --- a/Kyoo.Common/Controllers/ILibraryManager.cs +++ b/Kyoo.Common/Controllers/ILibraryManager.cs @@ -13,11 +13,21 @@ namespace Kyoo.Controllers Task GetSeason(string showSlug, long seasonNumber); Task GetEpisode(string showSlug, long seasonNumber, long episodeNumber); Task GetMovieEpisode(string movieSlug); + Task GetTrack(long id); Task GetTrack(long episodeID, string language, bool isForced); Task GetGenre(string slug); Task GetStudio(string slug); Task GetPeople(string slug); + // Get by relations + Task> GetSeasons(long showID); + Task> GetSeasons(string showSlug); + + Task> GetEpisodes(long showID, long seasonNumber); + Task> GetEpisodes(string showSlug, long seasonNumber); + Task> GetEpisodes(long seasonID); + + // Get all Task> GetLibraries(); Task> GetCollections(); diff --git a/Kyoo.Common/Controllers/IRepository.cs b/Kyoo.Common/Controllers/IRepository.cs index 07c8043d..af30eb88 100644 --- a/Kyoo.Common/Controllers/IRepository.cs +++ b/Kyoo.Common/Controllers/IRepository.cs @@ -22,11 +22,18 @@ namespace Kyoo.Controllers public interface ISeasonRepository : IRepository { Task Get(string showSlug, long seasonNumber); + + Task> GetSeasons(long showID); + Task> GetSeasons(string showSlug); } public interface IEpisodeRepository : IRepository { Task Get(string showSlug, long seasonNumber, long episodeNumber); + + Task> GetEpisodes(long showID, long seasonNumber); + Task> GetEpisodes(string showSlug, long seasonNumber); + Task> GetEpisodes(long seasonID); } public interface ITrackRepository : IRepository diff --git a/Kyoo/Controllers/LibraryManager.cs b/Kyoo/Controllers/LibraryManager.cs index f351fd72..60ca9f79 100644 --- a/Kyoo/Controllers/LibraryManager.cs +++ b/Kyoo/Controllers/LibraryManager.cs @@ -61,6 +61,11 @@ namespace Kyoo.Controllers return _episodes.Get(movieSlug); } + public Task GetTrack(long id) + { + return _tracks.Get(id); + } + public Task GetTrack(long episodeID, string language, bool isForced) { return _tracks.Get(episodeID, language, isForced); @@ -131,6 +136,31 @@ namespace Kyoo.Controllers return _providers.GetAll(); } + public Task> GetSeasons(long showID) + { + return _seasons.GetSeasons(showID); + } + + public Task> GetSeasons(string showSlug) + { + return _seasons.GetSeasons(showSlug); + } + + public Task> GetEpisodes(long showID, long seasonNumber) + { + return _episodes.GetEpisodes(showID, seasonNumber); + } + + public Task> GetEpisodes(string showSlug, long seasonNumber) + { + return _episodes.GetEpisodes(showSlug, seasonNumber); + } + + public Task> GetEpisodes(long seasonID) + { + return _episodes.GetEpisodes(seasonID); + } + public Task> SearchLibraries(string searchQuery) { return _libraries.Search(searchQuery); diff --git a/Kyoo/Controllers/Repositories/EpisodeRepository.cs b/Kyoo/Controllers/Repositories/EpisodeRepository.cs index bc32b92c..71fcfebd 100644 --- a/Kyoo/Controllers/Repositories/EpisodeRepository.cs +++ b/Kyoo/Controllers/Repositories/EpisodeRepository.cs @@ -45,7 +45,7 @@ namespace Kyoo.Controllers && x.SeasonNumber == seasonNumber && x.EpisodeNumber == episodeNumber); } - + public async Task> Search(string query) { return await _database.Episodes @@ -119,5 +119,22 @@ namespace Kyoo.Controllers _database.Episodes.Remove(obj); await _database.SaveChangesAsync(); } + + public async Task> GetEpisodes(long showID, long seasonNumber) + { + return await _database.Episodes.Where(x => x.ShowID == showID + && x.SeasonNumber == seasonNumber).ToListAsync(); + } + + public async Task> GetEpisodes(string showSlug, long seasonNumber) + { + return await _database.Episodes.Where(x => x.Show.Slug == showSlug + && x.SeasonNumber == seasonNumber).ToListAsync(); + } + + public async Task> GetEpisodes(long seasonID) + { + return await _database.Episodes.Where(x => x.SeasonID == seasonID).ToListAsync(); + } } } \ No newline at end of file diff --git a/Kyoo/Controllers/Repositories/SeasonRepository.cs b/Kyoo/Controllers/Repositories/SeasonRepository.cs index 86bd5d6f..98d1fe26 100644 --- a/Kyoo/Controllers/Repositories/SeasonRepository.cs +++ b/Kyoo/Controllers/Repositories/SeasonRepository.cs @@ -115,5 +115,15 @@ namespace Kyoo.Controllers _database.Seasons.Remove(obj); await _database.SaveChangesAsync(); } + + public async Task> GetSeasons(long showID) + { + return await _database.Seasons.Where(x => x.ShowID == showID).ToListAsync(); + } + + public async Task> GetSeasons(string showSlug) + { + return await _database.Seasons.Where(x => x.Show.Slug == showSlug).ToListAsync(); + } } } \ No newline at end of file diff --git a/Kyoo/Tasks/ReScan.cs b/Kyoo/Tasks/ReScan.cs index 22c7aeb5..aca39b6d 100644 --- a/Kyoo/Tasks/ReScan.cs +++ b/Kyoo/Tasks/ReScan.cs @@ -62,7 +62,7 @@ namespace Kyoo.Tasks edited.ID = old.ID; edited.Slug = old.Slug; edited.Path = old.Path; - await libraryManager.Edit(edited, true); + await libraryManager.EditShow(edited, true); await _thumbnailsManager.Validate(edited, true); } if (old.Seasons != null) @@ -95,7 +95,7 @@ namespace Kyoo.Tasks Library library = _database.LibraryLinks.First(x => x.Show == show && x.Library != null).Library; Season edited = await _providerManager.GetSeason(show, old.SeasonNumber, library); edited.ID = old.ID; - await libraryManager.Edit(edited, true); + await libraryManager.EditSeason(edited, true); await _thumbnailsManager.Validate(edited, true); } if (old.Episodes != null) @@ -110,7 +110,7 @@ namespace Kyoo.Tasks Library library = _database.LibraryLinks.First(x => x.Show == show && x.Library != null).Library; Episode edited = await _providerManager.GetEpisode(show, old.Path, old.SeasonNumber, old.EpisodeNumber, old.AbsoluteNumber, library); edited.ID = old.ID; - await libraryManager.Edit(edited, true); + await libraryManager.EditEpisode(edited, true); await _thumbnailsManager.Validate(edited, true); } diff --git a/Kyoo/Views/API/CollectionAPI.cs b/Kyoo/Views/API/CollectionAPI.cs index f15ff86d..bd4658fa 100644 --- a/Kyoo/Views/API/CollectionAPI.cs +++ b/Kyoo/Views/API/CollectionAPI.cs @@ -2,6 +2,7 @@ using Kyoo.Models; using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; +using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; namespace Kyoo.Api @@ -19,9 +20,9 @@ namespace Kyoo.Api [HttpGet("{collectionSlug}")] [Authorize(Policy="Read")] - public ActionResult GetShows(string collectionSlug) + public async Task> GetShows(string collectionSlug) { - Collection collection = _libraryManager.GetCollection(collectionSlug); + Collection collection = await _libraryManager.GetCollection(collectionSlug); if (collection == null) return NotFound(); diff --git a/Kyoo/Views/API/EpisodesAPI.cs b/Kyoo/Views/API/EpisodesAPI.cs index d4fe7bd0..4e0dbb5b 100644 --- a/Kyoo/Views/API/EpisodesAPI.cs +++ b/Kyoo/Views/API/EpisodesAPI.cs @@ -2,6 +2,7 @@ using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Kyoo.Controllers; using Microsoft.AspNetCore.Authorization; @@ -20,9 +21,9 @@ namespace Kyoo.Api [HttpGet("{showSlug}/season/{seasonNumber}")] [Authorize(Policy="Read")] - public ActionResult> GetEpisodesForSeason(string showSlug, long seasonNumber) + public async Task>> GetEpisodesForSeason(string showSlug, long seasonNumber) { - IEnumerable episodes = _libraryManager.GetEpisodes(showSlug, seasonNumber); + IEnumerable episodes = await _libraryManager.GetEpisodes(showSlug, seasonNumber); if(episodes == null) return NotFound(); @@ -33,9 +34,9 @@ namespace Kyoo.Api [HttpGet("{showSlug}/season/{seasonNumber}/episode/{episodeNumber}")] [Authorize(Policy="Read")] [JsonDetailed] - public ActionResult GetEpisode(string showSlug, long seasonNumber, long episodeNumber) + public async Task> GetEpisode(string showSlug, long seasonNumber, long episodeNumber) { - Episode episode = _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber); + Episode episode = await _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber); if (episode == null) return NotFound(); diff --git a/Kyoo/Views/API/GenresAPI.cs b/Kyoo/Views/API/GenresAPI.cs index 21dc5643..98d27e7f 100644 --- a/Kyoo/Views/API/GenresAPI.cs +++ b/Kyoo/Views/API/GenresAPI.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Kyoo.Controllers; using Kyoo.Models; using Microsoft.AspNetCore.Mvc; @@ -18,9 +19,9 @@ namespace Kyoo.API _libraryManager = libraryManager; } - public ActionResult> Index() + public async Task>> Index() { - return _libraryManager.GetGenres().ToList(); + return (await _libraryManager.GetGenres()).ToList(); } } } \ No newline at end of file diff --git a/Kyoo/Views/API/LibrariesAPI.cs b/Kyoo/Views/API/LibrariesAPI.cs index 32aa73f6..73a5f907 100644 --- a/Kyoo/Views/API/LibrariesAPI.cs +++ b/Kyoo/Views/API/LibrariesAPI.cs @@ -3,6 +3,7 @@ using Kyoo.Models; using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Microsoft.AspNetCore.Authorization; namespace Kyoo.Api @@ -22,15 +23,15 @@ namespace Kyoo.Api } [HttpGet] - public IEnumerable GetLibraries() + public async Task> GetLibraries() { - return _libraryManager.GetLibraries(); + return await _libraryManager.GetLibraries(); } [Route("/api/library/create")] [HttpPost] [Authorize(Policy="Admin")] - public IActionResult CreateLibrary([FromBody] Library library) + public async Task CreateLibrary([FromBody] Library library) { if (!ModelState.IsValid) return BadRequest(library); @@ -42,17 +43,16 @@ namespace Kyoo.Api return BadRequest(new {error = "The library should have a least one path."}); if (_libraryManager.GetLibrary(library.Slug) != null) return BadRequest(new {error = "Duplicated library slug"}); - _libraryManager.Register(library); - _libraryManager.SaveChanges(); + await _libraryManager.RegisterLibrary(library); _taskManager.StartTask("scan", library.Slug); return Ok(); } [HttpGet("{librarySlug}")] [Authorize(Policy="Read")] - public ActionResult> GetShows(string librarySlug) + public async Task>> GetShows(string librarySlug) { - Library library = _libraryManager.GetLibrary(librarySlug); + Library library = await _libraryManager.GetLibrary(librarySlug); if (library == null) return NotFound(); diff --git a/Kyoo/Views/API/PeopleAPI.cs b/Kyoo/Views/API/PeopleAPI.cs index ca21eb0b..ad27d8b9 100644 --- a/Kyoo/Views/API/PeopleAPI.cs +++ b/Kyoo/Views/API/PeopleAPI.cs @@ -1,4 +1,5 @@ using System.Linq; +using System.Threading.Tasks; using Kyoo.Controllers; using Kyoo.Models; using Microsoft.AspNetCore.Authorization; @@ -19,9 +20,9 @@ namespace Kyoo.Api [HttpGet("{peopleSlug}")] [Authorize(Policy="Read")] - public ActionResult GetPeople(string peopleSlug) + public async Task> GetPeople(string peopleSlug) { - People people = _libraryManager.GetPeople(peopleSlug); + People people = await _libraryManager.GetPeople(peopleSlug); if (people == null) return NotFound(); diff --git a/Kyoo/Views/API/SearchAPI.cs b/Kyoo/Views/API/SearchAPI.cs index ab0ab3dd..4efcf93a 100644 --- a/Kyoo/Views/API/SearchAPI.cs +++ b/Kyoo/Views/API/SearchAPI.cs @@ -1,4 +1,5 @@ -using Kyoo.Controllers; +using System.Threading.Tasks; +using Kyoo.Controllers; using Kyoo.Models; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; @@ -18,17 +19,17 @@ namespace Kyoo.Api [HttpGet("{query}")] [Authorize(Policy="Read")] - public ActionResult Search(string query) + public async Task> Search(string query) { SearchResult result = new SearchResult { Query = query, - Collections = _libraryManager.SearchCollections(query), - Shows = _libraryManager.SearchShows(query), - Episodes = _libraryManager.SearchEpisodes(query), - People = _libraryManager.SearchPeople(query), - Genres = _libraryManager.SearchGenres(query), - Studios = _libraryManager.SearchStudios(query) + Collections = await _libraryManager.SearchCollections(query), + Shows = await _libraryManager.SearchShows(query), + Episodes = await _libraryManager.SearchEpisodes(query), + People = await _libraryManager.SearchPeople(query), + Genres = await _libraryManager.SearchGenres(query), + Studios = await _libraryManager.SearchStudios(query) }; return result; } diff --git a/Kyoo/Views/API/ShowsAPI.cs b/Kyoo/Views/API/ShowsAPI.cs index d656130c..e92c028a 100644 --- a/Kyoo/Views/API/ShowsAPI.cs +++ b/Kyoo/Views/API/ShowsAPI.cs @@ -43,9 +43,9 @@ namespace Kyoo.Api [HttpGet("{slug}")] [Authorize(Policy="Read")] [JsonDetailed] - public ActionResult GetShow(string slug) + public async Task> GetShow(string slug) { - Show show = _libraryManager.GetShow(slug); + Show show = await _libraryManager.GetShow(slug); if (show == null) return NotFound(); @@ -55,7 +55,7 @@ namespace Kyoo.Api [HttpPost("edit/{slug}")] [Authorize(Policy="Write")] - public IActionResult EditShow(string slug, [FromBody] Show show) + public async Task EditShow(string slug, [FromBody] Show show) { if (!ModelState.IsValid) return BadRequest(show); @@ -66,7 +66,7 @@ namespace Kyoo.Api show.ID = old.ID; show.Slug = slug; show.Path = old.Path; - _libraryManager.Edit(show, false); + await _libraryManager.EditShow(show, false); return Ok(); } @@ -79,7 +79,6 @@ namespace Kyoo.Api Show show = _database.Shows.Include(x => x.ExternalIDs).FirstOrDefault(x => x.Slug == slug); if (show == null) return NotFound(); - show.ExternalIDs = _libraryManager.Validate(externalIDs); _database.SaveChanges(); _taskManager.StartTask("re-scan", $"show/{slug}"); return Ok(); @@ -96,7 +95,7 @@ namespace Kyoo.Api [Authorize(Policy = "Write")] public async Task DownloadImages(string slug) { - Show show = _libraryManager.GetShow(slug); + Show show = await _libraryManager.GetShow(slug); if (show == null) return NotFound(); await _thumbnailsManager.Validate(show, true); diff --git a/Kyoo/Views/API/StudioAPI.cs b/Kyoo/Views/API/StudioAPI.cs index 4437d5ca..59228155 100644 --- a/Kyoo/Views/API/StudioAPI.cs +++ b/Kyoo/Views/API/StudioAPI.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using System.Linq; +using System.Threading.Tasks; using Kyoo.Controllers; using Kyoo.Models; using Microsoft.AspNetCore.Mvc; @@ -18,9 +19,9 @@ namespace Kyoo.API _libraryManager = libraryManager; } - public ActionResult> Index() + public async Task>> Index() { - return _libraryManager.GetStudios().ToList(); + return (await _libraryManager.GetStudios()).ToList(); } } } \ No newline at end of file diff --git a/Kyoo/Views/API/SubtitleAPI.cs b/Kyoo/Views/API/SubtitleAPI.cs index df875fca..ea0c73e2 100644 --- a/Kyoo/Views/API/SubtitleAPI.cs +++ b/Kyoo/Views/API/SubtitleAPI.cs @@ -14,31 +14,37 @@ namespace Kyoo.Api public class SubtitleController : ControllerBase { private readonly ILibraryManager _libraryManager; - private readonly ITranscoder _transcoder; + //private readonly ITranscoder _transcoder; - public SubtitleController(ILibraryManager libraryManager, ITranscoder transcoder) + public SubtitleController(ILibraryManager libraryManager/*, ITranscoder transcoder*/) { _libraryManager = libraryManager; - _transcoder = transcoder; + // _transcoder = transcoder; } [HttpGet("{showSlug}-s{seasonNumber:int}e{episodeNumber:int}.{identifier}.{extension?}")] [Authorize(Policy="Play")] - public IActionResult GetSubtitle(string showSlug, int seasonNumber, int episodeNumber, string identifier, string extension) + public async Task GetSubtitle(string showSlug, + int seasonNumber, + int episodeNumber, + string identifier, + string extension) { string languageTag = identifier.Length == 3 ? identifier.Substring(0, 3) : null; bool forced = identifier.Length > 4 && identifier.Substring(4) == "forced"; Track subtitle = null; if (languageTag != null) - subtitle = _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber)?.Tracks + subtitle = (await _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber))?.Tracks .FirstOrDefault(x => x.Language == languageTag && x.IsForced == forced); if (subtitle == null) { - string idString = identifier.IndexOf('-') != -1 ? identifier.Substring(0, identifier.IndexOf('-')) : identifier; + string idString = identifier.IndexOf('-') != -1 + ? identifier.Substring(0, identifier.IndexOf('-')) + : identifier; long.TryParse(idString, out long id); - subtitle = _libraryManager.GetTracks().FirstOrDefault(x => x.ID == id); + subtitle = await _libraryManager.GetTrack(id); } if (subtitle == null) @@ -57,43 +63,43 @@ namespace Kyoo.Api return PhysicalFile(subtitle.Path, mime); } - [HttpGet("extract/{showSlug}-s{seasonNumber}e{episodeNumber}")] - [Authorize(Policy="Admin")] - public async Task ExtractSubtitle(string showSlug, long seasonNumber, long episodeNumber) - { - Episode episode = _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber); - episode.Tracks = null; - - Track[] tracks = await _transcoder.ExtractSubtitles(episode.Path); - foreach (Track track in tracks) - { - track.EpisodeID = episode.ID; - _libraryManager.Register(track); - } - await _libraryManager.SaveChanges(); - return "Done. " + tracks.Length + " track(s) extracted."; - } - - [HttpGet("extract/{showSlug}")] - [Authorize(Policy="Admin")] - public async Task ExtractSubtitle(string showSlug) - { - IEnumerable episodes = _libraryManager.GetShow(showSlug).Episodes; - foreach (Episode episode in episodes) - { - episode.Tracks = null; - - Track[] tracks = await _transcoder.ExtractSubtitles(episode.Path); - foreach (Track track in tracks) - { - track.EpisodeID = episode.ID; - _libraryManager.Register(track); - } - await _libraryManager.SaveChanges(); - } - - return "Done."; - } + // [HttpGet("extract/{showSlug}-s{seasonNumber}e{episodeNumber}")] + // [Authorize(Policy="Admin")] + // public async Task ExtractSubtitle(string showSlug, long seasonNumber, long episodeNumber) + // { + // Episode episode = _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber); + // episode.Tracks = null; + // + // Track[] tracks = await _transcoder.ExtractSubtitles(episode.Path); + // foreach (Track track in tracks) + // { + // track.EpisodeID = episode.ID; + // _libraryManager.Register(track); + // } + // await _libraryManager.SaveChanges(); + // return "Done. " + tracks.Length + " track(s) extracted."; + // } + // + // [HttpGet("extract/{showSlug}")] + // [Authorize(Policy="Admin")] + // public async Task ExtractSubtitle(string showSlug) + // { + // IEnumerable episodes = _libraryManager.GetShow(showSlug).Episodes; + // foreach (Episode episode in episodes) + // { + // episode.Tracks = null; + // + // Track[] tracks = await _transcoder.ExtractSubtitles(episode.Path); + // foreach (Track track in tracks) + // { + // track.EpisodeID = episode.ID; + // _libraryManager.Register(track); + // } + // await _libraryManager.SaveChanges(); + // } + // + // return "Done."; + // } } diff --git a/Kyoo/Views/API/ThumbnailAPI.cs b/Kyoo/Views/API/ThumbnailAPI.cs index 22b376e8..12b8035c 100644 --- a/Kyoo/Views/API/ThumbnailAPI.cs +++ b/Kyoo/Views/API/ThumbnailAPI.cs @@ -1,6 +1,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Configuration; using System.IO; +using System.Threading.Tasks; using Kyoo.Controllers; using Microsoft.AspNetCore.Authorization; @@ -20,9 +21,9 @@ namespace Kyoo.Api [HttpGet("poster/{showSlug}")] [Authorize(Policy="Read")] - public IActionResult GetShowThumb(string showSlug) + public async Task GetShowThumb(string showSlug) { - string path = _libraryManager.GetShow(showSlug)?.Path; + string path = (await _libraryManager.GetShow(showSlug))?.Path; if (path == null) return NotFound(); @@ -35,9 +36,9 @@ namespace Kyoo.Api [HttpGet("logo/{showSlug}")] [Authorize(Policy="Read")] - public IActionResult GetShowLogo(string showSlug) + public async Task GetShowLogo(string showSlug) { - string path = _libraryManager.GetShow(showSlug)?.Path; + string path = (await _libraryManager.GetShow(showSlug))?.Path; if (path == null) return NotFound(); @@ -50,9 +51,9 @@ namespace Kyoo.Api [HttpGet("backdrop/{showSlug}")] [Authorize(Policy="Read")] - public IActionResult GetShowBackdrop(string showSlug) + public async Task GetShowBackdrop(string showSlug) { - string path = _libraryManager.GetShow(showSlug)?.Path; + string path = (await _libraryManager.GetShow(showSlug))?.Path; if (path == null) return NotFound(); @@ -76,9 +77,9 @@ namespace Kyoo.Api [HttpGet("thumb/{showSlug}-s{seasonNumber}e{episodeNumber}")] [Authorize(Policy="Read")] - public IActionResult GetEpisodeThumb(string showSlug, long seasonNumber, long episodeNumber) + public async Task GetEpisodeThumb(string showSlug, long seasonNumber, long episodeNumber) { - string path = _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber)?.Path; + string path = (await _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber))?.Path; if (path == null) return NotFound(); diff --git a/Kyoo/Views/API/VideoAPI.cs b/Kyoo/Views/API/VideoAPI.cs index 57a77833..c8e6f164 100644 --- a/Kyoo/Views/API/VideoAPI.cs +++ b/Kyoo/Views/API/VideoAPI.cs @@ -27,9 +27,9 @@ namespace Kyoo.Api [HttpGet("{showSlug}-s{seasonNumber}e{episodeNumber}")] [Authorize(Policy="Play")] - public IActionResult Index(string showSlug, long seasonNumber, long episodeNumber) + public async Task Index(string showSlug, long seasonNumber, long episodeNumber) { - Episode episode = _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber); + Episode episode = await _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber); if (episode != null && System.IO.File.Exists(episode.Path)) return PhysicalFile(episode.Path, "video/x-matroska", true); @@ -40,7 +40,7 @@ namespace Kyoo.Api [Authorize(Policy="Play")] public async Task Transmux(string showSlug, long seasonNumber, long episodeNumber) { - Episode episode = _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber); + Episode episode = await _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber); if (episode == null || !System.IO.File.Exists(episode.Path)) return NotFound(); @@ -63,7 +63,7 @@ namespace Kyoo.Api [Authorize(Policy="Play")] public async Task Transcode(string showSlug, long seasonNumber, long episodeNumber) { - Episode episode = _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber); + Episode episode = await _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber); if (episode == null || !System.IO.File.Exists(episode.Path)) return NotFound(); @@ -85,9 +85,9 @@ namespace Kyoo.Api [HttpGet("{movieSlug}")] [Authorize(Policy="Play")] - public IActionResult Index(string movieSlug) + public async Task Index(string movieSlug) { - Episode episode = _libraryManager.GetMovieEpisode(movieSlug); + Episode episode = await _libraryManager.GetMovieEpisode(movieSlug); if (episode != null && System.IO.File.Exists(episode.Path)) return PhysicalFile(episode.Path, "video/webm", true); @@ -98,7 +98,7 @@ namespace Kyoo.Api [Authorize(Policy="Play")] public async Task Transmux(string movieSlug) { - Episode episode = _libraryManager.GetMovieEpisode(movieSlug); + Episode episode = await _libraryManager.GetMovieEpisode(movieSlug); if (episode == null || !System.IO.File.Exists(episode.Path)) return NotFound(); @@ -112,7 +112,7 @@ namespace Kyoo.Api [Authorize(Policy="Play")] public async Task Transcode(string movieSlug) { - Episode episode = _libraryManager.GetMovieEpisode(movieSlug); + Episode episode = await _libraryManager.GetMovieEpisode(movieSlug); if (episode == null || !System.IO.File.Exists(episode.Path)) return NotFound(); diff --git a/Kyoo/Views/API/WatchAPI.cs b/Kyoo/Views/API/WatchAPI.cs index d8cc84c2..3ef292f1 100644 --- a/Kyoo/Views/API/WatchAPI.cs +++ b/Kyoo/Views/API/WatchAPI.cs @@ -1,4 +1,5 @@ -using Kyoo.Controllers; +using System.Threading.Tasks; +using Kyoo.Controllers; using Kyoo.Models; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; @@ -18,9 +19,9 @@ namespace Kyoo.Api [HttpGet("{showSlug}-s{seasonNumber}e{episodeNumber}")] [Authorize(Policy="Read")] - public ActionResult Index(string showSlug, long seasonNumber, long episodeNumber) + public async Task> Index(string showSlug, long seasonNumber, long episodeNumber) { - Episode item = _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber); + Episode item = await _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber); if(item == null) return NotFound(); @@ -30,9 +31,9 @@ namespace Kyoo.Api [HttpGet("{movieSlug}")] [Authorize(Policy="Read")] - public ActionResult Index(string movieSlug) + public async Task> Index(string movieSlug) { - Episode item = _libraryManager.GetMovieEpisode(movieSlug); + Episode item = await _libraryManager.GetMovieEpisode(movieSlug); if(item == null) return NotFound();