| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 |
- _ = require('underscore')
- fs = require('fs')
- logger = require('logger-sharelatex')
- EditorController = require('../Editor/EditorController')
- FileTypeManager = require('../Uploads/FileTypeManager')
- FileWriter = require('../../infrastructure/FileWriter')
- ProjectEntityHandler = require('../Project/ProjectEntityHandler')
- module.exports = UpdateMerger =
- mergeUpdate: (user_id, project_id, path, updateRequest, source, callback = (error) ->)->
- logger.log project_id:project_id, path:path, "merging update from tpds"
- FileWriter.writeStreamToDisk project_id, updateRequest, (err, fsPath)->
- return callback(err) if err?
- UpdateMerger._mergeUpdate user_id, project_id, path, fsPath, source, (mergeErr) ->
- fs.unlink fsPath, (deleteErr) ->
- if deleteErr?
- logger.err project_id:project_id, fsPath:fsPath, "error deleting file"
- callback mergeErr
- _determineFileType: (project_id, path, fsPath, callback = (err, fileType) ->) ->
- ProjectEntityHandler.getAllEntities project_id, (err, docs, files) ->
- return callback(err) if err?
- if _.some(files, (f) -> f.path is path)
- return callback(null, "existing-file")
- if _.some(docs, (d) -> d.path is path)
- return callback(null, "existing-doc")
- # existing file not found in project, fall back to extension check
- FileTypeManager.isBinary path, fsPath, (err, isFile)->
- return callback(err) if err?
- if isFile
- callback(null, "new-file") # extension was not text
- else
- callback(null, "new-doc")
- _mergeUpdate: (user_id, project_id, path, fsPath, source, callback = (error) ->)->
- UpdateMerger._determineFileType project_id, path, fsPath, (err, fileType)->
- return callback(err) if err?
- if fileType in ["existing-file", "new-file"]
- UpdateMerger.p.processFile project_id, fsPath, path, source, user_id, callback
- else if fileType in ["existing-doc", "new-doc"]
- UpdateMerger.p.processDoc project_id, user_id, fsPath, path, source, callback
- else
- callback new Error("unrecognized file")
- deleteUpdate: (user_id, project_id, path, source, callback = () ->)->
- EditorController.deleteEntityWithPath project_id, path, source, user_id, () ->
- logger.log project_id:project_id, path:path, "finished processing update to delete entity from tpds"
- callback()
- p:
- processDoc: (project_id, user_id, fsPath, path, source, callback)->
- UpdateMerger.p.readFileIntoTextArray fsPath, (err, docLines)->
- if err?
- logger.err project_id:project_id, "error reading file into text array for process doc update"
- return callback(err)
- logger.log docLines:docLines, "processing doc update from tpds"
- EditorController.upsertDocWithPath project_id, path, docLines, source, user_id, (err) ->
- logger.log project_id:project_id, "completed processing file update from tpds"
- callback(err)
- processFile: (project_id, fsPath, path, source, user_id, callback)->
- logger.log project_id:project_id, "processing file update from tpds"
- EditorController.upsertFileWithPath project_id, path, fsPath, null, source, user_id, (err) ->
- logger.log project_id:project_id, "completed processing file update from tpds"
- callback(err)
- readFileIntoTextArray: (path, callback)->
- fs.readFile path, "utf8", (error, content = "") ->
- if error?
- logger.err path:path, "error reading file into text array"
- return callback(error)
- lines = content.split(/\r\n|\n|\r/)
- callback error, lines
|