mirror of
https://github.com/Radarr/Radarr
synced 2025-03-15 08:29:08 +00:00
Fixed: Issue with custom formats when profile was saved with non existing formats. Also you now don't have to refresh your browser for them to appear / disappear.
This commit is contained in:
parent
bf7689688d
commit
354105cf08
5 changed files with 51 additions and 3 deletions
|
@ -1,5 +1,8 @@
|
|||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using FluentValidation;
|
||||
using NzbDrone.Common.Extensions;
|
||||
using NzbDrone.Core.CustomFormats;
|
||||
using NzbDrone.Core.Profiles;
|
||||
using NzbDrone.Core.Validation;
|
||||
|
||||
|
@ -8,14 +11,26 @@ namespace NzbDrone.Api.Profiles
|
|||
public class ProfileModule : NzbDroneRestModule<ProfileResource>
|
||||
{
|
||||
private readonly IProfileService _profileService;
|
||||
private readonly ICustomFormatService _formatService;
|
||||
|
||||
public ProfileModule(IProfileService profileService)
|
||||
public ProfileModule(IProfileService profileService, ICustomFormatService formatService)
|
||||
{
|
||||
_profileService = profileService;
|
||||
_formatService = formatService;
|
||||
SharedValidator.RuleFor(c => c.Name).NotEmpty();
|
||||
SharedValidator.RuleFor(c => c.Cutoff).NotNull();
|
||||
SharedValidator.RuleFor(c => c.Items).MustHaveAllowedQuality();
|
||||
SharedValidator.RuleFor(c => c.Language).ValidLanguage();
|
||||
SharedValidator.RuleFor(c => c.FormatItems).Must(items =>
|
||||
{
|
||||
var all = _formatService.All().Select(f => f.Id).ToList();
|
||||
all.Add(CustomFormat.None.Id);
|
||||
var ids = items.Select(i => i.Id);
|
||||
|
||||
return all.Except(ids).Empty();
|
||||
}).WithMessage("All Custom Formats and no extra ones need to be present inside your Profile! Try refreshing your browser.");
|
||||
SharedValidator.RuleFor(c => c.FormatCutoff)
|
||||
.Must(c => _formatService.All().Select(f => f.Id).Contains(c.Id) || c.Id == CustomFormat.None.Id).WithMessage("The Custom Format Cutoff must be a valid Custom Format! Try refreshing your browser.");
|
||||
|
||||
GetResourceAll = GetAll;
|
||||
GetResourceById = GetById;
|
||||
|
|
|
@ -48,6 +48,12 @@ namespace NzbDrone.Core.Datastore.Converters
|
|||
}
|
||||
|
||||
var quality = (CustomFormat) clrValue;
|
||||
|
||||
if (CustomFormatService.AllCustomFormats?.ContainsKey(quality.Id) == false)
|
||||
{
|
||||
//throw new Exception("Attempted to save an unknown custom format! Make sure you do not have stale custom formats lying around!");
|
||||
}
|
||||
|
||||
return quality.Id;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,8 +1,28 @@
|
|||
var Backbone = require('backbone');
|
||||
var IndexerModel = require('./CustomFormatModel');
|
||||
|
||||
var vent = require('vent');
|
||||
|
||||
module.exports = Backbone.Collection.extend({
|
||||
model : IndexerModel,
|
||||
url : window.NzbDrone.ApiRoot + '/customformat'
|
||||
url : window.NzbDrone.ApiRoot + '/customformat',
|
||||
|
||||
sync : function(method, model, options) {
|
||||
vent.trigger(vent.Events.CustomFormatsChanged, {method : method});
|
||||
|
||||
Backbone.Collection.prototype.sync.apply(this, arguments);
|
||||
},
|
||||
|
||||
add : function(model, options) {
|
||||
vent.trigger(vent.Events.CustomFormatsChanged, {options : options});
|
||||
|
||||
Backbone.Collection.prototype.add.apply(this, arguments);
|
||||
},
|
||||
|
||||
remove : function(model, options) {
|
||||
vent.trigger(vent.Events.CustomFormatsChanged, {options : options});
|
||||
|
||||
Backbone.Collection.prototype.remove.apply(this, arguments);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -5,6 +5,8 @@ var DelayProfileLayout = require('./Delay/DelayProfileLayout');
|
|||
var DelayProfileCollection = require('./Delay/DelayProfileCollection');
|
||||
var LanguageCollection = require('./Language/LanguageCollection');
|
||||
|
||||
var vent = require('vent');
|
||||
|
||||
module.exports = Marionette.Layout.extend({
|
||||
template : 'Settings/Profile/ProfileLayoutTemplate',
|
||||
|
||||
|
@ -17,6 +19,10 @@ module.exports = Marionette.Layout.extend({
|
|||
this.settings = options.settings;
|
||||
ProfileCollection.fetch();
|
||||
|
||||
vent.on(vent.Events.CustomFormatsChanged, function(options) {
|
||||
ProfileCollection.fetch();
|
||||
});
|
||||
|
||||
this.delayProfileCollection = new DelayProfileCollection();
|
||||
this.delayProfileCollection.fetch();
|
||||
},
|
||||
|
|
|
@ -7,7 +7,8 @@ vent.Events = {
|
|||
MovieDeleted : 'movie:deleted',
|
||||
CommandComplete : 'command:complete',
|
||||
ServerUpdated : 'server:updated',
|
||||
EpisodeFileDeleted : 'episodefile:deleted'
|
||||
EpisodeFileDeleted : 'episodefile:deleted',
|
||||
CustomFormatsChanged : 'customformat:changed'
|
||||
};
|
||||
|
||||
vent.Commands = {
|
||||
|
|
Loading…
Add table
Reference in a new issue