Look ma, history!

This commit is contained in:
Mark McDowall 2013-05-10 15:33:04 -07:00
parent 3602822572
commit d320c2b6a9
12 changed files with 62 additions and 56 deletions

View File

@ -389,12 +389,24 @@ namespace Marr.Data.QGen
return SortBuilder;
}
public virtual SortBuilder<T> OrderBy(Expression<Func<T, object>> sortExpression, SortDirection sortDirection)
{
SortBuilder.OrderBy(sortExpression, sortDirection);
return SortBuilder;
}
public virtual SortBuilder<T> ThenBy(Expression<Func<T, object>> sortExpression)
{
SortBuilder.OrderBy(sortExpression);
return SortBuilder;
}
public virtual SortBuilder<T> ThenBy(Expression<Func<T, object>> sortExpression, SortDirection sortDirection)
{
SortBuilder.OrderBy(sortExpression, sortDirection);
return SortBuilder;
}
public virtual SortBuilder<T> OrderByDescending(Expression<Func<T, object>> sortExpression)
{
SortBuilder.OrderByDescending(sortExpression);

View File

@ -45,9 +45,7 @@ namespace NzbDrone.Api
Mapper.CreateMap<PagingSpec<Episode>, PagingResource<EpisodeResource>>();
//History
Mapper.CreateMap<Core.History.History, HistoryResource>()
.ForMember(dest => dest.Episode, opt => opt.Ignore())
.ForMember(dest => dest.Series, opt => opt.Ignore());
Mapper.CreateMap<Core.History.History, HistoryResource>();
Mapper.CreateMap<PagingSpec<Core.History.History>, PagingResource<HistoryResource>>();
}
}

View File

@ -44,7 +44,7 @@ namespace NzbDrone.Api.History
? SortDirection.Ascending
: SortDirection.Descending;
var pagingSpec = new PagingSpec<Episode>
var pagingSpec = new PagingSpec<Core.History.History>
{
Page = page,
PageSize = pageSize,
@ -52,44 +52,7 @@ namespace NzbDrone.Api.History
SortDirection = sortDirection
};
var series = new Core.Tv.Series { Title = "30 Rock", TitleSlug = "30-rock" };
var episode = new Episode { Title = "Test", SeasonNumber = 1, EpisodeNumber = 5 };
var result = new PagingSpec<Core.History.History>
{
Records = new List<Core.History.History>
{
new Core.History.History
{
Id = 1,
Date = DateTime.UtcNow.AddHours(-5),
// Episode = episode,
// Series = series,
Indexer = "nzbs.org",
Quality = new QualityModel(Quality.HDTV720p)
},
new Core.History.History
{
Id = 2,
Date = DateTime.UtcNow.AddDays(-1),
// Episode = episode,
// Series = series,
Indexer = "nzbs.org",
Quality = new QualityModel(Quality.SDTV, true)
},
new Core.History.History
{
Id = 3,
Date = DateTime.UtcNow.AddDays(-5),
// Episode = episode,
// Series = series,
Indexer = "nzbs.org",
Quality = new QualityModel(Quality.WEBDL1080p)
}
}
};
result.TotalRecords = result.Records.Count;
var result = _historyService.Paged(pagingSpec);
return Mapper.Map<PagingSpec<Core.History.History>, PagingResource<HistoryResource>>(result).AsResponse();
}

View File

@ -39,9 +39,11 @@ namespace NzbDrone.Core.Datastore
Mapper.Entity<SceneMapping>().RegisterModel("SceneMappings");
Mapper.Entity<History.History>().RegisterModel("History")
.Relationship()
.HasOne(h => h.Episode, h => h.EpisodeId)
.HasOne(h => h.Series, h => h.SeriesId);
.Relationships
.AutoMapICollectionOrComplexProperties();
// .Relationship();
// .HasOne(h => h.Episode, h => h.EpisodeId)
// .HasOne(h => h.Series, h => h.SeriesId);
Mapper.Entity<Series>().RegisterModel("Series")
.Ignore(s => s.Path)

View File

@ -17,7 +17,10 @@ namespace NzbDrone.Core.History
public string NzbInfoUrl { get; set; }
public string ReleaseGroup { get; set; }
public LazyLoaded<Episode> Episode { get; set; }
public LazyLoaded<Series> Series { get; set; }
// public LazyLoaded<Episode> Episode { get; set; }
// public LazyLoaded<Series> Series { get; set; }
public Episode Episode { get; set; }
public Series Series { get; set; }
}
}

View File

@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Data;
using System.Linq;
using Marr.Data.QGen;
using NzbDrone.Common.Messaging;
using NzbDrone.Core.Datastore;
using NzbDrone.Core.Tv;
@ -12,6 +13,7 @@ namespace NzbDrone.Core.History
{
void Trim();
QualityModel GetBestQualityInHistory(int episodeId);
PagingSpec<History> Paged(PagingSpec<History> pagingSpec);
}
public class HistoryRepository : BasicRepository<History>, IHistoryRepository
@ -41,6 +43,20 @@ namespace NzbDrone.Core.History
return null;
}
//public List<History> GetPagedHistory()
public PagingSpec<History> Paged(PagingSpec<History> pagingSpec)
{
var pagingQuery = Query.Join<History, Series>(JoinType.Inner, h => h.Series, (h, s) => h.SeriesId == s.Id)
.Join<History, Episode>(JoinType.Inner, h => h.Episode, (h, e) => h.EpisodeId == e.Id)
.OrderBy(pagingSpec.OrderByClause(), pagingSpec.ToSortDirection())
.Skip(pagingSpec.PagingOffset())
.Take(pagingSpec.PageSize);
pagingSpec.Records = pagingQuery.ToList();
//TODO: Use the same query for count and records
pagingSpec.TotalRecords = Count();
return pagingSpec;
}
}
}

View File

@ -3,6 +3,7 @@ using System.Collections.Generic;
using System.Linq;
using NLog;
using NzbDrone.Common.Messaging;
using NzbDrone.Core.Datastore;
using NzbDrone.Core.Download;
using NzbDrone.Core.Tv;
@ -14,6 +15,7 @@ namespace NzbDrone.Core.History
void Purge();
void Trim();
QualityModel GetBestQualityInHistory(int episodeId);
PagingSpec<History> Paged(PagingSpec<History> pagingSpec);
}
public class HistoryService : IHistoryService, IHandle<EpisodeGrabbedEvent>
@ -33,6 +35,11 @@ namespace NzbDrone.Core.History
return _historyRepository.All().ToList();
}
public PagingSpec<History> Paged(PagingSpec<History> pagingSpec)
{
return _historyRepository.Paged(pagingSpec);
}
public void Purge()
{
_historyRepository.Purge();

View File

@ -22,10 +22,6 @@ namespace NzbDrone.Core.Providers
_seriesRepository = seriesRepository;
}
public XemProvider()
{
}
public virtual void UpdateMappings()
{
_logger.Trace("Starting scene numbering update");

View File

@ -0,0 +1 @@
{{episode.title}}

View File

@ -26,7 +26,7 @@ define([
headerCell: 'nzbDrone'
},
{
name : 'seriesTitle',
name : 'Series.Title',
label : 'Series Title',
editable : false,
cell : Backgrid.TemplateBackedCell.extend({ template: 'Missing/SeriesTitleTemplate' }),
@ -41,11 +41,11 @@ define([
headerCell: 'nzbDrone'
},
{
name : 'episode.title',
name : 'Episode.Title',
label : 'Episode Title',
editable : false,
sortable : false,
cell : 'string',
cell : Backgrid.TemplateBackedCell.extend({ template: 'History/EpisodeTitleTemplate' }),
headerCell: 'nzbDrone'
},
{

View File

@ -1,6 +1,14 @@
"use strict";
define(['app'], function (app) {
NzbDrone.History.Model = Backbone.Model.extend({
mutators: {
seasonNumber: function () {
return this.get('episode').seasonNumber;
},
paddedEpisodeNumber: function () {
return this.get('episode').episodeNumber.pad(2);
}
}
});
});

View File

@ -7,7 +7,7 @@ define(['app'], function () {
return bestDateString(this.get('airDate'));
},
paddedEpisodeNumber: function () {
return this.get('episodeNumber');
return this.get('episodeNumber').pad(2);
},
day : function () {
return Date.create(this.get('airDate')).format('{dd}');