Lidarr/UI/AddSeries/Existing/ImportSeriesView.js

170 lines
5.6 KiB
JavaScript
Raw Normal View History

2013-01-31 22:40:51 +00:00
'use strict';
define([
2013-05-13 04:24:04 +00:00
'app', 'AddSeries/RootFolders/RootFolderCollection',
'Quality/QualityProfileCollection',
'AddSeries/Existing/UnmappedFolderModel',
'AddSeries/Collection',
'Series/SeriesModel'], function (app, rootFolders, qualityProfileCollection) {
2013-03-29 19:17:03 +00:00
NzbDrone.AddSeries.Existing.FolderMatchResultView = Backbone.Marionette.ItemView.extend({
template: 'AddSeries/SearchResultTemplate',
2013-04-24 00:36:08 +00:00
ui: {
2013-05-23 06:25:58 +00:00
qualityProfile: '.x-quality-profile',
addButton : '.x-add'
2013-04-24 00:36:08 +00:00
},
2013-03-29 19:17:03 +00:00
events: {
'click .x-add': 'addSeries'
2013-03-29 19:17:03 +00:00
},
2013-03-29 19:17:03 +00:00
addSeries: function () {
2013-05-23 06:25:58 +00:00
var icon = this.ui.addButton.find('icon');
icon.removeClass('icon-plus').addClass('icon-spin icon-spinner disabled');
2013-03-29 19:17:03 +00:00
var self = this;
2013-02-15 06:57:01 +00:00
2013-04-24 00:36:08 +00:00
var quality = this.ui.qualityProfile.val();
var path = this.options.folder.path;
this.model.set('qualityProfileId', quality);
this.model.set('path', path);
this.model.save(undefined, {
2013-03-29 19:17:03 +00:00
success: function () {
2013-05-23 06:25:58 +00:00
icon.removeClass('icon-spin icon-spinner disabled').addClass('icon-search');
NzbDrone.Shared.Messenger.show({
message: 'Added: ' + self.model.get('title')
2013-03-29 19:17:03 +00:00
});
2013-04-12 15:08:09 +00:00
NzbDrone.vent.trigger(NzbDrone.Events.SeriesAdded, { existing: true, series: self.model });
self.trigger('seriesAdded');
2013-03-29 19:17:03 +00:00
self.close();
2013-05-23 06:25:58 +00:00
},
fail : function () {
2013-05-23 06:25:58 +00:00
icon.removeClass('icon-spin icon-spinner disabled').addClass('icon-search');
2013-03-29 19:17:03 +00:00
}
});
}
});
2013-03-29 19:17:03 +00:00
NzbDrone.AddSeries.Existing.UnmappedFolderCompositeView = Backbone.Marionette.CompositeView.extend({
2013-03-30 19:30:00 +00:00
template : 'AddSeries/Existing/UnmappedFolderCompositeViewTemplate',
2013-03-29 19:17:03 +00:00
itemViewContainer: '.x-folder-name-match-results',
itemView : NzbDrone.AddSeries.Existing.FolderMatchResultView,
2013-03-29 19:17:03 +00:00
events: {
'click .x-btn-search' : 'search',
'keydown .x-txt-search': 'keyDown'
2013-03-29 19:17:03 +00:00
},
2013-03-29 19:17:03 +00:00
ui: {
searchButton: '.x-btn-search',
searchText : '.x-txt-search',
profileList : '.x-lst-quality-profile'
},
2013-03-29 19:17:03 +00:00
initialize: function () {
2013-05-13 04:24:04 +00:00
this.collection = new NzbDrone.AddSeries.Collection();
this.collection.bind('reset', this.collectionReset, this);
2013-04-12 15:08:09 +00:00
this.on("itemview:seriesAdded", function () {
2013-04-12 15:08:09 +00:00
this.close();
});
2013-03-29 19:17:03 +00:00
},
onRender: function () {
this.resultView = new NzbDrone.AddSeries.SearchResultView({ collection: this.collection });
},
2013-01-31 22:40:51 +00:00
search: function () {
2013-03-29 19:17:03 +00:00
var icon = this.ui.searchButton.find('icon');
2013-01-31 22:40:51 +00:00
var deferred = $.Deferred();
this.collection.reset();
2013-03-29 19:17:03 +00:00
icon.removeClass('icon-search').addClass('icon-spin icon-spinner disabled');
2013-01-31 22:40:51 +00:00
2013-03-29 19:17:03 +00:00
this.collection.fetch({
data : { term: this.ui.searchText.val() },
success: function (collection) {
2013-03-29 19:17:03 +00:00
icon.removeClass('icon-spin icon-spinner disabled').addClass('icon-search');
deferred.resolve();
2013-03-29 19:17:03 +00:00
},
fail : function () {
icon.removeClass('icon-spin icon-spinner disabled').addClass('icon-search');
deferred.reject();
2013-03-29 19:17:03 +00:00
}
});
return deferred.promise();
2013-03-29 19:17:03 +00:00
},
2013-01-31 22:40:51 +00:00
keyDown: function (e) {
//Check for enter being pressed
var code = (e.keyCode ? e.keyCode :e.which);
if (code === 13) {
this.search();
}
},
collectionReset: function () {
_.each(this.collection.models, function (model) {
model.set('isExisting', true);
});
},
2013-03-29 19:17:03 +00:00
itemViewOptions: function () {
return {
qualityProfile: this.ui.profileList,
rootFolder : this.model.get('rootFolder'),
folder : this.model.get('folder')
};
}
});
2013-03-29 19:17:03 +00:00
NzbDrone.AddSeries.Existing.RootFolderCompositeView = Backbone.Marionette.CompositeView.extend({
2013-03-29 19:17:03 +00:00
template : "AddSeries/Existing/RootFolderCompositeViewTemplate",
itemViewContainer: ".x-existing-folder-container",
itemView : NzbDrone.AddSeries.Existing.UnmappedFolderCompositeView,
2013-01-31 22:40:51 +00:00
2013-03-29 19:17:03 +00:00
initialize: function () {
2013-03-29 19:17:03 +00:00
if (!this.model) {
throw "model is required.";
}
2013-01-31 22:40:51 +00:00
2013-03-29 19:17:03 +00:00
this.collection = new NzbDrone.AddSeries.Existing.UnmappedFolderCollection();
this.refreshItems();
this.listenTo(qualityProfileCollection, 'reset', this.refreshItems, this);
},
2013-03-29 19:17:03 +00:00
refreshItems: function () {
this.collection.importItems(this.model);
},
showCollection: function () {
this.showAndSearch(0);
},
showAndSearch: function (index) {
var model = this.collection.at(index);
if (model) {
var that = this;
var currentIndex = index;
this.addItemView(model, this.getItemView(), index);
console.log('start');
$.when(this.children.findByModel(model).search())
.then(function () {
console.log('done');
that.showAndSearch(currentIndex + 1);
});
}
2013-03-29 19:17:03 +00:00
}
});
2013-03-29 19:17:03 +00:00
});