From 5ec45b0aac69c5c78f12a4216b9dad2c9d57c6c5 Mon Sep 17 00:00:00 2001 From: hamza zia Date: Tue, 22 Jan 2013 15:12:40 +0500 Subject: [PATCH] added basic download control functionally in angular --- angular.html | 6 ++-- js/ctrls/download.js | 65 ++++++++++++++++++++++++++---------------- js/services/rpc/rpc.js | 6 ++++ 3 files changed, 49 insertions(+), 28 deletions(-) diff --git a/angular.html b/angular.html index a724aa7..33abb58 100644 --- a/angular.html +++ b/angular.html @@ -153,11 +153,11 @@
- - + + - + diff --git a/js/ctrls/download.js b/js/ctrls/download.js index cc6bf59..0900cd7 100644 --- a/js/ctrls/download.js +++ b/js/ctrls/download.js @@ -1,16 +1,32 @@ app.controller('DownloadCtrl', [ '$scope', '$rpc', '$utils', function(scope, rpc, 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 = []; + // 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]); + } + + + // start filling in the model of active, + // waiting and stopped download rpc.subscribe('tellActive', [], function(data) { console.log('got active data'); scope.$apply(function() { @@ -31,13 +47,14 @@ function(scope, rpc, utils) { }); }); + // actual downloads used by the view scope.getDownloads = function() { - var downs = scope.active + return scope.active .concat(scope.waiting).concat(scope.stopped); - - return downs; } + // convert the donwload form aria2 to once used by the view, + // minor additions of some fields and checks scope.getCtx = function(d, ctx) { ctx = ctx || {}; @@ -49,21 +66,25 @@ function(scope, rpc, utils) { ctx[e] = d[e]; }); - ctx.dir = d.dir.replace(/\\/g, '/'); - ctx.files = _.map(d.files, function(e) { - e.path = e.path.replace(/\\/g, '/').replace(ctx.dir, '.'); - return e; - }); - - - - ctx.eta = (d.totalLength-d.completedLength) / d.downloadSpeed; var percentage = (d.completedLength / d.totalLength)*100; percentage = percentage.toFixed(2); if(!percentage) percentage = 0; ctx.percentage = percentage; + 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; + }); if (d.bittorrent && d.bittorrent.info) { ctx.name = d.bittorrent.info.name; @@ -72,12 +93,6 @@ function(scope, rpc, utils) { ctx.name = utils.getFileName(ctx.files[0].path || ctx.files[0].uris[0].uri); } - var type = d.status; - if (type == "paused") type = "waiting"; - if (["error", "removed", "complete"].indexOf(type) != -1) - type = "stopped"; - ctx.type = type; - ctx.booleans = { is_error: ctx.status === "error", is_complete: ctx.status === "complete", diff --git a/js/services/rpc/rpc.js b/js/services/rpc/rpc.js index 269737d..0f9874e 100644 --- a/js/services/rpc/rpc.js +++ b/js/services/rpc/rpc.js @@ -68,6 +68,9 @@ app.factory('$rpc', ['$syscall', '$globalTimeout', function(syscall, time) { }, // syscall is done only once once: function(name, params, cb) { + cb = cb || angular.noop; + params = params || []; + subscriptions.push({ once: true, name: 'aria2.' + name, @@ -81,6 +84,9 @@ app.factory('$rpc', ['$syscall', '$globalTimeout', function(syscall, time) { // callback is called each time with updated syscall data // after the global timeout subscribe: function(name, params, cb) { + cb = cb || angular.noop; + params = params || []; + var handle = { once: false, name: 'aria2.' + name,