webui-aria2/js/ctrls/download.js
2013-01-18 13:08:39 +05:00

83 lines
2.0 KiB
JavaScript

app.controller('DownloadCtrl', [ '$scope', '$rpc', '$utils',
function(scope, rpc, utils) {
scope.utils = utils;
scope.props = [
'gid', 'status', 'totalLength', 'completedLength',
'uploadLength', 'downloadSpeed', 'uploadSpeed',
'errorCode' , 'followedBy', 'belongsTo', 'bitfield',
'infoHash', 'numSeeders', 'pieceLength',
'numPieces', 'connections', 'dir', 'files', 'bittorrent'
];
scope.active = [], scope.waiting = [], scope.stopped = [];
rpc.subscribe('tellActive', [], function(data) {
console.log('got active data');
scope.$apply(function() {
scope.mapDownloads(data[0], scope.active);
});
});
rpc.subscribe('tellWaiting', [0, 100], function(data) {
scope.$apply(function() {
scope.mapDownloads(data[0], scope.waiting);
});
});
rpc.subscribe('tellStopped', [0, 100], function(data) {
scope.$apply(function() {
scope.mapDownloads(data[0], scope.stopped);
});
});
scope.getDownloads = function() {
var rets = scope.active
.concat(scope.waiting).concat(scope.stopped);
window.scope = scope;
return rets;
}
scope.mapDownloads = function(downs, mdowns) {
if (!mdowns) mdowns = [];
for (i = 0; i < mdowns.length; i++) {
if (i >= downs.length) {
// remove the deleted downloads
mdowns.splice(i, mdowns.length - downs.length);
break;
}
if (!mdowns[i]) mdowns[i] = {};
scope.getCtx(downs[i], mdowns[i]);
}
while (i < downs.length) {
mdowns.push(scope.getCtx(downs[i++]));
}
return mdowns;
}
scope.getCtx = function(d, ctx) {
ctx = ctx || {};
_.each(scope.props, function(p) {
ctx[p] = d[p];
});
var path = (d.files[0].path || d.files[0].uris[0].uri);
ctx.name = utils.getFileName(path);
if (d.bittorrent && d.bittorrent.info) {
name = d.bittorrent.info.name;
}
ctx.remainingLength = d.totalLength - d.completedLength;
ctx.eta = ctx.remainingLength / ctx.downloadSpeed;
return ctx;
}
}]);