83 lines
2.0 KiB
JavaScript
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;
|
|
}
|
|
|
|
}]);
|