From b8efbedee19d08c72f890c67e4d192a4c151359f Mon Sep 17 00:00:00 2001 From: Ben Ogle Date: Thu, 8 Jan 2015 17:10:59 -0800 Subject: [PATCH] Create a warning notification when buffer has a watch error --- spec/project-spec.coffee | 19 +++++++++++++++++++ src/project.coffee | 19 ++++++++++++++----- 2 files changed, 33 insertions(+), 5 deletions(-) diff --git a/spec/project-spec.coffee b/spec/project-spec.coffee index ba91fbde7..930b4a849 100644 --- a/spec/project-spec.coffee +++ b/spec/project-spec.coffee @@ -51,6 +51,25 @@ describe "Project", -> editor.saveAs(tempFile) expect(atom.project.getPaths()[0]).toBe path.dirname(tempFile) + describe "when a watch error is thrown from the TextBuffer", -> + editor = null + beforeEach -> + waitsForPromise -> + atom.project.open(require.resolve('./fixtures/dir/a')).then (o) -> editor = o + + it "creates a warning notification", -> + atom.notifications.onDidAddNotification noteSpy = jasmine.createSpy() + + editor.buffer.emitter.emit 'will-throw-watch-error', + handle: jasmine.createSpy() + error: new Error('SomeError') + + expect(noteSpy).toHaveBeenCalled() + + notification = noteSpy.mostRecentCall.args[0] + expect(notification.getType()).toBe 'warning' + expect(notification.getDetail()).toBe 'SomeError' + describe ".open(path)", -> [absolutePath, newBufferHandler] = [] diff --git a/src/project.coffee b/src/project.coffee index d822cbd76..e19667f16 100644 --- a/src/project.coffee +++ b/src/project.coffee @@ -39,9 +39,7 @@ class Project extends Model @emitter = new Emitter @buffers ?= [] - for buffer in @buffers - do (buffer) => - buffer.onDidDestroy => @removeBuffer(buffer) + @subscribeToBuffer(buffer) for buffer in @buffers Grim.deprecate("Pass 'paths' array instead of 'path' to project constructor") if path? paths ?= _.compact([path]) @@ -297,11 +295,11 @@ class Project extends Model addBuffer: (buffer, options={}) -> @addBufferAtIndex(buffer, @buffers.length, options) - buffer.onDidDestroy => @removeBuffer(buffer) + @subscribeToBuffer(buffer) addBufferAtIndex: (buffer, index, options={}) -> @buffers.splice(index, 0, buffer) - buffer.onDidDestroy => @removeBuffer(buffer) + @subscribeToBuffer(buffer) @emit 'buffer-created', buffer buffer @@ -330,6 +328,17 @@ class Project extends Model else @on 'buffer-created', (buffer) -> callback(buffer) + subscribeToBuffer: (buffer) -> + buffer.onDidDestroy => @removeBuffer(buffer) + buffer.onWillThrowWatchError ({error, handle}) => + handle() + atom.notifications.addWarning """ + Unable to read file after file change event. + Make sure you have permission to access the file. + """, + detail: error.message + dismissable: true + # Deprecated: delegate registerOpener: (opener) -> deprecate("Use Workspace::addOpener instead")