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.
98 lines
3.1 KiB
98 lines
3.1 KiB
'use strict';
|
|
define(
|
|
[
|
|
'underscore',
|
|
'backbone',
|
|
'backbone.pageable',
|
|
'Series/SeriesModel',
|
|
'api!series',
|
|
'Mixins/AsFilteredCollection',
|
|
'Mixins/AsSortedCollection',
|
|
'Mixins/AsPersistedStateCollection',
|
|
'moment'
|
|
], function (_, Backbone, PageableCollection, SeriesModel, SeriesData, AsFilteredCollection, AsSortedCollection, AsPersistedStateCollection, moment) {
|
|
var Collection = PageableCollection.extend({
|
|
url : window.NzbDrone.ApiRoot + '/series',
|
|
model: SeriesModel,
|
|
tableName: 'series',
|
|
|
|
state: {
|
|
sortKey : 'sortTitle',
|
|
order : -1,
|
|
pageSize : 100000,
|
|
secondarySortKey : 'sortTitle',
|
|
secondarySortOrder : -1
|
|
},
|
|
|
|
mode: 'client',
|
|
|
|
save: function () {
|
|
var self = this;
|
|
|
|
var proxy = _.extend( new Backbone.Model(),
|
|
{
|
|
id: '',
|
|
|
|
url: self.url + '/editor',
|
|
|
|
toJSON: function()
|
|
{
|
|
return self.filter(function (model) {
|
|
return model.edited;
|
|
});
|
|
}
|
|
});
|
|
|
|
this.listenTo(proxy, 'sync', function (proxyModel, models) {
|
|
this.add(models, { merge: true });
|
|
this.trigger('save', this);
|
|
});
|
|
|
|
return proxy.save();
|
|
},
|
|
|
|
// Filter Modes
|
|
filterModes: {
|
|
'all' : [null, null],
|
|
'continuing' : ['status', 'continuing'],
|
|
'ended' : ['status', 'ended'],
|
|
'monitored' : ['monitored', true]
|
|
},
|
|
|
|
sortMappings: {
|
|
'title' : { sortKey: 'sortTitle' },
|
|
'nextAiring' : {
|
|
sortValue: function (model, attr, order) {
|
|
var nextAiring = model.get(attr);
|
|
|
|
if (nextAiring) {
|
|
return moment(nextAiring).unix();
|
|
}
|
|
|
|
if (order === 1) {
|
|
return 0;
|
|
}
|
|
|
|
return Number.MAX_VALUE;
|
|
}
|
|
},
|
|
|
|
percentOfEpisodes: {
|
|
sortValue: function (model, attr) {
|
|
var percentOfEpisodes = model.get(attr);
|
|
var episodeCount = model.get('episodeCount');
|
|
|
|
return percentOfEpisodes + episodeCount / 1000000;
|
|
}
|
|
|
|
}
|
|
}
|
|
});
|
|
|
|
Collection = AsFilteredCollection.call(Collection);
|
|
Collection = AsSortedCollection.call(Collection);
|
|
Collection = AsPersistedStateCollection.call(Collection);
|
|
|
|
return new Collection(SeriesData, { full: true });
|
|
});
|