@jimpick/dat-next
Version:
Dat is the package manager for data. Easily share and version control data.
75 lines (67 loc) • 2.73 kB
JavaScript
var path = require('path')
var output = require('neat-log/output')
var pretty = require('prettier-bytes')
var chalk = require('chalk')
var downloadUI = require('./components/download')
var importUI = require('./components/import-progress')
var warningsUI = require('./components/warnings')
var networkUI = require('./components/network')
var sourcesUI = require('./components/sources')
var keyEl = require('./elements/key')
var pluralize = require('./elements/pluralize')
var version = require('./elements/version')
var pkg = require('../../package.json')
module.exports = archiveUI
function archiveUI (state) {
if (!state.dat) return 'Starting Dat program...'
if (!state.writable && !state.hasContent) return 'Connecting to dat network...'
if (!state.warnings) state.warnings = []
var dat = state.dat
var stats = dat.stats ? dat.stats.get() : {} // FIXME
var title = (state.dat.resumed) ? '' : `Created new dat in ${dat.path}${path.sep}.dat\n`
var progressView
if (state.writable || state.opts.showKey) {
title += `${keyEl(dat.key)}\n`
}
if (dat.archive) {
if (dat.archive.db) {
title += `Format: multiwriter`
if (state.authorized) {
title += ` (${chalk.green('authorized')})`
}
if (state.authorized === false) {
var localKey = dat.archive.db.local.key.toString('hex')
title += ` (${chalk.red('not authorized')})\n`
title += `Local key: ${chalk.red(localKey)}`
}
title += '\n'
} else {
title += `Format: legacy (${state.writable ? 'writable' : 'read-only'})\n`
}
}
if (state.title) title += state.title
else if (state.writable) title += 'Sharing dat'
else title += 'Downloading dat'
if (state.opts.sparse) title += `: ${state.opts.selectedFiles.length} ${pluralize('file', state.opts.selectedFiles.length)} (${pretty(state.selectedByteLength)})`
else if (stats.version) title += `: ${stats.files} ${pluralize('file', stats.file)} (${pretty(stats.byteLength)})`
else if (stats.version === 0) title += ': (empty archive)'
if (state.http && state.http.listening) title += `\nServing files over http at http://localhost:${state.http.port}`
if (!state.writable || state.opts.cloning) {
progressView = downloadUI(state)
} else {
if (state.opts.import) {
progressView = importUI(state)
} else {
progressView = 'Not importing files.' // TODO: ?
}
}
return output(`
${version(pkg.version)}
${title}
${state.joinNetwork ? '\n' + networkUI(state) : ''}
${progressView}
${state.opts.sources ? sourcesUI(state) : ''}
${state.warnings ? warningsUI(state) : ''}
${state.exiting ? 'Exiting the Dat program...' : chalk.dim('Ctrl+C to Exit')}
`)
}