2017-01-03 19:24:55 +00:00
|
|
|
|
using System;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using System.Collections.Generic;
|
2016-12-29 15:04:01 +00:00
|
|
|
|
using NzbDrone.Core.Datastore;
|
|
|
|
|
using NzbDrone.Core.Messaging.Events;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace NzbDrone.Core.Tv
|
|
|
|
|
{
|
|
|
|
|
public interface IMovieRepository : IBasicRepository<Movie>
|
|
|
|
|
{
|
|
|
|
|
bool MoviePathExists(string path);
|
|
|
|
|
Movie FindByTitle(string cleanTitle);
|
|
|
|
|
Movie FindByTitle(string cleanTitle, int year);
|
|
|
|
|
Movie FindByImdbId(string imdbid);
|
2017-01-09 22:16:54 +00:00
|
|
|
|
Movie FindByTitleSlug(string slug);
|
2017-01-16 21:40:59 +00:00
|
|
|
|
List<Movie> MoviesBetweenDates(DateTime start, DateTime end, bool includeUnmonitored);
|
2017-01-03 19:24:55 +00:00
|
|
|
|
List<Movie> GetMoviesByFileId(int fileId);
|
|
|
|
|
void SetFileId(int fileId, int movieId);
|
2016-12-29 15:04:01 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public class MovieRepository : BasicRepository<Movie>, IMovieRepository
|
|
|
|
|
{
|
2017-01-05 11:39:48 +00:00
|
|
|
|
private readonly Dictionary<string, string> romanNumeralsMapper = new Dictionary<string, string>
|
|
|
|
|
{
|
|
|
|
|
{ "1", "I"},
|
|
|
|
|
{ "2", "II"},
|
|
|
|
|
{ "3", "III"},
|
|
|
|
|
{ "4", "IV"},
|
|
|
|
|
{ "5", "V"},
|
|
|
|
|
{ "6", "VI"},
|
|
|
|
|
{ "7", "VII"},
|
|
|
|
|
{ "8", "VII"},
|
|
|
|
|
{ "9", "IX"},
|
|
|
|
|
{ "10", "X"},
|
|
|
|
|
|
|
|
|
|
}; //If a movie has more than 10 parts fuck 'em.
|
|
|
|
|
|
2016-12-29 15:04:01 +00:00
|
|
|
|
public MovieRepository(IMainDatabase database, IEventAggregator eventAggregator)
|
|
|
|
|
: base(database, eventAggregator)
|
|
|
|
|
{
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool MoviePathExists(string path)
|
|
|
|
|
{
|
|
|
|
|
return Query.Where(c => c.Path == path).Any();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Movie FindByTitle(string cleanTitle)
|
|
|
|
|
{
|
|
|
|
|
cleanTitle = cleanTitle.ToLowerInvariant();
|
|
|
|
|
|
2017-01-05 11:39:48 +00:00
|
|
|
|
var cleanRoman = cleanTitle;
|
|
|
|
|
|
|
|
|
|
var cleanNum = cleanTitle;
|
|
|
|
|
|
|
|
|
|
foreach (KeyValuePair<string, string> entry in romanNumeralsMapper)
|
|
|
|
|
{
|
|
|
|
|
string num = entry.Key;
|
|
|
|
|
string roman = entry.Value.ToLower();
|
|
|
|
|
|
|
|
|
|
cleanRoman = cleanRoman.Replace(num, roman);
|
|
|
|
|
|
|
|
|
|
cleanNum = cleanNum.Replace(roman, num);
|
|
|
|
|
}
|
|
|
|
|
|
2017-01-10 15:23:07 +00:00
|
|
|
|
var result = Query.Where(s => s.CleanTitle == cleanTitle).FirstOrDefault();
|
2017-01-05 11:39:48 +00:00
|
|
|
|
|
|
|
|
|
if (result == null)
|
|
|
|
|
{
|
2017-01-10 15:23:07 +00:00
|
|
|
|
result = Query.Where(s => s.CleanTitle == cleanNum).OrWhere(s => s.CleanTitle == cleanRoman).FirstOrDefault();
|
2017-01-05 11:39:48 +00:00
|
|
|
|
|
|
|
|
|
if (result == null)
|
|
|
|
|
{
|
|
|
|
|
var movies = this.All();
|
|
|
|
|
|
|
|
|
|
result = movies.Where(m => m.AlternativeTitles.Any(t => Parser.Parser.CleanSeriesTitle(t.ToLower()) == cleanTitle ||
|
|
|
|
|
Parser.Parser.CleanSeriesTitle(t.ToLower()) == cleanRoman ||
|
2017-01-10 15:23:07 +00:00
|
|
|
|
Parser.Parser.CleanSeriesTitle(t.ToLower()) == cleanNum)).FirstOrDefault();
|
2017-01-05 11:39:48 +00:00
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
return result;
|
|
|
|
|
}
|
2016-12-29 15:04:01 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Movie FindByTitle(string cleanTitle, int year)
|
|
|
|
|
{
|
|
|
|
|
cleanTitle = cleanTitle.ToLowerInvariant();
|
|
|
|
|
|
|
|
|
|
return Query.Where(s => s.CleanTitle == cleanTitle)
|
|
|
|
|
.AndWhere(s => s.Year == year)
|
|
|
|
|
.SingleOrDefault();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public Movie FindByImdbId(string imdbid)
|
|
|
|
|
{
|
|
|
|
|
return Query.Where(s => s.ImdbId == imdbid).SingleOrDefault();
|
|
|
|
|
}
|
2017-01-03 19:24:55 +00:00
|
|
|
|
|
|
|
|
|
public List<Movie> GetMoviesByFileId(int fileId)
|
|
|
|
|
{
|
|
|
|
|
return Query.Where(m => m.MovieFileId == fileId).ToList();
|
|
|
|
|
}
|
|
|
|
|
|
2017-01-06 14:37:44 +00:00
|
|
|
|
public void SetFileId(int fileId, int episodeId)
|
2017-01-03 19:24:55 +00:00
|
|
|
|
{
|
|
|
|
|
SetFields(new Movie { Id = episodeId, MovieFileId = fileId }, movie => movie.MovieFileId);
|
|
|
|
|
}
|
|
|
|
|
|
2017-01-09 22:16:54 +00:00
|
|
|
|
public Movie FindByTitleSlug(string slug)
|
|
|
|
|
{
|
|
|
|
|
return Query.Where(m => m.TitleSlug == slug).FirstOrDefault();
|
|
|
|
|
}
|
2017-01-16 21:40:59 +00:00
|
|
|
|
|
|
|
|
|
public List<Movie> MoviesBetweenDates(DateTime start, DateTime end, bool includeUnmonitored)
|
|
|
|
|
{
|
|
|
|
|
var query = Query.Where(m => m.InCinemas >= start && m.InCinemas <= end).OrWhere(m => m.PhysicalRelease >= start && m.PhysicalRelease <= end);
|
|
|
|
|
|
|
|
|
|
if (!includeUnmonitored)
|
|
|
|
|
{
|
|
|
|
|
query.AndWhere(e => e.Monitored);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return query.ToList();
|
|
|
|
|
}
|
2016-12-29 15:04:01 +00:00
|
|
|
|
}
|
|
|
|
|
}
|