FileWriter.coffee 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. fs = require 'fs'
  2. logger = require 'logger-sharelatex'
  3. uuid = require 'uuid'
  4. _ = require 'underscore'
  5. Settings = require 'settings-sharelatex'
  6. request = require 'request'
  7. module.exports = FileWriter =
  8. writeLinesToDisk: (identifier, lines, callback = (error, fsPath)->) ->
  9. callback = _.once(callback)
  10. fsPath = "#{Settings.path.dumpFolder}/#{identifier}_#{uuid.v4()}"
  11. fs.mkdir Settings.path.dumpFolder, (error) ->
  12. if error? and error.code != 'EEXIST'
  13. # Ignore error about already existing
  14. return callback(error)
  15. fs.writeFile fsPath, lines.join('\n'), (error) ->
  16. return callback(error) if error?
  17. callback(null, fsPath)
  18. writeStreamToDisk: (identifier, stream, callback = (error, fsPath) ->) ->
  19. callback = _.once(callback)
  20. fsPath = "#{Settings.path.dumpFolder}/#{identifier}_#{uuid.v4()}"
  21. stream.pause()
  22. fs.mkdir Settings.path.dumpFolder, (error) ->
  23. stream.resume()
  24. if error? and error.code != 'EEXIST'
  25. # Ignore error about already existing
  26. return callback(error)
  27. writeStream = fs.createWriteStream(fsPath)
  28. stream.pipe(writeStream)
  29. stream.on 'error', (err)->
  30. logger.err {err, identifier, fsPath}, "[writeStreamToDisk] something went wrong with incoming stream"
  31. callback(err)
  32. writeStream.on 'error', (err)->
  33. logger.err {err, identifier, fsPath}, "[writeStreamToDisk] something went wrong with writing to disk"
  34. callback(err)
  35. writeStream.on "finish", ->
  36. logger.log {identifier, fsPath}, "[writeStreamToDisk] write stream finished"
  37. callback null, fsPath
  38. writeUrlToDisk: (identifier, url, callback = (error, fsPath) ->) ->
  39. callback = _.once(callback)
  40. stream = request.get(url)
  41. stream.on 'response', (response) ->
  42. if 200 <= response.statusCode < 300
  43. FileWriter.writeStreamToDisk identifier, stream, callback
  44. else
  45. err = new Error("bad response from url: #{response.statusCode}")
  46. logger.err {err, identifier, url}, err.message
  47. callback(err)