aboutsummaryrefslogtreecommitdiff
path: root/plugins/plugin_manager/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/plugin_manager/init.lua')
-rw-r--r--plugins/plugin_manager/init.lua50
1 files changed, 40 insertions, 10 deletions
diff --git a/plugins/plugin_manager/init.lua b/plugins/plugin_manager/init.lua
index 6564e5b..566ba8b 100644
--- a/plugins/plugin_manager/init.lua
+++ b/plugins/plugin_manager/init.lua
@@ -76,7 +76,7 @@ local function run(cmd)
table.insert(cmd, "--assume-yes")
if config.plugins.plugin_manager.force then table.insert(cmd, "--force") end
local proc = process.start(cmd)
- if config.plugins.plugin_manager.debug then for i, v in ipairs(cmd) do io.stdout:write((i > 1 and " " or "") .. v) end io.stdout:write("\n") end
+ if config.plugins.plugin_manager.debug then for i, v in ipairs(cmd) do io.stdout:write((i > 1 and " " or "") .. v) end io.stdout:write("\n") io.stdout:flush() end
local promise = Promise.new()
table.insert(running_processes, { proc, promise, "" })
if #running_processes == 1 then
@@ -90,7 +90,7 @@ local function run(cmd)
local still_running = true
while true do
local chunk = v[1]:read_stdout(2048)
- if config.plugins.plugin_manager.debug then io.stdout:write(chunk) end
+ if config.plugins.plugin_manager.debug and chunk ~= nil then io.stdout:write(chunk) io.stdout:flush() end
if chunk and v[1]:running() and #chunk == 0 then break end
if chunk ~= nil and #chunk > 0 then
v[3] = v[3] .. chunk
@@ -181,14 +181,40 @@ function PluginManager:uninstall(plugin)
end
+function PluginManager:get_plugin(name_and_version)
+ local promise = Promise.new()
+ PluginManager:get_plugins():done(function()
+ local s = name_and_version:find(":")
+ local name, version = name_and_version, nil
+ if s then
+ name = name_and_version:sub(1, s-1)
+ version = name_and_version:sub(s+1)
+ end
+ local match = false
+ for i, plugin in ipairs(PluginManager.plugins) do
+ if not plugin.mod_version or tostring(plugin.mod_version) == tostring(MOD_VERSION) and (plugin.version == version or version == nil) then
+ promise:resolve(plugin)
+ match = true
+ break
+ end
+ end
+ if not match then promise:reject() end
+ end)
+ return promise
+end
+
command.add(nil, {
["plugin-manager:install"] = function()
core.command_view:enter("Enter plugin name",
function(name)
- core.log("Attempting to install plugin " .. name .. "...")
- PluginManager:install(name, nil):done(function()
- core.log("Successfully installed plugin " .. name .. ".")
- end)
+ PluginManager:get_plugin(name):done(function(plugin)
+ core.log("Attempting to install plugin " .. name .. "...")
+ PluginManager:install(plugin):done(function()
+ core.log("Successfully installed plugin " .. plugin.name .. ".")
+ end)
+ end):fail(function()
+ core.error("Unknown plugin " .. name .. ".")
+ end)
end,
function(text)
local items = {}
@@ -202,12 +228,16 @@ command.add(nil, {
end
)
end,
- ["plugin-manager:remove"] = function()
+ ["plugin-manager:uninstall"] = function()
core.command_view:enter("Enter plugin name",
function(name)
- core.log("Attempting to remove plugin " .. name .. "...")
- PluginManager:uninstall(name):done(function()
- core.log("Successfully removed plugin " .. name .. ".")
+ PluginManager:get_plugin(name):done(function(plugin)
+ core.log("Attempting to uninstall plugin " .. plugn.name .. "...")
+ PluginManager:install(plugin):done(function()
+ core.log("Successfully uninstalled plugin " .. plugin.name .. ".")
+ end)
+ end):fail(function()
+ core.error("Unknown plugin " .. name .. ".")
end)
end,
function(text)