define(['jquery', 'backbone', 'underscore', 'app', 'utils/apitypes'], function($, Backbone, _, App, Api) { 'use strict'; var Finished = [Api.DownloadStatus.Finished, Api.DownloadStatus.Skipped]; var Failed = [Api.DownloadStatus.Failed, Api.DownloadStatus.Aborted, Api.DownloadStatus.TempOffline, Api.DownloadStatus.Offline]; // Unfinished - Other return Backbone.Model.extend({ idAttribute: 'fid', defaults: { fid: -1, name: null, package: -1, owner: -1, size: -1, status: -1, media: -1, added: -1, fileorder: -1, download: null, // UI attributes selected: false, visible: true, progress: 0, eta: 0 }, // Model Constructor initialize: function() { }, fetch: function(options) { options = App.apiRequest( 'getFileInfo', {fid: this.get('fid')}, options); return Backbone.Model.prototype.fetch.call(this, options); }, destroy: function(options) { // also not working when using data options = App.apiRequest( 'deleteFiles/[' + this.get('fid') + ']', null, options); options.method = 'post'; return Backbone.Model.prototype.destroy.call(this, options); }, // Does not send a request to the server destroyLocal: function(options) { this.trigger('destroy', this, this.collection, options); }, restart: function(options) { options = App.apiRequest( 'restartFile', {fid: this.get('fid')}, options); return $.ajax(options); }, // Any time a model attribute is set, this method is called validate: function(attrs) { }, setDownloadStatus: function(status) { if (this.isDownload()) this.get('download').status = status; }, isDownload: function() { return this.has('download'); }, isFinished: function() { return _.indexOf(Finished, this.get('download').status) > -1; }, isUnfinished: function() { return _.indexOf(Finished, this.get('download').status) === -1 && _.indexOf(Failed, this.get('download').status) === -1; }, isFailed: function() { return _.indexOf(Failed, this.get('download').status) > -1; } }); });