mirror of
https://github.com/advplyr/audiobookshelf.git
synced 2025-07-24 17:25:31 +02:00
.devcontainer
.github
.vscode
build
client
images
server
controllers
finders
libs
managers
models
objects
providers
routers
scanner
utils
generators
migrations
parsers
queries
areEquivalent.js
constants.js
downloadWorker.js
ffmpegHelpers.js
fileUtils.js
globals.js
htmlEntities.js
htmlSanitizer.js
index.js
libraryHelpers.js
notifications.js
podcastUtils.js
probeWorker.js
prober.js
scandir.js
toneHelpers.js
toneProber.js
zipHelpers.js
Auth.js
Database.js
Logger.js
Server.js
SocketAuthority.js
Watcher.js
test
.dockerignore
.gitattributes
.gitignore
Dockerfile
LICENSE
custom-metadata-provider-specification.yaml
docker-compose.yml
docker-template.xml
index.js
package-lock.json
package.json
prod.js
readme.md
52 lines
1.7 KiB
JavaScript
52 lines
1.7 KiB
JavaScript
const Logger = require('../Logger')
|
|
const archiver = require('../libs/archiver')
|
|
|
|
module.exports.zipDirectoryPipe = (path, filename, res) => {
|
|
return new Promise((resolve, reject) => {
|
|
// create a file to stream archive data to
|
|
res.attachment(filename)
|
|
|
|
const archive = archiver('zip', {
|
|
zlib: { level: 9 } // Sets the compression level.
|
|
})
|
|
|
|
// listen for all archive data to be written
|
|
// 'close' event is fired only when a file descriptor is involved
|
|
res.on('close', () => {
|
|
Logger.info(archive.pointer() + ' total bytes')
|
|
Logger.debug('archiver has been finalized and the output file descriptor has closed.')
|
|
resolve()
|
|
})
|
|
|
|
// This event is fired when the data source is drained no matter what was the data source.
|
|
// It is not part of this library but rather from the NodeJS Stream API.
|
|
// @see: https://nodejs.org/api/stream.html#stream_event_end
|
|
res.on('end', () => {
|
|
Logger.debug('Data has been drained')
|
|
})
|
|
|
|
// good practice to catch warnings (ie stat failures and other non-blocking errors)
|
|
archive.on('warning', function (err) {
|
|
if (err.code === 'ENOENT') {
|
|
// log warning
|
|
Logger.warn(`[DownloadManager] Archiver warning: ${err.message}`)
|
|
} else {
|
|
// throw error
|
|
Logger.error(`[DownloadManager] Archiver error: ${err.message}`)
|
|
// throw err
|
|
reject(err)
|
|
}
|
|
})
|
|
archive.on('error', function (err) {
|
|
Logger.error(`[DownloadManager] Archiver error: ${err.message}`)
|
|
reject(err)
|
|
})
|
|
|
|
// pipe archive data to the file
|
|
archive.pipe(res)
|
|
|
|
archive.directory(path, false)
|
|
|
|
archive.finalize()
|
|
})
|
|
} |