From 4ab33890fcb8ad13f20c0dd60cd07686f5f995d7 Mon Sep 17 00:00:00 2001 From: Nathan Sobo Date: Thu, 8 Jan 2015 15:58:59 -0800 Subject: [PATCH] Add PackageManager::onDidLoad/UnloadPackage Signed-off-by: Max Brunsfeld --- spec/package-manager-spec.coffee | 15 +++++++++++++++ src/package-manager.coffee | 20 ++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/spec/package-manager-spec.coffee b/spec/package-manager-spec.coffee index 75aada8fa..52ef023bd 100644 --- a/spec/package-manager-spec.coffee +++ b/spec/package-manager-spec.coffee @@ -34,6 +34,14 @@ describe "PackageManager", -> expect(console.warn.callCount).toBe(1) expect(console.warn.argsForCall[0][0]).toContain("Could not resolve") + it "invokes ::onDidLoadPackage listeners with the loaded package", -> + loadedPackage = null + atom.packages.onDidLoadPackage (pack) -> loadedPackage = pack + + atom.packages.loadPackage("package-with-main") + + expect(loadedPackage.name).toBe "package-with-main" + describe "::unloadPackage(name)", -> describe "when the package is active", -> it "throws an error", -> @@ -61,6 +69,13 @@ describe "PackageManager", -> atom.packages.unloadPackage(pack.name) expect(atom.packages.isPackageLoaded(pack.name)).toBeFalsy() + it "invokes ::onDidUnloadPackage listeners with the unloaded package", -> + atom.packages.loadPackage('package-with-main') + unloadedPackage = null + atom.packages.onDidUnloadPackage (pack) -> unloadedPackage = pack + atom.packages.unloadPackage('package-with-main') + expect(unloadedPackage.name).toBe 'package-with-main' + describe "::activatePackage(id)", -> describe "when called multiple times", -> it "it only calls activate on the package once", -> diff --git a/src/package-manager.coffee b/src/package-manager.coffee index 9eb1441b5..82c5ba8ba 100644 --- a/src/package-manager.coffee +++ b/src/package-manager.coffee @@ -90,6 +90,24 @@ class PackageManager onDidDeactivatePackage: (callback) -> @emitter.on 'did-deactivate-package', callback + # Public: Invoke the given callback when a package is loaded. + # + # * `callback` A {Function} to be invoked when a package is loaded. + # * `package` The {Package} that was loaded. + # + # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe. + onDidLoadPackage: (callback) -> + @emitter.on 'did-load-package', callback + + # Public: Invoke the given callback when a package is unloaded. + # + # * `callback` A {Function} to be invoked when a package is unloaded. + # * `package` The {Package} that was unloaded. + # + # Returns a {Disposable} on which `.dispose()` can be called to unsubscribe. + onDidUnloadPackage: (callback) -> + @emitter.on 'did-unload-package', callback + on: (eventName) -> switch eventName when 'loaded' @@ -321,6 +339,7 @@ class PackageManager pack = new Package(packagePath, metadata) pack.load() @loadedPackages[pack.name] = pack + @emitter.emit 'did-load-package', pack return pack catch error console.warn "Failed to load package.json '#{path.basename(packagePath)}'", error.stack ? error @@ -338,6 +357,7 @@ class PackageManager if pack = @getLoadedPackage(name) delete @loadedPackages[pack.name] + @emitter.emit 'did-unload-package', pack else throw new Error("No loaded package for name '#{name}'")