|
|
|
|
'use strict';
|
|
|
|
|
define(
|
|
|
|
|
[
|
|
|
|
|
'marionette',
|
|
|
|
|
'Shared/Actioneer'
|
|
|
|
|
], function (Marionette, Actioneer) {
|
|
|
|
|
return Marionette.ItemView.extend({
|
|
|
|
|
template: 'Series/Details/SeasonMenu/ItemViewTemplate',
|
|
|
|
|
tagName : 'span',
|
|
|
|
|
|
|
|
|
|
ui: {
|
|
|
|
|
seasonMonitored: '.x-season-monitored'
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
events: {
|
|
|
|
|
'click .x-season-monitored': '_seasonMonitored',
|
|
|
|
|
'click .x-text': '_gotoSeason'
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
initialize: function (options) {
|
|
|
|
|
|
|
|
|
|
if (!options.episodeCollection) {
|
|
|
|
|
throw 'episodeCollection is needed';
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
this.episodeCollection = options.episodeCollection.bySeason(this.model.get('seasonNumber'));
|
|
|
|
|
|
|
|
|
|
var allDownloaded = _.all(this.episodeCollection.models, function (model) {
|
|
|
|
|
var hasFile = model.get('hasFile');
|
|
|
|
|
return hasFile;
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
this.model.set({
|
|
|
|
|
allFilesDownloaded: allDownloaded
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
this.listenTo(this.model, 'sync', function () {
|
|
|
|
|
this.render();
|
|
|
|
|
}, this);
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
onRender: function () {
|
|
|
|
|
this._setSeasonMonitoredState();
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
_seasonSearch: function () {
|
|
|
|
|
Actioneer.ExecuteCommand({
|
|
|
|
|
command : 'seasonSearch',
|
|
|
|
|
properties : {
|
|
|
|
|
seriesId : this.model.get('seriesId'),
|
|
|
|
|
seasonNumber: this.model.get('seasonNumber')
|
|
|
|
|
},
|
|
|
|
|
element : this.ui.seasonSearch,
|
|
|
|
|
errorMessage: 'Search for season {0} failed'.format(this.model.get('seasonNumber')),
|
|
|
|
|
startMessage: 'Search for season {0} started'.format(this.model.get('seasonNumber'))
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
_seasonMonitored: function (e) {
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
|
|
|
|
|
var name = 'monitored';
|
|
|
|
|
this.model.set(name, !this.model.get(name));
|
|
|
|
|
|
|
|
|
|
Actioneer.SaveModel({
|
|
|
|
|
context : this,
|
|
|
|
|
element : this.ui.seasonMonitored
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
_setSeasonMonitoredState: function () {
|
|
|
|
|
this.ui.seasonMonitored.removeClass('icon-spinner icon-spin');
|
|
|
|
|
|
|
|
|
|
if (this.model.get('monitored')) {
|
|
|
|
|
this.ui.seasonMonitored.addClass('icon-bookmark');
|
|
|
|
|
this.ui.seasonMonitored.removeClass('icon-bookmark-empty');
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
this.ui.seasonMonitored.addClass('icon-bookmark-empty');
|
|
|
|
|
this.ui.seasonMonitored.removeClass('icon-bookmark');
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
_gotoSeason: function () {
|
|
|
|
|
window.location.hash = '#season-' + this.model.get('seasonNumber');
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
});
|