diff options
| author | William Boman <william@redwill.se> | 2025-03-03 16:50:31 +0100 |
|---|---|---|
| committer | William Boman <william@redwill.se> | 2025-03-03 16:53:49 +0100 |
| commit | 8960e33e797b55b7769947ec02b08aa3e291b1a4 (patch) | |
| tree | 7cbcee4d781cd7e72eecdaf8b478f38c99588fb2 /lua/mason-registry/installer.lua | |
| parent | fix(ui): fix initializing state (diff) | |
| download | mason-8960e33e797b55b7769947ec02b08aa3e291b1a4.tar mason-8960e33e797b55b7769947ec02b08aa3e291b1a4.tar.gz mason-8960e33e797b55b7769947ec02b08aa3e291b1a4.tar.bz2 mason-8960e33e797b55b7769947ec02b08aa3e291b1a4.tar.lz mason-8960e33e797b55b7769947ec02b08aa3e291b1a4.tar.xz mason-8960e33e797b55b7769947ec02b08aa3e291b1a4.tar.zst mason-8960e33e797b55b7769947ec02b08aa3e291b1a4.zip | |
refactor(registry)!: add events "update:success", "update:start", "update:progress" and "update:failed"
Diffstat (limited to 'lua/mason-registry/installer.lua')
| -rw-r--r-- | lua/mason-registry/installer.lua | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/lua/mason-registry/installer.lua b/lua/mason-registry/installer.lua index 5abbcd74..a5c9fe92 100644 --- a/lua/mason-registry/installer.lua +++ b/lua/mason-registry/installer.lua @@ -32,24 +32,35 @@ end ---@async ---@param sources LazySourceCollection +---@param on_progress fun(finished: RegistrySource[], all: RegistrySource[]) ---@return Result # Result<RegistrySource[]> -function M.install(sources) +function M.install(sources, on_progress) log.debug("Installing registries.", sources) assert(not M.channel, "Cannot install when channel is active.") M.channel = OneShotChannel:new() + local finished_registries = {} + local registries = sources:to_list { include_uninstalled = true } + local results = { a.wait_all(_.map( ---@param source RegistrySource function(source) return function() log.trace("Installing registry.", source) - return source:install():map(_.always(source)):map_err(function(err) - return ("%s failed to install: %s"):format(source, err) - end) + return source + :install() + :map(_.always(source)) + :map_err(function(err) + return ("%s failed to install: %s"):format(source, err) + end) + :on_success(function() + table.insert(finished_registries, source) + on_progress(finished_registries, registries) + end) end end, - sources:to_list { include_uninstalled = true } + registries )), } |
