132 lines
4.7 KiB
C#
132 lines
4.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
using LiteDB;
|
|
|
|
namespace Tesses.CMS {
|
|
public class LiteDBContentProvider : IContentProvider
|
|
{
|
|
string dir;
|
|
ILiteDatabase db;
|
|
public LiteDBContentProvider(string dir)
|
|
{
|
|
this.dir = dir;
|
|
db=new LiteDatabase(Path.Combine(dir,"tesses-cms.db"));
|
|
}
|
|
public Movie CreateMovie(string user, string movie, string properName, string description)
|
|
{
|
|
var userId=GetUserAccount(user).Id;
|
|
|
|
Movie _movie = new Movie(){UserId = userId,Name = movie,ProperName=properName,Description = description};
|
|
_movie.Id=Movies.Insert(_movie);
|
|
return _movie;
|
|
}
|
|
|
|
private ILiteCollection<UserAccount> UserAccounts => db.GetCollection<UserAccount>("users");
|
|
private ILiteCollection<Movie> Movies => db.GetCollection<Movie>("movies");
|
|
|
|
public UserAccount GetFirstUser()
|
|
{
|
|
return GetUsers().First();
|
|
}
|
|
|
|
public Movie GetMovie(string user, string movie)
|
|
{
|
|
var userId=GetUserAccount(user).Id;
|
|
return Movies.FindOne(e=>e.Name == movie && e.UserId == userId);
|
|
}
|
|
|
|
public MovieContentMetaData GetMovieContentMetaData(CMSConfiguration configuration, string user, string movie)
|
|
{
|
|
var _movie= new MovieContentMetaData(){
|
|
PosterUrl = $"{configuration.Root.TrimEnd('/')}/content/{user}/movie/{movie}/poster.jpg",
|
|
ThumbnailUrl = $"{configuration.Root.TrimEnd('/')}/content/{user}/movie/{movie}/thumbnail.jpg",
|
|
BrowserStream = $"{configuration.Root.TrimEnd('/')}/content/{user}/movie/{movie}/browser.mp4",
|
|
DownloadStream = $"{configuration.Root.TrimEnd('/')}/content/{user}/movie/{movie}/{movie}.mp4",
|
|
MovieTorrentUrl = $"{configuration.Root.TrimEnd('/')}/content/{user}/movie/{movie}/{movie}.torrent",
|
|
MovieWithExtrasTorrentUrl=$"{configuration.Root.TrimEnd('/')}/content/{user}/movie/{movie}/{movie}_withextras.torrent"
|
|
};
|
|
string subDir=Path.Combine(dir,"content", user, "movie",movie,"subtitles");
|
|
if(Directory.Exists(subDir))
|
|
foreach(var language in Directory.GetDirectories(subDir))
|
|
{
|
|
string languageCode=Path.GetFileName(language); //en-US for english
|
|
_movie.SubtitlesStreams.Add(new SubtitleStream(){LanguageCode=languageCode, SubtitleUrl = $"{configuration.Root.TrimEnd('/')}/content/{user}/movie/{movie}/subtitles/{languageCode}/{movie}.srt"});
|
|
}
|
|
string extrasPath = Path.Combine(dir,"content", user, "movie",movie,"extras");
|
|
if(Directory.Exists(extrasPath))
|
|
FindExtras( $"{configuration.Root.TrimEnd('/')}/content/{user}/movie/{movie}/extras/",extrasPath,_movie.ExtraStreams);
|
|
return _movie;
|
|
}
|
|
|
|
private void FindExtras(string extras,string v, List<ExtraDataStream> extraStreams)
|
|
{
|
|
foreach(var d in Directory.GetDirectories(v))
|
|
{
|
|
var dirname = Path.GetFileName(d);
|
|
string url = $"{extras}{dirname}/";
|
|
|
|
ExtraDataStream dataStream=new ExtraDataStream();
|
|
dataStream.IsDir=true;
|
|
dataStream.Name = dirname;
|
|
dataStream.Url = url;
|
|
|
|
FindExtras(url,d,dataStream.Items);
|
|
extraStreams.Add(dataStream);
|
|
}
|
|
|
|
foreach(var f in Directory.GetFiles(v))
|
|
{
|
|
var filename = Path.GetFileName(f);
|
|
var url = $"{extras}{filename}";
|
|
ExtraDataStream dataStream=new ExtraDataStream();
|
|
dataStream.IsDir=false;
|
|
dataStream.Name = filename;
|
|
dataStream.Url = url;
|
|
|
|
extraStreams.Add(dataStream);
|
|
}
|
|
}
|
|
|
|
public IEnumerable<Movie> GetMovies(string user)
|
|
{
|
|
var userId = GetUserAccount(user).Id;
|
|
return GetMovies(userId);
|
|
}
|
|
|
|
public IEnumerable<Movie> GetMovies(long user)
|
|
{
|
|
return Movies.Find(e=>e.UserId==user);
|
|
}
|
|
|
|
public UserAccount GetUserAccount(string user)
|
|
{
|
|
return UserAccounts.FindOne(e=>e.Username == user);
|
|
}
|
|
|
|
public IEnumerable<UserAccount> GetUsers()
|
|
{
|
|
return UserAccounts.FindAll();
|
|
}
|
|
|
|
public void CreateUser(CMSConfiguration configuration,string user,string properName,string email,string password)
|
|
{
|
|
bool isOwner = UserAccounts.Count() == 0;
|
|
UserAccount account=new UserAccount();
|
|
account.IsAdmin=isOwner;
|
|
account.IsVerified = isOwner;
|
|
account.Username = user;
|
|
account.ProperName= properName;
|
|
account.NewSalt();
|
|
account.PasswordHash=account.GetPasswordHash(password);
|
|
account.Email = email;
|
|
UserAccounts.Insert(account);
|
|
}
|
|
|
|
public void UpdateMovie(Movie movie)
|
|
{
|
|
Movies.Update(movie);
|
|
}
|
|
}
|
|
} |