FileSystemImportManager.coffee 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. async = require "async"
  2. fs = require "fs"
  3. _ = require "underscore"
  4. FileTypeManager = require "./FileTypeManager"
  5. EditorController = require "../Editor/EditorController"
  6. ProjectLocator = require "../Project/ProjectLocator"
  7. module.exports = FileSystemImportManager =
  8. addDoc: (user_id, project_id, folder_id, name, path, replace, callback = (error, doc)-> )->
  9. fs.readFile path, "utf8", (error, content = "") ->
  10. return callback(error) if error?
  11. content = content.replace(/\r/g, "")
  12. lines = content.split("\n")
  13. if replace
  14. ProjectLocator.findElement project_id: project_id, element_id: folder_id, type: "folder", (error, folder) ->
  15. return callback(error) if error?
  16. return callback(new Error("Couldn't find folder")) if !folder?
  17. existingDoc = null
  18. for doc in folder.docs
  19. if doc.name == name
  20. existingDoc = doc
  21. break
  22. if existingDoc?
  23. EditorController.setDoc project_id, existingDoc._id, user_id, lines, "upload", callback
  24. else
  25. EditorController.addDocWithoutLock project_id, folder_id, name, lines, "upload", callback
  26. else
  27. EditorController.addDocWithoutLock project_id, folder_id, name, lines, "upload", callback
  28. addFile: (user_id, project_id, folder_id, name, path, replace, callback = (error, file)-> )->
  29. if replace
  30. ProjectLocator.findElement project_id: project_id, element_id: folder_id, type: "folder", (error, folder) ->
  31. return callback(error) if error?
  32. return callback(new Error("Couldn't find folder")) if !folder?
  33. existingFile = null
  34. for fileRef in folder.fileRefs
  35. if fileRef.name == name
  36. existingFile = fileRef
  37. break
  38. if existingFile?
  39. EditorController.replaceFile project_id, existingFile._id, path, "upload", callback
  40. else
  41. EditorController.addFileWithoutLock project_id, folder_id, name, path, "upload", callback
  42. else
  43. EditorController.addFileWithoutLock project_id, folder_id, name, path, "upload", callback
  44. addFolder: (user_id, project_id, folder_id, name, path, replace, callback = (error)-> ) ->
  45. EditorController.addFolderWithoutLock project_id, folder_id, name, "upload", (error, new_folder) =>
  46. return callback(error) if error?
  47. @addFolderContents user_id, project_id, new_folder._id, path, replace, (error) ->
  48. return callback(error) if error?
  49. callback null, new_folder
  50. addFolderContents: (user_id, project_id, parent_folder_id, folderPath, replace, callback = (error)-> ) ->
  51. fs.readdir folderPath, (error, entries = []) =>
  52. return callback(error) if error?
  53. jobs = _.map entries, (entry) =>
  54. (callback) =>
  55. FileTypeManager.shouldIgnore entry, (error, ignore) =>
  56. return callback(error) if error?
  57. if !ignore
  58. @addEntity user_id, project_id, parent_folder_id, entry, "#{folderPath}/#{entry}", replace, callback
  59. else
  60. callback()
  61. async.parallelLimit jobs, 5, callback
  62. addEntity: (user_id, project_id, folder_id, name, path, replace, callback = (error, entity)-> ) ->
  63. FileTypeManager.isDirectory path, (error, isDirectory) =>
  64. return callback(error) if error?
  65. if isDirectory
  66. @addFolder user_id, project_id, folder_id, name, path, replace, callback
  67. else
  68. FileTypeManager.isBinary name, path, (error, isBinary) =>
  69. return callback(error) if error?
  70. if isBinary
  71. @addFile user_id, project_id, folder_id, name, path, replace, callback
  72. else
  73. @addDoc user_id, project_id, folder_id, name, path, replace, callback