Added more magic to fancy. it now automatically figures our response for PUT and POST based on request ID.

file name sample uses HTTP GET instead of post
pull/2/head
kay.one 11 years ago
parent 438e3199de
commit 4188946395

@ -1,5 +1,6 @@
using System; using System;
using System.Linq; using System.Linq;
using Nancy;
using NzbDrone.Api.Extensions; using NzbDrone.Api.Extensions;
using NzbDrone.Common.Composition; using NzbDrone.Common.Composition;
using NzbDrone.Common.Messaging; using NzbDrone.Common.Messaging;
@ -16,10 +17,11 @@ namespace NzbDrone.Api.Commands
_messageAggregator = messageAggregator; _messageAggregator = messageAggregator;
_container = container; _container = container;
CreateResource = RunCommand; Post["/"] = x => RunCommand(ReadResourceFromRequest());
} }
private CommandResource RunCommand(CommandResource resource) private Response RunCommand(CommandResource resource)
{ {
var commandType = var commandType =
_container.GetImplementations(typeof(ICommand)) _container.GetImplementations(typeof(ICommand))
@ -29,7 +31,7 @@ namespace NzbDrone.Api.Commands
dynamic command = Request.Body.FromJson(commandType); dynamic command = Request.Body.FromJson(commandType);
_messageAggregator.PublishCommand(command); _messageAggregator.PublishCommand(command);
return resource; return resource.AsResponse();
} }
} }
} }

@ -1,33 +1,93 @@
using FluentValidation; using System.Collections.Generic;
using FluentValidation;
using Nancy.Responses;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Organizer; using NzbDrone.Core.Organizer;
using NzbDrone.Core.Qualities;
using NzbDrone.Core.Tv;
using Nancy.ModelBinding;
using NzbDrone.Api.Mapping;
using NzbDrone.Api.Extensions;
namespace NzbDrone.Api.Config namespace NzbDrone.Api.Config
{ {
public class NamingModule : NzbDroneRestModule<NamingConfigResource> public class NamingModule : NzbDroneRestModule<NamingConfigResource>
{ {
private readonly INamingConfigService _namingConfigService; private readonly INamingConfigService _namingConfigService;
private readonly IBuildFileNames _buildFileNames;
public NamingModule(INamingConfigService namingConfigService) public NamingModule(INamingConfigService namingConfigService, IBuildFileNames buildFileNames)
: base("config/naming") : base("config/naming")
{ {
_namingConfigService = namingConfigService; _namingConfigService = namingConfigService;
_buildFileNames = buildFileNames;
GetResourceSingle = GetNamingConfig; GetResourceSingle = GetNamingConfig;
UpdateResource = UpdateNamingConfig; UpdateResource = UpdateNamingConfig;
Get["/samples"] = x => GetExamples(this.Bind<NamingConfigResource>());
SharedValidator.RuleFor(c => c.MultiEpisodeStyle).InclusiveBetween(0, 3); SharedValidator.RuleFor(c => c.MultiEpisodeStyle).InclusiveBetween(0, 3);
SharedValidator.RuleFor(c => c.NumberStyle).InclusiveBetween(0, 3); SharedValidator.RuleFor(c => c.NumberStyle).InclusiveBetween(0, 3);
SharedValidator.RuleFor(c => c.Separator).Matches(@"\s|\s\-\s|\."); SharedValidator.RuleFor(c => c.Separator).Matches(@"\s|\s\-\s|\.");
} }
private NamingConfigResource UpdateNamingConfig(NamingConfigResource resource) private void UpdateNamingConfig(NamingConfigResource resource)
{ {
return ToResource<NamingConfig>(_namingConfigService.Save, resource); GetNewId<NamingConfig>(_namingConfigService.Save, resource);
} }
private NamingConfigResource GetNamingConfig() private NamingConfigResource GetNamingConfig()
{ {
return ToResource(_namingConfigService.GetConfig); return _namingConfigService.GetConfig().InjectTo<NamingConfigResource>();
}
private JsonResponse<NamingSampleResource> GetExamples(NamingConfigResource config)
{
var nameSpec = config.InjectTo<NamingConfig>();
var series = new Core.Tv.Series
{
SeriesType = SeriesTypes.Standard,
Title = "Series Title"
};
var episode1 = new Episode
{
SeasonNumber = 1,
EpisodeNumber = 1,
Title = "Episode Title (1)"
};
var episode2 = new Episode
{
SeasonNumber = 1,
EpisodeNumber = 2,
Title = "Episode Title (2)"
};
var episodeFile = new EpisodeFile
{
Quality = new QualityModel(Quality.HDTV720p),
Path = @"C:\Test\Series.Title.S01E01.720p.HDTV.x264-EVOLVE.mkv"
};
var sampleResource = new NamingSampleResource();
sampleResource.SingleEpisodeExample = _buildFileNames.BuildFilename(new List<Episode> { episode1 },
series,
episodeFile,
nameSpec);
episodeFile.Path = @"C:\Test\Series.Title.S01E01-E02.720p.HDTV.x264-EVOLVE.mkv";
sampleResource.MultiEpisodeExample = _buildFileNames.BuildFilename(new List<Episode> { episode1, episode2 },
series,
episodeFile,
nameSpec);
return sampleResource.AsResponse();
} }
} }
} }

@ -1,8 +1,6 @@
using NzbDrone.Api.Config; namespace NzbDrone.Api.Config
namespace NzbDrone.Api.Naming
{ {
public class NamingResource : NamingConfigResource public class NamingSampleResource
{ {
public string SingleEpisodeExample { get; set; } public string SingleEpisodeExample { get; set; }
public string MultiEpisodeExample { get; set; } public string MultiEpisodeExample { get; set; }

@ -1,10 +1,7 @@
using System.Collections.Generic; using System.Collections.Generic;
using NzbDrone.Api.REST; using NzbDrone.Api.REST;
using NzbDrone.Core.MediaFiles; using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Api.Mapping;
using NzbDrone.Api.Extensions;
using System.Linq;
using Omu.ValueInjecter;
namespace NzbDrone.Api.EpisodeFiles namespace NzbDrone.Api.EpisodeFiles
{ {
@ -23,7 +20,7 @@ namespace NzbDrone.Api.EpisodeFiles
private EpisodeFileResource GetEpisodeFile(int id) private EpisodeFileResource GetEpisodeFile(int id)
{ {
return ToResource(() => _mediaFileService.Get(id)); return _mediaFileService.Get(id).InjectTo<EpisodeFileResource>();
} }
private List<EpisodeFileResource> GetEpisodeFiles() private List<EpisodeFileResource> GetEpisodeFiles()
@ -38,15 +35,11 @@ namespace NzbDrone.Api.EpisodeFiles
return ToListResource(() => _mediaFileService.GetFilesBySeries(seriesId.Value)); return ToListResource(() => _mediaFileService.GetFilesBySeries(seriesId.Value));
} }
private EpisodeFileResource SetQuality(EpisodeFileResource episodeFileResource) private void SetQuality(EpisodeFileResource episodeFileResource)
{ {
var episodeFile = _mediaFileService.Get(episodeFileResource.Id); var episodeFile = _mediaFileService.Get(episodeFileResource.Id);
episodeFile.Quality = episodeFileResource.Quality; episodeFile.Quality = episodeFileResource.Quality;
_mediaFileService.Update(episodeFile); _mediaFileService.Update(episodeFile);
episodeFileResource.InjectFrom(episodeFile);
return episodeFileResource;
} }
} }
} }

@ -1,9 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using NzbDrone.Api.REST; using NzbDrone.Api.REST;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Tv; using NzbDrone.Core.Tv;
using NzbDrone.Api.Extensions;
using System.Linq;
namespace NzbDrone.Api.Episodes namespace NzbDrone.Api.Episodes
{ {
@ -32,11 +29,9 @@ namespace NzbDrone.Api.Episodes
return ToListResource(() => _episodeService.GetEpisodeBySeries(seriesId.Value)); return ToListResource(() => _episodeService.GetEpisodeBySeries(seriesId.Value));
} }
private EpisodeResource SetMonitored(EpisodeResource episodeResource) private void SetMonitored(EpisodeResource episodeResource)
{ {
_episodeService.SetEpisodeMonitored(episodeResource.Id, episodeResource.Monitored); _episodeService.SetEpisodeMonitored(episodeResource.Id, episodeResource.Monitored);
return episodeResource;
} }
} }
} }

@ -31,7 +31,7 @@ namespace NzbDrone.Api.Frontend
path.StartsWith("/api", StringComparison.CurrentCultureIgnoreCase) || path.StartsWith("/api", StringComparison.CurrentCultureIgnoreCase) ||
path.StartsWith("/signalr", StringComparison.CurrentCultureIgnoreCase)) path.StartsWith("/signalr", StringComparison.CurrentCultureIgnoreCase))
{ {
return null; return new NotFoundResponse();
} }
var mapper = _requestMappers.SingleOrDefault(m => m.CanHandle(path)); var mapper = _requestMappers.SingleOrDefault(m => m.CanHandle(path));
@ -44,7 +44,7 @@ namespace NzbDrone.Api.Frontend
_logger.Warn("Couldn't find handler for {0}", path); _logger.Warn("Couldn't find handler for {0}", path);
return null; return new NotFoundResponse();
} }
} }
} }

@ -2,7 +2,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using NzbDrone.Api.ClientSchema; using NzbDrone.Api.ClientSchema;
using NzbDrone.Api.Mapping;
using NzbDrone.Api.REST; using NzbDrone.Api.REST;
using NzbDrone.Core.Indexers; using NzbDrone.Core.Indexers;
using Omu.ValueInjecter; using Omu.ValueInjecter;
@ -47,18 +46,14 @@ namespace NzbDrone.Api.Indexers
return result; return result;
} }
private IndexerResource CreateIndexer(IndexerResource indexerResource) private int CreateIndexer(IndexerResource indexerResource)
{ {
var indexer = GetIndexer(indexerResource); var indexer = GetIndexer(indexerResource);
indexer = _indexerService.Create(indexer); indexer = _indexerService.Create(indexer);
return indexer.Id;
var response = indexer.InjectTo<IndexerResource>();
response.Fields = SchemaBuilder.GenerateSchema(indexer.Settings);
return response;
} }
private IndexerResource UpdateIndexer(IndexerResource indexerResource) private void UpdateIndexer(IndexerResource indexerResource)
{ {
var indexer = _indexerService.Get(indexerResource.Id); var indexer = _indexerService.Get(indexerResource.Id);
indexer.InjectFrom(indexerResource); indexer.InjectFrom(indexerResource);
@ -66,12 +61,7 @@ namespace NzbDrone.Api.Indexers
ValidateIndexer(indexer); ValidateIndexer(indexer);
indexer = _indexerService.Update(indexer); _indexerService.Update(indexer);
var response = indexer.InjectTo<IndexerResource>();
response.Fields = SchemaBuilder.GenerateSchema(indexer.Settings);
return response;
} }

@ -1,4 +1,5 @@
using System.Collections.Generic; using System.Collections.Generic;
using Nancy;
using NzbDrone.Api.Mapping; using NzbDrone.Api.Mapping;
using NzbDrone.Core.DecisionEngine; using NzbDrone.Core.DecisionEngine;
using NzbDrone.Core.Download; using NzbDrone.Core.Download;
@ -8,6 +9,8 @@ using NzbDrone.Core.Parser;
using NzbDrone.Core.Parser.Model; using NzbDrone.Core.Parser.Model;
using Omu.ValueInjecter; using Omu.ValueInjecter;
using System.Linq; using System.Linq;
using Nancy.ModelBinding;
using NzbDrone.Api.Extensions;
namespace NzbDrone.Api.Indexers namespace NzbDrone.Api.Indexers
{ {
@ -31,17 +34,17 @@ namespace NzbDrone.Api.Indexers
_downloadService = downloadService; _downloadService = downloadService;
_parsingService = parsingService; _parsingService = parsingService;
GetResourceAll = GetReleases; GetResourceAll = GetReleases;
CreateResource = DownloadRelease; Post["/"] = x=> DownloadRelease(this.Bind<ReleaseResource>());
} }
private ReleaseResource DownloadRelease(ReleaseResource release) private Response DownloadRelease(ReleaseResource release)
{ {
var remoteEpisode = _parsingService.Map(release.InjectTo<ParsedEpisodeInfo>(), 0); var remoteEpisode = _parsingService.Map(release.InjectTo<ParsedEpisodeInfo>(), 0);
remoteEpisode.Report = release.InjectTo<ReportInfo>(); remoteEpisode.Report = release.InjectTo<ReportInfo>();
_downloadService.DownloadReport(remoteEpisode); _downloadService.DownloadReport(remoteEpisode);
return release; return release.AsResponse();
} }
private List<ReleaseResource> GetReleases() private List<ReleaseResource> GetReleases()

@ -1,71 +0,0 @@
using System;
using System.Collections.Generic;
using NzbDrone.Api.Commands;
using NzbDrone.Api.Extensions;
using NzbDrone.Common.Messaging;
using NzbDrone.Core.MediaFiles;
using NzbDrone.Core.Organizer;
using NzbDrone.Core.Qualities;
using NzbDrone.Core.Tv;
using Omu.ValueInjecter;
namespace NzbDrone.Api.Naming
{
public class NamingModule : NzbDroneRestModule<NamingResource>
{
private readonly IBuildFileNames _buildFileNames;
public NamingModule(IBuildFileNames buildFileNames)
:base("naming")
{
_buildFileNames = buildFileNames;
CreateResource = GetExamples;
}
private NamingResource GetExamples(NamingResource resource)
{
var nameSpec = new NamingConfig();
nameSpec.InjectFrom(resource);
var series = new Core.Tv.Series
{
SeriesType = SeriesTypes.Standard,
Title = "Series Title"
};
var episode1 = new Episode
{
SeasonNumber = 1,
EpisodeNumber = 1,
Title = "Episode Title (1)"
};
var episode2 = new Episode
{
SeasonNumber = 1,
EpisodeNumber = 2,
Title = "Episode Title (2)"
};
var episodeFile = new EpisodeFile
{
Quality = new QualityModel(Quality.HDTV720p),
Path = @"C:\Test\Series.Title.S01E01.720p.HDTV.x264-EVOLVE.mkv"
};
resource.SingleEpisodeExample = _buildFileNames.BuildFilename(new List<Episode> { episode1 },
series,
episodeFile,
nameSpec);
episodeFile.Path = @"C:\Test\Series.Title.S01E01-E02.720p.HDTV.x264-EVOLVE.mkv";
resource.MultiEpisodeExample = _buildFileNames.BuildFilename(new List<Episode> { episode1, episode2 },
series,
episodeFile,
nameSpec);
return resource;
}
}
}

@ -42,29 +42,17 @@ namespace NzbDrone.Api.Notifications
return result; return result;
} }
private NotificationResource Create(NotificationResource notificationResource) private int Create(NotificationResource notificationResource)
{ {
var notification = GetNotification(notificationResource); var notification = GetNotification(notificationResource);
return _notificationService.Create(notification).Id;
notification = _notificationService.Create(notification);
notificationResource.Id = notification.Id;
var response = notification.InjectTo<NotificationResource>();
response.Fields = SchemaBuilder.GenerateSchema(notification.Settings);
return response;
} }
private NotificationResource Update(NotificationResource notificationResource) private void Update(NotificationResource notificationResource)
{ {
var notification = GetNotification(notificationResource); var notification = GetNotification(notificationResource);
notification.Id = notificationResource.Id; notification.Id = notificationResource.Id;
notification = _notificationService.Update(notification); _notificationService.Update(notification);
var response = notification.InjectTo<NotificationResource>();
response.Fields = SchemaBuilder.GenerateSchema(notification.Settings);
return response;
} }
private void DeleteNotification(int id) private void DeleteNotification(int id)

@ -122,8 +122,7 @@
<Compile Include="Mapping\ResourceMappingException.cs" /> <Compile Include="Mapping\ResourceMappingException.cs" />
<Compile Include="Mapping\ValueInjectorExtensions.cs" /> <Compile Include="Mapping\ValueInjectorExtensions.cs" />
<Compile Include="Missing\MissingModule.cs" /> <Compile Include="Missing\MissingModule.cs" />
<Compile Include="Naming\NamingResource.cs" /> <Compile Include="Config\NamingSampleResource.cs" />
<Compile Include="Naming\NamingModule.cs" />
<Compile Include="Notifications\NotificationSchemaModule.cs" /> <Compile Include="Notifications\NotificationSchemaModule.cs" />
<Compile Include="Notifications\NotificationModule.cs" /> <Compile Include="Notifications\NotificationModule.cs" />
<Compile Include="Notifications\NotificationResource.cs" /> <Compile Include="Notifications\NotificationResource.cs" />

@ -22,11 +22,11 @@ namespace NzbDrone.Api
} }
protected TResource ToResource<TModel>(Func<TModel, TModel> function, TResource resource) where TModel : ModelBase, new() protected int GetNewId<TModel>(Func<TModel, TModel> function, TResource resource) where TModel : ModelBase, new()
{ {
var model = resource.InjectTo<TModel>(); var model = resource.InjectTo<TModel>();
function(model); function(model);
return model.InjectTo<TResource>(); return model.Id;
} }
protected List<TResource> ToListResource<TModel>(Func<IEnumerable<TModel>> function) where TModel : ModelBase, new() protected List<TResource> ToListResource<TModel>(Func<IEnumerable<TModel>> function) where TModel : ModelBase, new()
@ -35,17 +35,6 @@ namespace NzbDrone.Api
return modelList.InjectTo<List<TResource>>(); return modelList.InjectTo<List<TResource>>();
} }
protected TResource ToResource<TModel>(Func<TModel> function) where TModel : ModelBase, new()
{
var modelList = function();
return modelList.InjectTo<TResource>();
}
protected TResource ToResource<TModel>(Func<int, TModel> action, int id) where TModel : ModelBase, new()
{
var model = action(id);
return model.InjectTo<TResource>();
}
protected PagingResource<TResource> ApplyToPage<TModel>(Func<PagingSpec<TModel>, PagingSpec<TModel>> function, PagingSpec<TModel> pagingSpec) where TModel : ModelBase, new() protected PagingResource<TResource> ApplyToPage<TModel>(Func<PagingSpec<TModel>, PagingSpec<TModel>> function, PagingSpec<TModel> pagingSpec) where TModel : ModelBase, new()
{ {

@ -30,11 +30,11 @@ namespace NzbDrone.Api.Qualities
DeleteResource = DeleteProfile; DeleteResource = DeleteProfile;
} }
private QualityProfileResource Create(QualityProfileResource resource) private int Create(QualityProfileResource resource)
{ {
var model = resource.InjectTo<QualityProfile>(); var model = resource.InjectTo<QualityProfile>();
model = _qualityProfileService.Add(model); model = _qualityProfileService.Add(model);
return GetById(model.Id); return model.Id;
} }
private void DeleteProfile(int id) private void DeleteProfile(int id)
@ -42,11 +42,10 @@ namespace NzbDrone.Api.Qualities
_qualityProfileService.Delete(id); _qualityProfileService.Delete(id);
} }
private QualityProfileResource Update(QualityProfileResource resource) private void Update(QualityProfileResource resource)
{ {
var model = resource.InjectTo<QualityProfile>(); var model = resource.InjectTo<QualityProfile>();
_qualityProfileService.Update(model); _qualityProfileService.Update(model);
return GetById(resource.Id);
} }
private QualityProfileResource GetById(int id) private QualityProfileResource GetById(int id)

@ -19,16 +19,15 @@ namespace NzbDrone.Api.Qualities
UpdateResource = Update; UpdateResource = Update;
} }
private QualitySizeResource Update(QualitySizeResource resource) private void Update(QualitySizeResource resource)
{ {
var model = resource.InjectTo<QualitySize>(); var model = resource.InjectTo<QualitySize>();
_qualityTypeProvider.Update(model); _qualityTypeProvider.Update(model);
return GetById(resource.Id);
} }
private QualitySizeResource GetById(int id) private QualitySizeResource GetById(int id)
{ {
return ToResource(() => _qualityTypeProvider.Get(id)); return _qualityTypeProvider.Get(id).InjectTo<QualitySizeResource>();
} }
private List<QualitySizeResource> GetAll() private List<QualitySizeResource> GetAll()

@ -19,8 +19,8 @@ namespace NzbDrone.Api.REST
private Func<List<TResource>> _getResourceAll; private Func<List<TResource>> _getResourceAll;
private Func<PagingResource<TResource>, PagingResource<TResource>> _getResourcePaged; private Func<PagingResource<TResource>, PagingResource<TResource>> _getResourcePaged;
private Func<TResource> _getResourceSingle; private Func<TResource> _getResourceSingle;
private Func<TResource, TResource> _createResource; private Func<TResource, int> _createResource;
private Func<TResource, TResource> _updateResource; private Action<TResource> _updateResource;
protected ResourceValidator<TResource> PostValidator { get; private set; } protected ResourceValidator<TResource> PostValidator { get; private set; }
protected ResourceValidator<TResource> PutValidator { get; private set; } protected ResourceValidator<TResource> PutValidator { get; private set; }
@ -132,7 +132,7 @@ namespace NzbDrone.Api.REST
} }
} }
protected Func<TResource, TResource> CreateResource protected Func<TResource, int> CreateResource
{ {
private get { return _createResource; } private get { return _createResource; }
set set
@ -140,36 +140,37 @@ namespace NzbDrone.Api.REST
_createResource = value; _createResource = value;
Post[ROOT_ROUTE] = options => Post[ROOT_ROUTE] = options =>
{ {
var resource = CreateResource(ReadFromRequest()); var id = CreateResource(ReadResourceFromRequest());
return resource.AsResponse(HttpStatusCode.Created); return GetResourceById(id).AsResponse(HttpStatusCode.Created);
}; };
} }
} }
protected Func<TResource, TResource> UpdateResource protected Action<TResource> UpdateResource
{ {
private get { return _updateResource; } private get { return _updateResource; }
set set
{ {
_updateResource = value; _updateResource = value;
Put[ROOT_ROUTE] = options => Put[ROOT_ROUTE] = options =>
{ {
var resource = UpdateResource(ReadFromRequest()); var resource = ReadResourceFromRequest();
return resource.AsResponse(HttpStatusCode.Accepted); UpdateResource(resource);
}; return GetResourceById(resource.Id).AsResponse(HttpStatusCode.Accepted);
};
Put[ID_ROUTE] = options => Put[ID_ROUTE] = options =>
{ {
var model = ReadFromRequest(); var resource = ReadResourceFromRequest();
model.Id = options.Id; resource.Id = options.Id;
var resource = UpdateResource(model); UpdateResource(resource);
return resource.AsResponse(HttpStatusCode.Accepted); return GetResourceById(resource.Id).AsResponse(HttpStatusCode.Accepted);
}; };
} }
} }
private TResource ReadFromRequest() protected TResource ReadResourceFromRequest()
{ {
//TODO: handle when request is null //TODO: handle when request is null
var resource = Request.Body.FromJson<TResource>(); var resource = Request.Body.FromJson<TResource>();

@ -16,9 +16,9 @@ namespace NzbDrone.Api.RootFolders
DeleteResource = DeleteFolder; DeleteResource = DeleteFolder;
} }
private RootFolderResource CreateRootFolder(RootFolderResource rootFolderResource) private int CreateRootFolder(RootFolderResource rootFolderResource)
{ {
return ToResource<RootFolder>(_rootFolderService.Add, rootFolderResource); return GetNewId<RootFolder>(_rootFolderService.Add, rootFolderResource);
} }
private List<RootFolderResource> GetRootFolders() private List<RootFolderResource> GetRootFolders()

@ -13,7 +13,7 @@ namespace NzbDrone.Api.Seasons
_seasonService = seasonService; _seasonService = seasonService;
GetResourceAll = GetSeasons; GetResourceAll = GetSeasons;
UpdateResource = SetMonitored; UpdateResource = Update;
Post["/pass"] = x => SetSeasonPass(); Post["/pass"] = x => SetSeasonPass();
} }
@ -27,14 +27,12 @@ namespace NzbDrone.Api.Seasons
return ToListResource<Season>(() => _seasonService.GetSeasonsBySeries(seriesId)); return ToListResource<Season>(() => _seasonService.GetSeasonsBySeries(seriesId));
} }
return ToListResource<Season>(() => _seasonService.GetAllSeasons()); return ToListResource(() => _seasonService.GetAllSeasons());
} }
private SeasonResource SetMonitored(SeasonResource seasonResource) private void Update(SeasonResource seasonResource)
{ {
_seasonService.SetMonitored(seasonResource.SeriesId, seasonResource.SeasonNumber, seasonResource.Monitored); _seasonService.SetMonitored(seasonResource.SeriesId, seasonResource.SeasonNumber, seasonResource.Monitored);
return seasonResource;
} }
private List<SeasonResource> SetSeasonPass() private List<SeasonResource> SetSeasonPass()

@ -66,18 +66,14 @@ namespace NzbDrone.Api.Series
return seriesResources; return seriesResources;
} }
private SeriesResource AddSeries(SeriesResource seriesResource) private int AddSeries(SeriesResource seriesResource)
{ {
return ToResource<Core.Tv.Series>(_seriesService.AddSeries, seriesResource); return GetNewId<Core.Tv.Series>(_seriesService.AddSeries, seriesResource);
} }
private SeriesResource UpdateSeries(SeriesResource seriesResource) private void UpdateSeries(SeriesResource seriesResource)
{ {
var resource = ToResource<Core.Tv.Series>(_seriesService.UpdateSeries, seriesResource); GetNewId<Core.Tv.Series>(_seriesService.UpdateSeries, seriesResource);
MapCoversToLocal(resource);
FetchAndLinkSeriesStatistics(resource);
return resource;
} }
private void DeleteSeries(int id) private void DeleteSeries(int id)

@ -1,4 +1,4 @@
'use strict'; 'use strict';
define( define(
[ [
'Settings/SettingsModelBase' 'Settings/SettingsModelBase'

@ -19,13 +19,13 @@ define(
'change .x-rename-episodes': '_setNamingOptionsVisibility' 'change .x-rename-episodes': '_setNamingOptionsVisibility'
}, },
onRender: function(){ onRender: function () {
if(!this.model.get('renameEpisodes')){ if (!this.model.get('renameEpisodes')) {
this.ui.namingOptions.hide(); this.ui.namingOptions.hide();
} }
this.listenTo(this.model, 'change', this._buildExamples); this.listenTo(this.model, 'change', this._updateExamples);
this._buildExamples(); this._updateExamples();
}, },
_setNamingOptionsVisibility: function () { _setNamingOptionsVisibility: function () {
@ -39,16 +39,14 @@ define(
} }
}, },
_buildExamples: function () { _updateExamples: function () {
var self = this;
var data = this.model.toJSON(); var self = this;
data.id = 0;
var promise = $.ajax({ var promise = $.ajax({
type: 'POST', type: 'GET',
url : window.ApiRoot + '/naming', url : window.ApiRoot + '/config/naming/samples',
data: JSON.stringify(data) data: this.model.toJSON()
}); });
promise.done(function (result) { promise.done(function (result) {

Loading…
Cancel
Save