mirror of
https://github.com/zoriya/Kyoo.git
synced 2025-05-24 02:02:36 -04:00
1191 lines
48 KiB
C#
1191 lines
48 KiB
C#
using Kyoo.Models;
|
|
using Kyoo.Models.Watch;
|
|
using Microsoft.Extensions.Configuration;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data.SQLite;
|
|
using System.Diagnostics;
|
|
using System.IO;
|
|
|
|
namespace Kyoo.Controllers
|
|
{
|
|
public class LibraryManager : ILibraryManager
|
|
{
|
|
private readonly SQLiteConnection sqlConnection;
|
|
|
|
|
|
public LibraryManager(IConfiguration configuration)
|
|
{
|
|
string databasePath = configuration.GetValue<string>("databasePath");
|
|
|
|
Debug.WriteLine("&Library Manager init, databasePath: " + databasePath);
|
|
if (!File.Exists(databasePath))
|
|
{
|
|
Debug.WriteLine("&Database doesn't exist, creating one.");
|
|
|
|
if (!Directory.Exists(Path.GetDirectoryName(databasePath)))
|
|
Directory.CreateDirectory(databasePath);
|
|
SQLiteConnection.CreateFile(databasePath);
|
|
sqlConnection = new SQLiteConnection($"Data Source={databasePath};Version=3");
|
|
sqlConnection.Open();
|
|
|
|
const string createStatement = @"CREATE TABLE shows(
|
|
id INTEGER PRIMARY KEY UNIQUE,
|
|
slug TEXT UNIQUE,
|
|
title TEXT,
|
|
aliases TEXT,
|
|
path TEXT UNIQUE,
|
|
overview TEXT,
|
|
trailerUrl TEXT,
|
|
status TEXT,
|
|
startYear INTEGER,
|
|
endYear INTEGER,
|
|
imgPrimary TEXT,
|
|
imgThumb TEXT,
|
|
imgLogo TEXT,
|
|
imgBackdrop TEXT,
|
|
externalIDs TEXT
|
|
);
|
|
CREATE TABLE seasons(
|
|
id INTEGER PRIMARY KEY UNIQUE,
|
|
showID INTEGER,
|
|
seasonNumber INTEGER,
|
|
title TEXT,
|
|
overview TEXT,
|
|
imgPrimary TEXT,
|
|
year INTEGER,
|
|
externalIDs TEXT,
|
|
FOREIGN KEY(showID) REFERENCES shows(id) ON DELETE CASCADE
|
|
);
|
|
CREATE TABLE episodes(
|
|
id INTEGER PRIMARY KEY UNIQUE,
|
|
showID INTEGER,
|
|
seasonID INTEGER,
|
|
seasonNumber INTEGER,
|
|
episodeNumber INTEGER,
|
|
absoluteNumber INTEGER,
|
|
path TEXT UNIQUE,
|
|
title TEXT,
|
|
overview TEXT,
|
|
imgPrimary TEXT,
|
|
releaseDate TEXT,
|
|
runtime INTEGER,
|
|
externalIDs TEXT,
|
|
FOREIGN KEY(showID) REFERENCES shows(id) ON DELETE CASCADE,
|
|
FOREIGN KEY(seasonID) REFERENCES seasons(id) ON DELETE CASCADE
|
|
);
|
|
CREATE TABLE tracks(
|
|
id INTEGER PRIMARY KEY UNIQUE,
|
|
episodeID INTEGER,
|
|
streamType INTEGER,
|
|
title TEXT,
|
|
language TEXT,
|
|
codec TEXT,
|
|
isDefault BOOLEAN,
|
|
isForced BOOLEAN,
|
|
isExternal BOOLEAN,
|
|
path TEXT,
|
|
FOREIGN KEY(episodeID) REFERENCES episodes(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE libraries(
|
|
id INTEGER PRIMARY KEY UNIQUE,
|
|
slug TEXT UNIQUE,
|
|
name TEXT,
|
|
path TEXT,
|
|
providers TEXT
|
|
);
|
|
CREATE TABLE librariesLinks(
|
|
libraryID INTEGER,
|
|
showID INTEGER,
|
|
FOREIGN KEY(libraryID) REFERENCES libraries(id) ON DELETE CASCADE,
|
|
FOREIGN KEY(showID) REFERENCES shows(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE collections(
|
|
id INTEGER PRIMARY KEY UNIQUE,
|
|
slug TEXT UNIQUE,
|
|
name TEXT,
|
|
overview TEXT,
|
|
startYear INTEGER,
|
|
endYear INTEGER,
|
|
imgPrimary TEXT
|
|
);
|
|
CREATE TABLE collectionsLinks(
|
|
collectionID INTEGER,
|
|
showID INTEGER,
|
|
FOREIGN KEY(collectionID) REFERENCES collections(id) ON DELETE CASCADE,
|
|
FOREIGN KEY(showID) REFERENCES shows(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE studios(
|
|
id INTEGER PRIMARY KEY UNIQUE,
|
|
slug TEXT UNIQUE,
|
|
name TEXT
|
|
);
|
|
CREATE TABLE studiosLinks(
|
|
studioID INTEGER,
|
|
showID INTEGER,
|
|
FOREIGN KEY(studioID) REFERENCES studios(id) ON DELETE CASCADE,
|
|
FOREIGN KEY(showID) REFERENCES shows(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE people(
|
|
id INTEGER PRIMARY KEY UNIQUE,
|
|
slug TEXT UNIQUE,
|
|
name TEXT,
|
|
imgPrimary TEXT,
|
|
externalIDs TEXT
|
|
);
|
|
CREATE TABLE peopleLinks(
|
|
peopleID INTEGER,
|
|
showID INTEGER,
|
|
role TEXT,
|
|
type TEXT,
|
|
FOREIGN KEY(peopleID) REFERENCES people(id) ON DELETE CASCADE,
|
|
FOREIGN KEY(showID) REFERENCES shows(id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE genres(
|
|
id INTEGER PRIMARY KEY UNIQUE,
|
|
slug TEXT UNIQUE,
|
|
name TEXT
|
|
);
|
|
CREATE TABLE genresLinks(
|
|
genreID INTEGER,
|
|
showID INTEGER,
|
|
FOREIGN KEY(genreID) REFERENCES genres(id) ON DELETE CASCADE,
|
|
FOREIGN KEY(showID) REFERENCES shows(id) ON DELETE CASCADE
|
|
);";
|
|
|
|
using SQLiteCommand createCmd = new SQLiteCommand(createStatement, sqlConnection);
|
|
createCmd.ExecuteNonQuery();
|
|
}
|
|
else
|
|
{
|
|
sqlConnection = new SQLiteConnection($"Data Source={databasePath};Version=3");
|
|
sqlConnection.Open();
|
|
}
|
|
|
|
Debug.WriteLine("&Sql Database initated.");
|
|
}
|
|
|
|
~LibraryManager()
|
|
{
|
|
sqlConnection.Close();
|
|
}
|
|
|
|
#region Read the database
|
|
public IEnumerable<Library> GetLibraries()
|
|
{
|
|
const string query = "SELECT * FROM libraries;";
|
|
|
|
using SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection);
|
|
SQLiteDataReader reader = cmd.ExecuteReader();
|
|
|
|
List<Library> libraries = new List<Library>();
|
|
|
|
while (reader.Read())
|
|
libraries.Add(Library.FromReader(reader));
|
|
|
|
return libraries;
|
|
}
|
|
|
|
public IEnumerable<string> GetLibrariesPath()
|
|
{
|
|
const string query = "SELECT path FROM libraries;";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
SQLiteDataReader reader = cmd.ExecuteReader();
|
|
|
|
List<string> libraries = new List<string>();
|
|
|
|
while (reader.Read())
|
|
libraries.Add(reader["path"] as string);
|
|
|
|
return libraries;
|
|
}
|
|
}
|
|
|
|
public string GetShowExternalIDs(long showID)
|
|
{
|
|
string query = "SELECT * FROM shows WHERE id = $showID;";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$showID", showID);
|
|
SQLiteDataReader reader = cmd.ExecuteReader();
|
|
|
|
if (reader.Read())
|
|
return Show.FromReader(reader).ExternalIDs;
|
|
else
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
public (Track video, List<Track> audios, List<Track> subtitles) GetStreams(long episodeID, string episodeSlug)
|
|
{
|
|
string query = "SELECT * FROM tracks WHERE episodeID = $episodeID;";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$episodeID", episodeID);
|
|
SQLiteDataReader reader = cmd.ExecuteReader();
|
|
|
|
Track video = null;
|
|
List<Track> audios = new List<Track>();
|
|
List<Track> subtitles = new List<Track>();
|
|
|
|
while (reader.Read())
|
|
{
|
|
Track track = Track.FromReader(reader).SetLink(episodeSlug);
|
|
|
|
if (track.Type == StreamType.Video)
|
|
video = track;
|
|
else if (track.Type == StreamType.Audio)
|
|
audios.Add(track);
|
|
else if (track.Type == StreamType.Subtitle)
|
|
subtitles.Add(track);
|
|
}
|
|
|
|
return (video, audios, subtitles);
|
|
}
|
|
}
|
|
|
|
public Track GetSubtitle(string showSlug, long seasonNumber, long episodeNumber, string languageTag, bool forced)
|
|
{
|
|
string query = "SELECT tracks.* FROM tracks JOIN episodes ON tracks.episodeID = episodes.id JOIN shows ON episodes.showID = shows.id WHERE shows.slug = $showSlug AND episodes.seasonNumber = $seasonNumber AND episodes.episodeNumber = $episodeNumber AND tracks.language = $languageTag AND tracks.isForced = $forced;";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$showSlug", showSlug);
|
|
cmd.Parameters.AddWithValue("$seasonNumber", seasonNumber);
|
|
cmd.Parameters.AddWithValue("$episodeNumber", episodeNumber);
|
|
cmd.Parameters.AddWithValue("$languageTag", languageTag);
|
|
cmd.Parameters.AddWithValue("$forced", forced);
|
|
SQLiteDataReader reader = cmd.ExecuteReader();
|
|
|
|
if (reader.Read())
|
|
return Track.FromReader(reader).SetLink(Episode.GetSlug(showSlug, seasonNumber, episodeNumber));
|
|
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
public Library GetLibrary(string librarySlug)
|
|
{
|
|
string query = "SELECT * FROM libraries WHERE slug = $slug;";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$slug", librarySlug);
|
|
SQLiteDataReader reader = cmd.ExecuteReader();
|
|
|
|
if (reader.Read())
|
|
return Library.FromReader(reader);
|
|
else
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public IEnumerable<Show> GetShows()
|
|
{
|
|
List<Show> shows = new List<Show>();
|
|
SQLiteDataReader reader;
|
|
string query = "SELECT slug, title, startYear, endYear, '0' FROM shows LEFT JOIN collectionsLinks l ON l.showID = shows.id WHERE l.showID IS NULL UNION SELECT slug, name, startYear, endYear, '1' FROM collections ORDER BY title;";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
reader = cmd.ExecuteReader();
|
|
while (reader.Read())
|
|
shows.Add(Show.FromQueryReader(reader));
|
|
}
|
|
return shows;
|
|
}
|
|
|
|
public IEnumerable<Show> GetShows(string searchQuery)
|
|
{
|
|
List<Show> shows = new List<Show>();
|
|
SQLiteDataReader reader;
|
|
string query = "SELECT slug, title, aliases, startYear, endYear, '0' FROM (SELECT slug, title, aliases, startYear, endYear, '0' FROM shows LEFT JOIN collectionsLinks l ON l.showID = shows.id WHERE l.showID IS NULL UNION SELECT slug, name, null, startYear, endYear, '1' FROM collections) WHERE title LIKE $query OR aliases LIKE $query ORDER BY title;";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$query", "%" + searchQuery + "%");
|
|
reader = cmd.ExecuteReader();
|
|
while (reader.Read())
|
|
shows.Add(Show.FromQueryReader(reader, true));
|
|
}
|
|
return shows;
|
|
}
|
|
|
|
public Show GetShowBySlug(string slug)
|
|
{
|
|
string query = "SELECT * FROM shows WHERE slug = $slug;";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$slug", slug);
|
|
SQLiteDataReader reader = cmd.ExecuteReader();
|
|
|
|
if (reader.Read())
|
|
return Show.FromReader(reader).SetGenres(this).SetStudio(this).SetDirectors(this).SetSeasons(this).SetPeople(this);
|
|
else
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public List<Season> GetSeasons(long showID)
|
|
{
|
|
string query = "SELECT * FROM seasons WHERE showID = $showID ORDER BY seasonNumber;";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$showID", showID);
|
|
SQLiteDataReader reader = cmd.ExecuteReader();
|
|
|
|
List<Season> seasons = new List<Season>();
|
|
|
|
while (reader.Read())
|
|
seasons.Add(Season.FromReader(reader));
|
|
|
|
return seasons;
|
|
}
|
|
}
|
|
|
|
public Season GetSeason(string showSlug, long seasonNumber)
|
|
{
|
|
string query = "SELECT * FROM seasons JOIN shows ON shows.id = seasons.showID WHERE shows.slug = $showSlug AND seasons.seasonNumber = $seasonNumber;";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$showSlug", showSlug);
|
|
cmd.Parameters.AddWithValue("$seasonNumber", seasonNumber);
|
|
SQLiteDataReader reader = cmd.ExecuteReader();
|
|
|
|
if (reader.Read())
|
|
return Season.FromReader(reader);
|
|
else
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public int GetSeasonCount(string showSlug, long seasonNumber)
|
|
{
|
|
string query = "SELECT count(episodes.id) FROM episodes JOIN shows ON shows.id = episodes.showID WHERE shows.slug = $showSlug AND episodes.seasonNumber = $seasonNumber;";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$showSlug", showSlug);
|
|
cmd.Parameters.AddWithValue("$seasonNumber", seasonNumber);
|
|
|
|
int count = Convert.ToInt32(cmd.ExecuteScalar());
|
|
return count;
|
|
}
|
|
}
|
|
|
|
public List<Episode> GetEpisodes(string showSlug)
|
|
{
|
|
string query = "SELECT * FROM episodes JOIN shows ON shows.id = episodes.showID WHERE shows.slug = $showSlug ORDER BY episodeNumber;";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$showSlug", showSlug);
|
|
SQLiteDataReader reader = cmd.ExecuteReader();
|
|
|
|
List<Episode> episodes = new List<Episode>();
|
|
|
|
while (reader.Read())
|
|
episodes.Add(Episode.FromReader(reader).SetThumb(showSlug));
|
|
|
|
return episodes;
|
|
}
|
|
}
|
|
|
|
public List<Episode> GetEpisodes(string showSlug, long seasonNumber)
|
|
{
|
|
string query = "SELECT * FROM episodes JOIN shows ON shows.id = episodes.showID WHERE shows.slug = $showSlug AND episodes.seasonNumber = $seasonNumber ORDER BY episodeNumber;";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$showSlug", showSlug);
|
|
cmd.Parameters.AddWithValue("$seasonNumber", seasonNumber);
|
|
SQLiteDataReader reader = cmd.ExecuteReader();
|
|
|
|
List<Episode> episodes = new List<Episode>();
|
|
|
|
while (reader.Read())
|
|
episodes.Add(Episode.FromReader(reader).SetThumb(showSlug));
|
|
|
|
return episodes;
|
|
}
|
|
}
|
|
|
|
public List<Episode> GetEpisodes(long showID, long seasonNumber)
|
|
{
|
|
string query = "SELECT * FROM episodes WHERE episodes.showID = $showID AND episodes.seasonNumber = $seasonNumber ORDER BY episodeNumber;";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$showID", showID);
|
|
cmd.Parameters.AddWithValue("$seasonNumber", seasonNumber);
|
|
SQLiteDataReader reader = cmd.ExecuteReader();
|
|
|
|
List<Episode> episodes = new List<Episode>();
|
|
|
|
while (reader.Read())
|
|
episodes.Add(Episode.FromReader(reader));
|
|
|
|
return episodes;
|
|
}
|
|
}
|
|
|
|
public Episode GetEpisode(string showSlug, long seasonNumber, long episodeNumber)
|
|
{
|
|
string query = "SELECT * FROM episodes JOIN shows ON shows.id = episodes.showID WHERE shows.slug = $showSlug AND episodes.seasonNumber = $seasonNumber AND episodes.episodeNumber = $episodeNumber;";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$showSlug", showSlug);
|
|
cmd.Parameters.AddWithValue("$seasonNumber", seasonNumber);
|
|
cmd.Parameters.AddWithValue("$episodeNumber", episodeNumber);
|
|
SQLiteDataReader reader = cmd.ExecuteReader();
|
|
|
|
if (reader.Read())
|
|
return Episode.FromReader(reader).SetThumb(showSlug);
|
|
else
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public WatchItem GetWatchItem(string showSlug, long seasonNumber, long episodeNumber, bool complete = true)
|
|
{
|
|
string query = "SELECT episodes.id, shows.title as showTitle, shows.slug as showSlug, seasonNumber, episodeNumber, episodes.title, releaseDate, episodes.path FROM episodes JOIN shows ON shows.id = episodes.showID WHERE shows.slug = $showSlug AND episodes.seasonNumber = $seasonNumber AND episodes.episodeNumber = $episodeNumber;";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$showSlug", showSlug);
|
|
cmd.Parameters.AddWithValue("$seasonNumber", seasonNumber);
|
|
cmd.Parameters.AddWithValue("$episodeNumber", episodeNumber);
|
|
SQLiteDataReader reader = cmd.ExecuteReader();
|
|
|
|
if (reader.Read())
|
|
{
|
|
if (complete)
|
|
return WatchItem.FromReader(reader).SetStreams(this).SetPrevious(this).SetNext(this);
|
|
else
|
|
return WatchItem.FromReader(reader);
|
|
}
|
|
else
|
|
return null;
|
|
}
|
|
}
|
|
|
|
public List<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;
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
public List<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;
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|
|
|
|
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 List<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;
|
|
//}
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
public List<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;
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
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;
|
|
}
|
|
#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;
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
|
|
public bool IsEpisodeRegistered(string episodePath)
|
|
{
|
|
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;
|
|
}
|
|
}
|
|
|
|
public long GetOrCreateGenre(Genre genre)
|
|
{
|
|
Genre existingGenre = GetGenreBySlug(genre.Slug);
|
|
|
|
if (existingGenre != null)
|
|
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();
|
|
}
|
|
}
|
|
}
|
|
|
|
public long GetOrCreateStudio(Studio studio)
|
|
{
|
|
Studio existingStudio = GetStudioBySlug(studio.Slug);
|
|
|
|
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();
|
|
}
|
|
}
|
|
}
|
|
|
|
public long GetOrCreatePeople(People people)
|
|
{
|
|
People existingPeople = GetPeopleBySlug(people.Slug);
|
|
|
|
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();
|
|
}
|
|
|
|
}
|
|
}
|
|
#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();
|
|
}
|
|
}
|
|
}
|
|
|
|
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();
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
|
|
public long RegisterSeason(Season season)
|
|
{
|
|
string query = "INSERT INTO seasons (showID, seasonNumber, title, overview, year, imgPrimary, externalIDs) VALUES($showID, $seasonNumber, $title, $overview, $year, $imgPrimary, $externalIDs);";
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
try
|
|
{
|
|
cmd.Parameters.AddWithValue("$showID", season.ShowID);
|
|
cmd.Parameters.AddWithValue("$seasonNumber", season.SeasonNumber);
|
|
cmd.Parameters.AddWithValue("$title", season.Title);
|
|
cmd.Parameters.AddWithValue("$overview", season.Overview);
|
|
cmd.Parameters.AddWithValue("$year", season.Year);
|
|
cmd.Parameters.AddWithValue("$imgPrimary", season.ImgPrimary);
|
|
cmd.Parameters.AddWithValue("$externalIDs", season.ExternalIDs);
|
|
cmd.ExecuteNonQuery();
|
|
|
|
cmd.CommandText = "SELECT LAST_INSERT_ROWID()";
|
|
return (long)cmd.ExecuteScalar();
|
|
}
|
|
catch
|
|
{
|
|
Console.Error.WriteLine("SQL error while trying to insert a season ({0}), season probably already registered.", season.Title);
|
|
cmd.CommandText = "SELECT * FROM seasons WHERE showID = $showID AND seasonNumber = $seasonNumber";
|
|
cmd.Parameters.AddWithValue("$showID", season.ShowID);
|
|
cmd.Parameters.AddWithValue("$seasonNumber", season.SeasonNumber);
|
|
return (long)cmd.ExecuteScalar();
|
|
}
|
|
}
|
|
}
|
|
|
|
public long RegisterEpisode(Episode episode)
|
|
{
|
|
string query = "INSERT INTO episodes (showID, seasonID, seasonNumber, episodeNumber, absoluteNumber, path, title, overview, releaseDate, runtime, imgPrimary, externalIDs) VALUES($showID, $seasonID, $seasonNumber, $episodeNumber, $absoluteNumber, $path, $title, $overview, $releaseDate, $runtime, $imgPrimary, $externalIDs);";
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
try
|
|
{
|
|
cmd.Parameters.AddWithValue("$showID", episode.ShowID);
|
|
cmd.Parameters.AddWithValue("$seasonID", episode.SeasonID);
|
|
cmd.Parameters.AddWithValue("$seasonNUmber", episode.SeasonNumber);
|
|
cmd.Parameters.AddWithValue("$episodeNumber", episode.EpisodeNumber);
|
|
cmd.Parameters.AddWithValue("$absoluteNumber", episode.AbsoluteNumber);
|
|
cmd.Parameters.AddWithValue("$path", episode.Path);
|
|
cmd.Parameters.AddWithValue("$title", episode.Title);
|
|
cmd.Parameters.AddWithValue("$overview", episode.Overview);
|
|
cmd.Parameters.AddWithValue("$releaseDate", episode.ReleaseDate);
|
|
cmd.Parameters.AddWithValue("$runtime", episode.Runtime);
|
|
cmd.Parameters.AddWithValue("$imgPrimary", episode.ImgPrimary);
|
|
cmd.Parameters.AddWithValue("$externalIDs", episode.ExternalIDs);
|
|
cmd.ExecuteNonQuery();
|
|
|
|
cmd.CommandText = "SELECT LAST_INSERT_ROWID()";
|
|
return (long)cmd.ExecuteScalar();
|
|
}
|
|
catch
|
|
{
|
|
Console.Error.WriteLine("SQL error while trying to insert an episode ({0}), episode probably already registered.", episode.Link);
|
|
cmd.CommandText = "SELECT * FROM episodes WHERE showID = $showID AND seasonNumber = $seasonNumber AND episodeNumber = $episodeNumber";
|
|
cmd.Parameters.AddWithValue("$showID", episode.ShowID);
|
|
cmd.Parameters.AddWithValue("$seasonNumber", episode.SeasonNumber);
|
|
cmd.Parameters.AddWithValue("$episodeNumber", episode.EpisodeNumber);
|
|
return (long)cmd.ExecuteScalar();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void RegisterTrack(Track track)
|
|
{
|
|
string query = "INSERT INTO tracks (episodeID, streamType, title, language, codec, isDefault, isForced, isExternal, path) VALUES($episodeID, $streamType, $title, $language, $codec, $isDefault, $isForced, $isExternal, $path);";
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$episodeID", track.EpisodeID);
|
|
cmd.Parameters.AddWithValue("$streamType", track.Type);
|
|
cmd.Parameters.AddWithValue("$title", track.Title);
|
|
cmd.Parameters.AddWithValue("$language", track.Language);
|
|
cmd.Parameters.AddWithValue("$codec", track.Codec);
|
|
cmd.Parameters.AddWithValue("$isDefault", track.IsDefault);
|
|
cmd.Parameters.AddWithValue("$isForced", track.IsForced);
|
|
cmd.Parameters.AddWithValue("$isExternal", track.IsDefault);
|
|
cmd.Parameters.AddWithValue("$path", track.Path);
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
}
|
|
|
|
public void RegisterShowPeople(long showID, IEnumerable<People> people)
|
|
{
|
|
if (people == null)
|
|
return;
|
|
|
|
string linkQuery = "INSERT INTO peopleLinks (peopleID, showID, role, type) VALUES($peopleID, $showID, $role, $type);";
|
|
|
|
foreach (People peop in people)
|
|
{
|
|
using (SQLiteCommand cmd = new SQLiteCommand(linkQuery, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$peopleID", GetOrCreatePeople(peop));
|
|
cmd.Parameters.AddWithValue("$showID", showID);
|
|
cmd.Parameters.AddWithValue("$role", peop.Role);
|
|
cmd.Parameters.AddWithValue("$type", peop.Type);
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void AddShowToCollection(long showID, long collectionID)
|
|
{
|
|
string linkQuery = "INSERT INTO collectionsLinks (collectionID, showID) VALUES($collectionID, $showID);";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(linkQuery, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$collectionID", collectionID);
|
|
cmd.Parameters.AddWithValue("$showID", showID);
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
}
|
|
|
|
public void RemoveShow(long showID)
|
|
{
|
|
string query = "DELETE FROM shows WHERE id = $showID;";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$showID", showID);
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
}
|
|
|
|
public void RemoveSeason(long showID, long seasonID)
|
|
{
|
|
string query = "DELETE FROM seasons WHERE id = $seasonID;";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$seasonID", seasonID);
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
if (GetSeasons(showID).Count == 0)
|
|
RemoveShow(showID);
|
|
}
|
|
|
|
public void RemoveEpisode(Episode episode)
|
|
{
|
|
string query = "DELETE FROM episodes WHERE id = $episodeID;";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$episodeID", episode.ID);
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
|
|
if (GetEpisodes(episode.ShowID, episode.SeasonNumber).Count == 0)
|
|
RemoveSeason(episode.ShowID, episode.SeasonID);
|
|
}
|
|
|
|
public void ClearSubtitles(long episodeID)
|
|
{
|
|
string query = "DELETE FROM tracks WHERE episodeID = $episodeID;";
|
|
|
|
using (SQLiteCommand cmd = new SQLiteCommand(query, sqlConnection))
|
|
{
|
|
cmd.Parameters.AddWithValue("$episodeID", episodeID);
|
|
cmd.ExecuteNonQuery();
|
|
}
|
|
}
|
|
#endregion
|
|
}
|
|
}
|