You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
139 lines
4.0 KiB
139 lines
4.0 KiB
var _ = require('underscore');
|
|
var $ = require('jquery');
|
|
var Marionette = require('marionette');
|
|
var vent = require('vent');
|
|
var RootFolders = require('../AddSeries/RootFolders/RootFolderCollection');
|
|
|
|
module.exports = Marionette.ItemView.extend({
|
|
template : 'SeasonPass/SeasonPassFooterViewTemplate',
|
|
|
|
ui : {
|
|
seriesMonitored : '.x-series-monitored',
|
|
monitor : '.x-monitor',
|
|
selectedCount : '.x-selected-count',
|
|
container : '.series-editor-footer',
|
|
actions : '.x-action',
|
|
indicator : '.x-indicator',
|
|
indicatorIcon : '.x-indicator-icon'
|
|
},
|
|
|
|
events : {
|
|
'click .x-update' : '_update'
|
|
},
|
|
|
|
initialize : function(options) {
|
|
this.seriesCollection = options.collection;
|
|
|
|
RootFolders.fetch().done(function() {
|
|
RootFolders.synced = true;
|
|
});
|
|
|
|
this.editorGrid = options.editorGrid;
|
|
this.listenTo(this.seriesCollection, 'backgrid:selected', this._updateInfo);
|
|
},
|
|
|
|
onRender : function() {
|
|
this._updateInfo();
|
|
},
|
|
|
|
_update : function() {
|
|
var self = this;
|
|
var selected = this.editorGrid.getSelectedModels();
|
|
var seriesMonitored = this.ui.seriesMonitored.val();
|
|
var monitoringOptions;
|
|
|
|
_.each(selected, function(model) {
|
|
if (seriesMonitored === 'true') {
|
|
model.set('monitored', true);
|
|
} else if (seriesMonitored === 'false') {
|
|
model.set('monitored', false);
|
|
}
|
|
|
|
monitoringOptions = self._getMonitoringOptions(model);
|
|
model.set('addOptions', monitoringOptions);
|
|
});
|
|
|
|
var promise = $.ajax({
|
|
url : window.NzbDrone.ApiRoot + '/seasonpass',
|
|
type : 'POST',
|
|
data : JSON.stringify({
|
|
series : _.map(selected, function (model) {
|
|
return model.toJSON();
|
|
}),
|
|
monitoringOptions : monitoringOptions
|
|
})
|
|
});
|
|
|
|
this.ui.indicator.show();
|
|
|
|
promise.always(function () {
|
|
self.ui.indicator.hide();
|
|
});
|
|
|
|
promise.done(function () {
|
|
self.seriesCollection.trigger('seasonpass:saved');
|
|
});
|
|
},
|
|
|
|
_updateInfo : function() {
|
|
var selected = this.editorGrid.getSelectedModels();
|
|
var selectedCount = selected.length;
|
|
|
|
this.ui.selectedCount.html('{0} series selected'.format(selectedCount));
|
|
|
|
if (selectedCount === 0) {
|
|
this.ui.actions.attr('disabled', 'disabled');
|
|
} else {
|
|
this.ui.actions.removeAttr('disabled');
|
|
}
|
|
},
|
|
|
|
_getMonitoringOptions : function(model) {
|
|
var monitor = this.ui.monitor.val();
|
|
var lastSeason = _.max(model.get('seasons'), 'seasonNumber');
|
|
var firstSeason = _.min(_.reject(model.get('seasons'), { seasonNumber : 0 }), 'seasonNumber');
|
|
|
|
if (monitor === 'noChange') {
|
|
return null;
|
|
}
|
|
|
|
model.setSeasonPass(firstSeason.seasonNumber);
|
|
|
|
var options = {
|
|
ignoreEpisodesWithFiles : false,
|
|
ignoreEpisodesWithoutFiles : false
|
|
};
|
|
|
|
if (monitor === 'all') {
|
|
return options;
|
|
}
|
|
|
|
else if (monitor === 'future') {
|
|
options.ignoreEpisodesWithFiles = true;
|
|
options.ignoreEpisodesWithoutFiles = true;
|
|
}
|
|
|
|
else if (monitor === 'latest') {
|
|
model.setSeasonPass(lastSeason.seasonNumber);
|
|
}
|
|
|
|
else if (monitor === 'first') {
|
|
model.setSeasonPass(lastSeason.seasonNumber + 1);
|
|
model.setSeasonMonitored(firstSeason.seasonNumber);
|
|
}
|
|
|
|
else if (monitor === 'missing') {
|
|
options.ignoreEpisodesWithFiles = true;
|
|
}
|
|
|
|
else if (monitor === 'existing') {
|
|
options.ignoreEpisodesWithoutFiles = true;
|
|
}
|
|
|
|
else if (monitor === 'none') {
|
|
model.setSeasonPass(lastSeason.seasonNumber + 1);
|
|
}
|
|
|
|
return options;
|
|
}
|
|
}); |