mirror of
https://github.com/Sonarr/Sonarr.git
synced 2024-12-23 02:05:27 +02:00
130 lines
4.4 KiB
JavaScript
130 lines
4.4 KiB
JavaScript
'use strict';
|
|
define(
|
|
[
|
|
'underscore',
|
|
'vent',
|
|
'marionette',
|
|
'Rename/RenamePreviewCollection',
|
|
'Rename/RenamePreviewCollectionView',
|
|
'Rename/RenamePreviewEmptyCollectionView',
|
|
'Shared/LoadingView',
|
|
'Commands/CommandController'
|
|
], function (_, vent, Marionette, RenamePreviewCollection, RenamePreviewCollectionView, EmptyCollectionView, LoadingView, CommandController) {
|
|
|
|
return Marionette.Layout.extend({
|
|
template: 'Rename/RenamePreviewLayoutTemplate',
|
|
|
|
regions: {
|
|
renamePreviews : '#rename-previews'
|
|
},
|
|
|
|
ui: {
|
|
pathInfo : '.x-path-info',
|
|
renameAll : '.x-rename-all',
|
|
checkboxIcon: '.x-rename-all-button i'
|
|
},
|
|
|
|
events: {
|
|
'click .x-organize' : '_organizeFiles',
|
|
'change .x-rename-all': '_toggleAll'
|
|
},
|
|
|
|
initialize: function (options) {
|
|
this.model = options.series;
|
|
this.seasonNumber = options.seasonNumber;
|
|
|
|
var viewOptions = {};
|
|
viewOptions.seriesId = this.model.id;
|
|
viewOptions.seasonNumber = this.seasonNumber;
|
|
|
|
this.collection = new RenamePreviewCollection(viewOptions);
|
|
this.listenTo(this.collection, 'sync', this._showPreviews);
|
|
this.listenTo(this.collection, 'rename:select', this._itemRenameChanged);
|
|
|
|
this.collection.fetch();
|
|
},
|
|
|
|
onRender: function() {
|
|
this.renamePreviews.show(new LoadingView());
|
|
},
|
|
|
|
_showPreviews: function () {
|
|
if (this.collection.length === 0) {
|
|
this.ui.pathInfo.hide();
|
|
this.renamePreviews.show(new EmptyCollectionView());
|
|
return;
|
|
}
|
|
|
|
this.ui.pathInfo.show();
|
|
this.collection.invoke('set', { rename: true });
|
|
this.renamePreviews.show(new RenamePreviewCollectionView({ collection: this.collection }));
|
|
},
|
|
|
|
_organizeFiles: function () {
|
|
if (this.collection.length === 0) {
|
|
vent.trigger(vent.Commands.CloseModalCommand);
|
|
}
|
|
|
|
var files = _.map(this.collection.where({ rename: true }), function (model) {
|
|
return model.get('episodeFileId');
|
|
});
|
|
|
|
if (files.length === 0) {
|
|
vent.trigger(vent.Commands.CloseModalCommand);
|
|
return;
|
|
}
|
|
|
|
if (this.seasonNumber) {
|
|
CommandController.Execute('renameFiles', {
|
|
name : 'renameFiles',
|
|
seriesId : this.model.id,
|
|
seasonNumber: this.seasonNumber,
|
|
files : files
|
|
});
|
|
}
|
|
|
|
else {
|
|
CommandController.Execute('renameFiles', {
|
|
name : 'renameFiles',
|
|
seriesId : this.model.id,
|
|
seasonNumber: -1,
|
|
files : files
|
|
});
|
|
}
|
|
|
|
vent.trigger(vent.Commands.CloseModalCommand);
|
|
},
|
|
|
|
_setCheckedState: function (checked) {
|
|
if (checked) {
|
|
this.ui.checkboxIcon.addClass('icon-check');
|
|
this.ui.checkboxIcon.removeClass('icon-check-empty');
|
|
}
|
|
|
|
else {
|
|
this.ui.checkboxIcon.addClass('icon-check-empty');
|
|
this.ui.checkboxIcon.removeClass('icon-check');
|
|
}
|
|
},
|
|
|
|
_toggleAll: function () {
|
|
var checked = this.ui.renameAll.prop('checked');
|
|
this._setCheckedState(checked);
|
|
|
|
this.collection.each(function (model) {
|
|
model.trigger('rename:select', model, checked);
|
|
});
|
|
},
|
|
|
|
_itemRenameChanged: function (model, checked) {
|
|
var allChecked = this.collection.all(function (m) {
|
|
return m.get('rename');
|
|
});
|
|
|
|
if (!checked || allChecked) {
|
|
this._setCheckedState(checked);
|
|
}
|
|
}
|
|
});
|
|
});
|