From 1b9c62a50ff21d65600a446f907778ec4fd4ab0a Mon Sep 17 00:00:00 2001 From: Juan Cruz Viotti Date: Mon, 22 Dec 2014 15:40:57 -0400 Subject: [PATCH] Completely decouple client code from server module --- lib/actions/os.coffee | 23 ++++++++++++++++------- lib/resin/models/index.coffee | 1 + lib/resin/models/os.coffee | 15 +++++++++++++++ lib/ui/patterns/patterns.coffee | 24 ------------------------ 4 files changed, 32 insertions(+), 31 deletions(-) create mode 100644 lib/resin/models/os.coffee diff --git a/lib/actions/os.coffee b/lib/actions/os.coffee index 2eecf1fb..fb053842 100644 --- a/lib/actions/os.coffee +++ b/lib/actions/os.coffee @@ -2,14 +2,14 @@ _ = require('lodash') async = require('async') path = require('path') mkdirp = require('mkdirp') -url = require('url') +ProgressBar = require('progress') resin = require('../resin') connection = require('../connection/connection') -ui = require('../ui') log = require('../log/log') permissions = require('../permissions/permissions') errors = require('../errors/errors') cache = require('../cache/cache') +resin = require('../resin') exports.download = (params, options) -> networkParams = @@ -34,13 +34,22 @@ exports.download = (params, options) -> (parameters, callback) -> parameters.appId = params.id - query = url.format(query: parameters) - downloadUrl = url.resolve(resin.settings.get('urls.download'), query) + bar = null + received = 0 - return callback(null, downloadUrl) + resin.models.os.download parameters, outputFile, callback, (state) -> - (downloadUrl, callback) -> - ui.patterns.downloadFile(downloadUrl, outputFile, callback) + # TODO: Allow quieting this progress bar + bar ?= new ProgressBar 'Downloading device OS [:bar] :percent :etas', + complete: '=' + incomplete: ' ' + width: 40 + total: state.total + + return if bar.complete or not state? + + bar.tick(state.received - received) + received = state.received ], (error) -> errors.handle(error) if error? diff --git a/lib/resin/models/index.coffee b/lib/resin/models/index.coffee index 410bb84d..0bc9a394 100644 --- a/lib/resin/models/index.coffee +++ b/lib/resin/models/index.coffee @@ -3,3 +3,4 @@ module.exports = device: require('./device') key: require('./key') environmentVariables: require('./environment-variables') + os: require('./os') diff --git a/lib/resin/models/os.coffee b/lib/resin/models/os.coffee new file mode 100644 index 00000000..c190f2ed --- /dev/null +++ b/lib/resin/models/os.coffee @@ -0,0 +1,15 @@ +url = require('url') +fs = require('fs') +server = require('../server/server') +settings = require('../settings') + +exports.download = (parameters, destination, callback, onProgress) -> + query = url.format(query: parameters) + downloadUrl = url.resolve(settings.get('urls.download'), query) + + server.request + method: 'GET' + url: downloadUrl + pipe: fs.createWriteStream(destination) + , callback + , onProgress diff --git a/lib/ui/patterns/patterns.coffee b/lib/ui/patterns/patterns.coffee index 7e87903a..1b15d44d 100644 --- a/lib/ui/patterns/patterns.coffee +++ b/lib/ui/patterns/patterns.coffee @@ -18,27 +18,3 @@ exports.remove = (name, confirmAttribute, deleteFunction, outerCallback) -> deleteFunction(callback) ], outerCallback) - -exports.downloadFile = (url, dest, callback) -> - bar = null - received = 0 - - resin.server.request - method: 'GET' - url: url - pipe: fs.createWriteStream(dest) - , (error) -> - return callback(error) - , (state) -> - - # TODO: Allow quieting this progress bar - bar ?= new ProgressBar 'Downloading device OS [:bar] :percent :etas', - complete: '=' - incomplete: ' ' - width: 40 - total: state.total - - return if bar.complete or not state? - - bar.tick(state.received - received) - received = state.received