FileHandler.coffee 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. settings = require("settings-sharelatex")
  2. PersistorManager = require("./PersistorManager")
  3. LocalFileWriter = require("./LocalFileWriter")
  4. logger = require("logger-sharelatex")
  5. FileConverter = require("./FileConverter")
  6. KeyBuilder = require("./KeyBuilder")
  7. async = require("async")
  8. ImageOptimiser = require("./ImageOptimiser")
  9. module.exports =
  10. insertFile: (bucket, key, stream, callback)->
  11. convetedKey = KeyBuilder.getConvertedFolderKey(key)
  12. PersistorManager.deleteDirectory bucket, convetedKey, ->
  13. PersistorManager.sendStream bucket, key, stream, ->
  14. callback()
  15. deleteFile: (bucket, key, callback)->
  16. convetedKey = KeyBuilder.getConvertedFolderKey(bucket, key)
  17. async.parallel [
  18. (done)-> PersistorManager.deleteFile bucket, key, done
  19. (done)-> PersistorManager.deleteFile bucket, convetedKey, done
  20. ], callback
  21. getFile: (bucket, key, opts = {}, callback)->
  22. logger.log bucket:bucket, key:key, opts:opts, "getting file"
  23. if !opts.format? and !opts.style?
  24. @_getStandardFile bucket, key, opts, callback
  25. else
  26. @_getConvertedFile bucket, key, opts, callback
  27. _getStandardFile: (bucket, key, opts, callback)->
  28. PersistorManager.getFileStream bucket, key, (err, fileStream)->
  29. if err?
  30. logger.err bucket:bucket, key:key, opts:opts, "error getting fileStream"
  31. callback err, fileStream
  32. _getConvertedFile: (bucket, key, opts, callback)->
  33. convetedKey = KeyBuilder.addCachingToKey(key, opts)
  34. PersistorManager.checkIfFileExists bucket, convetedKey, (err, exists)=>
  35. if exists
  36. PersistorManager.getFileStream bucket, convetedKey, callback
  37. else
  38. @_getConvertedFileAndCache bucket, key, convetedKey, opts, callback
  39. _getConvertedFileAndCache: (bucket, key, convetedKey, opts, callback)->
  40. self = @
  41. convertedFsPath = ""
  42. async.series [
  43. (cb)->
  44. self._convertFile bucket, key, opts, (err, fileSystemPath)->
  45. convertedFsPath = fileSystemPath
  46. cb err
  47. (cb)->
  48. ImageOptimiser.compressPng convertedFsPath, cb
  49. (cb)->
  50. PersistorManager.sendFile bucket, convetedKey, convertedFsPath, cb
  51. ], (err)->
  52. if err?
  53. return callback(err)
  54. PersistorManager.getFileStream bucket, convetedKey, callback
  55. _convertFile: (bucket, origonalKey, opts, callback)->
  56. @_writeS3FileToDisk bucket, origonalKey, (err, origonalFsPath)->
  57. done = (err, destPath)->
  58. if err?
  59. logger.err err:err, bucket:bucket, origonalKey:origonalKey, opts:opts, "error converting file"
  60. return callback(err)
  61. LocalFileWriter.deleteFile origonalFsPath, ->
  62. callback(err, destPath)
  63. if opts.format?
  64. FileConverter.convert origonalFsPath, opts.format, done
  65. else if opts.style == "thumbnail"
  66. FileConverter.thumbnail origonalFsPath, done
  67. else if opts.style == "preview"
  68. FileConverter.preview origonalFsPath, done
  69. else
  70. throw new Error("should have specified opts to convert file with #{JSON.stringify(opts)}")
  71. _writeS3FileToDisk: (bucket, key, callback)->
  72. PersistorManager.getFileStream bucket, key, (err, fileStream)->
  73. LocalFileWriter.writeStream fileStream, key, callback