refactor(cache): nest credentials under platform namespace

Problem: credentials lived in a top-level _credentials namespace,
requiring special preservation logic in clear_all() and a separate
key hierarchy from the platform data they belong to.

Solution: move credentials from _credentials.<platform> to
<platform>._credentials. Migrate v1 caches on load, skip underscore-
prefixed keys when enumerating contest IDs and summaries, and simplify
clear_all() now that no special preservation is needed.
This commit is contained in:
Barrett Ruth 2026-03-04 13:15:29 -05:00
parent 29cb81eca2
commit f2e312f860
Signed by: barrett
GPG key ID: A6C96C9349D2FC81

View file

@ -40,7 +40,7 @@
local M = {}
local CACHE_VERSION = 1
local CACHE_VERSION = 2
local cache_file = vim.fn.stdpath('data') .. '/cp-nvim.json'
local cache_data = {}
@ -67,13 +67,27 @@ function M.load()
end
local ok, decoded = pcall(vim.json.decode, table.concat(content, '\n'))
if ok then
if decoded._version ~= CACHE_VERSION then
cache_data = {}
M.save()
else
cache_data = decoded
if not ok then
cache_data = {}
M.save()
loaded = true
return
end
if decoded._version == 1 then
local old_creds = decoded._credentials
decoded._credentials = nil
if old_creds then
for platform, creds in pairs(old_creds) do
decoded[platform] = decoded[platform] or {}
decoded[platform]._credentials = creds
end
end
decoded._version = CACHE_VERSION
cache_data = decoded
M.save()
elseif decoded._version == CACHE_VERSION then
cache_data = decoded
else
cache_data = {}
M.save()
@ -122,7 +136,9 @@ function M.get_cached_contest_ids(platform)
local contest_ids = {}
for contest_id, _ in pairs(cache_data[platform]) do
table.insert(contest_ids, contest_id)
if contest_id:sub(1, 1) ~= '_' then
table.insert(contest_ids, contest_id)
end
end
table.sort(contest_ids)
return contest_ids
@ -336,11 +352,13 @@ end
function M.get_contest_summaries(platform)
local contest_list = {}
for contest_id, contest_data in pairs(cache_data[platform] or {}) do
table.insert(contest_list, {
id = contest_id,
name = contest_data.name,
display_name = contest_data.display_name,
})
if contest_id:sub(1, 1) ~= '_' then
table.insert(contest_list, {
id = contest_id,
name = contest_data.name,
display_name = contest_data.display_name,
})
end
end
return contest_list
end
@ -374,38 +392,30 @@ end
---@param platform string
---@return table?
function M.get_credentials(platform)
if not cache_data._credentials then
if not cache_data[platform] then
return nil
end
return cache_data._credentials[platform]
return cache_data[platform]._credentials
end
---@param platform string
---@param creds table
function M.set_credentials(platform, creds)
cache_data._credentials = cache_data._credentials or {}
cache_data._credentials[platform] = creds
cache_data[platform] = cache_data[platform] or {}
cache_data[platform]._credentials = creds
M.save()
end
---@param platform string?
---@param platform string
function M.clear_credentials(platform)
if platform then
if cache_data._credentials then
cache_data._credentials[platform] = nil
end
else
cache_data._credentials = nil
if cache_data[platform] then
cache_data[platform]._credentials = nil
end
M.save()
end
function M.clear_all()
local creds = cache_data._credentials
cache_data = {}
if creds then
cache_data._credentials = creds
end
M.save()
end