| var syrup = require('stf-syrup') |
| var path = require('path') |
| |
| var logger = require('../../../util/logger') |
| var wire = require('../../../wire') |
| var wireutil = require('../../../wire/util') |
| |
| module.exports = syrup.serial() |
| .dependency(require('../support/adb')) |
| .dependency(require('../support/router')) |
| .dependency(require('../support/push')) |
| .dependency(require('../support/storage')) |
| .define(function(options, adb, router, push, storage) { |
| var log = logger.createLogger('device:plugins:filesystem') |
| var plugin = Object.create(null) |
| |
| plugin.retrieve = function(file) { |
| log.info('Retrieving file "%s"', file) |
| |
| return adb.stat(options.serial, file) |
| .then(function(stats) { |
| return adb.pull(options.serial, file) |
| .then(function(transfer) { |
| // We may have add new storage plugins for various file types |
| // in the future, and add proper detection for the mimetype. |
| // But for now, let's just use application/octet-stream for |
| // everything like it's 2001. |
| return storage.store('blob', transfer, { |
| filename: path.basename(file) |
| , contentType: 'application/octet-stream' |
| , knownLength: stats.size |
| }) |
| }) |
| }) |
| } |
| |
| router.on(wire.FileSystemGetMessage, function(channel, message) { |
| var reply = wireutil.reply(options.serial) |
| plugin.retrieve(message.file) |
| .then(function(file) { |
| push.send([ |
| channel |
| , reply.okay('success', file) |
| ]) |
| }) |
| .catch(function(err) { |
| log.warn('Unable to retrieve "%s"', message.file, err.stack) |
| push.send([ |
| channel |
| , reply.fail(err.message) |
| ]) |
| }) |
| }) |
| |
| router.on(wire.FileSystemListMessage, function(channel, message) { |
| var reply = wireutil.reply(options.serial) |
| adb.readdir(options.serial, message.dir) |
| .then(function(files) { |
| push.send([ |
| channel |
| , reply.okay('success', files) |
| ]) |
| }) |
| .catch(function(err) { |
| log.warn('Unable to list directory "%s"', message.dir, err.stack) |
| push.send([ |
| channel |
| , reply.fail(err.message) |
| ]) |
| }) |
| }) |
| |
| return plugin |
| }) |