refactor(sync): centralize with_token in oauth.lua with shared lock
Problem: `with_token` was duplicated in `gcal.lua` and `gtasks.lua`, with the concurrency lock added only to the gtasks copy. Any new backend would silently inherit the same race, and gcal back-to-back push could still create duplicate remote calendar events. Solution: lift `with_token` into `oauth.lua` as `M.with_token(client, name, callback)` behind a module-level `_sync_in_flight` guard. All backends share one implementation; the lock covers gcal, gtasks, and any future backend automatically.
This commit is contained in:
parent
36a5025198
commit
90f1378cb6
3 changed files with 29 additions and 39 deletions
|
|
@ -436,32 +436,9 @@ local function sync_setup(access_token)
|
|||
return tasklists, s, now_ts
|
||||
end
|
||||
|
||||
local _in_flight = false
|
||||
|
||||
---@param callback fun(access_token: string): nil
|
||||
local function with_token(callback)
|
||||
if _in_flight then
|
||||
log.warn('gtasks: operation in progress — please wait')
|
||||
return
|
||||
end
|
||||
_in_flight = true
|
||||
oauth.async(function()
|
||||
local token = oauth.google_client:get_access_token()
|
||||
if not token then
|
||||
_in_flight = false
|
||||
log.warn('not authenticated — run :Pending auth')
|
||||
return
|
||||
end
|
||||
local ok, err = pcall(callback, token)
|
||||
_in_flight = false
|
||||
if not ok then
|
||||
log.error('gtasks: ' .. tostring(err))
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
function M.push()
|
||||
with_token(function(access_token)
|
||||
oauth.with_token(oauth.google_client, 'gtasks', function(access_token)
|
||||
local tasklists, s, now_ts = sync_setup(access_token)
|
||||
if not tasklists then
|
||||
return
|
||||
|
|
@ -487,7 +464,7 @@ function M.push()
|
|||
end
|
||||
|
||||
function M.pull()
|
||||
with_token(function(access_token)
|
||||
oauth.with_token(oauth.google_client, 'gtasks', function(access_token)
|
||||
local tasklists, s, now_ts = sync_setup(access_token)
|
||||
if not tasklists then
|
||||
return
|
||||
|
|
@ -514,7 +491,7 @@ function M.pull()
|
|||
end
|
||||
|
||||
function M.sync()
|
||||
with_token(function(access_token)
|
||||
oauth.with_token(oauth.google_client, 'gtasks', function(access_token)
|
||||
local tasklists, s, now_ts = sync_setup(access_token)
|
||||
if not tasklists then
|
||||
return
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue