mirror of
https://github.com/kristoferssolo/telescope-frecency.nvim.git
synced 2025-10-21 20:10:38 +00:00
feat!: validate DB before execution only if needed (#257)
With this commit, it validates DB in its init phase only if it is invoked by `:Telescope frecency` or `:FrecencyDelete`.
This commit is contained in:
parent
7634ec0d2d
commit
1b63e9453d
@ -24,9 +24,10 @@ local frecency = setmetatable({}, {
|
|||||||
return function(...)
|
return function(...)
|
||||||
if not instance() then
|
if not instance() then
|
||||||
rawset(self, "instance", require("frecency.klass").new(database))
|
rawset(self, "instance", require("frecency.klass").new(database))
|
||||||
local is_async = key == "delete" or key == "validate_database" or key == "register"
|
|
||||||
instance():setup(is_async)
|
|
||||||
end
|
end
|
||||||
|
local is_async = key == "delete" or key == "register" or key == "validate_database"
|
||||||
|
local need_cleanup = key == "delete" or key == "start"
|
||||||
|
instance():setup(is_async, need_cleanup)
|
||||||
return instance()[key](instance(), ...)
|
return instance()[key](instance(), ...)
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
|||||||
@ -13,7 +13,8 @@ local async = lazy_require "plenary.async" --[[@as FrecencyPlenaryAsync]]
|
|||||||
local STATUS = {
|
local STATUS = {
|
||||||
NEW = 0,
|
NEW = 0,
|
||||||
SETUP_CALLED = 1,
|
SETUP_CALLED = 1,
|
||||||
SETUP_FINISHED = 2,
|
DB_STARTED = 2,
|
||||||
|
CLEANUP_FINISHED = 3,
|
||||||
}
|
}
|
||||||
|
|
||||||
---@class Frecency
|
---@class Frecency
|
||||||
@ -33,23 +34,32 @@ end
|
|||||||
|
|
||||||
---This is called when `:Telescope frecency` is called at the first time.
|
---This is called when `:Telescope frecency` is called at the first time.
|
||||||
---@param is_async boolean
|
---@param is_async boolean
|
||||||
|
---@param need_cleanup boolean
|
||||||
---@return nil
|
---@return nil
|
||||||
function Frecency:setup(is_async)
|
function Frecency:setup(is_async, need_cleanup)
|
||||||
if self.status >= STATUS.SETUP_CALLED then
|
if self.status == STATUS.CLEANUP_FINISHED then
|
||||||
return
|
return
|
||||||
end
|
elseif self.status == STATUS.NEW then
|
||||||
self.status = STATUS.SETUP_CALLED
|
self.status = STATUS.SETUP_CALLED
|
||||||
|
end
|
||||||
timer.track "frecency.setup() start"
|
timer.track "frecency.setup() start"
|
||||||
|
|
||||||
---@async
|
---@async
|
||||||
local function init()
|
local function init()
|
||||||
|
if self.status == STATUS.SETUP_CALLED then
|
||||||
self.database:start()
|
self.database:start()
|
||||||
|
self.status = STATUS.DB_STARTED
|
||||||
|
timer.track "DB_STARTED"
|
||||||
|
end
|
||||||
|
if self.status == STATUS.DB_STARTED and need_cleanup then
|
||||||
self:assert_db_entries()
|
self:assert_db_entries()
|
||||||
if config.auto_validate then
|
if config.auto_validate then
|
||||||
self:validate_database()
|
self:validate_database()
|
||||||
end
|
end
|
||||||
|
self.status = STATUS.CLEANUP_FINISHED
|
||||||
|
timer.track "CLEANUP_FINISHED"
|
||||||
|
end
|
||||||
timer.track "frecency.setup() finish"
|
timer.track "frecency.setup() finish"
|
||||||
self.status = STATUS.SETUP_FINISHED
|
|
||||||
end
|
end
|
||||||
|
|
||||||
if is_async then
|
if is_async then
|
||||||
@ -62,7 +72,6 @@ function Frecency:setup(is_async)
|
|||||||
return
|
return
|
||||||
end
|
end
|
||||||
-- NOTE: This means init() has failed. Try again.
|
-- NOTE: This means init() has failed. Try again.
|
||||||
self.status = STATUS.NEW
|
|
||||||
self:error(status == -1 and "init() never returns during the time" or "init() is interrupted during the time")
|
self:error(status == -1 and "init() never returns during the time" or "init() is interrupted during the time")
|
||||||
end
|
end
|
||||||
|
|
||||||
@ -101,6 +110,18 @@ end
|
|||||||
---@param force? boolean
|
---@param force? boolean
|
||||||
---@return nil
|
---@return nil
|
||||||
function Frecency:validate_database(force)
|
function Frecency:validate_database(force)
|
||||||
|
self:_validate_database(force)
|
||||||
|
if self.status == STATUS.DB_STARTED then
|
||||||
|
self.status = STATUS.CLEANUP_FINISHED
|
||||||
|
end
|
||||||
|
timer.track "CLEANUP_FINISHED"
|
||||||
|
end
|
||||||
|
|
||||||
|
---@private
|
||||||
|
---@async
|
||||||
|
---@param force? boolean
|
||||||
|
---@return nil
|
||||||
|
function Frecency:_validate_database(force)
|
||||||
timer.track "validate_database() start"
|
timer.track "validate_database() start"
|
||||||
local unlinked = self.database:unlinked_entries()
|
local unlinked = self.database:unlinked_entries()
|
||||||
timer.track "validate_database() calculate unlinked"
|
timer.track "validate_database() calculate unlinked"
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user