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.
Lidarr/src/UI/Series/SeriesCollection.js

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 });
});