From 1734aa77874ef3462f3ebc613e679389d6c7a9fa Mon Sep 17 00:00:00 2001 From: Ash Wilson Date: Mon, 18 Sep 2017 15:11:36 -0400 Subject: [PATCH] Shuffle Project deserialization a little --- src/project.coffee | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/src/project.coffee b/src/project.coffee index 910107ea9..36b38b5da 100644 --- a/src/project.coffee +++ b/src/project.coffee @@ -58,19 +58,34 @@ class Project extends Model ### deserialize: (state) -> + checkNotDirectory = (filePath) -> + new Promise (resolve, reject) -> + fs.isDirectory filePath, (isDir) -> + if isDir then reject() else resolve() + + checkAccess = (filePath) -> + new Promise (resolve, reject) -> + fs.open filePath, 'r', (err, fd) -> + return reject() if err? + fs.close fd, () -> resolve() + bufferPromises = [] for bufferState in state.buffers - continue if fs.isDirectorySync(bufferState.filePath) - if bufferState.filePath - try - fs.closeSync(fs.openSync(bufferState.filePath, 'r')) - catch error - continue unless error.code is 'ENOENT' - unless bufferState.shouldDestroyOnFileDelete? - bufferState.shouldDestroyOnFileDelete = -> - atom.config.get('core.closeDeletedFileTabs') - bufferPromises.push(TextBuffer.deserialize(bufferState)) - Promise.all(bufferPromises).then (@buffers) => + bufferState.shouldDestroyOnFileDelete ?= -> atom.config.get('core.closeDeletedFileTabs') + + promise = Promise.resolve() + if bufferState.filePath? + promise = promise.then () -> Promise.all([ + checkNotDirectory(bufferState.filePath), + checkAccess(bufferState.filePath) + ]) + promise = promise.then () -> TextBuffer.deserialize(bufferState) + promise = promise.catch (err) -> null + + bufferPromises.push promise + + Promise.all(bufferPromises).then (buffers) => + @buffers = buffers.filter(Boolean) @subscribeToBuffer(buffer) for buffer in @buffers @setPaths(state.paths, mustExist: true)