Permalink
Comparing changes
Open a pull request
- 3 commits
- 6 files changed
- 0 commit comments
- 1 contributor
Unified
Split
Showing
with
55 additions
and 38 deletions.
- +2 −19 commands/download.js
- +16 −2 commands/share.js
- +17 −8 lib/append.js
- +1 −8 lib/dat.js
- +17 −0 lib/ui.js
- +2 −1 package.json
| @@ -2,6 +2,7 @@ var chalk = require('chalk') | ||
| var prettyBytes = require('pretty-bytes') | ||
| var Dat = require('../lib/dat') | ||
| var logger = require('../lib/logger') | ||
| var ui = require('../lib/ui') | ||
| module.exports = function (args) { | ||
| var dat = Dat(args) | ||
| @@ -57,31 +58,13 @@ module.exports = function (args) { | ||
| function printStats () { | ||
| var stats = dat.stats | ||
| var msg = progress(stats.bytesDown / stats.bytesTotal) | ||
| var msg = ui.progress(stats.bytesDown / stats.bytesTotal) | ||
| msg += ' ' + downloadTxt + chalk.bold(stats.filesTotal) + ' files' | ||
| msg += chalk.dim(' (' + prettyBytes(stats.bytesDown) + '/' + prettyBytes(stats.bytesTotal) + ')') | ||
| log.status(msg + '\n', 0) | ||
| } | ||
| } | ||
| function progress (percent) { | ||
| var width = 15 | ||
| var cap = '>' | ||
| var ends = ['[', ']'] | ||
| var spacer = Array(width).join(' ') | ||
| var progressVal = '' | ||
| var val = Math.round(percent * width) | ||
| if (val > 0) { | ||
| progressVal = Array(val).join('=') | ||
| progressVal += cap | ||
| } | ||
| progressVal += spacer | ||
| progressVal = progressVal.substring(0, width) | ||
| return ends[0] + progressVal + ends[1] | ||
| } | ||
| function onerror (err) { | ||
| console.error(err.stack || err) | ||
| process.exit(1) | ||
| @@ -2,12 +2,16 @@ var chalk = require('chalk') | ||
| var prettyBytes = require('pretty-bytes') | ||
| var Dat = require('../lib/dat') | ||
| var logger = require('../lib/logger') | ||
| var ui = require('../lib/ui') | ||
| module.exports = function (args) { | ||
| var dat = Dat(args) | ||
| var log = logger(args) | ||
| var addText = 'Adding ' | ||
| var finalized = false | ||
| var updated = false | ||
| var initFileCount = 0 | ||
| log.status('Starting Dat...\n', 0) | ||
| log.status('Connecting...', 1) | ||
| @@ -28,13 +32,20 @@ module.exports = function (args) { | ||
| dat.on('file-added', printStats) | ||
| dat.on('file-exists', printStats) | ||
| dat.on('append-ready', function () { | ||
| printStats() | ||
| }) | ||
| dat.on('archive-finalized', function () { | ||
| addText = 'Added ' | ||
| finalized = true | ||
| initFileCount = dat.stats.filesTotal | ||
| printStats() | ||
| }) | ||
| dat.on('archive-updated', function () { | ||
| addText = 'Updated ' | ||
| updated = true | ||
| printStats() | ||
| }) | ||
| @@ -56,8 +67,11 @@ module.exports = function (args) { | ||
| function printStats (data) { | ||
| var stats = dat.stats | ||
| var msg = addText + chalk.bold(stats.filesTotal) + ' files' | ||
| msg += chalk.dim(' (' + prettyBytes(stats.bytesTotal) + ')') | ||
| var files = stats.filesTotal | ||
| if (updated) files = files - initFileCount | ||
| var msg = ui.progress(stats.bytesTotal / dat.appendStats.bytes) | ||
| msg += ' ' + addText + chalk.bold(files) + ' files' | ||
| msg += chalk.dim(' (' + prettyBytes(stats.bytesTotal) + '/' + prettyBytes(dat.appendStats.bytes) + ')') | ||
| log.status(msg + '\n', 0) | ||
| } | ||
| } | ||
| @@ -1,15 +1,24 @@ | ||
| var fs = require('fs') | ||
| var path = require('path') | ||
| var countFiles = require('count-files') | ||
| var walker = require('folder-walker') | ||
| var each = require('stream-each') | ||
| module.exports.initialAppend = function (dat, cb) { | ||
| if (dat.resume) { | ||
| dat.db.get('!dat!finalized', function (err, val) { | ||
| if (err || val !== 'true') walkFolder(true) | ||
| else walkFolder(true) // TODO: check mtimes | ||
| }) | ||
| } else { | ||
| walkFolder() | ||
| } | ||
| countFiles(dat.dir, {filter: ignore}, function (err, stats) { | ||
| if (err) cb(err) | ||
| dat.appendStats = stats | ||
| dat.emit('append-ready') | ||
| if (dat.resume) { | ||
| dat.db.get('!dat!finalized', function (err, val) { | ||
| if (err || val !== 'true') walkFolder(true) | ||
| else walkFolder(true) // TODO: check mtimes | ||
| }) | ||
| } else { | ||
| walkFolder() | ||
| } | ||
| }) | ||
| function walkFolder (resume) { | ||
| var fileStream = walker(dat.dir, {filter: ignore}) | ||
| @@ -107,15 +107,8 @@ Dat.prototype.share = function (cb) { | ||
| } | ||
| var watch = yoloWatch(self.dir) | ||
| watch.on('changed', function (name, stat) { | ||
| // TODO: make yolowatch data consistent w/ folder-walker | ||
| watch.on('changed', function (name, data) { | ||
| if (name === self.dir) return | ||
| var data = { | ||
| filepath: name, | ||
| stat: stat, | ||
| relname: path.relative(self.dir, name), | ||
| basename: path.basename(name) | ||
| } | ||
| append.liveAppend(self, data) | ||
| self.emit('archive-updated') | ||
| }) | ||
| @@ -0,0 +1,17 @@ | ||
| module.exports.progress = function (percent) { | ||
| var width = 15 | ||
| var cap = '>' | ||
| var ends = ['[', ']'] | ||
| var spacer = Array(width).join(' ') | ||
| var progressVal = '' | ||
| var val = Math.round(percent * width) | ||
| if (val && val > 0) { | ||
| progressVal = Array(val).join('=') | ||
| progressVal += cap | ||
| } | ||
| progressVal += spacer | ||
| progressVal = progressVal.substring(0, width) | ||
| return ends[0] + progressVal + ends[1] | ||
| } |
| @@ -24,6 +24,7 @@ | ||
| "license": "BSD-3-Clause", | ||
| "dependencies": { | ||
| "chalk": "^1.1.1", | ||
| "count-files": "^1.0.1", | ||
| "datland-swarm-defaults": "^1.0.0", | ||
| "debug": "^2.2.0", | ||
| "discovery-swarm": "^4.0.0", | ||
| @@ -41,7 +42,7 @@ | ||
| "single-line-log": "^1.1.0", | ||
| "speedometer": "^1.0.0", | ||
| "stream-each": "^1.1.0", | ||
| "yolowatch": "^2.1.0" | ||
| "yolowatch": "^2.2.0" | ||
| }, | ||
| "bugs": { | ||
| "url": "https://github.com/maxogden/dat/issues" | ||