fix: compare hash before change

this anticipates a fix that is going to land in 0.8.3
This commit is contained in:
əlemi 2024-10-27 19:54:43 +01:00
parent d15336cb4a
commit 1543625bd5
Signed by: alemi
GPG key ID: A4895B84D311642C

View file

@ -136,6 +136,30 @@ local function attach(name, opts)
while true do
local event = controller:try_recv():await()
if event == nil then break end
-- error detection
if event.hash ~= nil and CODEMP.native.hash(utils.buffer.get_content(buffer)) ~= event.hash then
if CODEMP.config.auto_sync then
print(" /!\\ out of sync, resynching...")
utils.buffer.set_content(buffer, controller:content():await())
else
vim.ui.select(
{ "sync", "detach" },
{ prompt = "out of sync! force resync or detach?" },
function (choice)
if choice == "sync" then
utils.buffer.set_content(buffer, controller:content():await())
end
if choice == "detach" then
detach(name)
end
end
)
end
break
end
ticks[buffer] = vim.api.nvim_buf_get_changedtick(buffer)
CODEMP.ignore_following_action = true
if CODEMP.config.debug then
@ -143,32 +167,6 @@ local function attach(name, opts)
end
utils.buffer.set_content(buffer, event.change.content, event.change.start_idx, event.change.end_idx)
controller:ack(event.version)
-- error detection
if event.hash ~= nil then
if CODEMP.native.hash(utils.buffer.get_content(buffer)) ~= event.hash then
if CODEMP.config.auto_sync then
print(" /!\\ out of sync, resynching...")
utils.buffer.set_content(buffer, controller:content():await())
else
vim.ui.select(
{ "sync", "detach" },
{ prompt = "out of sync! force resync or detach?" },
function (choice)
if not choice then return end
if choice == "sync" then
utils.buffer.set_content(buffer, controller:content():await())
end
if choice == "detach" then
detach(name)
end
end
)
end
break
end
end
end
lock = false
end))