overleaf/services/web/app/coffee/Features/Uploads/FileSystemImportManager.coffee

80 lines
3.4 KiB
CoffeeScript
Raw Normal View History

2014-02-12 05:23:40 -05:00
async = require "async"
fs = require "fs"
_ = require "underscore"
FileTypeManager = require "./FileTypeManager"
EditorController = require "../Editor/EditorController"
ProjectLocator = require "../Project/ProjectLocator"
module.exports = FileSystemImportManager =
2016-02-23 11:46:14 -05:00
addDoc: (user_id, project_id, folder_id, name, path, replace, callback = (error, doc)-> )->
2014-02-12 05:23:40 -05:00
fs.readFile path, "utf8", (error, content = "") ->
return callback(error) if error?
content = content.replace(/\r/g, "")
lines = content.split("\n")
2016-02-23 11:46:14 -05:00
if replace
ProjectLocator.findElement project_id: project_id, element_id: folder_id, type: "folder", (error, folder) ->
return callback(error) if error?
return callback(new Error("Couldn't find folder")) if !folder?
existingDoc = null
for doc in folder.docs
if doc.name == name
existingDoc = doc
break
if existingDoc?
EditorController.setDoc project_id, existingDoc._id, user_id, lines, "upload", callback
else
EditorController.addDocWithoutLock project_id, folder_id, name, lines, "upload", callback
else
EditorController.addDocWithoutLock project_id, folder_id, name, lines, "upload", callback
2014-02-12 05:23:40 -05:00
2016-02-23 11:46:14 -05:00
addFile: (user_id, project_id, folder_id, name, path, replace, callback = (error, file)-> )->
2014-02-12 05:23:40 -05:00
if replace
ProjectLocator.findElement project_id: project_id, element_id: folder_id, type: "folder", (error, folder) ->
return callback(error) if error?
return callback(new Error("Couldn't find folder")) if !folder?
existingFile = null
for fileRef in folder.fileRefs
if fileRef.name == name
existingFile = fileRef
break
if existingFile?
EditorController.replaceFile project_id, existingFile._id, path, "upload", callback
2014-02-12 05:23:40 -05:00
else
EditorController.addFileWithoutLock project_id, folder_id, name, path, "upload", callback
2014-02-12 05:23:40 -05:00
else
EditorController.addFileWithoutLock project_id, folder_id, name, path, "upload", callback
2014-02-12 05:23:40 -05:00
2016-02-23 11:46:14 -05:00
addFolder: (user_id, project_id, folder_id, name, path, replace, callback = (error)-> ) ->
EditorController.addFolderWithoutLock project_id, folder_id, name, "upload", (error, new_folder) =>
2014-02-12 05:23:40 -05:00
return callback(error) if error?
2016-02-23 11:46:14 -05:00
@addFolderContents user_id, project_id, new_folder._id, path, replace, (error) ->
2014-02-12 05:23:40 -05:00
return callback(error) if error?
callback null, new_folder
2016-02-23 11:46:14 -05:00
addFolderContents: (user_id, project_id, parent_folder_id, folderPath, replace, callback = (error)-> ) ->
2014-02-12 05:23:40 -05:00
fs.readdir folderPath, (error, entries = []) =>
return callback(error) if error?
jobs = _.map entries, (entry) =>
(callback) =>
FileTypeManager.shouldIgnore entry, (error, ignore) =>
return callback(error) if error?
if !ignore
2016-02-23 11:46:14 -05:00
@addEntity user_id, project_id, parent_folder_id, entry, "#{folderPath}/#{entry}", replace, callback
2014-02-12 05:23:40 -05:00
else
callback()
async.parallelLimit jobs, 5, callback
2016-02-23 11:46:14 -05:00
addEntity: (user_id, project_id, folder_id, name, path, replace, callback = (error, entity)-> ) ->
2014-02-12 05:23:40 -05:00
FileTypeManager.isDirectory path, (error, isDirectory) =>
return callback(error) if error?
if isDirectory
2016-02-23 11:46:14 -05:00
@addFolder user_id, project_id, folder_id, name, path, replace, callback
2014-02-12 05:23:40 -05:00
else
2014-09-04 08:00:41 -04:00
FileTypeManager.isBinary name, path, (error, isBinary) =>
2014-02-12 05:23:40 -05:00
return callback(error) if error?
if isBinary
2016-02-23 11:46:14 -05:00
@addFile user_id, project_id, folder_id, name, path, replace, callback
2014-02-12 05:23:40 -05:00
else
2016-02-23 11:46:14 -05:00
@addDoc user_id, project_id, folder_id, name, path, replace, callback
2014-02-12 05:23:40 -05:00