2013-01-17 07:51:03 +01:00
|
|
|
app.controller('DownloadCtrl', [ '$scope', '$rpc', '$utils',
|
|
|
|
function(scope, rpc, utils) {
|
2013-01-17 17:18:23 +01:00
|
|
|
|
|
|
|
scope.active = [], scope.waiting = [], scope.stopped = [];
|
2013-01-15 09:24:09 +01:00
|
|
|
|
2013-01-22 11:12:40 +01:00
|
|
|
// pause the download
|
|
|
|
// d: the download ctx
|
|
|
|
scope.pause = function(d) {
|
|
|
|
rpc.once('forcePause', [d.gid]);
|
|
|
|
}
|
|
|
|
|
|
|
|
// resume the download
|
|
|
|
// d: the download ctx
|
|
|
|
scope.resume = function(d) {
|
|
|
|
rpc.once('unpause', [d.gid]);
|
|
|
|
}
|
|
|
|
|
|
|
|
// remove the download,
|
|
|
|
// put it in stopped list if active,
|
|
|
|
// otherwise permanantly remove it
|
|
|
|
// d: the download ctx
|
|
|
|
scope.remove = function(d) {
|
|
|
|
var method = d.type == 'stopped' ? 'removeDownloadResult' : 'remove';
|
|
|
|
rpc.once(method, [d.gid]);
|
|
|
|
}
|
2013-01-15 09:24:09 +01:00
|
|
|
|
2013-01-22 11:12:40 +01:00
|
|
|
|
|
|
|
// start filling in the model of active,
|
|
|
|
// waiting and stopped download
|
2013-01-15 09:24:09 +01:00
|
|
|
rpc.subscribe('tellActive', [], function(data) {
|
2013-01-17 07:51:03 +01:00
|
|
|
console.log('got active data');
|
2013-01-15 09:24:09 +01:00
|
|
|
scope.$apply(function() {
|
2013-01-21 15:07:55 +01:00
|
|
|
utils.mergeMap(data[0], scope.active, scope.getCtx);
|
2013-01-15 09:24:09 +01:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2013-01-21 15:07:55 +01:00
|
|
|
rpc.subscribe('tellWaiting', [0, 1000], function(data) {
|
2013-01-15 09:24:09 +01:00
|
|
|
scope.$apply(function() {
|
2013-01-21 15:07:55 +01:00
|
|
|
utils.mergeMap(data[0], scope.waiting, scope.getCtx);
|
2013-01-15 09:24:09 +01:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
|
2013-01-21 15:07:55 +01:00
|
|
|
rpc.subscribe('tellStopped', [0, 1000], function(data) {
|
2013-01-15 09:24:09 +01:00
|
|
|
scope.$apply(function() {
|
2013-01-21 15:07:55 +01:00
|
|
|
utils.mergeMap(data[0], scope.stopped, scope.getCtx);
|
2013-01-15 09:24:09 +01:00
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2013-01-22 11:12:40 +01:00
|
|
|
// actual downloads used by the view
|
2013-01-15 09:24:09 +01:00
|
|
|
scope.getDownloads = function() {
|
2013-01-22 11:12:40 +01:00
|
|
|
return scope.active
|
2013-01-17 17:18:23 +01:00
|
|
|
.concat(scope.waiting).concat(scope.stopped);
|
2013-01-15 09:24:09 +01:00
|
|
|
}
|
2013-01-19 18:46:22 +01:00
|
|
|
|
2013-01-22 11:12:40 +01:00
|
|
|
// convert the donwload form aria2 to once used by the view,
|
|
|
|
// minor additions of some fields and checks
|
2013-01-17 17:18:23 +01:00
|
|
|
scope.getCtx = function(d, ctx) {
|
|
|
|
ctx = ctx || {};
|
2013-01-19 18:46:22 +01:00
|
|
|
|
2013-01-22 08:53:30 +01:00
|
|
|
_.each([
|
|
|
|
'totalLength', 'completedLength', 'uploadLength',
|
|
|
|
'pieceLength', 'downloadSpeed', 'uploadSpeed',
|
|
|
|
'status', 'gid', 'bitfield', 'numPieces', 'connections'
|
|
|
|
], function(e) {
|
|
|
|
ctx[e] = d[e];
|
|
|
|
});
|
2013-01-19 18:46:22 +01:00
|
|
|
|
|
|
|
|
|
|
|
var percentage = (d.completedLength / d.totalLength)*100;
|
|
|
|
percentage = percentage.toFixed(2);
|
|
|
|
if(!percentage) percentage = 0;
|
|
|
|
|
|
|
|
ctx.percentage = percentage;
|
2013-01-22 11:12:40 +01:00
|
|
|
ctx.dir = d.dir.replace(/\\/g, '/');
|
|
|
|
ctx.eta = (d.totalLength-d.completedLength) / d.downloadSpeed;
|
|
|
|
|
|
|
|
var type = d.status;
|
|
|
|
if (type == "paused") type = "waiting";
|
|
|
|
if (["error", "removed", "complete"].indexOf(type) != -1)
|
|
|
|
type = "stopped";
|
|
|
|
ctx.type = type;
|
|
|
|
|
|
|
|
ctx.files = _.map(d.files, function(e) {
|
|
|
|
e.path = e.path.replace(/\\/g, '/').replace(ctx.dir, '.');
|
|
|
|
return e;
|
|
|
|
});
|
2013-01-17 17:18:23 +01:00
|
|
|
|
|
|
|
if (d.bittorrent && d.bittorrent.info) {
|
2013-01-19 18:46:22 +01:00
|
|
|
ctx.name = d.bittorrent.info.name;
|
|
|
|
}
|
|
|
|
else {
|
|
|
|
ctx.name = utils.getFileName(ctx.files[0].path || ctx.files[0].uris[0].uri);
|
2013-01-17 17:18:23 +01:00
|
|
|
}
|
|
|
|
|
2013-01-19 18:46:22 +01:00
|
|
|
ctx.booleans = {
|
|
|
|
is_error: ctx.status === "error",
|
|
|
|
is_complete: ctx.status === "complete",
|
|
|
|
is_removed: ctx.status === "removed",
|
|
|
|
has_settings: ["active", "waiting", "paused"].indexOf(ctx.status) != -1,
|
|
|
|
can_pause: type == "active",
|
|
|
|
can_play: type == "waiting",
|
|
|
|
bittorrent: !!d.bittorrent,
|
|
|
|
can_restart: type == "stopped"
|
|
|
|
};
|
2013-01-15 09:24:09 +01:00
|
|
|
|
2013-01-17 17:18:23 +01:00
|
|
|
return ctx;
|
2013-01-15 09:24:09 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
}]);
|