FileSystemImportManager.coffee 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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: (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. EditorController.addDoc project_id, folder_id, name, lines, "upload", callback
  14. addFile: (project_id, folder_id, name, path, replace, callback = (error, file)-> )->
  15. if replace
  16. ProjectLocator.findElement project_id: project_id, element_id: folder_id, type: "folder", (error, folder) ->
  17. return callback(error) if error?
  18. return callback(new Error("Couldn't find folder")) if !folder?
  19. existingFile = null
  20. for fileRef in folder.fileRefs
  21. if fileRef.name == name
  22. existingFile = fileRef
  23. break
  24. if existingFile?
  25. EditorController.replaceFile project_id, existingFile._id, path, "upload", callback
  26. else
  27. EditorController.addFile project_id, folder_id, name, path, "upload", callback
  28. else
  29. EditorController.addFile project_id, folder_id, name, path, "upload", callback
  30. addFolder: (project_id, folder_id, name, path, replace, callback = (error)-> ) ->
  31. EditorController.addFolder project_id, folder_id, name, "upload", (error, new_folder) =>
  32. return callback(error) if error?
  33. @addFolderContents project_id, new_folder._id, path, replace, (error) ->
  34. return callback(error) if error?
  35. callback null, new_folder
  36. addFolderContents: (project_id, parent_folder_id, folderPath, replace, callback = (error)-> ) ->
  37. fs.readdir folderPath, (error, entries = []) =>
  38. return callback(error) if error?
  39. jobs = _.map entries, (entry) =>
  40. (callback) =>
  41. FileTypeManager.shouldIgnore entry, (error, ignore) =>
  42. return callback(error) if error?
  43. if !ignore
  44. @addEntity project_id, parent_folder_id, entry, "#{folderPath}/#{entry}", replace, callback
  45. else
  46. callback()
  47. async.parallelLimit jobs, 5, callback
  48. addEntity: (project_id, folder_id, name, path, replace, callback = (error, entity)-> ) ->
  49. FileTypeManager.isDirectory path, (error, isDirectory) =>
  50. return callback(error) if error?
  51. if isDirectory
  52. @addFolder project_id, folder_id, name, path, replace, callback
  53. else
  54. FileTypeManager.isBinary name, path, (error, isBinary) =>
  55. return callback(error) if error?
  56. if isBinary
  57. @addFile project_id, folder_id, name, path, replace, callback
  58. else
  59. @addDoc project_id, folder_id, name, path, replace, callback