mirror of https://github.com/Sonarr/Sonarr
New: Episode quality badges are now styled differently for episodes that haven't met quality cutoff yet.
This commit is contained in:
parent
bd60133274
commit
ded6e966e3
|
@ -11,6 +11,7 @@ using NzbDrone.Core.MediaFiles.Events;
|
||||||
using NzbDrone.Core.Messaging.Commands;
|
using NzbDrone.Core.Messaging.Commands;
|
||||||
using NzbDrone.Core.Messaging.Events;
|
using NzbDrone.Core.Messaging.Events;
|
||||||
using NzbDrone.Core.Tv;
|
using NzbDrone.Core.Tv;
|
||||||
|
using NzbDrone.Core.DecisionEngine;
|
||||||
|
|
||||||
namespace NzbDrone.Api.EpisodeFiles
|
namespace NzbDrone.Api.EpisodeFiles
|
||||||
{
|
{
|
||||||
|
@ -20,18 +21,21 @@ namespace NzbDrone.Api.EpisodeFiles
|
||||||
private readonly IMediaFileService _mediaFileService;
|
private readonly IMediaFileService _mediaFileService;
|
||||||
private readonly IRecycleBinProvider _recycleBinProvider;
|
private readonly IRecycleBinProvider _recycleBinProvider;
|
||||||
private readonly ISeriesService _seriesService;
|
private readonly ISeriesService _seriesService;
|
||||||
|
private readonly IQualityUpgradableSpecification _qualityUpgradableSpecification;
|
||||||
private readonly Logger _logger;
|
private readonly Logger _logger;
|
||||||
|
|
||||||
public EpisodeModule(ICommandExecutor commandExecutor,
|
public EpisodeModule(ICommandExecutor commandExecutor,
|
||||||
IMediaFileService mediaFileService,
|
IMediaFileService mediaFileService,
|
||||||
IRecycleBinProvider recycleBinProvider,
|
IRecycleBinProvider recycleBinProvider,
|
||||||
ISeriesService seriesService,
|
ISeriesService seriesService,
|
||||||
|
IQualityUpgradableSpecification qualityUpgradableSpecification,
|
||||||
Logger logger)
|
Logger logger)
|
||||||
: base(commandExecutor)
|
: base(commandExecutor)
|
||||||
{
|
{
|
||||||
_mediaFileService = mediaFileService;
|
_mediaFileService = mediaFileService;
|
||||||
_recycleBinProvider = recycleBinProvider;
|
_recycleBinProvider = recycleBinProvider;
|
||||||
_seriesService = seriesService;
|
_seriesService = seriesService;
|
||||||
|
_qualityUpgradableSpecification = qualityUpgradableSpecification;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
GetResourceById = GetEpisodeFile;
|
GetResourceById = GetEpisodeFile;
|
||||||
GetResourceAll = GetEpisodeFiles;
|
GetResourceAll = GetEpisodeFiles;
|
||||||
|
@ -80,11 +84,13 @@ namespace NzbDrone.Api.EpisodeFiles
|
||||||
_mediaFileService.Delete(episodeFile);
|
_mediaFileService.Delete(episodeFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static EpisodeFileResource MapToResource(Core.Tv.Series series, EpisodeFile episodeFile)
|
private EpisodeFileResource MapToResource(Core.Tv.Series series, EpisodeFile episodeFile)
|
||||||
{
|
{
|
||||||
var resource = episodeFile.InjectTo<EpisodeFileResource>();
|
var resource = episodeFile.InjectTo<EpisodeFileResource>();
|
||||||
resource.Path = Path.Combine(series.Path, episodeFile.RelativePath);
|
resource.Path = Path.Combine(series.Path, episodeFile.RelativePath);
|
||||||
|
|
||||||
|
resource.QualityCutoffNotMet = _qualityUpgradableSpecification.CutoffNotMet(series.Profile.Value, episodeFile.Quality);
|
||||||
|
|
||||||
return resource;
|
return resource;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,5 +14,7 @@ namespace NzbDrone.Api.EpisodeFiles
|
||||||
public DateTime DateAdded { get; set; }
|
public DateTime DateAdded { get; set; }
|
||||||
public String SceneName { get; set; }
|
public String SceneName { get; set; }
|
||||||
public QualityModel Quality { get; set; }
|
public QualityModel Quality { get; set; }
|
||||||
|
|
||||||
|
public Boolean QualityCutoffNotMet { get; set; }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,17 +2,23 @@
|
||||||
using NzbDrone.Api.REST;
|
using NzbDrone.Api.REST;
|
||||||
using NzbDrone.Core.Messaging.Commands;
|
using NzbDrone.Core.Messaging.Commands;
|
||||||
using NzbDrone.Core.Tv;
|
using NzbDrone.Core.Tv;
|
||||||
|
using NzbDrone.Api.Mapping;
|
||||||
|
using NzbDrone.Core.DecisionEngine;
|
||||||
|
|
||||||
namespace NzbDrone.Api.Episodes
|
namespace NzbDrone.Api.Episodes
|
||||||
{
|
{
|
||||||
public class EpisodeModule : EpisodeModuleWithSignalR
|
public class EpisodeModule : EpisodeModuleWithSignalR
|
||||||
{
|
{
|
||||||
|
private readonly ISeriesService _seriesService;
|
||||||
private readonly IEpisodeService _episodeService;
|
private readonly IEpisodeService _episodeService;
|
||||||
|
private readonly IQualityUpgradableSpecification _qualityUpgradableSpecification;
|
||||||
|
|
||||||
public EpisodeModule(ICommandExecutor commandExecutor, IEpisodeService episodeService)
|
public EpisodeModule(ICommandExecutor commandExecutor, ISeriesService seriesService, IEpisodeService episodeService, IQualityUpgradableSpecification qualityUpgradableSpecification)
|
||||||
: base(episodeService, commandExecutor)
|
: base(episodeService, commandExecutor)
|
||||||
{
|
{
|
||||||
|
_seriesService = seriesService;
|
||||||
_episodeService = episodeService;
|
_episodeService = episodeService;
|
||||||
|
_qualityUpgradableSpecification = qualityUpgradableSpecification;
|
||||||
|
|
||||||
GetResourceAll = GetEpisodes;
|
GetResourceAll = GetEpisodes;
|
||||||
UpdateResource = SetMonitored;
|
UpdateResource = SetMonitored;
|
||||||
|
@ -27,7 +33,21 @@ namespace NzbDrone.Api.Episodes
|
||||||
throw new BadRequestException("seriesId is missing");
|
throw new BadRequestException("seriesId is missing");
|
||||||
}
|
}
|
||||||
|
|
||||||
return ToListResource(() => _episodeService.GetEpisodeBySeries(seriesId.Value));
|
var series = _seriesService.GetSeries(seriesId.Value);
|
||||||
|
|
||||||
|
var resources = new List<EpisodeResource>();
|
||||||
|
foreach (var episode in _episodeService.GetEpisodeBySeries(seriesId.Value))
|
||||||
|
{
|
||||||
|
var resource = episode.InjectTo<EpisodeResource>();
|
||||||
|
if (episode.EpisodeFile.IsLoaded)
|
||||||
|
{
|
||||||
|
resource.EpisodeFile.QualityCutoffNotMet = _qualityUpgradableSpecification.CutoffNotMet(series.Profile.Value, episode.EpisodeFile.Value.Quality);
|
||||||
|
}
|
||||||
|
|
||||||
|
resources.Add(resource);
|
||||||
|
}
|
||||||
|
|
||||||
|
return resources;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SetMonitored(EpisodeResource episodeResource)
|
private void SetMonitored(EpisodeResource episodeResource)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
using NzbDrone.Api.EpisodeFiles;
|
||||||
using NzbDrone.Api.REST;
|
using NzbDrone.Api.REST;
|
||||||
using NzbDrone.Core.MediaFiles;
|
using NzbDrone.Core.MediaFiles;
|
||||||
|
|
||||||
|
@ -15,7 +16,7 @@ namespace NzbDrone.Api.Episodes
|
||||||
public String AirDate { get; set; }
|
public String AirDate { get; set; }
|
||||||
public DateTime? AirDateUtc { get; set; }
|
public DateTime? AirDateUtc { get; set; }
|
||||||
public String Overview { get; set; }
|
public String Overview { get; set; }
|
||||||
public EpisodeFile EpisodeFile { get; set; }
|
public EpisodeFileResource EpisodeFile { get; set; }
|
||||||
|
|
||||||
public Boolean HasFile { get; set; }
|
public Boolean HasFile { get; set; }
|
||||||
public Boolean Monitored { get; set; }
|
public Boolean Monitored { get; set; }
|
||||||
|
|
|
@ -52,7 +52,13 @@ define(
|
||||||
title += ' - {0}'.format(size);
|
title += ' - {0}'.format(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (this.episodeFile.get('qualityCutoffNotMet')) {
|
||||||
this.$el.html('<span class="badge badge-inverse" title="{0}">{1}</span>'.format(title, quality.quality.name));
|
this.$el.html('<span class="badge badge-inverse" title="{0}">{1}</span>'.format(title, quality.quality.name));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.$el.html('<span class="badge" title="{0}">{1}</span>'.format(title, quality.quality.name));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,6 +86,12 @@ td.episode-status-cell, td.quality-cell {
|
||||||
font-size: 9px;
|
font-size: 9px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.badge-inverse {
|
||||||
|
background-color: #eee;
|
||||||
|
border: 1px solid @badge-bg;
|
||||||
|
color: @badge-bg;
|
||||||
|
}
|
||||||
|
|
||||||
.progress {
|
.progress {
|
||||||
height : 10px;
|
height : 10px;
|
||||||
margin-top : 5px;
|
margin-top : 5px;
|
||||||
|
|
Loading…
Reference in New Issue