Skip to content

Commit

Permalink
fix: an attempt to fix intermittent ui freezes
Browse files Browse the repository at this point in the history
  • Loading branch information
vyfor committed Dec 21, 2024
1 parent 20e02e3 commit e53bf20
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 63 deletions.
92 changes: 51 additions & 41 deletions lua/cord.lua
Original file line number Diff line number Diff line change
Expand Up @@ -5,67 +5,72 @@ local logger = require 'cord.util.logger'
local M = {}

function M.initialize()
local client = ipc.new(config.values)
client:connect(function()
M.client = ipc.new(config.values)
M.client:connect(function()
local file_manager = require 'cord.util.file_manager'
local Producer = require 'cord.event.sender'
local Handler = require 'cord.event.receiver'
local uv = vim.loop or vim.uv

M.producer = Producer.new(client)
M.handler = Handler.new(client)
M.handler:register(
'initialize',
vim.schedule_wrap(function(pid)
local executable = file_manager.get_executable_name()
local target_path = file_manager.get_target_path(executable)
uv.fs_stat(target_path, function(err)
if not err then
client:on_close(function()
file_manager.get_executable(pid, function(_, err, moved)
M.producer = Producer.new(M.client)
M.handler = Handler.new(M.client)
M.handler:register('initialize', function(pid)
local executable = file_manager.get_executable_name()
local target_path = file_manager.get_target_path(executable)
uv.fs_stat(target_path, function(err)
if not err then
M.client:on_close(function()
file_manager.get_executable(
pid,
vim.schedule_wrap(function(_, err, moved)
if err then
logger.error(err)
return
end

if moved then
client:close()
M.client:close()
M.initialize()
end
end)
end)
M.producer:shutdown()
else
M.handler:register(
'ready',
vim.schedule_wrap(function()
logger.info 'Connected to Discord'
)
end)
M.producer:shutdown()
else
M.handler:register(
'ready',
vim.schedule_wrap(function()
logger.info 'Connected to Discord'

local ActivityManager = require 'cord.activity.manager'
local ActivityManager = require 'cord.activity.manager'

M.producer:initialize(config.values)
M.producer:initialize(config.values)

ActivityManager.new(
{ tx = M.producer, config = config.values },
vim.schedule_wrap(function(manager)
M.manager = manager
M.manager = ActivityManager.new(
{ tx = M.producer, config = config.values },
vim.schedule_wrap(function(manager)
M.client:on_close(vim.schedule_wrap(function()
if config.values.hooks.on_disconnect then
config.values.hooks.on_disconnect()
end

client:on_close(vim.schedule_wrap(function()
if config.values.hooks.on_disconnect then
config.values.hooks.on_disconnect()
end
manager:pause()
end))
manager:run()
end)
)

manager:pause()
end))
manager:run()
end)
)
end)
)
end
end)
vim.cmd [[
augroup Cord
autocmd!
autocmd VimLeavePre * lua require'cord'.cleanup()
augroup END
]]
end)
)
end
end)
)
end)

M.handler:run()
end)
Expand All @@ -77,4 +82,9 @@ function M.setup(opts)
if config:validate(opts or {}) then M.initialize() end
end

function M.cleanup()
if M.manager then M.manager.idle_timer:close() end
if M.client then M.client:close() end
end

return M
25 changes: 11 additions & 14 deletions lua/cord/core/ipc.lua
Original file line number Diff line number Diff line change
Expand Up @@ -24,24 +24,21 @@ function IPC:connect(callback)
local pipe = uv.new_pipe()
self.pipe = pipe

pipe:connect(
self.path,
vim.schedule_wrap(function(err)
if err then
if err == 'ENOENT' then
spawn.spawn_server(self, function() self:connect(callback) end)
return
else
logger.error('Failed to connect to pipe: ' .. err)
end
pipe:connect(self.path, function(err)
if err then
if err == 'ENOENT' then
spawn.spawn_server(self, function() self:connect(callback) end)
return
else
logger.error('Failed to connect to pipe: ' .. err)
end
return
end

logger.debug('Connected to pipe: ' .. self.path)
logger.debug('Connected to pipe: ' .. self.path)

if callback then callback() end
end)
)
if callback then callback() end
end)
end

function IPC:read_start(callback)
Expand Down
19 changes: 11 additions & 8 deletions lua/cord/core/spawn.lua
Original file line number Diff line number Diff line change
Expand Up @@ -55,15 +55,18 @@ function M.spawn_server(client, callback)
local executable = client.config.advanced.server.executable_path

if not executable then
file_manager.get_executable(nil, function(executable_path, err)
if err then
logger.error(err)
return
end
file_manager.get_executable(
nil,
vim.schedule_wrap(function(executable_path, err)
if err then
logger.error(err)
return
end

executable = executable_path
spawn(executable, client, callback)
end)
executable = executable_path
spawn(executable, client, callback)
end)
)
else
spawn(executable, client, callback)
end
Expand Down

0 comments on commit e53bf20

Please sign in to comment.