ProjectUploadManager.coffee 1.7 KB

123456789101112131415161718192021222324252627282930313233
  1. path = require "path"
  2. rimraf = require "rimraf"
  3. ArchiveManager = require "./ArchiveManager"
  4. FileSystemImportManager = require "./FileSystemImportManager"
  5. ProjectCreationHandler = require "../Project/ProjectCreationHandler"
  6. ProjectRootDocManager = require "../Project/ProjectRootDocManager"
  7. ProjectDetailsHandler = require "../Project/ProjectDetailsHandler"
  8. module.exports = ProjectUploadHandler =
  9. createProjectFromZipArchive: (owner_id, proposedName, zipPath, callback = (error, project) ->) ->
  10. ProjectDetailsHandler.generateUniqueName owner_id, proposedName, (error, name) =>
  11. return callback(error) if error?
  12. ProjectCreationHandler.createBlankProject owner_id, name, (error, project) =>
  13. return callback(error) if error?
  14. @insertZipArchiveIntoFolder owner_id, project._id, project.rootFolder[0]._id, zipPath, (error) ->
  15. return callback(error) if error?
  16. ProjectRootDocManager.setRootDocAutomatically project._id, (error) ->
  17. return callback(error) if error?
  18. callback(error, project)
  19. insertZipArchiveIntoFolder: (owner_id, project_id, folder_id, path, callback = (error) ->) ->
  20. destination = @_getDestinationDirectory path
  21. ArchiveManager.extractZipArchive path, destination, (error) ->
  22. return callback(error) if error?
  23. ArchiveManager.findTopLevelDirectory destination, (error, topLevelDestination) ->
  24. return callback(error) if error?
  25. FileSystemImportManager.addFolderContents owner_id, project_id, folder_id, topLevelDestination, false, (error) ->
  26. return callback(error) if error?
  27. rimraf(destination, callback)
  28. _getDestinationDirectory: (source) ->
  29. return path.join(path.dirname(source), "#{path.basename(source, ".zip")}-#{Date.now()}")