diff --git a/frontend/src/Episode/Summary/EpisodeFileRow.js b/frontend/src/Episode/Summary/EpisodeFileRow.js index 0470829cd..5cb654f15 100644 --- a/frontend/src/Episode/Summary/EpisodeFileRow.js +++ b/frontend/src/Episode/Summary/EpisodeFileRow.js @@ -1,12 +1,12 @@ import PropTypes from 'prop-types'; import React, { Component } from 'react'; import Icon from 'Components/Icon'; -import Label from 'Components/Label'; import IconButton from 'Components/Link/IconButton'; import ConfirmModal from 'Components/Modal/ConfirmModal'; import TableRowCell from 'Components/Table/Cells/TableRowCell'; import TableRow from 'Components/Table/TableRow'; import Popover from 'Components/Tooltip/Popover'; +import EpisodeFormats from 'Episode/EpisodeFormats'; import EpisodeLanguages from 'Episode/EpisodeLanguages'; import EpisodeQuality from 'Episode/EpisodeQuality'; import { icons, kinds, tooltipPositions } from 'Helpers/Props'; @@ -123,15 +123,9 @@ class EpisodeFileRow extends Component { key={name} className={styles.customFormats} > - { - customFormats.map((format) => { - return ( - - ); - }) - } + ); } diff --git a/src/Sonarr.Api.V3/Calendar/CalendarController.cs b/src/Sonarr.Api.V3/Calendar/CalendarController.cs index ce74a1eac..f59bd1c8c 100644 --- a/src/Sonarr.Api.V3/Calendar/CalendarController.cs +++ b/src/Sonarr.Api.V3/Calendar/CalendarController.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; using Microsoft.AspNetCore.Mvc; +using NzbDrone.Core.CustomFormats; using NzbDrone.Core.DecisionEngine.Specifications; using NzbDrone.Core.Tv; using NzbDrone.SignalR; @@ -16,8 +17,9 @@ namespace Sonarr.Api.V3.Calendar public CalendarController(IBroadcastSignalRMessage signalR, IEpisodeService episodeService, ISeriesService seriesService, - IUpgradableSpecification qualityUpgradableSpecification) - : base(episodeService, seriesService, qualityUpgradableSpecification, signalR) + IUpgradableSpecification qualityUpgradableSpecification, + ICustomFormatCalculationService formatCalculator) + : base(episodeService, seriesService, qualityUpgradableSpecification, formatCalculator, signalR) { } diff --git a/src/Sonarr.Api.V3/EpisodeFiles/EpisodeFileController.cs b/src/Sonarr.Api.V3/EpisodeFiles/EpisodeFileController.cs index 7df12bd21..568a0bbb6 100644 --- a/src/Sonarr.Api.V3/EpisodeFiles/EpisodeFileController.cs +++ b/src/Sonarr.Api.V3/EpisodeFiles/EpisodeFileController.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Resources; using Microsoft.AspNetCore.Mvc; using NzbDrone.Core.CustomFormats; using NzbDrone.Core.Datastore.Events; @@ -51,8 +52,7 @@ namespace Sonarr.Api.V3.EpisodeFiles var episodeFile = _mediaFileService.Get(id); var series = _seriesService.GetSeries(episodeFile.SeriesId); - var resource = episodeFile.ToResource(series, _upgradableSpecification); - resource.CustomFormats = _formatCalculator.ParseCustomFormat(episodeFile).ToResource(); + var resource = episodeFile.ToResource(series, _upgradableSpecification, _formatCalculator); return resource; } @@ -76,19 +76,8 @@ namespace Sonarr.Api.V3.EpisodeFiles return new List(); } - var resources = new List(); - - foreach (var file in files) - { - var resource = file.ToResource(series, _upgradableSpecification); - file.Series = series; - - resource.CustomFormats = _formatCalculator.ParseCustomFormat(file).ToResource(); - - resources.Add(resource); - } - - return resources; + return files.ConvertAll(e => e.ToResource(series, _upgradableSpecification, _formatCalculator)) + .ToList(); } else { @@ -96,7 +85,7 @@ namespace Sonarr.Api.V3.EpisodeFiles return episodeFiles.GroupBy(e => e.SeriesId) .SelectMany(f => f.ToList() - .ConvertAll(e => e.ToResource(_seriesService.GetSeries(f.Key), _upgradableSpecification))) + .ConvertAll(e => e.ToResource(_seriesService.GetSeries(f.Key), _upgradableSpecification, _formatCalculator))) .ToList(); } } @@ -155,7 +144,7 @@ namespace Sonarr.Api.V3.EpisodeFiles var series = _seriesService.GetSeries(episodeFiles.First().SeriesId); - return Accepted(episodeFiles.ConvertAll(f => f.ToResource(series, _upgradableSpecification))); + return Accepted(episodeFiles.ConvertAll(f => f.ToResource(series, _upgradableSpecification, _formatCalculator))); } [RestDeleteById] @@ -221,7 +210,7 @@ namespace Sonarr.Api.V3.EpisodeFiles _mediaFileService.Update(episodeFiles); var series = _seriesService.GetSeries(episodeFiles.First().SeriesId); - return Accepted(episodeFiles.ConvertAll(f => f.ToResource(series, _upgradableSpecification))); + return Accepted(episodeFiles.ConvertAll(f => f.ToResource(series, _upgradableSpecification, _formatCalculator))); } [NonAction] diff --git a/src/Sonarr.Api.V3/EpisodeFiles/EpisodeFileResource.cs b/src/Sonarr.Api.V3/EpisodeFiles/EpisodeFileResource.cs index a29049c94..d9f99b88b 100644 --- a/src/Sonarr.Api.V3/EpisodeFiles/EpisodeFileResource.cs +++ b/src/Sonarr.Api.V3/EpisodeFiles/EpisodeFileResource.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.IO; +using NzbDrone.Core.CustomFormats; using NzbDrone.Core.DecisionEngine.Specifications; using NzbDrone.Core.Languages; using NzbDrone.Core.MediaFiles; @@ -58,13 +59,15 @@ namespace Sonarr.Api.V3.EpisodeFiles }; } - public static EpisodeFileResource ToResource(this EpisodeFile model, NzbDrone.Core.Tv.Series series, IUpgradableSpecification upgradableSpecification) + public static EpisodeFileResource ToResource(this EpisodeFile model, NzbDrone.Core.Tv.Series series, IUpgradableSpecification upgradableSpecification, ICustomFormatCalculationService formatCalculationService) { if (model == null) { return null; } + model.Series = series; + return new EpisodeFileResource { Id = model.Id, @@ -81,6 +84,7 @@ namespace Sonarr.Api.V3.EpisodeFiles Quality = model.Quality, MediaInfo = model.MediaInfo.ToResource(model.SceneName), QualityCutoffNotMet = upgradableSpecification.QualityCutoffNotMet(series.QualityProfile.Value, model.Quality), + CustomFormats = formatCalculationService.ParseCustomFormat(model).ToResource() }; } } diff --git a/src/Sonarr.Api.V3/Episodes/EpisodeController.cs b/src/Sonarr.Api.V3/Episodes/EpisodeController.cs index 349a0e679..f845a914f 100644 --- a/src/Sonarr.Api.V3/Episodes/EpisodeController.cs +++ b/src/Sonarr.Api.V3/Episodes/EpisodeController.cs @@ -2,6 +2,7 @@ using System; using System.Collections.Generic; using System.Linq; using Microsoft.AspNetCore.Mvc; +using NzbDrone.Core.CustomFormats; using NzbDrone.Core.DecisionEngine.Specifications; using NzbDrone.Core.Tv; using NzbDrone.SignalR; @@ -18,8 +19,9 @@ namespace Sonarr.Api.V3.Episodes public EpisodeController(ISeriesService seriesService, IEpisodeService episodeService, IUpgradableSpecification upgradableSpecification, + ICustomFormatCalculationService formatCalculator, IBroadcastSignalRMessage signalRBroadcaster) - : base(episodeService, seriesService, upgradableSpecification, signalRBroadcaster) + : base(episodeService, seriesService, upgradableSpecification, formatCalculator, signalRBroadcaster) { } diff --git a/src/Sonarr.Api.V3/Episodes/EpisodeControllerWithSignalR.cs b/src/Sonarr.Api.V3/Episodes/EpisodeControllerWithSignalR.cs index 4447811d3..b461fbec4 100644 --- a/src/Sonarr.Api.V3/Episodes/EpisodeControllerWithSignalR.cs +++ b/src/Sonarr.Api.V3/Episodes/EpisodeControllerWithSignalR.cs @@ -1,5 +1,6 @@ using System.Collections.Generic; using Microsoft.AspNetCore.Mvc; +using NzbDrone.Core.CustomFormats; using NzbDrone.Core.Datastore.Events; using NzbDrone.Core.DecisionEngine.Specifications; using NzbDrone.Core.Download; @@ -21,21 +22,25 @@ namespace Sonarr.Api.V3.Episodes protected readonly IEpisodeService _episodeService; protected readonly ISeriesService _seriesService; protected readonly IUpgradableSpecification _upgradableSpecification; + protected readonly ICustomFormatCalculationService _formatCalculator; protected EpisodeControllerWithSignalR(IEpisodeService episodeService, ISeriesService seriesService, IUpgradableSpecification upgradableSpecification, + ICustomFormatCalculationService formatCalculator, IBroadcastSignalRMessage signalRBroadcaster) : base(signalRBroadcaster) { _episodeService = episodeService; _seriesService = seriesService; _upgradableSpecification = upgradableSpecification; + _formatCalculator = formatCalculator; } protected EpisodeControllerWithSignalR(IEpisodeService episodeService, ISeriesService seriesService, IUpgradableSpecification upgradableSpecification, + ICustomFormatCalculationService formatCalculator, IBroadcastSignalRMessage signalRBroadcaster, string resource) : base(signalRBroadcaster) @@ -43,6 +48,7 @@ namespace Sonarr.Api.V3.Episodes _episodeService = episodeService; _seriesService = seriesService; _upgradableSpecification = upgradableSpecification; + _formatCalculator = formatCalculator; } protected override EpisodeResource GetResourceById(int id) @@ -67,7 +73,7 @@ namespace Sonarr.Api.V3.Episodes if (includeEpisodeFile && episode.EpisodeFileId != 0) { - resource.EpisodeFile = episode.EpisodeFile.Value.ToResource(series, _upgradableSpecification); + resource.EpisodeFile = episode.EpisodeFile.Value.ToResource(series, _upgradableSpecification, _formatCalculator); } if (includeImages) @@ -101,7 +107,7 @@ namespace Sonarr.Api.V3.Episodes if (includeEpisodeFile && episode.EpisodeFileId != 0) { - resource.EpisodeFile = episode.EpisodeFile.Value.ToResource(series, _upgradableSpecification); + resource.EpisodeFile = episode.EpisodeFile.Value.ToResource(series, _upgradableSpecification, _formatCalculator); } if (includeImages) diff --git a/src/Sonarr.Api.V3/Wanted/CutoffController.cs b/src/Sonarr.Api.V3/Wanted/CutoffController.cs index b32d2ac21..b906399b0 100644 --- a/src/Sonarr.Api.V3/Wanted/CutoffController.cs +++ b/src/Sonarr.Api.V3/Wanted/CutoffController.cs @@ -1,5 +1,6 @@ using System.Linq; using Microsoft.AspNetCore.Mvc; +using NzbDrone.Core.CustomFormats; using NzbDrone.Core.Datastore; using NzbDrone.Core.DecisionEngine.Specifications; using NzbDrone.Core.Tv; @@ -19,8 +20,9 @@ namespace Sonarr.Api.V3.Wanted IEpisodeService episodeService, ISeriesService seriesService, IUpgradableSpecification upgradableSpecification, + ICustomFormatCalculationService formatCalculator, IBroadcastSignalRMessage signalRBroadcaster) - : base(episodeService, seriesService, upgradableSpecification, signalRBroadcaster) + : base(episodeService, seriesService, upgradableSpecification, formatCalculator, signalRBroadcaster) { _episodeCutoffService = episodeCutoffService; } diff --git a/src/Sonarr.Api.V3/Wanted/MissingController.cs b/src/Sonarr.Api.V3/Wanted/MissingController.cs index 1d0886dea..31bf65fbf 100644 --- a/src/Sonarr.Api.V3/Wanted/MissingController.cs +++ b/src/Sonarr.Api.V3/Wanted/MissingController.cs @@ -1,5 +1,6 @@ using System.Linq; using Microsoft.AspNetCore.Mvc; +using NzbDrone.Core.CustomFormats; using NzbDrone.Core.Datastore; using NzbDrone.Core.DecisionEngine; using NzbDrone.Core.DecisionEngine.Specifications; @@ -17,8 +18,9 @@ namespace Sonarr.Api.V3.Wanted public MissingController(IEpisodeService episodeService, ISeriesService seriesService, IUpgradableSpecification upgradableSpecification, + ICustomFormatCalculationService formatCalculator, IBroadcastSignalRMessage signalRBroadcaster) - : base(episodeService, seriesService, upgradableSpecification, signalRBroadcaster) + : base(episodeService, seriesService, upgradableSpecification, formatCalculator, signalRBroadcaster) { }