mirror of
https://github.com/Radarr/Radarr.git
synced 2024-09-19 07:52:33 +02:00
First implementation of History for Movies. However, nothing is returned from the Database query misteriously.
This commit is contained in:
parent
0e02171938
commit
2a932fe7e8
@ -3,6 +3,7 @@
|
|||||||
using NzbDrone.Api.Episodes;
|
using NzbDrone.Api.Episodes;
|
||||||
using NzbDrone.Api.Extensions;
|
using NzbDrone.Api.Extensions;
|
||||||
using NzbDrone.Api.Series;
|
using NzbDrone.Api.Series;
|
||||||
|
using NzbDrone.Api.Movie;
|
||||||
using NzbDrone.Core.Datastore;
|
using NzbDrone.Core.Datastore;
|
||||||
using NzbDrone.Core.DecisionEngine;
|
using NzbDrone.Core.DecisionEngine;
|
||||||
using NzbDrone.Core.Download;
|
using NzbDrone.Core.Download;
|
||||||
@ -34,12 +35,18 @@ protected HistoryResource MapToResource(Core.History.History model)
|
|||||||
|
|
||||||
resource.Series = model.Series.ToResource();
|
resource.Series = model.Series.ToResource();
|
||||||
resource.Episode = model.Episode.ToResource();
|
resource.Episode = model.Episode.ToResource();
|
||||||
|
resource.Movie = model.Movie.ToResource();
|
||||||
|
|
||||||
if (model.Series != null)
|
if (model.Series != null)
|
||||||
{
|
{
|
||||||
resource.QualityCutoffNotMet = _qualityUpgradableSpecification.CutoffNotMet(model.Series.Profile.Value, model.Quality);
|
resource.QualityCutoffNotMet = _qualityUpgradableSpecification.CutoffNotMet(model.Series.Profile.Value, model.Quality);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (model.Movie != null)
|
||||||
|
{
|
||||||
|
resource.QualityCutoffNotMet = _qualityUpgradableSpecification.CutoffNotMet(model.Movie.Profile.Value, model.Quality);
|
||||||
|
}
|
||||||
|
|
||||||
return resource;
|
return resource;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,6 +54,8 @@ private PagingResource<HistoryResource> GetHistory(PagingResource<HistoryResourc
|
|||||||
{
|
{
|
||||||
var episodeId = Request.Query.EpisodeId;
|
var episodeId = Request.Query.EpisodeId;
|
||||||
|
|
||||||
|
var movieId = Request.Query.MovieId;
|
||||||
|
|
||||||
var pagingSpec = pagingResource.MapToPagingSpec<HistoryResource, Core.History.History>("date", SortDirection.Descending);
|
var pagingSpec = pagingResource.MapToPagingSpec<HistoryResource, Core.History.History>("date", SortDirection.Descending);
|
||||||
|
|
||||||
if (pagingResource.FilterKey == "eventType")
|
if (pagingResource.FilterKey == "eventType")
|
||||||
@ -61,6 +70,14 @@ private PagingResource<HistoryResource> GetHistory(PagingResource<HistoryResourc
|
|||||||
pagingSpec.FilterExpression = h => h.EpisodeId == i;
|
pagingSpec.FilterExpression = h => h.EpisodeId == i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (movieId.HasValue)
|
||||||
|
{
|
||||||
|
int i = (int)movieId;
|
||||||
|
pagingSpec.FilterExpression = h => h.MovieId == i;
|
||||||
|
}
|
||||||
|
|
||||||
|
var pg = _historyService.Paged(pagingSpec);
|
||||||
|
|
||||||
return ApplyToPage(_historyService.Paged, pagingSpec, MapToResource);
|
return ApplyToPage(_historyService.Paged, pagingSpec, MapToResource);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
using NzbDrone.Api.Episodes;
|
using NzbDrone.Api.Episodes;
|
||||||
using NzbDrone.Api.REST;
|
using NzbDrone.Api.REST;
|
||||||
using NzbDrone.Api.Series;
|
using NzbDrone.Api.Series;
|
||||||
|
using NzbDrone.Api.Movie;
|
||||||
using NzbDrone.Core.History;
|
using NzbDrone.Core.History;
|
||||||
using NzbDrone.Core.Qualities;
|
using NzbDrone.Core.Qualities;
|
||||||
|
|
||||||
@ -12,6 +13,7 @@ namespace NzbDrone.Api.History
|
|||||||
public class HistoryResource : RestResource
|
public class HistoryResource : RestResource
|
||||||
{
|
{
|
||||||
public int EpisodeId { get; set; }
|
public int EpisodeId { get; set; }
|
||||||
|
public int MovieId { get; set; }
|
||||||
public int SeriesId { get; set; }
|
public int SeriesId { get; set; }
|
||||||
public string SourceTitle { get; set; }
|
public string SourceTitle { get; set; }
|
||||||
public QualityModel Quality { get; set; }
|
public QualityModel Quality { get; set; }
|
||||||
@ -22,7 +24,7 @@ public class HistoryResource : RestResource
|
|||||||
public HistoryEventType EventType { get; set; }
|
public HistoryEventType EventType { get; set; }
|
||||||
|
|
||||||
public Dictionary<string, string> Data { get; set; }
|
public Dictionary<string, string> Data { get; set; }
|
||||||
|
public MovieResource Movie { get; set; }
|
||||||
public EpisodeResource Episode { get; set; }
|
public EpisodeResource Episode { get; set; }
|
||||||
public SeriesResource Series { get; set; }
|
public SeriesResource Series { get; set; }
|
||||||
}
|
}
|
||||||
@ -39,6 +41,7 @@ public static HistoryResource ToResource(this Core.History.History model)
|
|||||||
|
|
||||||
EpisodeId = model.EpisodeId,
|
EpisodeId = model.EpisodeId,
|
||||||
SeriesId = model.SeriesId,
|
SeriesId = model.SeriesId,
|
||||||
|
MovieId = model.MovieId,
|
||||||
SourceTitle = model.SourceTitle,
|
SourceTitle = model.SourceTitle,
|
||||||
Quality = model.Quality,
|
Quality = model.Quality,
|
||||||
//QualityCutoffNotMet
|
//QualityCutoffNotMet
|
||||||
|
@ -104,7 +104,8 @@ protected override void MainDbUpgrade()
|
|||||||
.WithColumn("Quality").AsString()
|
.WithColumn("Quality").AsString()
|
||||||
.WithColumn("Indexer").AsString()
|
.WithColumn("Indexer").AsString()
|
||||||
.WithColumn("NzbInfoUrl").AsString().Nullable()
|
.WithColumn("NzbInfoUrl").AsString().Nullable()
|
||||||
.WithColumn("ReleaseGroup").AsString().Nullable();
|
.WithColumn("ReleaseGroup").AsString().Nullable()
|
||||||
|
.WithColumn("MovieId").AsInt32().WithDefaultValue(0);
|
||||||
|
|
||||||
Create.TableForModel("Notifications")
|
Create.TableForModel("Notifications")
|
||||||
.WithColumn("Name").AsString()
|
.WithColumn("Name").AsString()
|
||||||
|
@ -17,9 +17,11 @@ public History()
|
|||||||
|
|
||||||
public int EpisodeId { get; set; }
|
public int EpisodeId { get; set; }
|
||||||
public int SeriesId { get; set; }
|
public int SeriesId { get; set; }
|
||||||
|
public int MovieId { get; set; }
|
||||||
public string SourceTitle { get; set; }
|
public string SourceTitle { get; set; }
|
||||||
public QualityModel Quality { get; set; }
|
public QualityModel Quality { get; set; }
|
||||||
public DateTime Date { get; set; }
|
public DateTime Date { get; set; }
|
||||||
|
public Movie Movie { get; set; }
|
||||||
public Episode Episode { get; set; }
|
public Episode Episode { get; set; }
|
||||||
public Series Series { get; set; }
|
public Series Series { get; set; }
|
||||||
public HistoryEventType EventType { get; set; }
|
public HistoryEventType EventType { get; set; }
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
using System.Collections.Generic;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using Marr.Data.QGen;
|
using Marr.Data.QGen;
|
||||||
using NzbDrone.Core.Datastore;
|
using NzbDrone.Core.Datastore;
|
||||||
@ -16,6 +17,7 @@ public interface IHistoryRepository : IBasicRepository<History>
|
|||||||
List<History> FindByDownloadId(string downloadId);
|
List<History> FindByDownloadId(string downloadId);
|
||||||
List<History> FindDownloadHistory(int idSeriesId, QualityModel quality);
|
List<History> FindDownloadHistory(int idSeriesId, QualityModel quality);
|
||||||
void DeleteForSeries(int seriesId);
|
void DeleteForSeries(int seriesId);
|
||||||
|
History MostRecentForMovie(int movieId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class HistoryRepository : BasicRepository<History>, IHistoryRepository
|
public class HistoryRepository : BasicRepository<History>, IHistoryRepository
|
||||||
@ -76,5 +78,12 @@ protected override SortBuilder<History> GetPagedQuery(QueryBuilder<History> quer
|
|||||||
|
|
||||||
return base.GetPagedQuery(baseQuery, pagingSpec);
|
return base.GetPagedQuery(baseQuery, pagingSpec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public History MostRecentForMovie(int movieId)
|
||||||
|
{
|
||||||
|
return Query.Where(h => h.MovieId == movieId)
|
||||||
|
.OrderByDescending(h => h.Date)
|
||||||
|
.FirstOrDefault();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -20,6 +20,7 @@ public interface IHistoryService
|
|||||||
{
|
{
|
||||||
QualityModel GetBestQualityInHistory(Profile profile, int episodeId);
|
QualityModel GetBestQualityInHistory(Profile profile, int episodeId);
|
||||||
PagingSpec<History> Paged(PagingSpec<History> pagingSpec);
|
PagingSpec<History> Paged(PagingSpec<History> pagingSpec);
|
||||||
|
History MostRecentForMovie(int movieId);
|
||||||
History MostRecentForEpisode(int episodeId);
|
History MostRecentForEpisode(int episodeId);
|
||||||
History MostRecentForDownloadId(string downloadId);
|
History MostRecentForDownloadId(string downloadId);
|
||||||
History Get(int historyId);
|
History Get(int historyId);
|
||||||
@ -29,6 +30,7 @@ public interface IHistoryService
|
|||||||
|
|
||||||
public class HistoryService : IHistoryService,
|
public class HistoryService : IHistoryService,
|
||||||
IHandle<EpisodeGrabbedEvent>,
|
IHandle<EpisodeGrabbedEvent>,
|
||||||
|
IHandle<MovieGrabbedEvent>,
|
||||||
IHandle<EpisodeImportedEvent>,
|
IHandle<EpisodeImportedEvent>,
|
||||||
IHandle<DownloadFailedEvent>,
|
IHandle<DownloadFailedEvent>,
|
||||||
IHandle<EpisodeFileDeletedEvent>,
|
IHandle<EpisodeFileDeletedEvent>,
|
||||||
@ -53,6 +55,11 @@ public History MostRecentForEpisode(int episodeId)
|
|||||||
return _historyRepository.MostRecentForEpisode(episodeId);
|
return _historyRepository.MostRecentForEpisode(episodeId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public History MostRecentForMovie(int movieId)
|
||||||
|
{
|
||||||
|
return _historyRepository.MostRecentForMovie(movieId);
|
||||||
|
}
|
||||||
|
|
||||||
public History MostRecentForDownloadId(string downloadId)
|
public History MostRecentForDownloadId(string downloadId)
|
||||||
{
|
{
|
||||||
return _historyRepository.MostRecentForDownloadId(downloadId);
|
return _historyRepository.MostRecentForDownloadId(downloadId);
|
||||||
@ -138,7 +145,8 @@ public void Handle(EpisodeGrabbedEvent message)
|
|||||||
SourceTitle = message.Episode.Release.Title,
|
SourceTitle = message.Episode.Release.Title,
|
||||||
SeriesId = episode.SeriesId,
|
SeriesId = episode.SeriesId,
|
||||||
EpisodeId = episode.Id,
|
EpisodeId = episode.Id,
|
||||||
DownloadId = message.DownloadId
|
DownloadId = message.DownloadId,
|
||||||
|
MovieId = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
history.Data.Add("Indexer", message.Episode.Release.Indexer);
|
history.Data.Add("Indexer", message.Episode.Release.Indexer);
|
||||||
@ -172,6 +180,50 @@ public void Handle(EpisodeGrabbedEvent message)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Handle(MovieGrabbedEvent message)
|
||||||
|
{
|
||||||
|
var history = new History
|
||||||
|
{
|
||||||
|
EventType = HistoryEventType.Grabbed,
|
||||||
|
Date = DateTime.UtcNow,
|
||||||
|
Quality = message.Movie.ParsedEpisodeInfo.Quality,
|
||||||
|
SourceTitle = message.Movie.Release.Title,
|
||||||
|
SeriesId = 0,
|
||||||
|
EpisodeId = 0,
|
||||||
|
DownloadId = message.DownloadId,
|
||||||
|
MovieId = message.Movie.Movie.Id
|
||||||
|
};
|
||||||
|
|
||||||
|
history.Data.Add("Indexer", message.Movie.Release.Indexer);
|
||||||
|
history.Data.Add("NzbInfoUrl", message.Movie.Release.InfoUrl);
|
||||||
|
history.Data.Add("ReleaseGroup", message.Movie.ParsedEpisodeInfo.ReleaseGroup);
|
||||||
|
history.Data.Add("Age", message.Movie.Release.Age.ToString());
|
||||||
|
history.Data.Add("AgeHours", message.Movie.Release.AgeHours.ToString());
|
||||||
|
history.Data.Add("AgeMinutes", message.Movie.Release.AgeMinutes.ToString());
|
||||||
|
history.Data.Add("PublishedDate", message.Movie.Release.PublishDate.ToString("s") + "Z");
|
||||||
|
history.Data.Add("DownloadClient", message.DownloadClient);
|
||||||
|
history.Data.Add("Size", message.Movie.Release.Size.ToString());
|
||||||
|
history.Data.Add("DownloadUrl", message.Movie.Release.DownloadUrl);
|
||||||
|
history.Data.Add("Guid", message.Movie.Release.Guid);
|
||||||
|
history.Data.Add("TvdbId", message.Movie.Release.TvdbId.ToString());
|
||||||
|
history.Data.Add("TvRageId", message.Movie.Release.TvRageId.ToString());
|
||||||
|
history.Data.Add("Protocol", ((int)message.Movie.Release.DownloadProtocol).ToString());
|
||||||
|
|
||||||
|
if (!message.Movie.ParsedEpisodeInfo.ReleaseHash.IsNullOrWhiteSpace())
|
||||||
|
{
|
||||||
|
history.Data.Add("ReleaseHash", message.Movie.ParsedEpisodeInfo.ReleaseHash);
|
||||||
|
}
|
||||||
|
|
||||||
|
var torrentRelease = message.Movie.Release as TorrentInfo;
|
||||||
|
|
||||||
|
if (torrentRelease != null)
|
||||||
|
{
|
||||||
|
history.Data.Add("TorrentInfoHash", torrentRelease.InfoHash);
|
||||||
|
}
|
||||||
|
|
||||||
|
_historyRepository.Insert(history);
|
||||||
|
}
|
||||||
|
|
||||||
public void Handle(EpisodeImportedEvent message)
|
public void Handle(EpisodeImportedEvent message)
|
||||||
{
|
{
|
||||||
if (!message.NewDownload)
|
if (!message.NewDownload)
|
||||||
@ -196,7 +248,10 @@ public void Handle(EpisodeImportedEvent message)
|
|||||||
SourceTitle = message.ImportedEpisode.SceneName ?? Path.GetFileNameWithoutExtension(message.EpisodeInfo.Path),
|
SourceTitle = message.ImportedEpisode.SceneName ?? Path.GetFileNameWithoutExtension(message.EpisodeInfo.Path),
|
||||||
SeriesId = message.ImportedEpisode.SeriesId,
|
SeriesId = message.ImportedEpisode.SeriesId,
|
||||||
EpisodeId = episode.Id,
|
EpisodeId = episode.Id,
|
||||||
DownloadId = downloadId
|
DownloadId = downloadId,
|
||||||
|
MovieId = 0,
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
//Won't have a value since we publish this event before saving to DB.
|
//Won't have a value since we publish this event before saving to DB.
|
||||||
@ -249,6 +304,7 @@ public void Handle(EpisodeFileDeletedEvent message)
|
|||||||
SourceTitle = message.EpisodeFile.Path,
|
SourceTitle = message.EpisodeFile.Path,
|
||||||
SeriesId = message.EpisodeFile.SeriesId,
|
SeriesId = message.EpisodeFile.SeriesId,
|
||||||
EpisodeId = episode.Id,
|
EpisodeId = episode.Id,
|
||||||
|
MovieId = 0
|
||||||
};
|
};
|
||||||
|
|
||||||
history.Data.Add("Reason", message.Reason.ToString());
|
history.Data.Add("Reason", message.Reason.ToString());
|
||||||
|
@ -55,11 +55,15 @@ var Collection = PageableCollection.extend({
|
|||||||
|
|
||||||
initialize : function(options) {
|
initialize : function(options) {
|
||||||
delete this.queryParams.episodeId;
|
delete this.queryParams.episodeId;
|
||||||
|
delete this.queryParams.movieId;
|
||||||
|
|
||||||
if (options) {
|
if (options) {
|
||||||
if (options.episodeId) {
|
if (options.episodeId) {
|
||||||
this.queryParams.episodeId = options.episodeId;
|
this.queryParams.episodeId = options.episodeId;
|
||||||
}
|
}
|
||||||
|
if (options.movieId) {
|
||||||
|
this.queryParams.movieId = options.movieId;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -1,12 +1,20 @@
|
|||||||
var Backbone = require('backbone');
|
var Backbone = require('backbone');
|
||||||
var SeriesModel = require('../../Series/SeriesModel');
|
var SeriesModel = require('../../Series/SeriesModel');
|
||||||
var EpisodeModel = require('../../Series/EpisodeModel');
|
var EpisodeModel = require('../../Series/EpisodeModel');
|
||||||
|
var MovieModel = require('../../Movies/MovieModel');
|
||||||
|
|
||||||
module.exports = Backbone.Model.extend({
|
module.exports = Backbone.Model.extend({
|
||||||
parse : function(model) {
|
parse : function(model) {
|
||||||
|
if (model.series) {
|
||||||
model.series = new SeriesModel(model.series);
|
model.series = new SeriesModel(model.series);
|
||||||
model.episode = new EpisodeModel(model.episode);
|
model.episode = new EpisodeModel(model.episode);
|
||||||
model.episode.set('series', model.series);
|
model.episode.set('series', model.series);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (model.movie) {
|
||||||
|
model.movie = new MovieModel(model.movie);
|
||||||
|
}
|
||||||
|
|
||||||
return model;
|
return model;
|
||||||
}
|
}
|
||||||
});
|
});
|
@ -56,7 +56,7 @@ module.exports = Marionette.Layout.extend({
|
|||||||
this.model = options.model;
|
this.model = options.model;
|
||||||
|
|
||||||
this.collection = new HistoryCollection({
|
this.collection = new HistoryCollection({
|
||||||
episodeId : this.model.id,
|
movieId : this.model.id,
|
||||||
tableName : 'episodeHistory'
|
tableName : 'episodeHistory'
|
||||||
});
|
});
|
||||||
this.collection.fetch();
|
this.collection.fetch();
|
||||||
|
Loading…
Reference in New Issue
Block a user