parent
0da6f6e3c7
commit
de5e0871cf
@ -0,0 +1,7 @@
|
|||||||
|
var TemplatedCell = require('../../Cells/TemplatedCell');
|
||||||
|
|
||||||
|
module.exports = TemplatedCell.extend({
|
||||||
|
className : 'artist-title-cell',
|
||||||
|
template : 'AddArtist/BulkImport/ArtistPathTemplate',
|
||||||
|
|
||||||
|
});
|
@ -0,0 +1 @@
|
|||||||
|
{{path}}<br>
|
@ -0,0 +1,21 @@
|
|||||||
|
var NzbDroneCell = require('../../Cells/NzbDroneCell');
|
||||||
|
var BulkImportCollection = require('./BulkImportCollection');
|
||||||
|
|
||||||
|
module.exports = NzbDroneCell.extend({
|
||||||
|
className : 'artist-title-cell',
|
||||||
|
|
||||||
|
render : function() {
|
||||||
|
var collection = this.model.collection;
|
||||||
|
this.listenTo(collection, 'sync', this._renderCell);
|
||||||
|
|
||||||
|
this._renderCell();
|
||||||
|
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
|
||||||
|
_renderCell : function() {
|
||||||
|
this.$el.empty();
|
||||||
|
|
||||||
|
this.$el.html('<a href="https://www.musicbrainz.org/artist/' + this.cellValue.get('foreignArtistId') +'">' + this.cellValue.get('name') +'</a><br><span class="hint">' + this.cellValue.get('overview') + '</span>');
|
||||||
|
}
|
||||||
|
});
|
@ -0,0 +1,49 @@
|
|||||||
|
var _ = require('underscore');
|
||||||
|
var PageableCollection = require('backbone.pageable');
|
||||||
|
var ArtistModel = require('../../Artist/ArtistModel');
|
||||||
|
var AsSortedCollection = require('../../Mixins/AsSortedCollection');
|
||||||
|
var AsPageableCollection = require('../../Mixins/AsPageableCollection');
|
||||||
|
var AsPersistedStateCollection = require('../../Mixins/AsPersistedStateCollection');
|
||||||
|
|
||||||
|
var BulkImportCollection = PageableCollection.extend({
|
||||||
|
url : window.NzbDrone.ApiRoot + '/artist/bulkimport',
|
||||||
|
model : ArtistModel,
|
||||||
|
tableName : 'bulkimport',
|
||||||
|
|
||||||
|
state : {
|
||||||
|
pageSize : 100000,
|
||||||
|
sortKey: 'sortName',
|
||||||
|
firstPage: 1
|
||||||
|
},
|
||||||
|
|
||||||
|
fetch : function(options) {
|
||||||
|
|
||||||
|
options = options || {};
|
||||||
|
|
||||||
|
var data = options.data || {};
|
||||||
|
|
||||||
|
if (!data.id || !data.folder) {
|
||||||
|
data.id = this.folderId;
|
||||||
|
data.folder = this.folder;
|
||||||
|
}
|
||||||
|
|
||||||
|
options.data = data;
|
||||||
|
return PageableCollection.prototype.fetch.call(this, options);
|
||||||
|
},
|
||||||
|
|
||||||
|
parseLinks : function(options) {
|
||||||
|
|
||||||
|
return {
|
||||||
|
first : this.url,
|
||||||
|
next: this.url,
|
||||||
|
last : this.url
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
BulkImportCollection = AsSortedCollection.call(BulkImportCollection);
|
||||||
|
BulkImportCollection = AsPageableCollection.call(BulkImportCollection);
|
||||||
|
BulkImportCollection = AsPersistedStateCollection.call(BulkImportCollection);
|
||||||
|
|
||||||
|
module.exports = BulkImportCollection;
|
@ -0,0 +1,65 @@
|
|||||||
|
var Backgrid = require('backgrid');
|
||||||
|
var Config = require('../../Config');
|
||||||
|
var _ = require('underscore');
|
||||||
|
var vent = require('vent');
|
||||||
|
var TemplatedCell = require('../../Cells/TemplatedCell');
|
||||||
|
var NzbDroneCell = require('../../Cells/NzbDroneCell');
|
||||||
|
var Marionette = require('marionette');
|
||||||
|
|
||||||
|
module.exports = TemplatedCell.extend({
|
||||||
|
className : 'monitor-cell',
|
||||||
|
template : 'AddArtist/BulkImport/BulkImportMonitorCell',
|
||||||
|
|
||||||
|
_orig : TemplatedCell.prototype.initialize,
|
||||||
|
_origRender : TemplatedCell.prototype.initialize,
|
||||||
|
|
||||||
|
ui : {
|
||||||
|
monitor : '.x-monitor',
|
||||||
|
},
|
||||||
|
|
||||||
|
events: { 'change .x-monitor' : '_monitorChanged' },
|
||||||
|
|
||||||
|
initialize : function () {
|
||||||
|
this._orig.apply(this, arguments);
|
||||||
|
|
||||||
|
this.defaultMonitor = Config.getValue(Config.Keys.MonitorEpisodes, 'all');
|
||||||
|
|
||||||
|
this.model.set('monitored', this._convertMonitorToBool(this.defaultMonitor));
|
||||||
|
|
||||||
|
this.$el.find('.x-monitor').val(this._convertBooltoMonitor(this.model.get('monitored')));
|
||||||
|
},
|
||||||
|
|
||||||
|
_convertMonitorToBool : function(monitorString) {
|
||||||
|
return monitorString === 'all' ? true : false;
|
||||||
|
},
|
||||||
|
|
||||||
|
_convertBooltoMonitor : function(monitorBool) {
|
||||||
|
return monitorBool === true ? 'all' : 'none';
|
||||||
|
},
|
||||||
|
|
||||||
|
_monitorChanged : function() {
|
||||||
|
Config.setValue(Config.Keys.MonitorEpisodes, this.$el.find('.x-monitor').val());
|
||||||
|
this.defaultMonitor = this.$el.find('.x-monitor').val();
|
||||||
|
this.model.set('monitored', this._convertMonitorToBool(this.$el.find('.x-monitor').val()));
|
||||||
|
},
|
||||||
|
|
||||||
|
render : function() {
|
||||||
|
var templateName = this.column.get('template') || this.template;
|
||||||
|
|
||||||
|
this.templateFunction = Marionette.TemplateCache.get(templateName);
|
||||||
|
this.$el.empty();
|
||||||
|
|
||||||
|
if (this.cellValue) {
|
||||||
|
var data = this.cellValue.toJSON();
|
||||||
|
var html = this.templateFunction(data);
|
||||||
|
this.$el.html(html);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.delegateEvents();
|
||||||
|
|
||||||
|
this.$el.find('.x-monitor').val(this._convertBooltoMonitor(this.model.get('monitored')));
|
||||||
|
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
@ -0,0 +1,4 @@
|
|||||||
|
<select class="col-md-2 form-control x-monitor">
|
||||||
|
<option value="all">Yes</option>
|
||||||
|
<option value="none">No</option>
|
||||||
|
</select>
|
@ -0,0 +1,32 @@
|
|||||||
|
var Backgrid = require('backgrid');
|
||||||
|
var ProfileCollection = require('../../Profile/ProfileCollection');
|
||||||
|
var Config = require('../../Config');
|
||||||
|
var _ = require('underscore');
|
||||||
|
|
||||||
|
module.exports = Backgrid.SelectCell.extend({
|
||||||
|
className : 'profile-cell',
|
||||||
|
|
||||||
|
_orig : Backgrid.SelectCell.prototype.initialize,
|
||||||
|
|
||||||
|
initialize : function () {
|
||||||
|
this._orig.apply(this, arguments);
|
||||||
|
|
||||||
|
this.defaultProfile = Config.getValue(Config.Keys.DefaultProfileId);
|
||||||
|
if(ProfileCollection.get(this.defaultProfile))
|
||||||
|
{
|
||||||
|
this.profile = this.defaultProfile;
|
||||||
|
} else {
|
||||||
|
this.profile = ProfileCollection.get(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.render();
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
optionValues : function() {
|
||||||
|
return _.map(ProfileCollection.models, function(model){
|
||||||
|
return [model.get('name'), model.get('id')+""];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
@ -0,0 +1,77 @@
|
|||||||
|
var Backgrid = require('backgrid');
|
||||||
|
var ProfileCollection = require('../../Profile/ProfileCollection');
|
||||||
|
var Config = require('../../Config');
|
||||||
|
var _ = require('underscore');
|
||||||
|
var vent = require('vent');
|
||||||
|
var TemplatedCell = require('../../Cells/TemplatedCell');
|
||||||
|
var NzbDroneCell = require('../../Cells/NzbDroneCell');
|
||||||
|
var Marionette = require('marionette');
|
||||||
|
|
||||||
|
module.exports = TemplatedCell.extend({
|
||||||
|
className : 'profile-cell',
|
||||||
|
template : 'AddArtist/BulkImport/BulkImportProfileCell',
|
||||||
|
|
||||||
|
_orig : TemplatedCell.prototype.initialize,
|
||||||
|
_origRender : TemplatedCell.prototype.initialize,
|
||||||
|
|
||||||
|
ui : {
|
||||||
|
profile : '.x-profile',
|
||||||
|
},
|
||||||
|
|
||||||
|
events: { 'change .x-profile' : '_profileChanged' },
|
||||||
|
|
||||||
|
initialize : function () {
|
||||||
|
this._orig.apply(this, arguments);
|
||||||
|
|
||||||
|
this.listenTo(vent, Config.Events.ConfigUpdatedEvent, this._onConfigUpdated);
|
||||||
|
|
||||||
|
this.defaultProfile = Config.getValue(Config.Keys.DefaultProfileId);
|
||||||
|
|
||||||
|
this.profile = this.defaultProfile;
|
||||||
|
|
||||||
|
if(ProfileCollection.get(this.defaultProfile))
|
||||||
|
{
|
||||||
|
this.profile = this.defaultProfile;
|
||||||
|
this.model.set('profileId', this.defaultProfile);
|
||||||
|
} else {
|
||||||
|
this.profile = 1;
|
||||||
|
this.model.set('profileId', 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.$('.x-profile').val(this.model.get('profileId'));
|
||||||
|
|
||||||
|
this.cellValue = ProfileCollection;
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
|
_profileChanged : function() {
|
||||||
|
Config.setValue(Config.Keys.DefaultProfileId, this.$('.x-profile').val());
|
||||||
|
this.model.set('profileId', this.$('.x-profile').val());
|
||||||
|
},
|
||||||
|
|
||||||
|
_onConfigUpdated : function(options) {
|
||||||
|
if (options.key === Config.Keys.DefaultProfileId) {
|
||||||
|
this.defaultProfile = options.value;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
render : function() {
|
||||||
|
var templateName = this.column.get('template') || this.template;
|
||||||
|
|
||||||
|
this.cellValue = ProfileCollection;
|
||||||
|
|
||||||
|
this.templateFunction = Marionette.TemplateCache.get(templateName);
|
||||||
|
this.$el.empty();
|
||||||
|
|
||||||
|
if (this.cellValue) {
|
||||||
|
var data = this.cellValue.toJSON();
|
||||||
|
var html = this.templateFunction(data);
|
||||||
|
this.$el.html(html);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.delegateEvents();
|
||||||
|
this.$('.x-profile').val(this.model.get('profileId'));
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
});
|
@ -0,0 +1,5 @@
|
|||||||
|
<select class="col-md-2 form-control x-profile">
|
||||||
|
{{#each this}}
|
||||||
|
<option value="{{id}}">{{name}}</option>
|
||||||
|
{{/each}}
|
||||||
|
</select>
|
@ -0,0 +1,54 @@
|
|||||||
|
var $ = require('jquery');
|
||||||
|
var _ = require('underscore');
|
||||||
|
var SelectAllCell = require('../../Cells/SelectAllCell');
|
||||||
|
var Backgrid = require('backgrid');
|
||||||
|
var FullArtistCollection = require('../../Artist/ArtistCollection');
|
||||||
|
|
||||||
|
|
||||||
|
module.exports = SelectAllCell.extend({
|
||||||
|
_originalRender : SelectAllCell.prototype.render,
|
||||||
|
|
||||||
|
_originalInit : SelectAllCell.prototype.initialize,
|
||||||
|
|
||||||
|
initialize : function() {
|
||||||
|
this._originalInit.apply(this, arguments);
|
||||||
|
|
||||||
|
this._refreshIsDuplicate();
|
||||||
|
|
||||||
|
this.listenTo(this.model, 'change', this._refresh);
|
||||||
|
},
|
||||||
|
|
||||||
|
onChange : function(e) {
|
||||||
|
if(!this.isDuplicate) {
|
||||||
|
var checked = $(e.target).prop('checked');
|
||||||
|
this.$el.parent().toggleClass('selected', checked);
|
||||||
|
this.model.trigger('backgrid:selected', this.model, checked);
|
||||||
|
} else {
|
||||||
|
$(e.target).prop('checked', false);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
render : function() {
|
||||||
|
this._originalRender.apply(this, arguments);
|
||||||
|
|
||||||
|
this.$el.children(':first').prop('disabled', this.isDuplicate);
|
||||||
|
|
||||||
|
if (!this.isDuplicate) {
|
||||||
|
this.$el.children(':first').prop('checked', this.isChecked);
|
||||||
|
}
|
||||||
|
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
|
||||||
|
_refresh: function() {
|
||||||
|
this.isChecked = this.$el.children(':first').prop('checked');
|
||||||
|
this._refreshIsDuplicate();
|
||||||
|
this.render();
|
||||||
|
},
|
||||||
|
|
||||||
|
_refreshIsDuplicate: function() {
|
||||||
|
var foreignArtistId = this.model.get('foreignArtistId');
|
||||||
|
var existingArtist = FullArtistCollection.where({ foreignArtistId: foreignArtistId });
|
||||||
|
this.isDuplicate = existingArtist.length > 0 ? true : false;
|
||||||
|
}
|
||||||
|
});
|
@ -0,0 +1,191 @@
|
|||||||
|
var $ = require('jquery');
|
||||||
|
var _ = require('underscore');
|
||||||
|
var Marionette = require('marionette');
|
||||||
|
var Backgrid = require('backgrid');
|
||||||
|
var ArtistNameCell = require('./BulkImportArtistNameCell');
|
||||||
|
var BulkImportCollection = require('./BulkImportCollection');
|
||||||
|
var ForeignIdCell = require('./ForeignIdCell');
|
||||||
|
var GridPager = require('../../Shared/Grid/Pager');
|
||||||
|
var SelectAllCell = require('./BulkImportSelectAllCell');
|
||||||
|
var ProfileCell = require('./BulkImportProfileCellT');
|
||||||
|
var MonitorCell = require('./BulkImportMonitorCell');
|
||||||
|
var ArtistPathCell = require('./ArtistPathCell');
|
||||||
|
var LoadingView = require('../../Shared/LoadingView');
|
||||||
|
var EmptyView = require('./EmptyView');
|
||||||
|
var ToolbarLayout = require('../../Shared/Toolbar/ToolbarLayout');
|
||||||
|
var CommandController = require('../../Commands/CommandController');
|
||||||
|
var Messenger = require('../../Shared/Messenger');
|
||||||
|
var ArtistCollection = require('../../Artist/ArtistCollection');
|
||||||
|
var ProfileCollection = require('../../Profile/ProfileCollection');
|
||||||
|
|
||||||
|
require('backgrid.selectall');
|
||||||
|
require('../../Mixins/backbone.signalr.mixin');
|
||||||
|
|
||||||
|
module.exports = Marionette.Layout.extend({
|
||||||
|
template : 'AddArtist/BulkImport/BulkImportViewTemplate',
|
||||||
|
|
||||||
|
regions : {
|
||||||
|
toolbar : '#x-toolbar',
|
||||||
|
table : '#x-artists-bulk',
|
||||||
|
},
|
||||||
|
|
||||||
|
ui : {
|
||||||
|
addSelectdBtn : '.x-add-selected'
|
||||||
|
},
|
||||||
|
|
||||||
|
initialize : function(options) {
|
||||||
|
ProfileCollection.fetch();
|
||||||
|
this.bulkImportCollection = new BulkImportCollection().bindSignalR({ updateOnly : true });
|
||||||
|
this.model = options.model;
|
||||||
|
this.folder = this.model.get('path');
|
||||||
|
this.folderId = this.model.get('id');
|
||||||
|
this.bulkImportCollection.folderId = this.folderId;
|
||||||
|
this.bulkImportCollection.folder = this.folder;
|
||||||
|
this.bulkImportCollection.fetch();
|
||||||
|
this.listenTo(this.bulkImportCollection, {'sync' : this._showContent, 'error' : this._showContent, 'backgrid:selected' : this._select});
|
||||||
|
},
|
||||||
|
|
||||||
|
columns : [
|
||||||
|
{
|
||||||
|
name : '',
|
||||||
|
cell : SelectAllCell,
|
||||||
|
headerCell : 'select-all',
|
||||||
|
sortable : false,
|
||||||
|
cellValue : 'this'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name : 'movie',
|
||||||
|
label : 'Artist',
|
||||||
|
cell : ArtistNameCell,
|
||||||
|
cellValue : 'this',
|
||||||
|
sortable : false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name : 'path',
|
||||||
|
label : 'Path',
|
||||||
|
cell : ArtistPathCell,
|
||||||
|
cellValue : 'this',
|
||||||
|
sortable : false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name : 'foreignArtistId',
|
||||||
|
label : 'MB Id',
|
||||||
|
cell : ForeignIdCell,
|
||||||
|
cellValue : 'this',
|
||||||
|
sortable: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name :'monitor',
|
||||||
|
label: 'Monitor',
|
||||||
|
cell : MonitorCell,
|
||||||
|
cellValue : 'this',
|
||||||
|
sortable: false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name : 'profileId',
|
||||||
|
label : 'Profile',
|
||||||
|
cell : ProfileCell,
|
||||||
|
cellValue : 'this',
|
||||||
|
sortable: false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
|
||||||
|
_showContent : function() {
|
||||||
|
this._showToolbar();
|
||||||
|
this._showTable();
|
||||||
|
},
|
||||||
|
|
||||||
|
onShow : function() {
|
||||||
|
this.table.show(new LoadingView());
|
||||||
|
},
|
||||||
|
|
||||||
|
_showToolbar : function() {
|
||||||
|
var leftSideButtons = {
|
||||||
|
type : 'default',
|
||||||
|
storeState: false,
|
||||||
|
collapse : true,
|
||||||
|
items : [
|
||||||
|
{
|
||||||
|
title : 'Add Selected',
|
||||||
|
icon : 'icon-lidarr-add',
|
||||||
|
callback : this._addSelected,
|
||||||
|
ownerContext : this,
|
||||||
|
className : 'x-add-selected'
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
this.toolbar.show(new ToolbarLayout({
|
||||||
|
left : [leftSideButtons],
|
||||||
|
right : [],
|
||||||
|
context : this
|
||||||
|
}));
|
||||||
|
|
||||||
|
$('#x-toolbar').addClass('inline');
|
||||||
|
},
|
||||||
|
|
||||||
|
_addSelected : function() {
|
||||||
|
var selected = _.filter(this.bulkImportCollection.models, function(elem){
|
||||||
|
return elem.selected;
|
||||||
|
});
|
||||||
|
|
||||||
|
var promise = ArtistCollection.importFromList(selected);
|
||||||
|
this.ui.addSelectdBtn.spinForPromise(promise);
|
||||||
|
this.ui.addSelectdBtn.addClass('disabled');
|
||||||
|
|
||||||
|
if (selected.length === 0) {
|
||||||
|
Messenger.show({
|
||||||
|
type : 'error',
|
||||||
|
message : 'No artists selected'
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Messenger.show({
|
||||||
|
message : 'Importing {0} artists. This can take multiple minutes depending on how many artists should be imported. Don\'t close this browser window until it is finished!'.format(selected.length),
|
||||||
|
hideOnNavigate : false,
|
||||||
|
hideAfter : 30,
|
||||||
|
type : 'error'
|
||||||
|
});
|
||||||
|
|
||||||
|
var _this = this;
|
||||||
|
|
||||||
|
promise.done(function() {
|
||||||
|
Messenger.show({
|
||||||
|
message : 'Imported artists from folder.',
|
||||||
|
hideAfter : 8,
|
||||||
|
hideOnNavigate : true
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
_.forEach(selected, function(artist) {
|
||||||
|
artist.destroy(); //update the collection without the added movies
|
||||||
|
});
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
_handleEvent : function(eventName, data) {
|
||||||
|
if (eventName === 'sync' || eventName === 'content') {
|
||||||
|
this._showContent();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_select : function(model, selected) {
|
||||||
|
model.selected = selected;
|
||||||
|
},
|
||||||
|
|
||||||
|
_showTable : function() {
|
||||||
|
if (this.bulkImportCollection.length === 0) {
|
||||||
|
this.table.show(new EmptyView({ folder : this.folder }));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.importGrid = new Backgrid.Grid({
|
||||||
|
columns : this.columns,
|
||||||
|
collection : this.bulkImportCollection,
|
||||||
|
className : 'table table-hover'
|
||||||
|
});
|
||||||
|
|
||||||
|
this.table.show(this.importGrid);
|
||||||
|
}
|
||||||
|
});
|
@ -0,0 +1,13 @@
|
|||||||
|
<div id="x-toolbar"/>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<span><b>Disabled artists are possible duplicates. If the match is incorrect, update the MB Id cell to import the proper artist.</b><span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-md-12">
|
||||||
|
<div id="x-artists-bulk" class="queue table-responsive"/>
|
||||||
|
</div>
|
||||||
|
</div>
|
@ -0,0 +1,10 @@
|
|||||||
|
var Marionette = require('marionette');
|
||||||
|
|
||||||
|
module.exports = Marionette.CompositeView.extend({
|
||||||
|
template : 'AddArtist/BulkImport/EmptyViewTemplate',
|
||||||
|
|
||||||
|
initialize : function (options) {
|
||||||
|
this.templateHelpers = {};
|
||||||
|
this.templateHelpers.folder = options.folder;
|
||||||
|
}
|
||||||
|
});
|
@ -0,0 +1,3 @@
|
|||||||
|
<div class="text-center hint col-md-12">
|
||||||
|
<span>No artists found in folder {{folder}}. Have you already added all of them?</span>
|
||||||
|
</div>
|
@ -0,0 +1,57 @@
|
|||||||
|
var vent = require('vent');
|
||||||
|
var _ = require('underscore');
|
||||||
|
var $ = require('jquery');
|
||||||
|
var NzbDroneCell = require('../../Cells/NzbDroneCell');
|
||||||
|
var CommandController = require('../../Commands/CommandController');
|
||||||
|
|
||||||
|
module.exports = NzbDroneCell.extend({
|
||||||
|
className : 'foreignId-cell',
|
||||||
|
|
||||||
|
events : {
|
||||||
|
'blur input.foreignId-input' : '_updateId'
|
||||||
|
},
|
||||||
|
|
||||||
|
render : function() {
|
||||||
|
this.$el.empty();
|
||||||
|
|
||||||
|
this.$el.html('<i class="icon-lidarr-info hidden"></i><input type="text" class="x-foreignId foreignId-input form-control" value="' + this.cellValue.get('foreignArtistId') + '" />');
|
||||||
|
|
||||||
|
return this;
|
||||||
|
},
|
||||||
|
|
||||||
|
_updateId : function() {
|
||||||
|
var field = this.$el.find('.x-foreignId');
|
||||||
|
var data = field.val();
|
||||||
|
|
||||||
|
var promise = $.ajax({
|
||||||
|
url : window.NzbDrone.ApiRoot + '/artist/lookup?term=lidarrid:' + data,
|
||||||
|
type : 'GET',
|
||||||
|
});
|
||||||
|
|
||||||
|
field.prop('disabled', true);
|
||||||
|
|
||||||
|
var icon = this.$('.icon-lidarr-info');
|
||||||
|
|
||||||
|
icon.removeClass('hidden');
|
||||||
|
|
||||||
|
icon.spinForPromise(promise);
|
||||||
|
var _self = this;
|
||||||
|
var cacheMonitored = this.model.get('monitored');
|
||||||
|
var cacheProfile = this.model.get('profileId');
|
||||||
|
var cachePath = this.model.get('path');
|
||||||
|
var cacheRoot = this.model.get('rootFolderPath');
|
||||||
|
|
||||||
|
promise.success(function(response) {
|
||||||
|
_self.model.set(response[0]);
|
||||||
|
_self.model.set('monitored', cacheMonitored);
|
||||||
|
_self.model.set('profileId', cacheProfile);
|
||||||
|
_self.model.set('path', cachePath);
|
||||||
|
field.prop('disabled', false);
|
||||||
|
});
|
||||||
|
|
||||||
|
promise.error(function(request, status, error) {
|
||||||
|
console.error('Status: ' + status, 'Error: ' + error);
|
||||||
|
field.prop('disabled', false);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
Loading…
Reference in new issue