From 864d00b8ec723c48ab148bf97ef4fbc93ef9942c Mon Sep 17 00:00:00 2001 From: Peter LaFosse Date: Thu, 15 Apr 2021 10:02:59 -0400 Subject: Add plugin status when dependencies are being installed --- binaryninjaapi.h | 1 + binaryninjacore.h | 4 +++- pluginmanager.cpp | 6 ++++++ python/pluginmanager.py | 5 +++++ python/scriptingprovider.py | 2 ++ 5 files changed, 17 insertions(+), 1 deletion(-) diff --git a/binaryninjaapi.h b/binaryninjaapi.h index e70490f3..6af35d69 100644 --- a/binaryninjaapi.h +++ b/binaryninjaapi.h @@ -5202,6 +5202,7 @@ __attribute__ ((format (printf, 1, 2))) bool IsDisablePending() const; bool IsDeletePending() const; bool IsUpdateAvailable() const; + bool AreDependenciesBeingInstalled() const; bool Uninstall(); bool Install(); diff --git a/binaryninjacore.h b/binaryninjacore.h index 9dd5e40e..f47b2852 100644 --- a/binaryninjacore.h +++ b/binaryninjacore.h @@ -874,7 +874,8 @@ extern "C" DisablePendingPluginStatus = 0x00000080, PendingRestartPluginStatus = 0x00000200, BeingUpdatedPluginStatus = 0x00000400, - BeingDeletedPluginStatus = 0x00000800 + BeingDeletedPluginStatus = 0x00000800, + DependenciesBeingInstalledStatus = 0x00001000 }; enum BNPluginType @@ -4889,6 +4890,7 @@ __attribute__ ((format (printf, 1, 2))) BINARYNINJACOREAPI bool BNPluginIsDisablePending(BNRepoPlugin* p); BINARYNINJACOREAPI bool BNPluginIsDeletePending(BNRepoPlugin* p); BINARYNINJACOREAPI bool BNPluginIsUpdateAvailable(BNRepoPlugin* p); + BINARYNINJACOREAPI bool BNPluginAreDependenciesBeingInstalled(BNRepoPlugin* p); BINARYNINJACOREAPI char* BNPluginGetProjectData(BNRepoPlugin* p); BINARYNINJACOREAPI uint64_t BNPluginGetLastUpdate(BNRepoPlugin* p); diff --git a/pluginmanager.cpp b/pluginmanager.cpp index 049555be..1500c78e 100644 --- a/pluginmanager.cpp +++ b/pluginmanager.cpp @@ -196,6 +196,12 @@ bool RepoPlugin::IsUpdateAvailable() const } +bool RepoPlugin::AreDependenciesBeingInstalled() const +{ + return BNPluginAreDependenciesBeingInstalled(m_object); +} + + uint64_t RepoPlugin::GetLastUpdate() { return BNPluginGetLastUpdate(m_object); diff --git a/python/pluginmanager.py b/python/pluginmanager.py index 1a3187af..15b98b55 100644 --- a/python/pluginmanager.py +++ b/python/pluginmanager.py @@ -234,6 +234,11 @@ class RepoPlugin(object): """Boolean status indicating that the plugin has updates available""" return core.BNPluginIsUpdateAvailable(self.handle) + @property + def dependencies_being_installed(self): + """Boolean status indicating that the plugin's dependencies are currently being installed""" + return core.BNPluginAreDependenciesBeingInstalled(self.handle) + @property def project_data(self): """Gets a json object of the project data field""" diff --git a/python/scriptingprovider.py b/python/scriptingprovider.py index 3b088d4a..bdf8e620 100644 --- a/python/scriptingprovider.py +++ b/python/scriptingprovider.py @@ -914,6 +914,8 @@ class PythonScriptingProvider(ScriptingProvider): def _install_modules(self, ctx, modules): # This callback should not be called directly it is indirectly # executed binary ninja is executed with --pip option + if len(modules.strip()) == 0: + return True python_lib = settings.Settings().get_string("python.interpreter") python_bin_override = settings.Settings().get_string("python.binaryOverride") python_bin, status = self._get_executable_for_libpython(python_lib, python_bin_override) -- cgit v1.3.1