| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- fs = require 'fs'
- logger = require 'logger-sharelatex'
- uuid = require 'uuid'
- _ = require 'underscore'
- Settings = require 'settings-sharelatex'
- request = require 'request'
- module.exports = FileWriter =
- _ensureDumpFolderExists: (callback=(error)->) ->
- fs.mkdir Settings.path.dumpFolder, (error) ->
- if error? and error.code != 'EEXIST'
- # Ignore error about already existing
- return callback(error)
- callback(null)
- writeLinesToDisk: (identifier, lines, callback = (error, fsPath)->) ->
- FileWriter.writeContentToDisk(identifier, lines.join('\n'), callback)
- writeContentToDisk: (identifier, content, callback = (error, fsPath)->) ->
- callback = _.once(callback)
- fsPath = "#{Settings.path.dumpFolder}/#{identifier}_#{uuid.v4()}"
- FileWriter._ensureDumpFolderExists (error) ->
- return callback(error) if error?
- fs.writeFile fsPath, content, (error) ->
- return callback(error) if error?
- callback(null, fsPath)
- writeStreamToDisk: (identifier, stream, callback = (error, fsPath) ->) ->
- callback = _.once(callback)
- fsPath = "#{Settings.path.dumpFolder}/#{identifier}_#{uuid.v4()}"
- stream.pause()
- FileWriter._ensureDumpFolderExists (error) ->
- return callback(error) if error?
- stream.resume()
- writeStream = fs.createWriteStream(fsPath)
- stream.pipe(writeStream)
- stream.on 'error', (err)->
- logger.err {err, identifier, fsPath}, "[writeStreamToDisk] something went wrong with incoming stream"
- callback(err)
- writeStream.on 'error', (err)->
- logger.err {err, identifier, fsPath}, "[writeStreamToDisk] something went wrong with writing to disk"
- callback(err)
- writeStream.on "finish", ->
- logger.log {identifier, fsPath}, "[writeStreamToDisk] write stream finished"
- callback null, fsPath
- writeUrlToDisk: (identifier, url, callback = (error, fsPath) ->) ->
- callback = _.once(callback)
- stream = request.get(url)
- stream.on 'response', (response) ->
- if 200 <= response.statusCode < 300
- FileWriter.writeStreamToDisk identifier, stream, callback
- else
- err = new Error("bad response from url: #{response.statusCode}")
- logger.err {err, identifier, url}, err.message
- callback(err)
|