Indexers are saved when settings are saved
This commit is contained in:
parent
4a39faeb39
commit
d2a59ea404
|
@ -17,7 +17,8 @@ namespace NzbDrone.Api.Indexers
|
||||||
{
|
{
|
||||||
_indexerService = indexerService;
|
_indexerService = indexerService;
|
||||||
GetResourceAll = GetAll;
|
GetResourceAll = GetAll;
|
||||||
CreateResource = Create;
|
CreateResource = CreateIndexer;
|
||||||
|
UpdateResource = UpdateIndexer;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<IndexerResource> GetAll()
|
private List<IndexerResource> GetAll()
|
||||||
|
@ -38,22 +39,9 @@ namespace NzbDrone.Api.Indexers
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
private IndexerResource Create(IndexerResource indexerResource)
|
private IndexerResource CreateIndexer(IndexerResource indexerResource)
|
||||||
{
|
{
|
||||||
var indexer = _indexerService.Schema()
|
var indexer = GetIndexer(indexerResource);
|
||||||
.SingleOrDefault(i =>
|
|
||||||
i.Implementation.Equals(indexerResource.Implementation,
|
|
||||||
StringComparison.InvariantCultureIgnoreCase));
|
|
||||||
|
|
||||||
if (indexer == null)
|
|
||||||
{
|
|
||||||
throw new BadRequestException("Invalid Indexer Implementation");
|
|
||||||
}
|
|
||||||
|
|
||||||
indexer.Name = indexerResource.Name;
|
|
||||||
indexer.Enable = indexerResource.Enable;
|
|
||||||
indexer.Settings = SchemaDeserializer.DeserializeSchema(indexer.Settings, indexerResource.Fields);
|
|
||||||
|
|
||||||
indexer = _indexerService.Create(indexer);
|
indexer = _indexerService.Create(indexer);
|
||||||
|
|
||||||
var response = indexer.InjectTo<IndexerResource>();
|
var response = indexer.InjectTo<IndexerResource>();
|
||||||
|
@ -61,5 +49,36 @@ namespace NzbDrone.Api.Indexers
|
||||||
|
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private IndexerResource UpdateIndexer(IndexerResource indexerResource)
|
||||||
|
{
|
||||||
|
var indexer = _indexerService.Get(indexerResource.Id);
|
||||||
|
indexer.InjectFrom(indexerResource);
|
||||||
|
indexer.Settings = SchemaDeserializer.DeserializeSchema(indexer.Settings, indexerResource.Fields);
|
||||||
|
indexer = _indexerService.Update(indexer);
|
||||||
|
|
||||||
|
var response = indexer.InjectTo<IndexerResource>();
|
||||||
|
response.Fields = SchemaBuilder.GenerateSchema(indexer.Settings);
|
||||||
|
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Indexer GetIndexer(IndexerResource indexerResource)
|
||||||
|
{
|
||||||
|
var indexer = _indexerService.Schema()
|
||||||
|
.SingleOrDefault(i =>
|
||||||
|
i.Implementation.Equals(indexerResource.Implementation,
|
||||||
|
StringComparison.InvariantCultureIgnoreCase));
|
||||||
|
|
||||||
|
if (indexer == null)
|
||||||
|
{
|
||||||
|
throw new BadRequestException("Invalid Indexer Implementation");
|
||||||
|
}
|
||||||
|
|
||||||
|
indexer.InjectFrom(indexerResource);
|
||||||
|
indexer.Settings = SchemaDeserializer.DeserializeSchema(indexer.Settings, indexerResource.Fields);
|
||||||
|
|
||||||
|
return indexer;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -6,6 +6,7 @@ using NzbDrone.Common.Messaging;
|
||||||
using NzbDrone.Common.Serializer;
|
using NzbDrone.Common.Serializer;
|
||||||
using NzbDrone.Core.Indexers.Newznab;
|
using NzbDrone.Core.Indexers.Newznab;
|
||||||
using NzbDrone.Core.Lifecycle;
|
using NzbDrone.Core.Lifecycle;
|
||||||
|
using Omu.ValueInjecter;
|
||||||
|
|
||||||
namespace NzbDrone.Core.Indexers
|
namespace NzbDrone.Core.Indexers
|
||||||
{
|
{
|
||||||
|
@ -23,9 +24,11 @@ namespace NzbDrone.Core.Indexers
|
||||||
{
|
{
|
||||||
List<Indexer> All();
|
List<Indexer> All();
|
||||||
List<IIndexer> GetAvailableIndexers();
|
List<IIndexer> GetAvailableIndexers();
|
||||||
|
Indexer Get(int id);
|
||||||
Indexer Get(string name);
|
Indexer Get(string name);
|
||||||
List<Indexer> Schema();
|
List<Indexer> Schema();
|
||||||
Indexer Create(Indexer indexer);
|
Indexer Create(Indexer indexer);
|
||||||
|
Indexer Update(Indexer indexer);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class IndexerService : IIndexerService, IHandle<ApplicationStartedEvent>
|
public class IndexerService : IIndexerService, IHandle<ApplicationStartedEvent>
|
||||||
|
@ -52,6 +55,11 @@ namespace NzbDrone.Core.Indexers
|
||||||
return All().Where(c => c.Enable && c.Settings.IsValid).Select(c => c.Instance).ToList();
|
return All().Where(c => c.Enable && c.Settings.IsValid).Select(c => c.Instance).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Indexer Get(int id)
|
||||||
|
{
|
||||||
|
return ToIndexer(_indexerRepository.Get(id));
|
||||||
|
}
|
||||||
|
|
||||||
public Indexer Get(string name)
|
public Indexer Get(string name)
|
||||||
{
|
{
|
||||||
return ToIndexer(_indexerRepository.Get(name));
|
return ToIndexer(_indexerRepository.Get(name));
|
||||||
|
@ -73,6 +81,7 @@ namespace NzbDrone.Core.Indexers
|
||||||
return indexers;
|
return indexers;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Indexer Create(Indexer indexer)
|
public Indexer Create(Indexer indexer)
|
||||||
{
|
{
|
||||||
var definition = new IndexerDefinition
|
var definition = new IndexerDefinition
|
||||||
|
@ -89,6 +98,16 @@ namespace NzbDrone.Core.Indexers
|
||||||
return indexer;
|
return indexer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Indexer Update(Indexer indexer)
|
||||||
|
{
|
||||||
|
var definition = _indexerRepository.Get(indexer.Id);
|
||||||
|
definition.InjectFrom(indexer);
|
||||||
|
definition.Settings = indexer.Settings.ToJson();
|
||||||
|
_indexerRepository.Update(definition);
|
||||||
|
|
||||||
|
return indexer;
|
||||||
|
}
|
||||||
|
|
||||||
private Indexer ToIndexer(IndexerDefinition definition)
|
private Indexer ToIndexer(IndexerDefinition definition)
|
||||||
{
|
{
|
||||||
var indexer = new Indexer();
|
var indexer = new Indexer();
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<div class="span12">
|
<div class="span12">
|
||||||
<button class="btn btn-success x-add">Add</button>
|
<button class="btn btn-success x-add">Add Newznab</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
@ -35,17 +35,21 @@ define(['app',
|
||||||
},
|
},
|
||||||
|
|
||||||
saveSettings: function () {
|
saveSettings: function () {
|
||||||
//TODO: check if any models in the collection have changed and sync them only
|
var self = this;
|
||||||
// this.collection.sync();
|
|
||||||
// if (!this.model.isSaved) {
|
//For now loop through and save all the models
|
||||||
// this.model.save(undefined, this.syncNotification("Naming Settings Saved", "Couldn't Save Naming Settings"));
|
|
||||||
// }
|
_.each(this.collection.models, function (model, index, list) {
|
||||||
|
var name = model.get('name');
|
||||||
|
var error = 'Failed to save indexer: ' + name;
|
||||||
|
|
||||||
|
model.save(undefined, self.syncNotification(error));
|
||||||
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
syncNotification: function (success, error) {
|
syncNotification: function (error) {
|
||||||
return {
|
return {
|
||||||
success: function () {
|
success: function () {
|
||||||
NzbDrone.Shared.Messenger.show({message: 'General Settings Saved'});
|
|
||||||
},
|
},
|
||||||
error : function () {
|
error : function () {
|
||||||
NzbDrone.Shared.Messenger.show({message: "Couldn't Save General Settings", type: 'error'});
|
NzbDrone.Shared.Messenger.show({message: "Couldn't Save General Settings", type: 'error'});
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
{{#if id}}
|
{{#if id}}
|
||||||
<h3>Edit</h3>
|
<h3>Edit</h3>
|
||||||
{{else}}
|
{{else}}
|
||||||
<h3>Add</h3>
|
<h3>Add Newznab</h3>
|
||||||
{{/if}}
|
{{/if}}
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
|
|
Loading…
Reference in New Issue