aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/plugin_manager/init.lua20
-rw-r--r--plugins/plugin_manager/plugin_view.lua74
2 files changed, 64 insertions, 30 deletions
diff --git a/plugins/plugin_manager/init.lua b/plugins/plugin_manager/init.lua
index eea9efb..9dee036 100644
--- a/plugins/plugin_manager/init.lua
+++ b/plugins/plugin_manager/init.lua
@@ -21,7 +21,7 @@ config.plugins.plugin_manager = common.merge({
cachdir = USERDIR .. PATHSEP .. "lpm",
-- Path to the folder that holds user-specified plugins.
userdir = USERDIR,
- -- Path to ssl certificate directory.
+ -- Path to ssl certificate directory or bunde. Nil will auto-detect.
ssl_certs = nil,
-- Whether or not to force install things.
force = false,
@@ -165,6 +165,17 @@ function PluginManager:refresh(progress)
end
+function PluginManager:upgrade(progress)
+ local prom = Promise.new()
+ run({ "update" }, progress):done(function()
+ run({ "upgrade" }, progress):done(function()
+ prom:resolve()
+ end)
+ end)
+ return prom
+end
+
+
function PluginManager:get_addons()
local prom = Promise.new()
if self.addons then
@@ -227,7 +238,7 @@ command.add(nil, {
function(name)
PluginManager:get_addon(name):done(function(addon)
core.log("Attempting to install plugin " .. name .. "...")
- PluginManager:install(addon):done(function()
+ PluginManager:install(addon, PluginManager.view.progress_callback):done(function()
core.log("Successfully installed plugin " .. addon.id .. ".")
end)
end):fail(function()
@@ -252,7 +263,7 @@ command.add(nil, {
function(name)
PluginManager:get_addon(name):done(function(addon)
core.log("Attempting to uninstall plugin " .. addon.id .. "...")
- PluginManager:install(addon):done(function()
+ PluginManager:uninstall(addon, PluginManager.view.progress_callback):done(function()
core.log("Successfully uninstalled plugin " .. addon.id .. ".")
end)
end):fail(function()
@@ -299,7 +310,8 @@ command.add(nil, {
end
)
end,
- ["plugin-manager:refresh"] = function() PluginManager:refresh():done(function() core.log("Successfully refreshed plugin listing.") end) end,
+ ["plugin-manager:refresh"] = function() PluginManager:refresh(PluginManager.view.progress_callback):done(function() core.log("Successfully refreshed plugin listing.") end) end,
+ ["plugin-manager:upgrade"] = function() PluginManager:upgrade(PluginManager.view.progress_callback):done(function() core.log("Successfully upgraded installed plugins.") end) end,
["plugin-manager:show"] = function()
local node = core.root_view:get_active_node_default()
node:add_view(PluginManager.view(PluginManager))
diff --git a/plugins/plugin_manager/plugin_view.lua b/plugins/plugin_manager/plugin_view.lua
index 98dcc7b..1f16b3c 100644
--- a/plugins/plugin_manager/plugin_view.lua
+++ b/plugins/plugin_manager/plugin_view.lua
@@ -23,12 +23,6 @@ end
local plugin_view = nil
PluginView.menu = ContextMenu()
-PluginView.menu:register(nil, {
- { text = "Install", command = "plugin-manager:install-hovered" },
- { text = "Uninstall", command = "plugin-manager:uninstall-hovered" },
- { text = "View Source", command = "plugin-manager:view-source-hovered" }
-})
-
function PluginView:new()
PluginView.super.new(self)
self.scrollable = true
@@ -46,10 +40,7 @@ function PluginView:new()
self.progress = progress
core.redraw = true
end
- self.plugin_manager:refresh(self.progress_callback):done(function()
- self.initialized = true
- self:refresh()
- end)
+ self:refresh()
plugin_view = self
end
@@ -104,22 +95,27 @@ end
function PluginView:refresh()
- self.widths = {}
- for i,v in ipairs(self.plugin_table_columns) do
- table.insert(self.widths, style.font:get_width(v))
- end
- for i, plugin in ipairs(self:get_plugins()) do
- local t = { get_plugin_text(plugin) }
- for j = 1, #self.widths do
- self.widths[j] = math.max(style.font:get_width(t[j] or ""), self.widths[j])
+ self.loading = true
+ return self.plugin_manager:refresh(self.progress_callback):done(function()
+ self.loading = false
+ self.initialized = true
+ self.widths = {}
+ for i,v in ipairs(self.plugin_table_columns) do
+ table.insert(self.widths, style.font:get_width(v))
end
- end
- local max = 0
- if self.widths then
- for i, v in ipairs(self.widths) do max = max + v end
- end
- self.max_width = max + style.padding.x * #self.widths
- core.redraw = true
+ for i, plugin in ipairs(self:get_plugins()) do
+ local t = { get_plugin_text(plugin) }
+ for j = 1, #self.widths do
+ self.widths[j] = math.max(style.font:get_width(t[j] or ""), self.widths[j])
+ end
+ end
+ local max = 0
+ if self.widths then
+ for i, v in ipairs(self.widths) do max = max + v end
+ end
+ self.max_width = max + style.padding.x * #self.widths
+ core.redraw = true
+ end)
end
@@ -154,7 +150,7 @@ function PluginView:draw()
local th = style.font:get_height()
local lh = th + style.padding.y
- if not self.initialized then
+ if not self.initialized or not self.widths then
common.draw_text(style.big_font, style.dim, "Loading...", "center", self.position.x, self.position.y, self.size.x, self.size.y)
local width = self.size.x / 2
local offset_y = self.size.y / 2
@@ -231,6 +227,15 @@ function PluginView:reinstall(plugin)
end)
end
+
+function PluginView:upgrade()
+ self.loading = true
+ return self.plugin_manager:upgrade(self.progress_callback):done(function()
+ self.loading = false
+ self.selected_plugin, plugin_view.selected_plugin_idx = nil, nil
+ end)
+end
+
command.add(PluginView, {
["plugin-manager:select"] = function(x, y)
plugin_view.selected_plugin, plugin_view.selected_plugin_idx = plugin_view.hovered_plugin, plugin_view.hovered_plugin_idx
@@ -282,6 +287,12 @@ command.add(PluginView, {
end,
["plugin-manager:scroll-page-bottom"] = function()
plugin_view.scroll.to.y = plugin_view:get_scrollable_size()
+ end,
+ ["plugin-manager:refresh-all"] = function() -- Separate command from `refresh`, because we want to only have the keycombo be valid on the plugin view screen.
+ plugin_view:refresh():done(function() core.log("Successfully refreshed plugin listing.") end)
+ end,
+ ["plugin-manager:upgrade-all"] = function()
+ plugin_view:upgrade():done(function() core.log("Successfully upgraded installed plugins.") end)
end
})
command.add(function()
@@ -332,9 +343,20 @@ keymap.add {
["end"] = "plugin-manager:scroll-page-bottom",
["lclick"] = "plugin-manager:select",
["ctrl+f"] = "plugin-manager:find",
+ ["ctrl+r"] = "plugin-manager:refresh-all",
+ ["ctrl+u"] = "plugin-manager:upgrade-all",
["2lclick"] = { "plugin-manager:install-selected", "plugin-manager:uninstall-selected" },
["return"] = { "plugin-manager:install-selected", "plugin-manager:uninstall-selected" }
}
+PluginView.menu:register(nil, {
+ { text = "Install", command = "plugin-manager:install-hovered" },
+ { text = "Uninstall", command = "plugin-manager:uninstall-hovered" },
+ { text = "View Source", command = "plugin-manager:view-source-hovered" },
+ ContextMenu.DIVIDER,
+ { text = "Refresh Listing", command = "plugin-manager:refresh-all" },
+ { text = "Upgrade All", command = "plugin-manager:upgrade-all" },
+})
+
return PluginView