FileHandler.coffee 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. convertedKey = KeyBuilder.getConvertedFolderKey key
  12. PersistorManager.deleteDirectory bucket, convertedKey, (error) ->
  13. return callback(error) if error?
  14. PersistorManager.sendStream bucket, key, stream, callback
  15. deleteFile: (bucket, key, callback)->
  16. convertedKey = KeyBuilder.getConvertedFolderKey key
  17. async.parallel [
  18. (done)-> PersistorManager.deleteFile bucket, key, done
  19. (done)-> PersistorManager.deleteDirectory bucket, convertedKey, 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, opts, (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. convertedKey = KeyBuilder.addCachingToKey key, opts
  34. PersistorManager.checkIfFileExists bucket, convertedKey, (err, exists)=>
  35. if err?
  36. return callback err
  37. if exists
  38. PersistorManager.getFileStream bucket, convertedKey, opts, callback
  39. else
  40. @_getConvertedFileAndCache bucket, key, convertedKey, opts, callback
  41. _getConvertedFileAndCache: (bucket, key, convertedKey, opts, callback)->
  42. convertedFsPath = ""
  43. originalFsPath = ""
  44. async.series [
  45. (cb) =>
  46. @_convertFile bucket, key, opts, (err, fileSystemPath, originalFsPath) ->
  47. convertedFsPath = fileSystemPath
  48. originalFsPath = originalFsPath
  49. cb err
  50. (cb)->
  51. ImageOptimiser.compressPng convertedFsPath, cb
  52. (cb)->
  53. PersistorManager.sendFile bucket, convertedKey, convertedFsPath, cb
  54. ], (err)->
  55. if err?
  56. LocalFileWriter.deleteFile convertedFsPath, ->
  57. LocalFileWriter.deleteFile originalFsPath, ->
  58. return callback(err)
  59. PersistorManager.getFileStream bucket, convertedKey, opts, callback
  60. _convertFile: (bucket, originalKey, opts, callback)->
  61. @_writeS3FileToDisk bucket, originalKey, opts, (err, originalFsPath)->
  62. if err?
  63. return callback(err)
  64. done = (err, destPath)->
  65. if err?
  66. logger.err err:err, bucket:bucket, originalKey:originalKey, opts:opts, "error converting file"
  67. return callback(err)
  68. LocalFileWriter.deleteFile originalFsPath, ->
  69. callback(err, destPath, originalFsPath)
  70. if opts.format?
  71. FileConverter.convert originalFsPath, opts.format, done
  72. else if opts.style == "thumbnail"
  73. FileConverter.thumbnail originalFsPath, done
  74. else if opts.style == "preview"
  75. FileConverter.preview originalFsPath, done
  76. else
  77. return callback(new Error("should have specified opts to convert file with #{JSON.stringify(opts)}"))
  78. _writeS3FileToDisk: (bucket, key, opts, callback)->
  79. PersistorManager.getFileStream bucket, key, opts, (err, fileStream)->
  80. if err?
  81. return callback(err)
  82. LocalFileWriter.writeStream fileStream, key, callback
  83. getDirectorySize: (bucket, project_id, callback)->
  84. logger.log bucket:bucket, project_id:project_id, "getting project size"
  85. PersistorManager.directorySize bucket, project_id, (err, size)->
  86. if err?
  87. logger.err bucket:bucket, project_id:project_id, "error getting size"
  88. callback err, size