mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-24 02:02:36 -04:00
Starting to have a real implementation of EF
This commit is contained in:
parent
5181a6cf46
commit
a2a494d907
@ -9,7 +9,6 @@ namespace Kyoo.Controllers
|
||||
//Read values
|
||||
string GetShowExternalIDs(long showID);
|
||||
Studio GetStudio(long showID);
|
||||
IEnumerable<People> GetDirectors(long showID);
|
||||
IEnumerable<People> GetPeople(long showID);
|
||||
IEnumerable<Genre> GetGenreForShow(long showID);
|
||||
IEnumerable<Season> GetSeasons(long showID);
|
||||
@ -45,13 +44,10 @@ namespace Kyoo.Controllers
|
||||
IEnumerable<Studio> SearchStudios(string searchQuery);
|
||||
|
||||
//Check if value exists
|
||||
bool IsCollectionRegistered(string collectionSlug);
|
||||
bool IsCollectionRegistered(string collectionSlug, out long collectionID);
|
||||
bool IsShowRegistered(string showPath);
|
||||
bool IsShowRegistered(string showPath, out long showID);
|
||||
bool IsSeasonRegistered(long showID, long seasonNumber);
|
||||
bool IsSeasonRegistered(long showID, long seasonNumber, out long seasonID);
|
||||
bool IsEpisodeRegistered(string episodePath);
|
||||
bool IsEpisodeRegistered(string episodePath, out long episodeID);
|
||||
|
||||
//Register values
|
||||
long RegisterCollection(Collection collection);
|
||||
|
@ -7,7 +7,7 @@ namespace Kyoo.Models
|
||||
{
|
||||
public class Collection : IMergable<Collection>
|
||||
{
|
||||
[JsonIgnore] public long Id { get; set; } = -1;
|
||||
[JsonIgnore] public long ID { get; set; } = -1;
|
||||
public string Slug { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Poster { get; set; }
|
||||
@ -19,7 +19,7 @@ namespace Kyoo.Models
|
||||
|
||||
public Collection(long id, string slug, string name, string overview, string imgPrimary)
|
||||
{
|
||||
Id = id;
|
||||
ID = id;
|
||||
Slug = slug;
|
||||
Name = name;
|
||||
Overview = overview;
|
||||
@ -47,7 +47,7 @@ namespace Kyoo.Models
|
||||
|
||||
public Collection SetShows(ILibraryManager libraryManager)
|
||||
{
|
||||
Shows = libraryManager.GetShowsInCollection(Id);
|
||||
Shows = libraryManager.GetShowsInCollection(ID);
|
||||
return this;
|
||||
}
|
||||
|
||||
@ -55,8 +55,8 @@ namespace Kyoo.Models
|
||||
{
|
||||
if (collection == null)
|
||||
return this;
|
||||
if (Id == -1)
|
||||
Id = collection.Id;
|
||||
if (ID == -1)
|
||||
ID = collection.ID;
|
||||
if (Slug == null)
|
||||
Slug = collection.Slug;
|
||||
if (Name == null)
|
||||
|
@ -5,7 +5,7 @@ namespace Kyoo.Models
|
||||
{
|
||||
public class Episode : IMergable<Episode>
|
||||
{
|
||||
[JsonIgnore] public long Id { get; set; }
|
||||
[JsonIgnore] public long ID { get; set; }
|
||||
[JsonIgnore] public long ShowID { get; set; }
|
||||
public virtual Show Show { get; set; }
|
||||
[JsonIgnore] public long SeasonID { get; set; }
|
||||
@ -31,7 +31,7 @@ namespace Kyoo.Models
|
||||
|
||||
public Episode()
|
||||
{
|
||||
Id = -1;
|
||||
ID = -1;
|
||||
ShowID = -1;
|
||||
SeasonID = -1;
|
||||
SeasonNumber = -1;
|
||||
@ -41,7 +41,7 @@ namespace Kyoo.Models
|
||||
|
||||
public Episode(long seasonNumber, long episodeNumber, long absoluteNumber, string title, string overview, DateTime? releaseDate, long runtime, string imgPrimary, string externalIDs)
|
||||
{
|
||||
Id = -1;
|
||||
ID = -1;
|
||||
ShowID = -1;
|
||||
SeasonID = -1;
|
||||
SeasonNumber = seasonNumber;
|
||||
@ -57,7 +57,7 @@ namespace Kyoo.Models
|
||||
|
||||
public Episode(long id, long showID, long seasonID, long seasonNumber, long episodeNumber, long absoluteNumber, string path, string title, string overview, DateTime? releaseDate, long runtime, string imgPrimary, string externalIDs)
|
||||
{
|
||||
Id = id;
|
||||
ID = id;
|
||||
ShowID = showID;
|
||||
SeasonID = seasonID;
|
||||
SeasonNumber = seasonNumber;
|
||||
@ -112,8 +112,8 @@ namespace Kyoo.Models
|
||||
{
|
||||
if (other == null)
|
||||
return this;
|
||||
if (Id == -1)
|
||||
Id = other.Id;
|
||||
if (ID == -1)
|
||||
ID = other.ID;
|
||||
if (ShowID == -1)
|
||||
ShowID = other.ShowID;
|
||||
if (SeasonID == -1)
|
||||
|
@ -4,7 +4,7 @@ namespace Kyoo.Models
|
||||
{
|
||||
public class Genre
|
||||
{
|
||||
[JsonIgnore] public long Id { get; set; }
|
||||
[JsonIgnore] public long ID { get; set; }
|
||||
public string Slug { get; set; }
|
||||
public string Name { get; set; }
|
||||
|
||||
@ -16,7 +16,7 @@ namespace Kyoo.Models
|
||||
|
||||
public Genre(long id, string slug, string name)
|
||||
{
|
||||
Id = id;
|
||||
ID = id;
|
||||
Slug = slug;
|
||||
Name = name;
|
||||
}
|
||||
|
@ -9,8 +9,8 @@ namespace Kyoo.Models
|
||||
[JsonIgnore] public long ID { get; set; } = -1;
|
||||
public string Slug { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Role;//Dynamic data not stored as it in the database
|
||||
public string Type; //Dynamic data not stored as it in the database ---- Null for now
|
||||
public string Role;
|
||||
public string Type;
|
||||
[JsonIgnore] public string ImgPrimary { get; set; }
|
||||
public string ExternalIDs { get; set; }
|
||||
|
||||
@ -38,24 +38,11 @@ namespace Kyoo.Models
|
||||
ExternalIDs = externalIDs;
|
||||
}
|
||||
|
||||
public static People FromReader(System.Data.SQLite.SQLiteDataReader reader)
|
||||
public People SetRoleType(string role, string type)
|
||||
{
|
||||
return new People((long)reader["id"],
|
||||
reader["slug"] as string,
|
||||
reader["name"] as string,
|
||||
reader["imgPrimary"] as string,
|
||||
reader["externalIDs"] as string);
|
||||
}
|
||||
|
||||
public static People FromFullReader(System.Data.SQLite.SQLiteDataReader reader)
|
||||
{
|
||||
return new People((long)reader["id"],
|
||||
reader["slug"] as string,
|
||||
reader["name"] as string,
|
||||
reader["role"] as string,
|
||||
reader["type"] as string,
|
||||
reader["imgPrimary"] as string,
|
||||
reader["externalIDs"] as string);
|
||||
Role = role;
|
||||
Type = type;
|
||||
return this;
|
||||
}
|
||||
|
||||
public People Merge(People other)
|
||||
|
@ -8,7 +8,7 @@ namespace Kyoo.Models
|
||||
{
|
||||
public class Show : IMergable<Show>
|
||||
{
|
||||
[JsonIgnore] public long ID { get; set; } = -1;
|
||||
[JsonIgnore] public long ID { get; set; }
|
||||
|
||||
public string Slug { get; set; }
|
||||
public string Title { get; set; }
|
||||
|
@ -89,7 +89,7 @@ namespace Kyoo.Controllers
|
||||
|
||||
private async Task RegisterFile(string path, string relativePath, Library library)
|
||||
{
|
||||
if (!libraryManager.IsEpisodeRegistered(path))
|
||||
if (!libraryManager.IsEpisodeRegistered(path, out long _))
|
||||
{
|
||||
string patern = config.GetValue<string>("regex");
|
||||
Regex regex = new Regex(patern, RegexOptions.IgnoreCase);
|
||||
@ -117,7 +117,7 @@ namespace Kyoo.Controllers
|
||||
|
||||
if (!absoluteSucess)
|
||||
{
|
||||
Console.WriteLine("&Couldn't find basic data for the episode (regexs didn't match) " + relativePath);
|
||||
Console.Error.WriteLine("Couldn't find basic data for the episode (regexs didn't match) " + relativePath);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -183,7 +183,7 @@ namespace Kyoo.Controllers
|
||||
if (seasonID == -1)
|
||||
seasonID = await RegisterSeason(show, seasonNumber, library);
|
||||
episode.SeasonID = seasonID;
|
||||
episode.Id = libraryManager.RegisterEpisode(episode);
|
||||
episode.ID = libraryManager.RegisterEpisode(episode);
|
||||
|
||||
Track[] tracks = await transcoder.GetTrackInfo(episode.Path);
|
||||
int subcount = 0;
|
||||
@ -194,7 +194,7 @@ namespace Kyoo.Controllers
|
||||
subcount++;
|
||||
continue;
|
||||
}
|
||||
track.EpisodeID = episode.Id;
|
||||
track.EpisodeID = episode.ID;
|
||||
libraryManager.RegisterTrack(track);
|
||||
}
|
||||
|
||||
@ -205,7 +205,7 @@ namespace Kyoo.Controllers
|
||||
{
|
||||
foreach (Track track in subtitles)
|
||||
{
|
||||
track.EpisodeID = episode.Id;
|
||||
track.EpisodeID = episode.ID;
|
||||
libraryManager.RegisterTrack(track);
|
||||
}
|
||||
}
|
||||
@ -228,7 +228,7 @@ namespace Kyoo.Controllers
|
||||
string language = sub.Substring(Path.GetDirectoryName(sub).Length + episodeLink.Length + 2, 3);
|
||||
bool isDefault = sub.Contains("default");
|
||||
bool isForced = sub.Contains("forced");
|
||||
Track track = new Track(StreamType.Subtitle, null, language, isDefault, isForced, null, false, sub) { EpisodeID = episode.Id };
|
||||
Track track = new Track(StreamType.Subtitle, null, language, isDefault, isForced, null, false, sub) { EpisodeID = episode.ID };
|
||||
|
||||
if (Path.GetExtension(sub) == ".ass")
|
||||
track.Codec = "ass";
|
||||
|
@ -65,7 +65,7 @@ namespace Kyoo.Controllers
|
||||
{
|
||||
return (from show in _database.Shows join link in _database.CollectionLinks on show equals link.Show into gj
|
||||
from l in gj.DefaultIfEmpty()
|
||||
where l.CollectionID == null select l.Show).Union(
|
||||
where l.CollectionID == null select l.Show).AsEnumerable().Union(
|
||||
from collection in _database.Collections select collection.AsShow()).OrderBy(x => x.Title);
|
||||
}
|
||||
|
||||
@ -132,7 +132,7 @@ namespace Kyoo.Controllers
|
||||
{
|
||||
WatchItem item = (from episode in _database.Episodes where episode.SeasonNumber == seasonNumber
|
||||
&& episode.EpisodeNumber == episodeNumber && episode.Show.Slug == showSlug
|
||||
select new WatchItem(episode.Id,
|
||||
select new WatchItem(episode.ID,
|
||||
episode.Show.Title,
|
||||
episode.Show.Slug,
|
||||
seasonNumber,
|
||||
@ -158,350 +158,109 @@ namespace Kyoo.Controllers
|
||||
|
||||
public IEnumerable<People> GetPeople(long showID)
|
||||
{
|
||||
string query = "SELECT people.id, people.slug, people.name, people.imgPrimary, people.externalIDs, l.role, l.type FROM people JOIN peopleLinks l ON l.peopleID = people.id WHERE l.showID = $showID;";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$showID", showID);
|
||||
SQLiteDataReader reader = cmd.ExecuteReader();
|
||||
|
||||
List<People> people = new List<People>();
|
||||
|
||||
while (reader.Read())
|
||||
people.Add(People.FromFullReader(reader));
|
||||
|
||||
return people;
|
||||
}
|
||||
return from link in _database.PeopleLinks where link.ShowID == showID select link.People.SetRoleType(link.Role, link.Type);
|
||||
}
|
||||
|
||||
public People GetPeopleBySlug(string slug)
|
||||
{
|
||||
string query = "SELECT * FROM people WHERE slug = $slug;";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$slug", slug);
|
||||
SQLiteDataReader reader = cmd.ExecuteReader();
|
||||
|
||||
if (reader.Read())
|
||||
return People.FromReader(reader);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
return (from people in _database.Peoples where people.Slug == slug select people).FirstOrDefault();
|
||||
}
|
||||
|
||||
public IEnumerable<Genre> GetGenreForShow(long showID)
|
||||
{
|
||||
string query = "SELECT genres.id, genres.slug, genres.name FROM genres JOIN genresLinks l ON l.genreID = genres.id WHERE l.showID = $showID;";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$showID", showID);
|
||||
SQLiteDataReader reader = cmd.ExecuteReader();
|
||||
|
||||
List<Genre> genres = new List<Genre>();
|
||||
|
||||
while (reader.Read())
|
||||
genres.Add(Genre.FromReader(reader));
|
||||
|
||||
return genres;
|
||||
}
|
||||
return (from show in _database.Shows where show.ID == showID select show.Genres).FirstOrDefault();
|
||||
}
|
||||
|
||||
public Genre GetGenreBySlug(string slug)
|
||||
{
|
||||
string query = "SELECT * FROM genres WHERE slug = $slug;";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$slug", slug);
|
||||
SQLiteDataReader reader = cmd.ExecuteReader();
|
||||
|
||||
if (reader.Read())
|
||||
return Genre.FromReader(reader);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
return (from genre in _database.Genres where genre.Slug == slug select genre).FirstOrDefault();
|
||||
}
|
||||
|
||||
public Studio GetStudio(long showID)
|
||||
{
|
||||
string query = "SELECT studios.id, studios.slug, studios.name FROM studios JOIN studiosLinks l ON l.studioID = studios.id WHERE l.showID = $showID;";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$showID", showID);
|
||||
SQLiteDataReader reader = cmd.ExecuteReader();
|
||||
|
||||
if (reader.Read())
|
||||
return Studio.FromReader(reader);
|
||||
else
|
||||
return Studio.Default();
|
||||
}
|
||||
return (from show in _database.Shows where show.ID == showID select show.Studio).FirstOrDefault();
|
||||
}
|
||||
|
||||
public Studio GetStudioBySlug(string slug)
|
||||
{
|
||||
string query = "SELECT * FROM studios WHERE slug = $slug;";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$slug", slug);
|
||||
SQLiteDataReader reader = cmd.ExecuteReader();
|
||||
|
||||
if (reader.Read())
|
||||
return Studio.FromReader(reader);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public IEnumerable<People> GetDirectors(long showID)
|
||||
{
|
||||
return null;
|
||||
//string query = "SELECT genres.id, genres.slug, genres.name FROM genres JOIN genresLinks l ON l.genreID = genres.id WHERE l.showID = $showID;";
|
||||
|
||||
//using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
//{
|
||||
// cmd.Parameters.AddWithValue("$showID", showID);
|
||||
// SQLiteDataReader reader = cmd.ExecuteReader();
|
||||
|
||||
// List<Genre> genres = new List<Genre>();
|
||||
|
||||
// while (reader.Read())
|
||||
// genres.Add(Genre.FromReader(reader));
|
||||
|
||||
// return genres;
|
||||
//}
|
||||
return (from studio in _database.Studios where studio.Slug == slug select studio).FirstOrDefault();
|
||||
}
|
||||
|
||||
public Collection GetCollection(string slug)
|
||||
{
|
||||
string query = "SELECT * FROM collections WHERE slug = $slug;";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$slug", slug);
|
||||
SQLiteDataReader reader = cmd.ExecuteReader();
|
||||
|
||||
if (reader.Read())
|
||||
return Collection.FromReader(reader).SetShows(this);
|
||||
else
|
||||
return null;
|
||||
}
|
||||
return (from collection in _database.Collections where collection.Slug == slug select collection).FirstOrDefault();
|
||||
}
|
||||
|
||||
public IEnumerable<Show> GetShowsInCollection(long collectionID)
|
||||
{
|
||||
string query = "SELECT * FROM shows JOIN collectionsLinks l ON l.showID = shows.id WHERE l.collectionID = $id ORDER BY title;";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$id", collectionID);
|
||||
SQLiteDataReader reader = cmd.ExecuteReader();
|
||||
List<Show> shows = new List<Show>();
|
||||
while (reader.Read())
|
||||
shows.Add(Show.FromReader(reader));
|
||||
|
||||
return shows;
|
||||
}
|
||||
return from link in _database.CollectionLinks where link.CollectionID == collectionID select link.Show;
|
||||
}
|
||||
|
||||
public IEnumerable<Show> GetShowsInLibrary(long libraryID)
|
||||
{
|
||||
List<Show> shows = new List<Show>();
|
||||
SQLiteDataReader reader;
|
||||
string query = "SELECT id, slug, title, startYear, endYear, '0' FROM (SELECT id, slug, title, startYear, endYear, '0' FROM shows JOIN librariesLinks lb ON lb.showID = id WHERE lb.libraryID = $libraryID) LEFT JOIN collectionsLinks l ON l.showID = id WHERE l.showID IS NULL UNION SELECT id, slug, name, startYear, endYear, '1' FROM collections JOIN collectionsLinks l ON l.collectionID = collections.id JOIN librariesLinks lb ON lb.showID = l.showID WHERE lb.libraryID = $libraryID ORDER BY title;";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$libraryID", libraryID);
|
||||
reader = cmd.ExecuteReader();
|
||||
while (reader.Read())
|
||||
shows.Add(Show.FromQueryReader(reader));
|
||||
}
|
||||
return shows;
|
||||
return (from link in _database.LibraryLinks where link.LibraryID == libraryID select link).AsEnumerable()
|
||||
.Select(link => link.Show ?? link.Collection.AsShow())
|
||||
.OrderBy(x => x.Title);
|
||||
}
|
||||
|
||||
public IEnumerable<Show> GetShowsByPeople(long peopleID)
|
||||
{
|
||||
string query = "SELECT * FROM shows JOIN peopleLinks l ON l.showID = shows.id WHERE l.peopleID = $id ORDER BY title;";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$id", peopleID);
|
||||
SQLiteDataReader reader = cmd.ExecuteReader();
|
||||
List<Show> shows = new List<Show>();
|
||||
while (reader.Read())
|
||||
shows.Add(Show.FromReader(reader));
|
||||
|
||||
return shows;
|
||||
}
|
||||
return (from link in _database.PeopleLinks where link.PeopleID == peopleID select link.Show).OrderBy(x => x.Title);
|
||||
}
|
||||
|
||||
public IEnumerable<Episode> GetAllEpisodes()
|
||||
{
|
||||
List<Episode> episodes = new List<Episode>();
|
||||
string query = "SELECT * FROM episodes;";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
SQLiteDataReader reader = cmd.ExecuteReader();
|
||||
|
||||
while (reader.Read())
|
||||
episodes.Add(Episode.FromReader(reader));
|
||||
return episodes;
|
||||
}
|
||||
return _database.Episodes;
|
||||
}
|
||||
|
||||
public IEnumerable<Episode> SearchEpisodes(string searchQuery)
|
||||
{
|
||||
List<Episode> episodes = new List<Episode>();
|
||||
SQLiteDataReader reader;
|
||||
string query = "SELECT episodes.*, shows.slug, shows.title as showTitle FROM episodes JOIN shows ON showID = shows.id WHERE episodes.title LIKE $query ORDER BY seasonNumber, episodeNumber LIMIT 20;";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$query", "%" + searchQuery + "%");
|
||||
reader = cmd.ExecuteReader();
|
||||
while (reader.Read())
|
||||
episodes.Add(Episode.FromReader(reader).SetThumb(reader["slug"] as string).SetShowTitle(reader["showTitle"] as string));
|
||||
}
|
||||
return episodes;
|
||||
return from episode in _database.Episodes where episode.Title.Contains(searchQuery) select episode;
|
||||
}
|
||||
|
||||
public IEnumerable<People> SearchPeople(string searchQuery)
|
||||
{
|
||||
List<People> people = new List<People>();
|
||||
SQLiteDataReader reader;
|
||||
string query = "SELECT * FROM people WHERE name LIKE $query ORDER BY name LIMIT 40;";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$query", "%" + searchQuery + "%");
|
||||
reader = cmd.ExecuteReader();
|
||||
while (reader.Read())
|
||||
people.Add(People.FromReader(reader));
|
||||
}
|
||||
return people;
|
||||
return from people in _database.Peoples where people.Name.Contains(searchQuery) select people;
|
||||
}
|
||||
|
||||
public IEnumerable<Genre> SearchGenres(string searchQuery)
|
||||
{
|
||||
List<Genre> genres = new List<Genre>();
|
||||
SQLiteDataReader reader;
|
||||
string query = "SELECT * FROM genres WHERE name LIKE $query ORDER BY name;";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$query", "%" + searchQuery + "%");
|
||||
reader = cmd.ExecuteReader();
|
||||
while (reader.Read())
|
||||
genres.Add(Genre.FromReader(reader));
|
||||
}
|
||||
return genres;
|
||||
return from genre in _database.Genres where genre.Name.Contains(searchQuery) select genre;
|
||||
}
|
||||
|
||||
public IEnumerable<Studio> SearchStudios(string searchQuery)
|
||||
{
|
||||
List<Studio> studios = new List<Studio>();
|
||||
SQLiteDataReader reader;
|
||||
string query = "SELECT * FROM studios WHERE name LIKE $query ORDER BY name;";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$query", "%" + searchQuery + "%");
|
||||
reader = cmd.ExecuteReader();
|
||||
while (reader.Read())
|
||||
studios.Add(Studio.FromReader(reader));
|
||||
}
|
||||
return studios;
|
||||
return from studio in _database.Studios where studio.Name.Contains(searchQuery) select studio;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Check if items exists
|
||||
public bool IsCollectionRegistered(string collectionSlug)
|
||||
{
|
||||
string query = "SELECT (id) FROM collections WHERE slug = $slug;";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$slug", collectionSlug);
|
||||
|
||||
return cmd.ExecuteScalar() != null;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsCollectionRegistered(string collectionSlug, out long collectionID)
|
||||
{
|
||||
string query = "SELECT (id) FROM collections WHERE slug = $slug;";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$slug", collectionSlug);
|
||||
collectionID = cmd.ExecuteScalar() as long? ?? -1;
|
||||
|
||||
return collectionID != -1;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsShowRegistered(string showPath)
|
||||
{
|
||||
string query = "SELECT (id) FROM shows WHERE path = $path;";
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$path", showPath);
|
||||
|
||||
return cmd.ExecuteScalar() != null;
|
||||
}
|
||||
Collection col = (from collection in _database.Collections where collection.Slug == collectionSlug select collection).FirstOrDefault();
|
||||
collectionID = col?.ID ?? -1;
|
||||
return collectionID != -1;
|
||||
}
|
||||
|
||||
public bool IsShowRegistered(string showPath, out long showID)
|
||||
{
|
||||
string query = "SELECT (id) FROM shows WHERE path = $path;";
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$path", showPath);
|
||||
showID = cmd.ExecuteScalar() as long? ?? -1;
|
||||
|
||||
return showID != -1;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsSeasonRegistered(long showID, long seasonNumber)
|
||||
{
|
||||
string query = "SELECT (id) FROM seasons WHERE showID = $showID AND seasonNumber = $seasonNumber;";
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$showID", showID);
|
||||
cmd.Parameters.AddWithValue("$seasonNumber", seasonNumber);
|
||||
|
||||
return cmd.ExecuteScalar() != null;
|
||||
}
|
||||
Show tmp = (from show in _database.Shows where show.Path == showPath select show).FirstOrDefault();
|
||||
showID = tmp?.ID ?? -1;
|
||||
return showID != -1;
|
||||
}
|
||||
|
||||
public bool IsSeasonRegistered(long showID, long seasonNumber, out long seasonID)
|
||||
{
|
||||
string query = "SELECT (id) FROM seasons WHERE showID = $showID AND seasonNumber = $seasonNumber;";
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$showID", showID);
|
||||
cmd.Parameters.AddWithValue("$seasonNumber", seasonNumber);
|
||||
seasonID = cmd.ExecuteScalar() as long? ?? -1;
|
||||
|
||||
return seasonID != -1;
|
||||
}
|
||||
Season tmp = (from season in _database.Seasons where season.SeasonNumber == seasonNumber && season.ShowID == showID select season).FirstOrDefault();
|
||||
seasonID = tmp?.ID ?? -1;
|
||||
return seasonID != -1;
|
||||
}
|
||||
|
||||
public bool IsEpisodeRegistered(string episodePath)
|
||||
public bool IsEpisodeRegistered(string episodePath, out long episodeID)
|
||||
{
|
||||
string query = "SELECT (id) FROM episodes WHERE path = $path;";
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$path", episodePath);
|
||||
|
||||
return cmd.ExecuteScalar() != null;
|
||||
}
|
||||
Episode tmp = (from episode in _database.Episodes where episode.Path == episodePath select episode).FirstOrDefault();
|
||||
episodeID = tmp?.ID ?? -1;
|
||||
return episodeID != -1;
|
||||
}
|
||||
|
||||
public long GetOrCreateGenre(Genre genre)
|
||||
@ -509,28 +268,11 @@ namespace Kyoo.Controllers
|
||||
Genre existingGenre = GetGenreBySlug(genre.Slug);
|
||||
|
||||
if (existingGenre != null)
|
||||
return existingGenre.Id;
|
||||
return existingGenre.ID;
|
||||
|
||||
string query = "INSERT INTO genres (slug, name) VALUES($slug, $name);";
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
try
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$slug", genre.Slug);
|
||||
cmd.Parameters.AddWithValue("$name", genre.Name);
|
||||
cmd.ExecuteNonQuery();
|
||||
|
||||
cmd.CommandText = "SELECT LAST_INSERT_ROWID()";
|
||||
return (long)cmd.ExecuteScalar();
|
||||
}
|
||||
catch
|
||||
{
|
||||
Console.Error.WriteLine("SQL error while trying to insert a people ({0}).", genre.Name);
|
||||
cmd.CommandText = "SELECT * FROM genres WHERE slug = $slug";
|
||||
cmd.Parameters.AddWithValue("$slug", genre.Slug);
|
||||
return (long)cmd.ExecuteScalar();
|
||||
}
|
||||
}
|
||||
_database.Genres.Add(genre);
|
||||
_database.SaveChanges();
|
||||
return genre.ID;
|
||||
}
|
||||
|
||||
public long GetOrCreateStudio(Studio studio)
|
||||
@ -539,27 +281,10 @@ namespace Kyoo.Controllers
|
||||
|
||||
if (existingStudio != null)
|
||||
return existingStudio.ID;
|
||||
|
||||
string query = "INSERT INTO studios (slug, name) VALUES($slug, $name);";
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
try
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$slug", studio.Slug);
|
||||
cmd.Parameters.AddWithValue("$name", studio.Name);
|
||||
cmd.ExecuteNonQuery();
|
||||
|
||||
cmd.CommandText = "SELECT LAST_INSERT_ROWID()";
|
||||
return (long)cmd.ExecuteScalar();
|
||||
}
|
||||
catch (SQLiteException)
|
||||
{
|
||||
Console.Error.WriteLine("SQL error while trying to insert a studio ({0}).", studio.Name);
|
||||
cmd.CommandText = "SELECT * FROM studios WHERE slug = $slug";
|
||||
cmd.Parameters.AddWithValue("$slug", studio.Slug);
|
||||
return (long)cmd.ExecuteScalar();
|
||||
}
|
||||
}
|
||||
|
||||
_database.Studios.Add(studio);
|
||||
_database.SaveChanges();
|
||||
return studio.ID;
|
||||
}
|
||||
|
||||
public long GetOrCreatePeople(People people)
|
||||
@ -569,128 +294,59 @@ namespace Kyoo.Controllers
|
||||
if (existingPeople != null)
|
||||
return existingPeople.ID;
|
||||
|
||||
string query = "INSERT INTO people (slug, name, imgPrimary, externalIDs) VALUES($slug, $name, $imgPrimary, $externalIDs);";
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
try
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$slug", people.Slug);
|
||||
cmd.Parameters.AddWithValue("$name", people.Name);
|
||||
cmd.Parameters.AddWithValue("$imgPrimary", people.ImgPrimary);
|
||||
cmd.Parameters.AddWithValue("$externalIDs", people.ExternalIDs);
|
||||
cmd.ExecuteNonQuery();
|
||||
|
||||
cmd.CommandText = "SELECT LAST_INSERT_ROWID()";
|
||||
return (long)cmd.ExecuteScalar();
|
||||
}
|
||||
catch
|
||||
{
|
||||
Console.Error.WriteLine("SQL error while trying to insert a people ({0}).", people.Name);
|
||||
cmd.CommandText = "SELECT * FROM people WHERE slug = $slug";
|
||||
cmd.Parameters.AddWithValue("$slug", people.Slug);
|
||||
return (long)cmd.ExecuteScalar();
|
||||
}
|
||||
|
||||
}
|
||||
_database.Peoples.Add(people);
|
||||
_database.SaveChanges();
|
||||
return people.ID;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Write Into The Database
|
||||
public long RegisterCollection(Collection collection)
|
||||
{
|
||||
string query = "INSERT INTO collections (slug, name, overview, imgPrimary) VALUES($slug, $name, $overview, $imgPrimary);";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
try
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$slug", collection.Slug);
|
||||
cmd.Parameters.AddWithValue("$name", collection.Name);
|
||||
cmd.Parameters.AddWithValue("$overview", collection.Overview);
|
||||
cmd.Parameters.AddWithValue("$imgPrimary", collection.ImgPrimary);
|
||||
cmd.ExecuteNonQuery();
|
||||
|
||||
cmd.CommandText = "SELECT LAST_INSERT_ROWID()";
|
||||
return (long)cmd.ExecuteScalar();
|
||||
}
|
||||
catch
|
||||
{
|
||||
Console.Error.WriteLine("SQL error while trying to create a collection. Collection probably already registered.");
|
||||
cmd.CommandText = "SELECT * FROM collections WHERE slug = $slug";
|
||||
cmd.Parameters.AddWithValue("$slug", collection.Slug);
|
||||
return (long)cmd.ExecuteScalar();
|
||||
}
|
||||
}
|
||||
// string query = "INSERT INTO collections (slug, name, overview, imgPrimary) VALUES($slug, $name, $overview, $imgPrimary);";
|
||||
//
|
||||
// using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
// {
|
||||
// try
|
||||
// {
|
||||
// cmd.Parameters.AddWithValue("$slug", collection.Slug);
|
||||
// cmd.Parameters.AddWithValue("$name", collection.Name);
|
||||
// cmd.Parameters.AddWithValue("$overview", collection.Overview);
|
||||
// cmd.Parameters.AddWithValue("$imgPrimary", collection.ImgPrimary);
|
||||
// cmd.ExecuteNonQuery();
|
||||
//
|
||||
// cmd.CommandText = "SELECT LAST_INSERT_ROWID()";
|
||||
// return (long)cmd.ExecuteScalar();
|
||||
// }
|
||||
// catch
|
||||
// {
|
||||
// Console.Error.WriteLine("SQL error while trying to create a collection. Collection probably already registered.");
|
||||
// cmd.CommandText = "SELECT * FROM collections WHERE slug = $slug";
|
||||
// cmd.Parameters.AddWithValue("$slug", collection.Slug);
|
||||
// return (long)cmd.ExecuteScalar();
|
||||
// }
|
||||
// }
|
||||
return -1;
|
||||
}
|
||||
|
||||
public void RegisterInLibrary(long showID, Library library)
|
||||
{
|
||||
string query =
|
||||
"INSERT INTO librariesLinks (libraryID, showID) SELECT id, $showID FROM libraries WHERE libraries.id = $libraryID;";
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$libraryID", library.Id);
|
||||
cmd.Parameters.AddWithValue("$showID", showID);
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
// string query =
|
||||
// "INSERT INTO librariesLinks (libraryID, showID) SELECT id, $showID FROM libraries WHERE libraries.id = $libraryID;";
|
||||
//
|
||||
// using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
// {
|
||||
// cmd.Parameters.AddWithValue("$libraryID", library.Id);
|
||||
// cmd.Parameters.AddWithValue("$showID", showID);
|
||||
// cmd.ExecuteNonQuery();
|
||||
// }
|
||||
}
|
||||
|
||||
public long RegisterShow(Show show)
|
||||
{
|
||||
string query = "INSERT INTO shows (slug, title, aliases, path, overview, trailerUrl, startYear, endYear, imgPrimary, imgThumb, imgLogo, imgBackdrop, externalIDs) VALUES($slug, $title, $aliases, $path, $overview, $trailerUrl, $startYear, $endYear, $imgPrimary, $imgThumb, $imgLogo, $imgBackdrop, $externalIDs);";
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
try
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$slug", show.Slug);
|
||||
cmd.Parameters.AddWithValue("$title", show.Title);
|
||||
cmd.Parameters.AddWithValue("$aliases", show.GetAliases());
|
||||
cmd.Parameters.AddWithValue("$path", show.Path);
|
||||
cmd.Parameters.AddWithValue("$overview", show.Overview);
|
||||
cmd.Parameters.AddWithValue("$trailerUrl", show.TrailerUrl);
|
||||
cmd.Parameters.AddWithValue("$status", show.Status);
|
||||
cmd.Parameters.AddWithValue("$startYear", show.StartYear);
|
||||
cmd.Parameters.AddWithValue("$endYear", show.EndYear);
|
||||
cmd.Parameters.AddWithValue("$imgPrimary", show.ImgPrimary);
|
||||
cmd.Parameters.AddWithValue("$imgThumb", show.ImgThumb);
|
||||
cmd.Parameters.AddWithValue("$imgLogo", show.ImgLogo);
|
||||
cmd.Parameters.AddWithValue("$imgBackdrop", show.ImgBackdrop);
|
||||
cmd.Parameters.AddWithValue("$externalIDs", show.ExternalIDs);
|
||||
cmd.ExecuteNonQuery();
|
||||
|
||||
cmd.CommandText = "SELECT LAST_INSERT_ROWID()";
|
||||
long showID = (long)cmd.ExecuteScalar();
|
||||
|
||||
if (show.Genres != null)
|
||||
{
|
||||
cmd.CommandText = "INSERT INTO genresLinks (genreID, showID) VALUES($genreID, $showID);";
|
||||
foreach (Genre genre in show.Genres)
|
||||
{
|
||||
long genreID = GetOrCreateGenre(genre);
|
||||
cmd.Parameters.AddWithValue("$genreID", genreID);
|
||||
cmd.Parameters.AddWithValue("$showID", showID);
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
}
|
||||
|
||||
if (show.Studio != null)
|
||||
{
|
||||
cmd.CommandText = "INSERT INTO studiosLinks (studioID, showID) VALUES($studioID, $showID);";
|
||||
long studioID = GetOrCreateStudio(show.Studio);
|
||||
cmd.Parameters.AddWithValue("$studioID", studioID);
|
||||
cmd.Parameters.AddWithValue("$showID", showID);
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
|
||||
return showID;
|
||||
}
|
||||
catch
|
||||
{
|
||||
Console.Error.WriteLine("SQL error while trying to insert a show ({0}), show probably already registered.", show.Title);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
_database.Shows.Add(show);
|
||||
_database.SaveChanges();
|
||||
return show.ID;
|
||||
}
|
||||
|
||||
public long RegisterSeason(Season season)
|
||||
@ -839,7 +495,7 @@ namespace Kyoo.Controllers
|
||||
|
||||
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
||||
{
|
||||
cmd.Parameters.AddWithValue("$episodeID", episode.Id);
|
||||
cmd.Parameters.AddWithValue("$episodeID", episode.ID);
|
||||
cmd.ExecuteNonQuery();
|
||||
}
|
||||
|
||||
|
@ -11,48 +11,46 @@ namespace Kyoo.Controllers
|
||||
{
|
||||
public class PluginManager : IPluginManager
|
||||
{
|
||||
private readonly IServiceProvider provider;
|
||||
private readonly IConfiguration config;
|
||||
private List<IPlugin> plugins;
|
||||
private readonly IServiceProvider _provider;
|
||||
private readonly IConfiguration _config;
|
||||
private List<IPlugin> _plugins;
|
||||
|
||||
public PluginManager(IServiceProvider provider, IConfiguration config)
|
||||
{
|
||||
this.provider = provider;
|
||||
this.config = config;
|
||||
_provider = provider;
|
||||
_config = config;
|
||||
}
|
||||
|
||||
public T GetPlugin<T>(string name)
|
||||
{
|
||||
if (plugins == null)
|
||||
if (_plugins == null)
|
||||
return default;
|
||||
return (T)(from plugin in plugins where plugin.Name == name && plugin is T
|
||||
select plugin).FirstOrDefault();
|
||||
return (T)(from plugin in _plugins where plugin.Name == name && plugin is T select plugin).FirstOrDefault();
|
||||
}
|
||||
|
||||
public IEnumerable<T> GetPlugins<T>()
|
||||
{
|
||||
if (plugins == null)
|
||||
return null;
|
||||
return from plugin in plugins where plugin is T
|
||||
select (T)plugin;
|
||||
if (_plugins == null)
|
||||
return new List<T>();
|
||||
return from plugin in _plugins where plugin is T select (T)plugin;
|
||||
}
|
||||
|
||||
public void ReloadPlugins()
|
||||
{
|
||||
string pluginFolder = config.GetValue<string>("plugins");
|
||||
string pluginFolder = _config.GetValue<string>("plugins");
|
||||
|
||||
if (!Directory.Exists(pluginFolder))
|
||||
return;
|
||||
string[] pluginsPaths = Directory.GetFiles(pluginFolder);
|
||||
|
||||
plugins = pluginsPaths.Select(path =>
|
||||
_plugins = pluginsPaths.Select(path =>
|
||||
{
|
||||
try
|
||||
{
|
||||
Assembly ass = Assembly.LoadFile(Path.GetFullPath(path));
|
||||
return (from type in ass.GetTypes()
|
||||
where typeof(IPlugin).IsAssignableFrom(type)
|
||||
select (IPlugin) ActivatorUtilities.CreateInstance(provider, type)).FirstOrDefault();
|
||||
select (IPlugin) ActivatorUtilities.CreateInstance(_provider, type)).FirstOrDefault();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
|
@ -8,20 +8,20 @@ namespace Kyoo.Controllers
|
||||
{
|
||||
public class ProviderManager : IProviderManager
|
||||
{
|
||||
private readonly IEnumerable<IMetadataProvider> providers;
|
||||
private readonly IThumbnailsManager thumbnailsManager;
|
||||
private readonly IEnumerable<IMetadataProvider> _providers;
|
||||
private readonly IThumbnailsManager _thumbnailsManager;
|
||||
|
||||
public ProviderManager(IThumbnailsManager thumbnailsManager, IPluginManager pluginManager)
|
||||
{
|
||||
this.thumbnailsManager = thumbnailsManager;
|
||||
providers = pluginManager.GetPlugins<IMetadataProvider>();
|
||||
_thumbnailsManager = thumbnailsManager;
|
||||
_providers = pluginManager.GetPlugins<IMetadataProvider>();
|
||||
}
|
||||
|
||||
public async Task<T> GetMetadata<T>(Func<IMetadataProvider, Task<T>> providerCall, Library library, string what) where T : IMergable<T>, new()
|
||||
{
|
||||
T ret = new T();
|
||||
|
||||
foreach (IMetadataProvider provider in providers.OrderBy(provider => Array.IndexOf(library.Providers, provider.Name)))
|
||||
foreach (IMetadataProvider provider in _providers.OrderBy(provider => Array.IndexOf(library.Providers, provider.Name)))
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -38,7 +38,7 @@ namespace Kyoo.Controllers
|
||||
{
|
||||
List<T> ret = new List<T>();
|
||||
|
||||
foreach (IMetadataProvider provider in providers.OrderBy(provider => Array.IndexOf(library.Providers, provider.Name)))
|
||||
foreach (IMetadataProvider provider in _providers.OrderBy(provider => Array.IndexOf(library.Providers, provider.Name)))
|
||||
{
|
||||
try
|
||||
{
|
||||
@ -65,7 +65,7 @@ namespace Kyoo.Controllers
|
||||
show.Path = showPath;
|
||||
show.Slug = Utility.ToSlug(showName);
|
||||
show.Title ??= showName;
|
||||
await thumbnailsManager.Validate(show);
|
||||
await _thumbnailsManager.Validate(show);
|
||||
return show;
|
||||
}
|
||||
|
||||
@ -86,14 +86,14 @@ namespace Kyoo.Controllers
|
||||
episode.SeasonNumber = episode.SeasonNumber != -1 ? episode.SeasonNumber : seasonNumber;
|
||||
episode.EpisodeNumber = episode.EpisodeNumber != -1 ? episode.EpisodeNumber : episodeNumber;
|
||||
episode.AbsoluteNumber = episode.AbsoluteNumber != -1 ? episode.AbsoluteNumber : absoluteNumber;
|
||||
await thumbnailsManager.Validate(episode);
|
||||
await _thumbnailsManager.Validate(episode);
|
||||
return episode;
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<People>> GetPeople(Show show, Library library)
|
||||
{
|
||||
IEnumerable<People> people = await GetMetadata(provider => provider.GetPeople(show), library, "unknown data");
|
||||
people = await thumbnailsManager.Validate(people);
|
||||
people = await _thumbnailsManager.Validate(people);
|
||||
return people;
|
||||
}
|
||||
}
|
||||
|
@ -50,12 +50,12 @@ namespace Kyoo.Controllers
|
||||
public async Task<string> ExtractSubtitle(string showSlug, long seasonNumber, long episodeNumber)
|
||||
{
|
||||
Episode episode = libraryManager.GetEpisode(showSlug, seasonNumber, episodeNumber);
|
||||
libraryManager.ClearSubtitles(episode.Id);
|
||||
libraryManager.ClearSubtitles(episode.ID);
|
||||
|
||||
Track[] tracks = await transcoder.ExtractSubtitles(episode.Path);
|
||||
foreach (Track track in tracks)
|
||||
{
|
||||
track.EpisodeID = episode.Id;
|
||||
track.EpisodeID = episode.ID;
|
||||
libraryManager.RegisterTrack(track);
|
||||
}
|
||||
|
||||
@ -68,12 +68,12 @@ namespace Kyoo.Controllers
|
||||
IEnumerable<Episode> episodes = libraryManager.GetEpisodes(showSlug);
|
||||
foreach (Episode episode in episodes)
|
||||
{
|
||||
libraryManager.ClearSubtitles(episode.Id);
|
||||
libraryManager.ClearSubtitles(episode.ID);
|
||||
|
||||
Track[] tracks = await transcoder.ExtractSubtitles(episode.Path);
|
||||
foreach (Track track in tracks)
|
||||
{
|
||||
track.EpisodeID = episode.Id;
|
||||
track.EpisodeID = episode.ID;
|
||||
libraryManager.RegisterTrack(track);
|
||||
}
|
||||
}
|
||||
|
@ -33,18 +33,18 @@ namespace Kyoo
|
||||
services.AddControllers().AddNewtonsoftJson();
|
||||
services.AddHttpClient();
|
||||
|
||||
services.AddDbContext<DatabaseContext>(options => options.UseSqlite(Configuration.GetConnectionString("Database")));
|
||||
services.AddDbContext<DatabaseContext>(options => options.UseSqlite(Configuration.GetConnectionString("Database")), ServiceLifetime.Singleton);
|
||||
|
||||
// services.AddIdentity<ApplicationUser, IdentityRole>()
|
||||
// .AddEntityFrameworkStores()
|
||||
// services.AddIdentityServer();
|
||||
|
||||
services.AddScoped<ILibraryManager, LibraryManager>();
|
||||
services.AddScoped<ITranscoder, Transcoder>();
|
||||
services.AddScoped<IThumbnailsManager, ThumbnailsManager>();
|
||||
services.AddScoped<IProviderManager, ProviderManager>();
|
||||
services.AddScoped<ICrawler, Crawler>();
|
||||
services.AddScoped<IPluginManager, PluginManager>();
|
||||
services.AddSingleton<ILibraryManager, LibraryManager>();
|
||||
services.AddSingleton<ITranscoder, Transcoder>();
|
||||
services.AddSingleton<IThumbnailsManager, ThumbnailsManager>();
|
||||
services.AddSingleton<IProviderManager, ProviderManager>();
|
||||
services.AddSingleton<ICrawler, Crawler>();
|
||||
services.AddSingleton<IPluginManager, PluginManager>();
|
||||
}
|
||||
|
||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||
|
Loading…
x
Reference in New Issue
Block a user