@jimpick/dat-next
Version:
Dat is the package manager for data. Easily share and version control data.
66 lines (56 loc) • 2.09 kB
JavaScript
var output = require('neat-log/output')
var pretty = require('prettier-bytes')
var bar = require('progress-string')
var cliTruncate = require('cli-truncate')
module.exports = importUI
function importUI (state) {
var watch = state.opts.watch
var importState = state.importer
var indexSpeed = importState.indexSpeed ? `(${pretty(importState.indexSpeed)}/s)` : ''
if (importState.count && !importState.count.done) {
// dry run in progress
if (!importState.count.files) return 'Checking for file updates...'
return output(`
Metadata created for ${importState.putDone.files} of ${importState.count.files} files ${indexSpeed}
(Calculating file count...)
${fileImport(importState.fileImport)}
`)
} else if (importState.putDone.files >= importState.count.files) {
// Initial import done
if (!watch) return 'Archive metadata updated for all files.'
return liveImport()
}
var total = importState.count.bytes
var totalBar = bar({
total: total,
style: function (a, b) {
return `[${a}${b}] ${(100 * importState.importedBytes / total).toFixed(0)}%`
}
})
return output(`
Creating metadata for ${importState.count.files} files ${indexSpeed}
${totalBar(importState.importedBytes)}
${fileImport(importState.fileImport)}
`)
function liveImport () {
// Live import
var imports = importState.liveImports.slice(1).slice(-7)
return output(`
Watching for file updates
${imports.reverse().map(function (file) { return fileImport(file) }).join('\n')}
`)
}
function fileImport (file) {
if (!file) return ''
if (file.type === 'del') return `DEL: ${file.src.name}`
var total = file.src.stat.size
var name = file.dst.name.substr(1) // remove '/' at start
var size
// >500 mb show progress
if (total < 5e8 || !file.progress) size = `(${pretty(total)})`
else size = `(${pretty(file.progress)} / ${pretty(total)})`
return output(`
ADD: ${cliTruncate(name, process.stdout.columns - 7 - size.length, {position: 'start'})} ${size}
`)
}
}