summaryrefslogtreecommitdiff
path: root/scriptingprovider.cpp
diff options
context:
space:
mode:
authorPeter LaFosse <peter@vector35.com>2021-02-09 20:39:28 -0500
committerPeter LaFosse <peter@vector35.com>2021-03-02 07:50:56 -0500
commit1eafe9eeb83962071ecffaebb0bc98dc79f2f5c6 (patch)
treef242857ceffdf76576bb87745cf096ffefc71b93 /scriptingprovider.cpp
parentc07fe0fea819f681621ff60e336f079494f6bfef (diff)
Add ability to install python dependencies
Refactor plugin repo loading into scripting provider. Find python binary for given python library
Diffstat (limited to 'scriptingprovider.cpp')
-rw-r--r--scriptingprovider.cpp50
1 files changed, 48 insertions, 2 deletions
diff --git a/scriptingprovider.cpp b/scriptingprovider.cpp
index ed010100..4c11ccc4 100644
--- a/scriptingprovider.cpp
+++ b/scriptingprovider.cpp
@@ -281,7 +281,7 @@ std::string CoreScriptingInstance::CompleteInput(const std::string& text, uint64
}
-ScriptingProvider::ScriptingProvider(const string& name): m_nameForRegister(name)
+ScriptingProvider::ScriptingProvider(const string& name, const string& apiName): m_nameForRegister(name), m_apiNameForRegister(apiName)
{
}
@@ -300,6 +300,20 @@ BNScriptingInstance* ScriptingProvider::CreateInstanceCallback(void* ctxt)
}
+bool ScriptingProvider::LoadModuleCallback(void* ctxt, const char* repository, const char* module, bool force)
+{
+ ScriptingProvider* provider = (ScriptingProvider*)ctxt;
+ return BNLoadScriptingProviderModule(provider->GetObject(), repository, module, force);
+}
+
+
+bool ScriptingProvider::InstallModulesCallback(void* ctxt, const char* modules)
+{
+ ScriptingProvider* provider = (ScriptingProvider*)ctxt;
+ return BNInstallScriptingProviderModules(provider->GetObject(), modules);
+}
+
+
string ScriptingProvider::GetName()
{
char* providerNameRaw = BNGetScriptingProviderName(m_object);
@@ -309,6 +323,15 @@ string ScriptingProvider::GetName()
}
+string ScriptingProvider::GetAPIName()
+{
+ char* providerNameRaw = BNGetScriptingProviderAPIName(m_object);
+ string providerName(providerNameRaw);
+ BNFreeString(providerNameRaw);
+ return providerName;
+}
+
+
vector<Ref<ScriptingProvider>> ScriptingProvider::GetList()
{
size_t count;
@@ -330,12 +353,23 @@ Ref<ScriptingProvider> ScriptingProvider::GetByName(const string& name)
}
+Ref<ScriptingProvider> ScriptingProvider::GetByAPIName(const string& name)
+{
+ BNScriptingProvider* result = BNGetScriptingProviderByAPIName(name.c_str());
+ if (!result)
+ return nullptr;
+ return new CoreScriptingProvider(result);
+}
+
+
void ScriptingProvider::Register(ScriptingProvider* provider)
{
BNScriptingProviderCallbacks cb;
cb.context = provider;
cb.createInstance = CreateInstanceCallback;
- provider->m_object = BNRegisterScriptingProvider(provider->m_nameForRegister.c_str(), &cb);
+ cb.loadModule = LoadModuleCallback;
+ cb.installModules = InstallModulesCallback;
+ provider->m_object = BNRegisterScriptingProvider(provider->m_nameForRegister.c_str(), provider->m_apiNameForRegister.c_str(), &cb);
}
@@ -351,3 +385,15 @@ Ref<ScriptingInstance> CoreScriptingProvider::CreateNewInstance()
return nullptr;
return new CoreScriptingInstance(result);
}
+
+
+bool CoreScriptingProvider::LoadModule(const std::string& repository, const std::string& module, bool force)
+{
+ return BNLoadScriptingProviderModule(m_object, repository.c_str(), module.c_str(), force);
+}
+
+
+bool CoreScriptingProvider::InstallModules(const std::string& modules)
+{
+ return BNInstallScriptingProviderModules(m_object, modules.c_str());
+}