diff --git a/Kyoo.Common/Controllers/ILibraryManager.cs b/Kyoo.Common/Controllers/ILibraryManager.cs index 841c3aca..f1e4476b 100644 --- a/Kyoo.Common/Controllers/ILibraryManager.cs +++ b/Kyoo.Common/Controllers/ILibraryManager.cs @@ -53,6 +53,7 @@ namespace Kyoo.Controllers //Register values long RegisterCollection(Collection collection); long RegisterShow(Show show); + long RegisterMovie(Episode movie); long RegisterSeason(Season season); long RegisterEpisode(Episode episode); long RegisterTrack(Track track); diff --git a/Kyoo.Common/Models/Episode.cs b/Kyoo.Common/Models/Episode.cs index a08396ea..96cbd0c6 100644 --- a/Kyoo.Common/Models/Episode.cs +++ b/Kyoo.Common/Models/Episode.cs @@ -10,7 +10,7 @@ namespace Kyoo.Models [JsonIgnore] public long ID { get; set; } [JsonIgnore] public long ShowID { get; set; } [JsonIgnore] public virtual Show Show { get; set; } - [JsonIgnore] public long SeasonID { get; set; } + [JsonIgnore] public long? SeasonID { get; set; } [JsonIgnore] public virtual Season Season { get; set; } public long SeasonNumber { get; set; } diff --git a/Kyoo/Controllers/Crawler.cs b/Kyoo/Controllers/Crawler.cs index 023b7693..19957a09 100644 --- a/Kyoo/Controllers/Crawler.cs +++ b/Kyoo/Controllers/Crawler.cs @@ -1,4 +1,5 @@ using System; +using System.Collections; using Kyoo.Models; using Microsoft.Extensions.Configuration; using System.Collections.Generic; @@ -84,7 +85,7 @@ namespace Kyoo.Controllers bool isMovie = seasonNumber == -1 && episodeNumber == -1 && absoluteNumber == -1; Show show = await GetShow(showName, showPath, isMovie, library); if (isMovie) - _libraryManager.RegisterShow(show); + _libraryManager.RegisterMovie(await GetMovie(show, path)); else { Season season = await GetSeason(show, seasonNumber, library); @@ -138,13 +139,29 @@ namespace Kyoo.Controllers Console.Error.WriteLine("\tError: You don't have any provider that support absolute epiode numbering. Install one and try again."); return null; } - + + await GetTracks(episode); + return episode; + } + + private async Task GetMovie(Show show, string episodePath) + { + Episode episode = new Episode(); + episode.Title = show.Title; + episode.Path = episodePath; + episode.Show = show; + episode.Tracks = await GetTracks(episode); + return episode; + } + + private async Task> GetTracks(Episode episode) + { IEnumerable tracks = await _transcoder.GetTrackInfo(episode.Path); List epTracks = tracks.Where(x => x.Type != StreamType.Subtitle).Concat(GetExtractedSubtitles(episode)).ToList(); if (epTracks.Count(x => !x.IsExternal) < tracks.Count()) epTracks.AddRange(await _transcoder.ExtractSubtitles(episode.Path)); episode.Tracks = epTracks; - return episode; + return epTracks; } private static IEnumerable GetExtractedSubtitles(Episode episode) diff --git a/Kyoo/Controllers/LibraryManager.cs b/Kyoo/Controllers/LibraryManager.cs index c6b6cc46..a58e32a5 100644 --- a/Kyoo/Controllers/LibraryManager.cs +++ b/Kyoo/Controllers/LibraryManager.cs @@ -328,6 +328,16 @@ namespace Kyoo.Controllers return show.ID; } + public long RegisterMovie(Episode movie) + { + if (movie == null) + return 0; + if (_database.Entry(movie).State == EntityState.Detached) + _database.Episodes.Add(movie); + _database.SaveChanges(); + return movie.ID; + } + public long RegisterSeason(Season season) { if (season == null)