diff --git a/Kyoo.Common/Controllers/ILibraryManager.cs b/Kyoo.Common/Controllers/ILibraryManager.cs index 75e2b53f..c345bf38 100644 --- a/Kyoo.Common/Controllers/ILibraryManager.cs +++ b/Kyoo.Common/Controllers/ILibraryManager.cs @@ -11,27 +11,27 @@ namespace Kyoo.Controllers Task GetLibrary(string slug); Task GetCollection(string slug); Task GetShow(string slug); - Task GetSeason(string showSlug, long seasonNumber); - Task GetEpisode(string showSlug, long seasonNumber, long episodeNumber); + Task GetSeason(string showSlug, int seasonNumber); + Task GetEpisode(string showSlug, int seasonNumber, int episodeNumber); Task GetMovieEpisode(string movieSlug); - Task GetTrack(long id); - Task GetTrack(long episodeID, string language, bool isForced); + Task GetTrack(int id); + Task GetTrack(int 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(int showID); Task> GetSeasons(string showSlug); - Task> GetEpisodes(long showID, long seasonNumber); - Task> GetEpisodes(string showSlug, long seasonNumber); - Task> GetEpisodes(long seasonID); + Task> GetEpisodes(int showID, int seasonNumber); + Task> GetEpisodes(string showSlug, int seasonNumber); + Task> GetEpisodes(int seasonID); // Helpers Task GetShowByPath(string path); - Task AddShowLink(long showID, long? libraryID, long? collectionID); + Task AddShowLink(int showID, int? libraryID, int? collectionID); Task AddShowLink([NotNull] Show show, Library library, Collection collection); // Get all diff --git a/Kyoo.Common/Controllers/IMetadataProvider.cs b/Kyoo.Common/Controllers/IMetadataProvider.cs index 3a0472b9..1852739f 100644 --- a/Kyoo.Common/Controllers/IMetadataProvider.cs +++ b/Kyoo.Common/Controllers/IMetadataProvider.cs @@ -14,8 +14,8 @@ namespace Kyoo.Controllers Task> SearchShows(string showName, bool isMovie); Task> GetPeople(Show show); - Task GetSeason(Show show, long seasonNumber); + Task GetSeason(Show show, int seasonNumber); - Task GetEpisode(Show show, long seasonNumber, long episodeNumber, long absoluteNumber); + Task GetEpisode(Show show, int seasonNumber, int episodeNumber, int absoluteNumber); } } diff --git a/Kyoo.Common/Controllers/IProviderManager.cs b/Kyoo.Common/Controllers/IProviderManager.cs index 5690842d..b5c3da50 100644 --- a/Kyoo.Common/Controllers/IProviderManager.cs +++ b/Kyoo.Common/Controllers/IProviderManager.cs @@ -10,8 +10,8 @@ namespace Kyoo.Controllers Task CompleteShow(Show show, Library library); Task SearchShow(string showName, bool isMovie, Library library); Task> SearchShows(string showName, bool isMovie, Library library); - Task GetSeason(Show show, long seasonNumber, Library library); - Task GetEpisode(Show show, string episodePath, long seasonNumber, long episodeNumber, long absoluteNumber, Library library); + Task GetSeason(Show show, int seasonNumber, Library library); + Task GetEpisode(Show show, string episodePath, int seasonNumber, int episodeNumber, int absoluteNumber, Library library); Task> GetPeople(Show show, Library library); } } \ No newline at end of file diff --git a/Kyoo.Common/Controllers/IRepository.cs b/Kyoo.Common/Controllers/IRepository.cs index a63886ea..0993ca69 100644 --- a/Kyoo.Common/Controllers/IRepository.cs +++ b/Kyoo.Common/Controllers/IRepository.cs @@ -7,12 +7,12 @@ namespace Kyoo.Controllers { public interface IRepository { - Task Get(long id); + Task Get(int id); Task Get(string slug); Task> Search(string query); Task> GetAll(); - Task Create([NotNull] T obj); - Task CreateIfNotExists([NotNull] T obj); + Task Create([NotNull] T obj); + Task CreateIfNotExists([NotNull] T obj); Task Edit([NotNull] T edited, bool resetOld); Task Delete(T obj); } @@ -20,29 +20,29 @@ namespace Kyoo.Controllers public interface IShowRepository : IRepository { Task GetByPath(string path); - Task AddShowLink(long showID, long? libraryID, long? collectionID); + Task AddShowLink(int showID, int? libraryID, int? collectionID); } public interface ISeasonRepository : IRepository { - Task Get(string showSlug, long seasonNumber); + Task Get(string showSlug, int seasonNumber); - Task> GetSeasons(long showID); + Task> GetSeasons(int showID); Task> GetSeasons(string showSlug); } public interface IEpisodeRepository : IRepository { - Task Get(string showSlug, long seasonNumber, long episodeNumber); + Task Get(string showSlug, int seasonNumber, int episodeNumber); - Task> GetEpisodes(long showID, long seasonNumber); - Task> GetEpisodes(string showSlug, long seasonNumber); - Task> GetEpisodes(long seasonID); + Task> GetEpisodes(int showID, int seasonNumber); + Task> GetEpisodes(string showSlug, int seasonNumber); + Task> GetEpisodes(int seasonID); } public interface ITrackRepository : IRepository { - Task Get(long episodeID, string languageTag, bool isForced); + Task Get(int episodeID, string languageTag, bool isForced); } public interface ILibraryRepository : IRepository {} public interface ICollectionRepository : IRepository {} diff --git a/Kyoo.Common/Models/Collection.cs b/Kyoo.Common/Models/Collection.cs index c0297521..98881da2 100644 --- a/Kyoo.Common/Models/Collection.cs +++ b/Kyoo.Common/Models/Collection.cs @@ -7,7 +7,7 @@ namespace Kyoo.Models { public class Collection { - [JsonIgnore] public long ID { get; set; } + [JsonIgnore] public int ID { get; set; } public string Slug { get; set; } public string Name { get; set; } public string Poster { get; set; } diff --git a/Kyoo.Common/Models/CollectionLink.cs b/Kyoo.Common/Models/CollectionLink.cs index 24fb6403..cc8aa040 100644 --- a/Kyoo.Common/Models/CollectionLink.cs +++ b/Kyoo.Common/Models/CollectionLink.cs @@ -2,10 +2,10 @@ namespace Kyoo.Models { public class CollectionLink { - public long ID { get; set; } - public long? CollectionID { get; set; } + public int ID { get; set; } + public int? CollectionID { get; set; } public virtual Collection Collection { get; set; } - public long ShowID { get; set; } + public int ShowID { get; set; } public virtual Show Show { get; set; } public CollectionLink() { } diff --git a/Kyoo.Common/Models/Episode.cs b/Kyoo.Common/Models/Episode.cs index ada5a1ea..a00fa12f 100644 --- a/Kyoo.Common/Models/Episode.cs +++ b/Kyoo.Common/Models/Episode.cs @@ -6,21 +6,21 @@ namespace Kyoo.Models { public class Episode { - [JsonIgnore] public long ID { get; set; } - [JsonIgnore] public long ShowID { get; set; } + [JsonIgnore] public int ID { get; set; } + [JsonIgnore] public int ShowID { get; set; } [JsonIgnore] public virtual Show Show { get; set; } - [JsonIgnore] public long? SeasonID { get; set; } + [JsonIgnore] public int? SeasonID { get; set; } [JsonIgnore] public virtual Season Season { get; set; } - public long SeasonNumber { get; set; } - public long EpisodeNumber { get; set; } - public long AbsoluteNumber { get; set; } + public int SeasonNumber { get; set; } + public int EpisodeNumber { get; set; } + public int AbsoluteNumber { get; set; } [JsonIgnore] public string Path { get; set; } public string Title { get; set; } public string Overview { get; set; } public DateTime? ReleaseDate { get; set; } - public long Runtime { get; set; } //This runtime variable should be in minutes + public int Runtime { get; set; } //This runtime variable should be in minutes [JsonIgnore] public string ImgPrimary { get; set; } public virtual IEnumerable ExternalIDs { get; set; } @@ -42,13 +42,13 @@ namespace Kyoo.Models public Episode() { } - public Episode(long seasonNumber, - long episodeNumber, - long absoluteNumber, + public Episode(int seasonNumber, + int episodeNumber, + int absoluteNumber, string title, string overview, DateTime? releaseDate, - long runtime, + int runtime, string imgPrimary, IEnumerable externalIDs) { @@ -63,16 +63,16 @@ namespace Kyoo.Models ExternalIDs = externalIDs; } - public Episode(long showID, - long seasonID, - long seasonNumber, - long episodeNumber, - long absoluteNumber, + public Episode(int showID, + int seasonID, + int seasonNumber, + int episodeNumber, + int absoluteNumber, string path, string title, string overview, DateTime? releaseDate, - long runtime, + int runtime, string imgPrimary, IEnumerable externalIDs) { @@ -90,7 +90,7 @@ namespace Kyoo.Models ExternalIDs = externalIDs; } - public static string GetSlug(string showSlug, long seasonNumber, long episodeNumber) + public static string GetSlug(string showSlug, int seasonNumber, int episodeNumber) { return showSlug + "-s" + seasonNumber + "e" + episodeNumber; } diff --git a/Kyoo.Common/Models/Genre.cs b/Kyoo.Common/Models/Genre.cs index e57cd286..1935189e 100644 --- a/Kyoo.Common/Models/Genre.cs +++ b/Kyoo.Common/Models/Genre.cs @@ -4,7 +4,7 @@ namespace Kyoo.Models { public class Genre { - [JsonIgnore] public long ID { get; set; } + [JsonIgnore] public int ID { get; set; } public string Slug { get; set; } public string Name { get; set; } @@ -24,7 +24,7 @@ namespace Kyoo.Models Name = name; } - public Genre(long id, string slug, string name) + public Genre(int id, string slug, string name) { ID = id; Slug = slug; diff --git a/Kyoo.Common/Models/GenreLink.cs b/Kyoo.Common/Models/GenreLink.cs index cb85d01a..dce3e1bb 100644 --- a/Kyoo.Common/Models/GenreLink.cs +++ b/Kyoo.Common/Models/GenreLink.cs @@ -2,9 +2,9 @@ namespace Kyoo.Models { public class GenreLink { - public long ShowID { get; set; } + public int ShowID { get; set; } public virtual Show Show { get; set; } - public long GenreID { get; set; } + public int GenreID { get; set; } public virtual Genre Genre { get; set; } public GenreLink() {} diff --git a/Kyoo.Common/Models/Library.cs b/Kyoo.Common/Models/Library.cs index d3324b22..84441297 100644 --- a/Kyoo.Common/Models/Library.cs +++ b/Kyoo.Common/Models/Library.cs @@ -1,5 +1,4 @@ -using System.Collections; -using System.Collections.Generic; +using System.Collections.Generic; using System.Linq; using Kyoo.Models.Attributes; using Newtonsoft.Json; @@ -8,7 +7,7 @@ namespace Kyoo.Models { public class Library { - [JsonIgnore] public long ID { get; set; } + [JsonIgnore] public int ID { get; set; } public string Slug { get; set; } public string Name { get; set; } public IEnumerable Paths { get; set; } diff --git a/Kyoo.Common/Models/LibraryLink.cs b/Kyoo.Common/Models/LibraryLink.cs index 36cfc749..22120348 100644 --- a/Kyoo.Common/Models/LibraryLink.cs +++ b/Kyoo.Common/Models/LibraryLink.cs @@ -2,12 +2,12 @@ namespace Kyoo.Models { public class LibraryLink { - public long ID { get; set; } - public long LibraryID { get; set; } + public int ID { get; set; } + public int LibraryID { get; set; } public virtual Library Library { get; set; } - public long? ShowID { get; set; } + public int? ShowID { get; set; } public virtual Show Show { get; set; } - public long? CollectionID { get; set; } + public int? CollectionID { get; set; } public virtual Collection Collection { get; set; } public LibraryLink() { } diff --git a/Kyoo.Common/Models/MetadataID.cs b/Kyoo.Common/Models/MetadataID.cs index b1bd7a72..649ec157 100644 --- a/Kyoo.Common/Models/MetadataID.cs +++ b/Kyoo.Common/Models/MetadataID.cs @@ -4,20 +4,20 @@ namespace Kyoo.Models { public class MetadataID { - [JsonIgnore] public long ID { get; set; } - [JsonIgnore] public long ProviderID { get; set; } + [JsonIgnore] public int ID { get; set; } + [JsonIgnore] public int ProviderID { get; set; } public virtual ProviderID Provider {get; set; } - [JsonIgnore] public long? ShowID { get; set; } + [JsonIgnore] public int? ShowID { get; set; } [JsonIgnore] public virtual Show Show { get; set; } - [JsonIgnore] public long? EpisodeID { get; set; } + [JsonIgnore] public int? EpisodeID { get; set; } [JsonIgnore] public virtual Episode Episode { get; set; } - [JsonIgnore] public long? SeasonID { get; set; } + [JsonIgnore] public int? SeasonID { get; set; } [JsonIgnore] public virtual Season Season { get; set; } - [JsonIgnore] public long? PeopleID { get; set; } + [JsonIgnore] public int? PeopleID { get; set; } [JsonIgnore] public virtual People People { get; set; } public string DataID { get; set; } diff --git a/Kyoo.Common/Models/People.cs b/Kyoo.Common/Models/People.cs index 8dc17f9d..6514dc9f 100644 --- a/Kyoo.Common/Models/People.cs +++ b/Kyoo.Common/Models/People.cs @@ -6,7 +6,7 @@ namespace Kyoo.Models { public class People { - public long ID { get; set; } + public int ID { get; set; } public string Slug { get; set; } public string Name { get; set; } [JsonIgnore] public string ImgPrimary { get; set; } diff --git a/Kyoo.Common/Models/PeopleLink.cs b/Kyoo.Common/Models/PeopleLink.cs index ef6ef3af..509f2b93 100644 --- a/Kyoo.Common/Models/PeopleLink.cs +++ b/Kyoo.Common/Models/PeopleLink.cs @@ -5,8 +5,8 @@ namespace Kyoo.Models { public class PeopleLink { - [JsonIgnore] public long ID { get; set; } - [JsonIgnore] public long PeopleID { get; set; } + [JsonIgnore] public int ID { get; set; } + [JsonIgnore] public int PeopleID { get; set; } [JsonIgnore] public virtual People People { get; set; } public string Slug @@ -27,7 +27,7 @@ namespace Kyoo.Models set => People.ExternalIDs = value; } - [JsonIgnore] public long ShowID { get; set; } + [JsonIgnore] public int ShowID { get; set; } [JsonIgnore] public virtual Show Show { get; set; } public string Role { get; set; } public string Type { get; set; } diff --git a/Kyoo.Common/Models/ProviderID.cs b/Kyoo.Common/Models/ProviderID.cs index e7d76268..b68785b1 100644 --- a/Kyoo.Common/Models/ProviderID.cs +++ b/Kyoo.Common/Models/ProviderID.cs @@ -4,13 +4,13 @@ namespace Kyoo.Models { public class ProviderID { - [JsonIgnore] public long ID { get; set; } + [JsonIgnore] public int ID { get; set; } public string Name { get; set; } public string Logo { get; set; } public ProviderID() { } - public ProviderID(long id, string name, string logo) + public ProviderID(int id, string name, string logo) { ID = id; Name = name; diff --git a/Kyoo.Common/Models/ProviderLink.cs b/Kyoo.Common/Models/ProviderLink.cs index 088e4f80..6bc50b1a 100644 --- a/Kyoo.Common/Models/ProviderLink.cs +++ b/Kyoo.Common/Models/ProviderLink.cs @@ -4,10 +4,10 @@ namespace Kyoo.Models { public class ProviderLink { - [JsonIgnore] public long ID { get; set; } - [JsonIgnore] public long ProviderID { get; set; } + [JsonIgnore] public int ID { get; set; } + [JsonIgnore] public int ProviderID { get; set; } [JsonIgnore] public virtual ProviderID Provider { get; set; } - [JsonIgnore] public long? LibraryID { get; set; } + [JsonIgnore] public int? LibraryID { get; set; } [JsonIgnore] public virtual Library Library { get; set; } public ProviderLink() { } diff --git a/Kyoo.Common/Models/Season.cs b/Kyoo.Common/Models/Season.cs index 99bbd5cf..8d4d9052 100644 --- a/Kyoo.Common/Models/Season.cs +++ b/Kyoo.Common/Models/Season.cs @@ -5,15 +5,15 @@ namespace Kyoo.Models { public class Season { - [JsonIgnore] public long ID { get; set; } - [JsonIgnore] public long ShowID { get; set; } + [JsonIgnore] public int ID { get; set; } + [JsonIgnore] public int ShowID { get; set; } - public long SeasonNumber { get; set; } = -1; + public int SeasonNumber { get; set; } = -1; public string Slug => $"{Show.Slug}-s{SeasonNumber}"; public string Title { get; set; } public string Overview { get; set; } - public long? Year { get; set; } + public int? Year { get; set; } [JsonIgnore] public string ImgPrimary { get; set; } public virtual IEnumerable ExternalIDs { get; set; } @@ -23,11 +23,11 @@ namespace Kyoo.Models public Season() { } - public Season(long showID, - long seasonNumber, + public Season(int showID, + int seasonNumber, string title, string overview, - long? year, + int? year, string imgPrimary, IEnumerable externalIDs) { diff --git a/Kyoo.Common/Models/Show.cs b/Kyoo.Common/Models/Show.cs index 684b5305..a79ef71e 100644 --- a/Kyoo.Common/Models/Show.cs +++ b/Kyoo.Common/Models/Show.cs @@ -7,7 +7,7 @@ namespace Kyoo.Models { public class Show : IOnMerge { - [JsonIgnore] public long ID { get; set; } + [JsonIgnore] public int ID { get; set; } public string Slug { get; set; } public string Title { get; set; } @@ -17,8 +17,8 @@ namespace Kyoo.Models public Status? Status { get; set; } public string TrailerUrl { get; set; } - public long? StartYear { get; set; } - public long? EndYear { get; set; } + public int? StartYear { get; set; } + public int? EndYear { get; set; } public string Poster { get; set; } public string Logo { get; set; } @@ -36,7 +36,7 @@ namespace Kyoo.Models set => GenreLinks = value?.Select(x => new GenreLink(this, x)).ToList(); } [NotMergable] [JsonIgnore] public virtual IEnumerable GenreLinks { get; set; } - [JsonIgnore] public long StudioID { get; set; } + [JsonIgnore] public int? StudioID { get; set; } public virtual Studio Studio { get; set; } [JsonIgnore] public virtual IEnumerable People { get; set; } [JsonIgnore] public virtual IEnumerable Seasons { get; set; } @@ -51,8 +51,8 @@ namespace Kyoo.Models string trailerUrl, IEnumerable genres, Status? status, - long? startYear, - long? endYear, + int? startYear, + int? endYear, IEnumerable externalIDs) { Slug = slug; @@ -76,8 +76,8 @@ namespace Kyoo.Models string overview, string trailerUrl, Status? status, - long? startYear, - long? endYear, + int? startYear, + int? endYear, string poster, string logo, string backdrop, diff --git a/Kyoo.Common/Models/Studio.cs b/Kyoo.Common/Models/Studio.cs index f02637fa..ec37121a 100644 --- a/Kyoo.Common/Models/Studio.cs +++ b/Kyoo.Common/Models/Studio.cs @@ -5,7 +5,7 @@ namespace Kyoo.Models { public class Studio { - [JsonIgnore] public long ID { get; set; } + [JsonIgnore] public int ID { get; set; } public string Slug { get; set; } public string Name { get; set; } diff --git a/Kyoo.Common/Models/Track.cs b/Kyoo.Common/Models/Track.cs index 7dc52ba3..9741330e 100644 --- a/Kyoo.Common/Models/Track.cs +++ b/Kyoo.Common/Models/Track.cs @@ -55,8 +55,8 @@ namespace Kyoo.Models public class Track : Stream { - [JsonIgnore] public long ID { get; set; } - [JsonIgnore] public long EpisodeID { get; set; } + [JsonIgnore] public int ID { get; set; } + [JsonIgnore] public int EpisodeID { get; set; } public bool IsDefault { get => isDefault; diff --git a/Kyoo.Common/Models/WatchItem.cs b/Kyoo.Common/Models/WatchItem.cs index 3278f313..10c91350 100644 --- a/Kyoo.Common/Models/WatchItem.cs +++ b/Kyoo.Common/Models/WatchItem.cs @@ -7,12 +7,12 @@ namespace Kyoo.Models { public class WatchItem { - [JsonIgnore] public readonly long EpisodeID = -1; + [JsonIgnore] public readonly int EpisodeID = -1; public string ShowTitle; public string ShowSlug; - public long SeasonNumber; - public long EpisodeNumber; + public int SeasonNumber; + public int EpisodeNumber; public string Title; public string Link; public DateTime? ReleaseDate; @@ -28,11 +28,11 @@ namespace Kyoo.Models public WatchItem() { } - public WatchItem(long episodeID, + public WatchItem(int episodeID, string showTitle, string showSlug, - long seasonNumber, - long episodeNumber, + int seasonNumber, + int episodeNumber, string title, DateTime? releaseDate, string path) @@ -50,11 +50,11 @@ namespace Kyoo.Models Link = Episode.GetSlug(ShowSlug, seasonNumber, episodeNumber); } - public WatchItem(long episodeID, + public WatchItem(int episodeID, string showTitle, string showSlug, - long seasonNumber, - long episodeNumber, + int seasonNumber, + int episodeNumber, string title, DateTime? releaseDate, string path, diff --git a/Kyoo/Controllers/LibraryManager.cs b/Kyoo/Controllers/LibraryManager.cs index 82f8f5ea..c4f1432a 100644 --- a/Kyoo/Controllers/LibraryManager.cs +++ b/Kyoo/Controllers/LibraryManager.cs @@ -18,18 +18,27 @@ namespace Kyoo.Controllers private readonly IPeopleRepository _people; private readonly IProviderRepository _providers; - public LibraryManager(DatabaseContext database) + public LibraryManager(ILibraryRepository libraries, + ICollectionRepository collections, + IShowRepository shows, + ISeasonRepository seasons, + IEpisodeRepository episodes, + ITrackRepository tracks, + IGenreRepository genres, + IStudioRepository studios, + IProviderRepository providers, + IPeopleRepository people) { - _providers = new ProviderRepository(database); - _libraries = new LibraryRepository(database, _providers); - _collections = new CollectionRepository(database); - _genres = new GenreRepository(database); - _people = new PeopleRepository(database, _providers); - _studios = new StudioRepository(database); - _shows = new ShowRepository(database, _genres, _people, _studios, _providers); - _seasons = new SeasonRepository(database, _providers); - _episodes = new EpisodeRepository(database, _providers); - _tracks = new TrackRepository(database); + _libraries = libraries; + _collections = collections; + _shows = shows; + _seasons = seasons; + _episodes = episodes; + _tracks = tracks; + _genres = genres; + _studios = studios; + _providers = providers; + _people = people; } public Task GetLibrary(string slug) @@ -47,12 +56,12 @@ namespace Kyoo.Controllers return _shows.Get(slug); } - public Task GetSeason(string showSlug, long seasonNumber) + public Task GetSeason(string showSlug, int seasonNumber) { return _seasons.Get(showSlug, seasonNumber); } - public Task GetEpisode(string showSlug, long seasonNumber, long episodeNumber) + public Task GetEpisode(string showSlug, int seasonNumber, int episodeNumber) { return _episodes.Get(showSlug, seasonNumber, episodeNumber); } @@ -62,12 +71,12 @@ namespace Kyoo.Controllers return _episodes.Get(movieSlug); } - public Task GetTrack(long id) + public Task GetTrack(int id) { return _tracks.Get(id); } - public Task GetTrack(long episodeID, string language, bool isForced) + public Task GetTrack(int episodeID, string language, bool isForced) { return _tracks.Get(episodeID, language, isForced); } @@ -137,7 +146,7 @@ namespace Kyoo.Controllers return _providers.GetAll(); } - public Task> GetSeasons(long showID) + public Task> GetSeasons(int showID) { return _seasons.GetSeasons(showID); } @@ -147,17 +156,17 @@ namespace Kyoo.Controllers return _seasons.GetSeasons(showSlug); } - public Task> GetEpisodes(long showID, long seasonNumber) + public Task> GetEpisodes(int showID, int seasonNumber) { return _episodes.GetEpisodes(showID, seasonNumber); } - public Task> GetEpisodes(string showSlug, long seasonNumber) + public Task> GetEpisodes(string showSlug, int seasonNumber) { return _episodes.GetEpisodes(showSlug, seasonNumber); } - public Task> GetEpisodes(long seasonID) + public Task> GetEpisodes(int seasonID) { return _episodes.GetEpisodes(seasonID); } @@ -167,7 +176,7 @@ namespace Kyoo.Controllers return _shows.GetByPath(path); } - public Task AddShowLink(long showID, long? libraryID, long? collectionID) + public Task AddShowLink(int showID, int? libraryID, int? collectionID) { return _shows.AddShowLink(showID, libraryID, collectionID); } diff --git a/Kyoo/Controllers/ProviderManager.cs b/Kyoo/Controllers/ProviderManager.cs index 5dc6791c..663898d1 100644 --- a/Kyoo/Controllers/ProviderManager.cs +++ b/Kyoo/Controllers/ProviderManager.cs @@ -113,13 +113,14 @@ namespace Kyoo.Controllers }); } - public async Task GetSeason(Show show, long seasonNumber, Library library) + public async Task GetSeason(Show show, int seasonNumber, Library library) { Season season = await GetMetadata( provider => provider.GetSeason(show, seasonNumber), library, $"the season {seasonNumber} of {show.Title}"); season.Show = show; + season.ShowID = show.ID; season.SeasonNumber = season.SeasonNumber == -1 ? seasonNumber : season.SeasonNumber; season.Title ??= $"Season {season.SeasonNumber}"; return season; @@ -127,9 +128,9 @@ namespace Kyoo.Controllers public async Task GetEpisode(Show show, string episodePath, - long seasonNumber, - long episodeNumber, - long absoluteNumber, + int seasonNumber, + int episodeNumber, + int absoluteNumber, Library library) { Episode episode = await GetMetadata( @@ -137,6 +138,7 @@ namespace Kyoo.Controllers library, "an episode"); episode.Show = show; + episode.ShowID = show.ID; episode.Path = episodePath; episode.SeasonNumber = episode.SeasonNumber != -1 ? episode.SeasonNumber : seasonNumber; episode.EpisodeNumber = episode.EpisodeNumber != -1 ? episode.EpisodeNumber : episodeNumber; @@ -155,6 +157,7 @@ namespace Kyoo.Controllers .Select(x => { x.Show = show; + x.ShowID = show.ID; return x; }).ToList(); } diff --git a/Kyoo/Controllers/Repositories/CollectionRepository.cs b/Kyoo/Controllers/Repositories/CollectionRepository.cs index 476ffd67..c09bbc94 100644 --- a/Kyoo/Controllers/Repositories/CollectionRepository.cs +++ b/Kyoo/Controllers/Repositories/CollectionRepository.cs @@ -18,7 +18,7 @@ namespace Kyoo.Controllers _database = database; } - public Task Get(long id) + public Task Get(int id) { return _database.Collections.FirstOrDefaultAsync(x => x.ID == id); } @@ -41,7 +41,7 @@ namespace Kyoo.Controllers return await _database.Collections.ToListAsync(); } - public async Task Create(Collection obj) + public async Task Create(Collection obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); @@ -51,7 +51,7 @@ namespace Kyoo.Controllers return obj.ID; } - public async Task CreateIfNotExists(Collection obj) + public async Task CreateIfNotExists(Collection obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); diff --git a/Kyoo/Controllers/Repositories/EpisodeRepository.cs b/Kyoo/Controllers/Repositories/EpisodeRepository.cs index dd92ad85..157a7a80 100644 --- a/Kyoo/Controllers/Repositories/EpisodeRepository.cs +++ b/Kyoo/Controllers/Repositories/EpisodeRepository.cs @@ -5,22 +5,23 @@ using System.Threading.Tasks; using Kyoo.Models; using Kyoo.Models.Exceptions; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; namespace Kyoo.Controllers { public class EpisodeRepository : IEpisodeRepository { private readonly DatabaseContext _database; - private readonly IProviderRepository _providers; + private readonly IServiceProvider _serviceProvider; - public EpisodeRepository(DatabaseContext database, IProviderRepository providers) + public EpisodeRepository(DatabaseContext database, IServiceProvider serviceProvider) { _database = database; - _providers = providers; + _serviceProvider = serviceProvider; } - public async Task Get(long id) + public async Task Get(int id) { return await _database.Episodes.FirstOrDefaultAsync(x => x.ID == id); } @@ -32,14 +33,14 @@ namespace Kyoo.Controllers if (sIndex == -1 || eIndex == -1 || eIndex < sIndex) throw new InvalidOperationException("Invalid episode slug. Format: {showSlug}-s{seasonNumber}-e{episodeNumber}"); string showSlug = slug.Substring(0, sIndex); - if (!long.TryParse(slug.Substring(sIndex + 2), out long seasonNumber)) + if (!int.TryParse(slug.Substring(sIndex + 2), out int seasonNumber)) throw new InvalidOperationException("Invalid episode slug. Format: {showSlug}-s{seasonNumber}-e{episodeNumber}"); - if (!long.TryParse(slug.Substring(eIndex + 2), out long episodeNumber)) + if (!int.TryParse(slug.Substring(eIndex + 2), out int episodeNumber)) throw new InvalidOperationException("Invalid episode slug. Format: {showSlug}-s{seasonNumber}-e{episodeNumber}"); return Get(showSlug, seasonNumber, episodeNumber); } - public async Task Get(string showSlug, long seasonNumber, long episodeNumber) + public async Task Get(string showSlug, int seasonNumber, int episodeNumber) { return await _database.Episodes.FirstOrDefaultAsync(x => x.Show.Slug == showSlug && x.SeasonNumber == seasonNumber @@ -59,7 +60,7 @@ namespace Kyoo.Controllers return await _database.Episodes.ToListAsync(); } - public async Task Create(Episode obj) + public async Task Create(Episode obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); @@ -70,7 +71,7 @@ namespace Kyoo.Controllers return obj.ID; } - public async Task CreateIfNotExists(Episode obj) + public async Task CreateIfNotExists(Episode obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); @@ -104,11 +105,17 @@ namespace Kyoo.Controllers if (obj.ShowID <= 0) throw new InvalidOperationException($"Can't store an episode not related to any show (showID: {obj.ShowID})."); - obj.ExternalIDs = (await Task.WhenAll(obj.ExternalIDs.Select(async x => + if (obj.ExternalIDs != null) { - x.ProviderID = await _providers.CreateIfNotExists(x.Provider); - return x; - }))).ToList(); + obj.ExternalIDs = (await Task.WhenAll(obj.ExternalIDs.Select(async x => + { + using IServiceScope serviceScope = _serviceProvider.CreateScope(); + IProviderRepository providers = serviceScope.ServiceProvider.GetService(); + + x.ProviderID = await providers.CreateIfNotExists(x.Provider); + return x; + }))).ToList(); + } } public async Task Delete(Episode obj) @@ -117,19 +124,19 @@ namespace Kyoo.Controllers await _database.SaveChangesAsync(); } - public async Task> GetEpisodes(long showID, long seasonNumber) + public async Task> GetEpisodes(int showID, int seasonNumber) { return await _database.Episodes.Where(x => x.ShowID == showID && x.SeasonNumber == seasonNumber).ToListAsync(); } - public async Task> GetEpisodes(string showSlug, long seasonNumber) + public async Task> GetEpisodes(string showSlug, int seasonNumber) { return await _database.Episodes.Where(x => x.Show.Slug == showSlug && x.SeasonNumber == seasonNumber).ToListAsync(); } - public async Task> GetEpisodes(long seasonID) + public async Task> GetEpisodes(int seasonID) { return await _database.Episodes.Where(x => x.SeasonID == seasonID).ToListAsync(); } diff --git a/Kyoo/Controllers/Repositories/GenreRepository.cs b/Kyoo/Controllers/Repositories/GenreRepository.cs index 1035e54b..a908a339 100644 --- a/Kyoo/Controllers/Repositories/GenreRepository.cs +++ b/Kyoo/Controllers/Repositories/GenreRepository.cs @@ -18,7 +18,7 @@ namespace Kyoo.Controllers _database = database; } - public async Task Get(long id) + public async Task Get(int id) { return await _database.Genres.FirstOrDefaultAsync(x => x.ID == id); } @@ -41,7 +41,7 @@ namespace Kyoo.Controllers return await _database.Genres.ToListAsync(); } - public async Task Create(Genre obj) + public async Task Create(Genre obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); @@ -51,7 +51,7 @@ namespace Kyoo.Controllers return obj.ID; } - public async Task CreateIfNotExists(Genre obj) + public async Task CreateIfNotExists(Genre obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); diff --git a/Kyoo/Controllers/Repositories/LibraryRepository.cs b/Kyoo/Controllers/Repositories/LibraryRepository.cs index c73af246..9df08f4b 100644 --- a/Kyoo/Controllers/Repositories/LibraryRepository.cs +++ b/Kyoo/Controllers/Repositories/LibraryRepository.cs @@ -5,29 +5,30 @@ using System.Threading.Tasks; using Kyoo.Models; using Kyoo.Models.Exceptions; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; namespace Kyoo.Controllers { public class LibraryRepository : ILibraryRepository { private readonly DatabaseContext _database; - private readonly IProviderRepository _providers; + private readonly IServiceProvider _serviceProvider; - public LibraryRepository(DatabaseContext database, IProviderRepository providers) + public LibraryRepository(DatabaseContext database, IServiceProvider serviceProvider) { _database = database; - _providers = providers; + _serviceProvider = serviceProvider; } - public Task Get(long id) + public Task Get(int id) { return _database.Libraries.FirstOrDefaultAsync(x => x.ID == id); } public Task Get(string slug) { - return _database.Libraries.FirstOrDefaultAsync(x => x.Name == slug); + return _database.Libraries.FirstOrDefaultAsync(x => x.Slug == slug); } public async Task> Search(string query) @@ -43,19 +44,19 @@ namespace Kyoo.Controllers return await _database.Libraries.ToListAsync(); } - public async Task Create(Library obj) + public async Task Create(Library obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); obj.Links = null; await Validate(obj); - await _database.Libraries.AddAsync(obj); + _database.Entry(obj).State = EntityState.Added; await _database.SaveChangesAsync(); return obj.ID; } - public async Task CreateIfNotExists(Library obj) + public async Task CreateIfNotExists(Library obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); @@ -87,7 +88,10 @@ namespace Kyoo.Controllers { obj.ProviderLinks = (await Task.WhenAll(obj.ProviderLinks.Select(async x => { - x.ProviderID = await _providers.CreateIfNotExists(x.Provider); + using IServiceScope serviceScope = _serviceProvider.CreateScope(); + IProviderRepository providers = serviceScope.ServiceProvider.GetService(); + + x.ProviderID = await providers.CreateIfNotExists(x.Provider); return x; }))).ToList(); } diff --git a/Kyoo/Controllers/Repositories/PeopleRepository.cs b/Kyoo/Controllers/Repositories/PeopleRepository.cs index 0b702be5..d6fd7e3f 100644 --- a/Kyoo/Controllers/Repositories/PeopleRepository.cs +++ b/Kyoo/Controllers/Repositories/PeopleRepository.cs @@ -19,7 +19,7 @@ namespace Kyoo.Controllers _providers = providers; } - public Task Get(long id) + public Task Get(int id) { return _database.Peoples.FirstOrDefaultAsync(x => x.ID == id); } @@ -42,7 +42,7 @@ namespace Kyoo.Controllers return await _database.Peoples.ToListAsync(); } - public async Task Create(People obj) + public async Task Create(People obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); @@ -55,7 +55,7 @@ namespace Kyoo.Controllers return obj.ID; } - public async Task CreateIfNotExists(People obj) + public async Task CreateIfNotExists(People obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); diff --git a/Kyoo/Controllers/Repositories/ProviderRepository.cs b/Kyoo/Controllers/Repositories/ProviderRepository.cs index 4f9b85aa..4b304c45 100644 --- a/Kyoo/Controllers/Repositories/ProviderRepository.cs +++ b/Kyoo/Controllers/Repositories/ProviderRepository.cs @@ -18,7 +18,7 @@ namespace Kyoo.Controllers _database = database; } - public async Task Get(long id) + public async Task Get(int id) { return await _database.Providers.FirstOrDefaultAsync(x => x.ID == id); } @@ -41,17 +41,17 @@ namespace Kyoo.Controllers return await _database.Providers.ToListAsync(); } - public async Task Create(ProviderID obj) + public async Task Create(ProviderID obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); - + await _database.Providers.AddAsync(obj); await _database.SaveChangesAsync(); return obj.ID; } - public async Task CreateIfNotExists(ProviderID obj) + public async Task CreateIfNotExists(ProviderID obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); diff --git a/Kyoo/Controllers/Repositories/SeasonRepository.cs b/Kyoo/Controllers/Repositories/SeasonRepository.cs index 686308dc..bf06c538 100644 --- a/Kyoo/Controllers/Repositories/SeasonRepository.cs +++ b/Kyoo/Controllers/Repositories/SeasonRepository.cs @@ -5,22 +5,23 @@ using System.Threading.Tasks; using Kyoo.Models; using Kyoo.Models.Exceptions; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; namespace Kyoo.Controllers { public class SeasonRepository : ISeasonRepository { private readonly DatabaseContext _database; - private readonly IProviderRepository _providers; + private readonly IServiceProvider _serviceProvider; - public SeasonRepository(DatabaseContext database, IProviderRepository providers) + public SeasonRepository(DatabaseContext database, IServiceProvider serviceProvider) { _database = database; - _providers = providers; + _serviceProvider = serviceProvider; } - public async Task Get(long id) + public async Task Get(int id) { return await _database.Seasons.FirstOrDefaultAsync(x => x.ID == id); } @@ -31,12 +32,12 @@ namespace Kyoo.Controllers if (index == -1) throw new InvalidOperationException("Invalid season slug. Format: {showSlug}-s{seasonNumber}"); string showSlug = slug.Substring(0, index); - if (!long.TryParse(slug.Substring(index + 2), out long seasonNumber)) + if (!int.TryParse(slug.Substring(index + 2), out int seasonNumber)) throw new InvalidOperationException("Invalid season slug. Format: {showSlug}-s{seasonNumber}"); return Get(showSlug, seasonNumber); } - public async Task Get(string showSlug, long seasonNumber) + public async Task Get(string showSlug, int seasonNumber) { return await _database.Seasons.FirstOrDefaultAsync(x => x.Show.Slug == showSlug && x.SeasonNumber == seasonNumber); @@ -55,7 +56,7 @@ namespace Kyoo.Controllers return await _database.Seasons.ToListAsync(); } - public async Task Create(Season obj) + public async Task Create(Season obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); @@ -69,7 +70,7 @@ namespace Kyoo.Controllers return obj.ID; } - public async Task CreateIfNotExists(Season obj) + public async Task CreateIfNotExists(Season obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); @@ -102,12 +103,18 @@ namespace Kyoo.Controllers { if (obj.ShowID <= 0) throw new InvalidOperationException($"Can't store a season not related to any show (showID: {obj.ShowID})."); - - obj.ExternalIDs = (await Task.WhenAll(obj.ExternalIDs.Select(async x => + + if (obj.ExternalIDs != null) { - x.ProviderID = await _providers.CreateIfNotExists(x.Provider); - return x; - }))).ToList(); + obj.ExternalIDs = (await Task.WhenAll(obj.ExternalIDs.Select(async x => + { + using IServiceScope serviceScope = _serviceProvider.CreateScope(); + IProviderRepository providers = serviceScope.ServiceProvider.GetService(); + + x.ProviderID = await providers.CreateIfNotExists(x.Provider); + return x; + }))).ToList(); + } } public async Task Delete(Season obj) @@ -116,7 +123,7 @@ namespace Kyoo.Controllers await _database.SaveChangesAsync(); } - public async Task> GetSeasons(long showID) + public async Task> GetSeasons(int showID) { return await _database.Seasons.Where(x => x.ShowID == showID).ToListAsync(); } diff --git a/Kyoo/Controllers/Repositories/ShowRepository.cs b/Kyoo/Controllers/Repositories/ShowRepository.cs index 21ce741b..b8e2e2d8 100644 --- a/Kyoo/Controllers/Repositories/ShowRepository.cs +++ b/Kyoo/Controllers/Repositories/ShowRepository.cs @@ -5,31 +5,26 @@ using System.Threading.Tasks; using Kyoo.Models; using Kyoo.Models.Exceptions; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; namespace Kyoo.Controllers { public class ShowRepository : IShowRepository { private readonly DatabaseContext _database; - private readonly IGenreRepository _genres; - private readonly IPeopleRepository _people; - private readonly IStudioRepository _studio; - private readonly IProviderRepository _providers; + private readonly IServiceProvider _serviceProvider; + private readonly IStudioRepository _studios; public ShowRepository(DatabaseContext database, - IGenreRepository genres, - IPeopleRepository people, - IStudioRepository studio, - IProviderRepository providers) + IServiceProvider serviceProvider, + IStudioRepository studios) { _database = database; - _genres = genres; - _people = people; - _studio = studio; - _providers = providers; + _serviceProvider = serviceProvider; + _studios = studios; } - public async Task Get(long id) + public async Task Get(int id) { return await _database.Shows.FirstOrDefaultAsync(x => x.ID == id); } @@ -58,22 +53,18 @@ namespace Kyoo.Controllers return await _database.Shows.ToListAsync(); } - public async Task Create(Show obj) + public async Task Create(Show obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); await Validate(obj); - - obj.Seasons = null; - obj.Episodes = null; - - await _database.Shows.AddAsync(obj); + _database.Entry(obj).State = EntityState.Added; await _database.SaveChangesAsync(); return obj.ID; } - public async Task CreateIfNotExists(Show obj) + public async Task CreateIfNotExists(Show obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); @@ -103,22 +94,44 @@ namespace Kyoo.Controllers private async Task Validate(Show obj) { - obj.StudioID = await _studio.CreateIfNotExists(obj.Studio); - obj.GenreLinks = (await Task.WhenAll(obj.GenreLinks.Select(async x => + if (obj.Studio != null) + obj.StudioID = await _studios.CreateIfNotExists(obj.Studio); + + if (obj.GenreLinks != null) { - x.GenreID = await _genres.CreateIfNotExists(x.Genre); - return x; - }))).ToList(); - obj.People = (await Task.WhenAll(obj.People.Select(async x => + obj.GenreLinks = (await Task.WhenAll(obj.GenreLinks.Select(async x => + { + using IServiceScope serviceScope = _serviceProvider.CreateScope(); + IGenreRepository genres = serviceScope.ServiceProvider.GetService(); + + x.GenreID = await genres.CreateIfNotExists(x.Genre); + return x; + }))).ToList(); + } + + if (obj.People != null) { - x.PeopleID = await _people.CreateIfNotExists(x.People); - return x; - }))).ToList(); - obj.ExternalIDs = (await Task.WhenAll(obj.ExternalIDs.Select(async x => + obj.People = (await Task.WhenAll(obj.People.Select(async x => + { + using IServiceScope serviceScope = _serviceProvider.CreateScope(); + IPeopleRepository people = serviceScope.ServiceProvider.GetService(); + + x.PeopleID = await people.CreateIfNotExists(x.People); + return x; + }))).ToList(); + } + + if (obj.ExternalIDs != null) { - x.ProviderID = await _providers.CreateIfNotExists(x.Provider); - return x; - }))).ToList(); + obj.ExternalIDs = (await Task.WhenAll(obj.ExternalIDs.Select(async x => + { + using IServiceScope serviceScope = _serviceProvider.CreateScope(); + IProviderRepository providers = serviceScope.ServiceProvider.GetService(); + + x.ProviderID = await providers.CreateIfNotExists(x.Provider); + return x; + }))).ToList(); + } } public async Task Delete(Show show) @@ -127,7 +140,7 @@ namespace Kyoo.Controllers await _database.SaveChangesAsync(); } - public Task AddShowLink(long showID, long? libraryID, long? collectionID) + public async Task AddShowLink(int showID, int? libraryID, int? collectionID) { if (collectionID != null) { @@ -147,7 +160,7 @@ namespace Kyoo.Controllers x => x.LibraryID == libraryID && x.CollectionID == collectionID && x.ShowID == null); } - return Task.CompletedTask; + await _database.SaveChangesAsync(); } } } \ No newline at end of file diff --git a/Kyoo/Controllers/Repositories/StudioRepository.cs b/Kyoo/Controllers/Repositories/StudioRepository.cs index f531d7c1..a51f4ba5 100644 --- a/Kyoo/Controllers/Repositories/StudioRepository.cs +++ b/Kyoo/Controllers/Repositories/StudioRepository.cs @@ -18,7 +18,7 @@ namespace Kyoo.Controllers _database = database; } - public async Task Get(long id) + public async Task Get(int id) { return await _database.Studios.FirstOrDefaultAsync(x => x.ID == id); } @@ -41,7 +41,7 @@ namespace Kyoo.Controllers return await _database.Studios.ToListAsync(); } - public async Task Create(Studio obj) + public async Task Create(Studio obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); @@ -51,7 +51,7 @@ namespace Kyoo.Controllers return obj.ID; } - public async Task CreateIfNotExists(Studio obj) + public async Task CreateIfNotExists(Studio obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); diff --git a/Kyoo/Controllers/Repositories/TrackRepository.cs b/Kyoo/Controllers/Repositories/TrackRepository.cs index be67ab2c..6037889c 100644 --- a/Kyoo/Controllers/Repositories/TrackRepository.cs +++ b/Kyoo/Controllers/Repositories/TrackRepository.cs @@ -17,7 +17,7 @@ namespace Kyoo.Controllers _database = database; } - public async Task Get(long id) + public async Task Get(int id) { return await _database.Tracks.FirstOrDefaultAsync(x => x.ID == id); } @@ -27,7 +27,7 @@ namespace Kyoo.Controllers throw new InvalidOperationException("Tracks do not support the get by slug method."); } - public Task Get(long episodeID, string languageTag, bool isForced) + public Task Get(int episodeID, string languageTag, bool isForced) { return _database.Tracks.FirstOrDefaultAsync(x => x.EpisodeID == episodeID && x.Language == languageTag @@ -44,7 +44,7 @@ namespace Kyoo.Controllers return await _database.Tracks.ToListAsync(); } - public async Task Create(Track obj) + public async Task Create(Track obj) { if (obj == null) throw new ArgumentNullException(nameof(obj)); @@ -58,7 +58,7 @@ namespace Kyoo.Controllers return obj.ID; } - public Task CreateIfNotExists(Track obj) + public Task CreateIfNotExists(Track obj) { return Create(obj); } diff --git a/Kyoo/Models/DatabaseMigrations/Internal/20200526235513_Initial.Designer.cs b/Kyoo/Models/DatabaseMigrations/Internal/20200607010830_Initial.Designer.cs similarity index 80% rename from Kyoo/Models/DatabaseMigrations/Internal/20200526235513_Initial.Designer.cs rename to Kyoo/Models/DatabaseMigrations/Internal/20200607010830_Initial.Designer.cs index 559076f9..1aaddf9b 100644 --- a/Kyoo/Models/DatabaseMigrations/Internal/20200526235513_Initial.Designer.cs +++ b/Kyoo/Models/DatabaseMigrations/Internal/20200607010830_Initial.Designer.cs @@ -10,7 +10,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; namespace Kyoo.Models.DatabaseMigrations.Internal { [DbContext(typeof(DatabaseContext))] - [Migration("20200526235513_Initial")] + [Migration("20200607010830_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -23,9 +23,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.Collection", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("ImgPrimary") @@ -53,16 +53,16 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.CollectionLink", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); - b.Property("CollectionID") - .HasColumnType("bigint"); + b.Property("CollectionID") + .HasColumnType("integer"); - b.Property("ShowID") - .HasColumnType("bigint"); + b.Property("ShowID") + .HasColumnType("integer"); b.HasKey("ID"); @@ -75,16 +75,16 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.Episode", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); - b.Property("AbsoluteNumber") - .HasColumnType("bigint"); + b.Property("AbsoluteNumber") + .HasColumnType("integer"); - b.Property("EpisodeNumber") - .HasColumnType("bigint"); + b.Property("EpisodeNumber") + .HasColumnType("integer"); b.Property("ImgPrimary") .HasColumnType("text"); @@ -98,17 +98,17 @@ namespace Kyoo.Models.DatabaseMigrations.Internal b.Property("ReleaseDate") .HasColumnType("timestamp without time zone"); - b.Property("Runtime") - .HasColumnType("bigint"); + b.Property("Runtime") + .HasColumnType("integer"); - b.Property("SeasonID") - .HasColumnType("bigint"); + b.Property("SeasonID") + .HasColumnType("integer"); - b.Property("SeasonNumber") - .HasColumnType("bigint"); + b.Property("SeasonNumber") + .HasColumnType("integer"); - b.Property("ShowID") - .HasColumnType("bigint"); + b.Property("ShowID") + .HasColumnType("integer"); b.Property("Title") .HasColumnType("text"); @@ -124,9 +124,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.Genre", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") @@ -145,11 +145,11 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.GenreLink", b => { - b.Property("ShowID") - .HasColumnType("bigint"); + b.Property("ShowID") + .HasColumnType("integer"); - b.Property("GenreID") - .HasColumnType("bigint"); + b.Property("GenreID") + .HasColumnType("integer"); b.HasKey("ShowID", "GenreID"); @@ -160,9 +160,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.Library", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") @@ -184,19 +184,19 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.LibraryLink", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); - b.Property("CollectionID") - .HasColumnType("bigint"); + b.Property("CollectionID") + .HasColumnType("integer"); - b.Property("LibraryID") - .HasColumnType("bigint"); + b.Property("LibraryID") + .HasColumnType("integer"); - b.Property("ShowID") - .HasColumnType("bigint"); + b.Property("ShowID") + .HasColumnType("integer"); b.HasKey("ID"); @@ -211,31 +211,31 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.MetadataID", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("DataID") .HasColumnType("text"); - b.Property("EpisodeID") - .HasColumnType("bigint"); + b.Property("EpisodeID") + .HasColumnType("integer"); b.Property("Link") .HasColumnType("text"); - b.Property("PeopleID") - .HasColumnType("bigint"); + b.Property("PeopleID") + .HasColumnType("integer"); - b.Property("ProviderID") - .HasColumnType("bigint"); + b.Property("ProviderID") + .HasColumnType("integer"); - b.Property("SeasonID") - .HasColumnType("bigint"); + b.Property("SeasonID") + .HasColumnType("integer"); - b.Property("ShowID") - .HasColumnType("bigint"); + b.Property("ShowID") + .HasColumnType("integer"); b.HasKey("ID"); @@ -254,9 +254,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.People", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("ImgPrimary") @@ -278,19 +278,19 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.PeopleLink", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); - b.Property("PeopleID") - .HasColumnType("bigint"); + b.Property("PeopleID") + .HasColumnType("integer"); b.Property("Role") .HasColumnType("text"); - b.Property("ShowID") - .HasColumnType("bigint"); + b.Property("ShowID") + .HasColumnType("integer"); b.Property("Type") .HasColumnType("text"); @@ -306,9 +306,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.ProviderID", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Logo") @@ -327,16 +327,16 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.ProviderLink", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); - b.Property("LibraryID") - .HasColumnType("bigint"); + b.Property("LibraryID") + .HasColumnType("integer"); - b.Property("ProviderID") - .HasColumnType("bigint"); + b.Property("ProviderID") + .HasColumnType("integer"); b.HasKey("ID"); @@ -349,9 +349,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.Season", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("ImgPrimary") @@ -360,17 +360,17 @@ namespace Kyoo.Models.DatabaseMigrations.Internal b.Property("Overview") .HasColumnType("text"); - b.Property("SeasonNumber") - .HasColumnType("bigint"); + b.Property("SeasonNumber") + .HasColumnType("integer"); - b.Property("ShowID") - .HasColumnType("bigint"); + b.Property("ShowID") + .HasColumnType("integer"); b.Property("Title") .HasColumnType("text"); - b.Property("Year") - .HasColumnType("bigint"); + b.Property("Year") + .HasColumnType("integer"); b.HasKey("ID"); @@ -381,9 +381,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.Show", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Aliases") @@ -392,8 +392,8 @@ namespace Kyoo.Models.DatabaseMigrations.Internal b.Property("Backdrop") .HasColumnType("text"); - b.Property("EndYear") - .HasColumnType("bigint"); + b.Property("EndYear") + .HasColumnType("integer"); b.Property("IsMovie") .HasColumnType("boolean"); @@ -413,14 +413,14 @@ namespace Kyoo.Models.DatabaseMigrations.Internal b.Property("Slug") .HasColumnType("text"); - b.Property("StartYear") - .HasColumnType("bigint"); + b.Property("StartYear") + .HasColumnType("integer"); b.Property("Status") .HasColumnType("integer"); - b.Property("StudioID") - .HasColumnType("bigint"); + b.Property("StudioID") + .HasColumnType("integer"); b.Property("Title") .HasColumnType("text"); @@ -440,9 +440,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.Studio", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") @@ -461,16 +461,16 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.Track", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Codec") .HasColumnType("text"); - b.Property("EpisodeID") - .HasColumnType("bigint"); + b.Property("EpisodeID") + .HasColumnType("integer"); b.Property("IsDefault") .HasColumnType("boolean"); diff --git a/Kyoo/Models/DatabaseMigrations/Internal/20200526235513_Initial.cs b/Kyoo/Models/DatabaseMigrations/Internal/20200607010830_Initial.cs similarity index 88% rename from Kyoo/Models/DatabaseMigrations/Internal/20200526235513_Initial.cs rename to Kyoo/Models/DatabaseMigrations/Internal/20200607010830_Initial.cs index d3b90b3a..f83d1361 100644 --- a/Kyoo/Models/DatabaseMigrations/Internal/20200526235513_Initial.cs +++ b/Kyoo/Models/DatabaseMigrations/Internal/20200607010830_Initial.cs @@ -12,7 +12,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal name: "Collections", columns: table => new { - ID = table.Column(nullable: false) + ID = table.Column(nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), Slug = table.Column(nullable: true), Name = table.Column(nullable: true), @@ -29,7 +29,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal name: "Genres", columns: table => new { - ID = table.Column(nullable: false) + ID = table.Column(nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), Slug = table.Column(nullable: true), Name = table.Column(nullable: true) @@ -43,7 +43,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal name: "Libraries", columns: table => new { - ID = table.Column(nullable: false) + ID = table.Column(nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), Slug = table.Column(nullable: true), Name = table.Column(nullable: true), @@ -58,7 +58,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal name: "Peoples", columns: table => new { - ID = table.Column(nullable: false) + ID = table.Column(nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), Slug = table.Column(nullable: true), Name = table.Column(nullable: true), @@ -73,7 +73,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal name: "Providers", columns: table => new { - ID = table.Column(nullable: false) + ID = table.Column(nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), Name = table.Column(nullable: true), Logo = table.Column(nullable: true) @@ -87,7 +87,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal name: "Studios", columns: table => new { - ID = table.Column(nullable: false) + ID = table.Column(nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), Slug = table.Column(nullable: true), Name = table.Column(nullable: true) @@ -101,10 +101,10 @@ namespace Kyoo.Models.DatabaseMigrations.Internal name: "ProviderLinks", columns: table => new { - ID = table.Column(nullable: false) + ID = table.Column(nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - ProviderID = table.Column(nullable: false), - LibraryID = table.Column(nullable: true) + ProviderID = table.Column(nullable: false), + LibraryID = table.Column(nullable: true) }, constraints: table => { @@ -127,7 +127,7 @@ namespace Kyoo.Models.DatabaseMigrations.Internal name: "Shows", columns: table => new { - ID = table.Column(nullable: false) + ID = table.Column(nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), Slug = table.Column(nullable: true), Title = table.Column(nullable: true), @@ -136,13 +136,13 @@ namespace Kyoo.Models.DatabaseMigrations.Internal Overview = table.Column(nullable: true), Status = table.Column(nullable: true), TrailerUrl = table.Column(nullable: true), - StartYear = table.Column(nullable: true), - EndYear = table.Column(nullable: true), + StartYear = table.Column(nullable: true), + EndYear = table.Column(nullable: true), Poster = table.Column(nullable: true), Logo = table.Column(nullable: true), Backdrop = table.Column(nullable: true), IsMovie = table.Column(nullable: false), - StudioID = table.Column(nullable: true) + StudioID = table.Column(nullable: true) }, constraints: table => { @@ -159,10 +159,10 @@ namespace Kyoo.Models.DatabaseMigrations.Internal name: "CollectionLinks", columns: table => new { - ID = table.Column(nullable: false) + ID = table.Column(nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - CollectionID = table.Column(nullable: true), - ShowID = table.Column(nullable: false) + CollectionID = table.Column(nullable: true), + ShowID = table.Column(nullable: false) }, constraints: table => { @@ -185,8 +185,8 @@ namespace Kyoo.Models.DatabaseMigrations.Internal name: "GenreLinks", columns: table => new { - ShowID = table.Column(nullable: false), - GenreID = table.Column(nullable: false) + ShowID = table.Column(nullable: false), + GenreID = table.Column(nullable: false) }, constraints: table => { @@ -209,11 +209,11 @@ namespace Kyoo.Models.DatabaseMigrations.Internal name: "LibraryLinks", columns: table => new { - ID = table.Column(nullable: false) + ID = table.Column(nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - LibraryID = table.Column(nullable: false), - ShowID = table.Column(nullable: true), - CollectionID = table.Column(nullable: true) + LibraryID = table.Column(nullable: false), + ShowID = table.Column(nullable: true), + CollectionID = table.Column(nullable: true) }, constraints: table => { @@ -242,10 +242,10 @@ namespace Kyoo.Models.DatabaseMigrations.Internal name: "PeopleLinks", columns: table => new { - ID = table.Column(nullable: false) + ID = table.Column(nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - PeopleID = table.Column(nullable: false), - ShowID = table.Column(nullable: false), + PeopleID = table.Column(nullable: false), + ShowID = table.Column(nullable: false), Role = table.Column(nullable: true), Type = table.Column(nullable: true) }, @@ -270,13 +270,13 @@ namespace Kyoo.Models.DatabaseMigrations.Internal name: "Seasons", columns: table => new { - ID = table.Column(nullable: false) + ID = table.Column(nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - ShowID = table.Column(nullable: false), - SeasonNumber = table.Column(nullable: false), + ShowID = table.Column(nullable: false), + SeasonNumber = table.Column(nullable: false), Title = table.Column(nullable: true), Overview = table.Column(nullable: true), - Year = table.Column(nullable: true), + Year = table.Column(nullable: true), ImgPrimary = table.Column(nullable: true) }, constraints: table => @@ -294,18 +294,18 @@ namespace Kyoo.Models.DatabaseMigrations.Internal name: "Episodes", columns: table => new { - ID = table.Column(nullable: false) + ID = table.Column(nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - ShowID = table.Column(nullable: false), - SeasonID = table.Column(nullable: true), - SeasonNumber = table.Column(nullable: false), - EpisodeNumber = table.Column(nullable: false), - AbsoluteNumber = table.Column(nullable: false), + ShowID = table.Column(nullable: false), + SeasonID = table.Column(nullable: true), + SeasonNumber = table.Column(nullable: false), + EpisodeNumber = table.Column(nullable: false), + AbsoluteNumber = table.Column(nullable: false), Path = table.Column(nullable: true), Title = table.Column(nullable: true), Overview = table.Column(nullable: true), ReleaseDate = table.Column(nullable: true), - Runtime = table.Column(nullable: false), + Runtime = table.Column(nullable: false), ImgPrimary = table.Column(nullable: true) }, constraints: table => @@ -329,13 +329,13 @@ namespace Kyoo.Models.DatabaseMigrations.Internal name: "MetadataIds", columns: table => new { - ID = table.Column(nullable: false) + ID = table.Column(nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), - ProviderID = table.Column(nullable: false), - ShowID = table.Column(nullable: true), - EpisodeID = table.Column(nullable: true), - SeasonID = table.Column(nullable: true), - PeopleID = table.Column(nullable: true), + ProviderID = table.Column(nullable: false), + ShowID = table.Column(nullable: true), + EpisodeID = table.Column(nullable: true), + SeasonID = table.Column(nullable: true), + PeopleID = table.Column(nullable: true), DataID = table.Column(nullable: true), Link = table.Column(nullable: true) }, @@ -378,14 +378,14 @@ namespace Kyoo.Models.DatabaseMigrations.Internal name: "Tracks", columns: table => new { - ID = table.Column(nullable: false) + ID = table.Column(nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), Title = table.Column(nullable: true), Language = table.Column(nullable: true), Codec = table.Column(nullable: true), Path = table.Column(nullable: true), Type = table.Column(nullable: false), - EpisodeID = table.Column(nullable: false), + EpisodeID = table.Column(nullable: false), IsDefault = table.Column(nullable: false), IsForced = table.Column(nullable: false), IsExternal = table.Column(nullable: false) diff --git a/Kyoo/Models/DatabaseMigrations/Internal/DatabaseContextModelSnapshot.cs b/Kyoo/Models/DatabaseMigrations/Internal/DatabaseContextModelSnapshot.cs index be3dd87f..a0e42322 100644 --- a/Kyoo/Models/DatabaseMigrations/Internal/DatabaseContextModelSnapshot.cs +++ b/Kyoo/Models/DatabaseMigrations/Internal/DatabaseContextModelSnapshot.cs @@ -21,9 +21,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.Collection", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("ImgPrimary") @@ -51,16 +51,16 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.CollectionLink", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); - b.Property("CollectionID") - .HasColumnType("bigint"); + b.Property("CollectionID") + .HasColumnType("integer"); - b.Property("ShowID") - .HasColumnType("bigint"); + b.Property("ShowID") + .HasColumnType("integer"); b.HasKey("ID"); @@ -73,16 +73,16 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.Episode", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); - b.Property("AbsoluteNumber") - .HasColumnType("bigint"); + b.Property("AbsoluteNumber") + .HasColumnType("integer"); - b.Property("EpisodeNumber") - .HasColumnType("bigint"); + b.Property("EpisodeNumber") + .HasColumnType("integer"); b.Property("ImgPrimary") .HasColumnType("text"); @@ -96,17 +96,17 @@ namespace Kyoo.Models.DatabaseMigrations.Internal b.Property("ReleaseDate") .HasColumnType("timestamp without time zone"); - b.Property("Runtime") - .HasColumnType("bigint"); + b.Property("Runtime") + .HasColumnType("integer"); - b.Property("SeasonID") - .HasColumnType("bigint"); + b.Property("SeasonID") + .HasColumnType("integer"); - b.Property("SeasonNumber") - .HasColumnType("bigint"); + b.Property("SeasonNumber") + .HasColumnType("integer"); - b.Property("ShowID") - .HasColumnType("bigint"); + b.Property("ShowID") + .HasColumnType("integer"); b.Property("Title") .HasColumnType("text"); @@ -122,9 +122,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.Genre", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") @@ -143,11 +143,11 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.GenreLink", b => { - b.Property("ShowID") - .HasColumnType("bigint"); + b.Property("ShowID") + .HasColumnType("integer"); - b.Property("GenreID") - .HasColumnType("bigint"); + b.Property("GenreID") + .HasColumnType("integer"); b.HasKey("ShowID", "GenreID"); @@ -158,9 +158,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.Library", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") @@ -182,19 +182,19 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.LibraryLink", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); - b.Property("CollectionID") - .HasColumnType("bigint"); + b.Property("CollectionID") + .HasColumnType("integer"); - b.Property("LibraryID") - .HasColumnType("bigint"); + b.Property("LibraryID") + .HasColumnType("integer"); - b.Property("ShowID") - .HasColumnType("bigint"); + b.Property("ShowID") + .HasColumnType("integer"); b.HasKey("ID"); @@ -209,31 +209,31 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.MetadataID", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("DataID") .HasColumnType("text"); - b.Property("EpisodeID") - .HasColumnType("bigint"); + b.Property("EpisodeID") + .HasColumnType("integer"); b.Property("Link") .HasColumnType("text"); - b.Property("PeopleID") - .HasColumnType("bigint"); + b.Property("PeopleID") + .HasColumnType("integer"); - b.Property("ProviderID") - .HasColumnType("bigint"); + b.Property("ProviderID") + .HasColumnType("integer"); - b.Property("SeasonID") - .HasColumnType("bigint"); + b.Property("SeasonID") + .HasColumnType("integer"); - b.Property("ShowID") - .HasColumnType("bigint"); + b.Property("ShowID") + .HasColumnType("integer"); b.HasKey("ID"); @@ -252,9 +252,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.People", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("ImgPrimary") @@ -276,19 +276,19 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.PeopleLink", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); - b.Property("PeopleID") - .HasColumnType("bigint"); + b.Property("PeopleID") + .HasColumnType("integer"); b.Property("Role") .HasColumnType("text"); - b.Property("ShowID") - .HasColumnType("bigint"); + b.Property("ShowID") + .HasColumnType("integer"); b.Property("Type") .HasColumnType("text"); @@ -304,9 +304,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.ProviderID", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Logo") @@ -325,16 +325,16 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.ProviderLink", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); - b.Property("LibraryID") - .HasColumnType("bigint"); + b.Property("LibraryID") + .HasColumnType("integer"); - b.Property("ProviderID") - .HasColumnType("bigint"); + b.Property("ProviderID") + .HasColumnType("integer"); b.HasKey("ID"); @@ -347,9 +347,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.Season", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("ImgPrimary") @@ -358,17 +358,17 @@ namespace Kyoo.Models.DatabaseMigrations.Internal b.Property("Overview") .HasColumnType("text"); - b.Property("SeasonNumber") - .HasColumnType("bigint"); + b.Property("SeasonNumber") + .HasColumnType("integer"); - b.Property("ShowID") - .HasColumnType("bigint"); + b.Property("ShowID") + .HasColumnType("integer"); b.Property("Title") .HasColumnType("text"); - b.Property("Year") - .HasColumnType("bigint"); + b.Property("Year") + .HasColumnType("integer"); b.HasKey("ID"); @@ -379,9 +379,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.Show", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Aliases") @@ -390,8 +390,8 @@ namespace Kyoo.Models.DatabaseMigrations.Internal b.Property("Backdrop") .HasColumnType("text"); - b.Property("EndYear") - .HasColumnType("bigint"); + b.Property("EndYear") + .HasColumnType("integer"); b.Property("IsMovie") .HasColumnType("boolean"); @@ -411,14 +411,14 @@ namespace Kyoo.Models.DatabaseMigrations.Internal b.Property("Slug") .HasColumnType("text"); - b.Property("StartYear") - .HasColumnType("bigint"); + b.Property("StartYear") + .HasColumnType("integer"); b.Property("Status") .HasColumnType("integer"); - b.Property("StudioID") - .HasColumnType("bigint"); + b.Property("StudioID") + .HasColumnType("integer"); b.Property("Title") .HasColumnType("text"); @@ -438,9 +438,9 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.Studio", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Name") @@ -459,16 +459,16 @@ namespace Kyoo.Models.DatabaseMigrations.Internal modelBuilder.Entity("Kyoo.Models.Track", b => { - b.Property("ID") + b.Property("ID") .ValueGeneratedOnAdd() - .HasColumnType("bigint") + .HasColumnType("integer") .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); b.Property("Codec") .HasColumnType("text"); - b.Property("EpisodeID") - .HasColumnType("bigint"); + b.Property("EpisodeID") + .HasColumnType("integer"); b.Property("IsDefault") .HasColumnType("boolean"); diff --git a/Kyoo/Startup.cs b/Kyoo/Startup.cs index 22baaf05..bd1a5272 100644 --- a/Kyoo/Startup.cs +++ b/Kyoo/Startup.cs @@ -137,6 +137,18 @@ namespace Kyoo AllowedOrigins = { new Uri(publicUrl).GetLeftPart(UriPartial.Authority) } }); + + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddTransient(); + services.AddScoped(); services.AddSingleton(); services.AddSingleton(); diff --git a/Kyoo/Tasks/Crawler.cs b/Kyoo/Tasks/Crawler.cs index 70a88b6c..3a5c8ae9 100644 --- a/Kyoo/Tasks/Crawler.cs +++ b/Kyoo/Tasks/Crawler.cs @@ -134,9 +134,9 @@ namespace Kyoo.Controllers string showPath = Path.GetDirectoryName(path); string collectionName = match.Groups["Collection"]?.Value; string showName = match.Groups["ShowTitle"].Value; - long seasonNumber = long.TryParse(match.Groups["Season"].Value, out long tmp) ? tmp : -1; - long episodeNumber = long.TryParse(match.Groups["Episode"].Value, out tmp) ? tmp : -1; - long absoluteNumber = long.TryParse(match.Groups["Absolute"].Value, out tmp) ? tmp : -1; + int seasonNumber = int.TryParse(match.Groups["Season"].Value, out int tmp) ? tmp : -1; + int episodeNumber = int.TryParse(match.Groups["Episode"].Value, out tmp) ? tmp : -1; + int absoluteNumber = int.TryParse(match.Groups["Absolute"].Value, out tmp) ? tmp : -1; Collection collection = await GetCollection(libraryManager, collectionName, library); bool isMovie = seasonNumber == -1 && episodeNumber == -1 && absoluteNumber == -1; @@ -188,7 +188,7 @@ namespace Kyoo.Controllers private async Task GetSeason(ILibraryManager libraryManager, Show show, - long seasonNumber, + int seasonNumber, Library library) { if (seasonNumber == -1) @@ -207,8 +207,8 @@ namespace Kyoo.Controllers private async Task GetEpisode(ILibraryManager libraryManager, Show show, Season season, - long episodeNumber, - long absoluteNumber, + int episodeNumber, + int absoluteNumber, string episodePath, Library library) { @@ -221,6 +221,7 @@ namespace Kyoo.Controllers season ??= await GetSeason(libraryManager, show, episode.SeasonNumber, library); episode.Season = season; + episode.SeasonID = season?.ID; if (season == null) { await Console.Error.WriteLineAsync("Error: You don't have any provider that support absolute epiode numbering. Install one and try again."); @@ -234,7 +235,13 @@ namespace Kyoo.Controllers private async Task GetMovie(Show show, string episodePath) { - Episode episode = new Episode {Title = show.Title, Path = episodePath, Show = show}; + Episode episode = new Episode + { + Title = show.Title, + Path = episodePath, + Show = show, + ShowID = show.ID + }; episode.Tracks = await GetTracks(episode); return episode; } diff --git a/Kyoo/Views/API/EpisodesAPI.cs b/Kyoo/Views/API/EpisodesAPI.cs index 4e0dbb5b..abf0650d 100644 --- a/Kyoo/Views/API/EpisodesAPI.cs +++ b/Kyoo/Views/API/EpisodesAPI.cs @@ -21,7 +21,7 @@ namespace Kyoo.Api [HttpGet("{showSlug}/season/{seasonNumber}")] [Authorize(Policy="Read")] - public async Task>> GetEpisodesForSeason(string showSlug, long seasonNumber) + public async Task>> GetEpisodesForSeason(string showSlug, int seasonNumber) { IEnumerable episodes = await _libraryManager.GetEpisodes(showSlug, seasonNumber); @@ -34,7 +34,7 @@ namespace Kyoo.Api [HttpGet("{showSlug}/season/{seasonNumber}/episode/{episodeNumber}")] [Authorize(Policy="Read")] [JsonDetailed] - public async Task> GetEpisode(string showSlug, long seasonNumber, long episodeNumber) + public async Task> GetEpisode(string showSlug, int seasonNumber, int episodeNumber) { Episode episode = await _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber); diff --git a/Kyoo/Views/API/LibrariesAPI.cs b/Kyoo/Views/API/LibrariesAPI.cs index 73a5f907..eeeee468 100644 --- a/Kyoo/Views/API/LibrariesAPI.cs +++ b/Kyoo/Views/API/LibrariesAPI.cs @@ -41,7 +41,7 @@ namespace Kyoo.Api return BadRequest(new {error = "The library's name must be set and not empty"}); if (library.Paths == null || !library.Paths.Any()) return BadRequest(new {error = "The library should have a least one path."}); - if (_libraryManager.GetLibrary(library.Slug) != null) + if (await _libraryManager.GetLibrary(library.Slug) != null) return BadRequest(new {error = "Duplicated library slug"}); await _libraryManager.RegisterLibrary(library); _taskManager.StartTask("scan", library.Slug); diff --git a/Kyoo/Views/API/SubtitleAPI.cs b/Kyoo/Views/API/SubtitleAPI.cs index ea0c73e2..37685101 100644 --- a/Kyoo/Views/API/SubtitleAPI.cs +++ b/Kyoo/Views/API/SubtitleAPI.cs @@ -43,7 +43,7 @@ namespace Kyoo.Api string idString = identifier.IndexOf('-') != -1 ? identifier.Substring(0, identifier.IndexOf('-')) : identifier; - long.TryParse(idString, out long id); + int.TryParse(idString, out int id); subtitle = await _libraryManager.GetTrack(id); } diff --git a/Kyoo/Views/API/ThumbnailAPI.cs b/Kyoo/Views/API/ThumbnailAPI.cs index 12b8035c..455c680d 100644 --- a/Kyoo/Views/API/ThumbnailAPI.cs +++ b/Kyoo/Views/API/ThumbnailAPI.cs @@ -77,7 +77,7 @@ namespace Kyoo.Api [HttpGet("thumb/{showSlug}-s{seasonNumber}e{episodeNumber}")] [Authorize(Policy="Read")] - public async Task GetEpisodeThumb(string showSlug, long seasonNumber, long episodeNumber) + public async Task GetEpisodeThumb(string showSlug, int seasonNumber, int episodeNumber) { string path = (await _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber))?.Path; if (path == null) diff --git a/Kyoo/Views/API/VideoAPI.cs b/Kyoo/Views/API/VideoAPI.cs index c8e6f164..2c12cea7 100644 --- a/Kyoo/Views/API/VideoAPI.cs +++ b/Kyoo/Views/API/VideoAPI.cs @@ -27,7 +27,7 @@ namespace Kyoo.Api [HttpGet("{showSlug}-s{seasonNumber}e{episodeNumber}")] [Authorize(Policy="Play")] - public async Task Index(string showSlug, long seasonNumber, long episodeNumber) + public async Task Index(string showSlug, int seasonNumber, int episodeNumber) { Episode episode = await _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber); @@ -38,7 +38,7 @@ namespace Kyoo.Api [HttpGet("transmux/{showSlug}-s{seasonNumber}e{episodeNumber}")] [Authorize(Policy="Play")] - public async Task Transmux(string showSlug, long seasonNumber, long episodeNumber) + public async Task Transmux(string showSlug, int seasonNumber, int episodeNumber) { Episode episode = await _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber); @@ -61,7 +61,7 @@ namespace Kyoo.Api [HttpGet("transcode/{showSlug}-s{seasonNumber}e{episodeNumber}")] [Authorize(Policy="Play")] - public async Task Transcode(string showSlug, long seasonNumber, long episodeNumber) + public async Task Transcode(string showSlug, int seasonNumber, int episodeNumber) { Episode episode = await _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber); diff --git a/Kyoo/Views/API/WatchAPI.cs b/Kyoo/Views/API/WatchAPI.cs index 3ef292f1..07039073 100644 --- a/Kyoo/Views/API/WatchAPI.cs +++ b/Kyoo/Views/API/WatchAPI.cs @@ -19,7 +19,7 @@ namespace Kyoo.Api [HttpGet("{showSlug}-s{seasonNumber}e{episodeNumber}")] [Authorize(Policy="Read")] - public async Task> Index(string showSlug, long seasonNumber, long episodeNumber) + public async Task> Index(string showSlug, int seasonNumber, int episodeNumber) { Episode item = await _libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber);