fix(cache): contest override

This commit is contained in:
Barrett Ruth 2025-10-04 12:48:57 -04:00
parent a725925434
commit 18dbcd43d2
3 changed files with 11 additions and 9 deletions

View file

@ -92,9 +92,7 @@ end
---@param platform string
---@param contest_id string
---@param problems Problem[]
---@param contest_name? string
---@param display_name? string
function M.set_contest_data(platform, contest_id, problems, contest_name, display_name)
function M.set_contest_data(platform, contest_id, problems)
vim.validate({
platform = { platform, 'string' },
contest_id = { contest_id, 'string' },
@ -102,9 +100,11 @@ function M.set_contest_data(platform, contest_id, problems, contest_name, displa
})
cache_data[platform] = cache_data[platform] or {}
local prev = cache_data[platform][contest_id] or {}
local out = {
name = contest_name,
display_name = display_name,
name = prev.name,
display_name = prev.display_name,
problems = vim.deepcopy(problems),
index_map = {},
}
@ -151,7 +151,7 @@ function M.get_test_cases(platform, contest_id, problem_id)
end
local index = cache_data[platform][contest_id].index_map[problem_id]
return cache_data[platform][contest_id].problems[index].test_cases
return cache_data[platform][contest_id].problems[index].test_cases or {}
end
---@param platform string

View file

@ -1,8 +1,9 @@
local M = {}
function M.log(msg, level, override)
local debug = require('cp.config').get_config().debug or false
level = level or vim.log.levels.INFO
if level >= vim.log.levels.WARN or override then
if level >= vim.log.levels.WARN or override or debug then
vim.schedule(function()
vim.notify(('[cp.nvim]: %s'):format(msg), level)
end)

View file

@ -63,10 +63,11 @@ function M.setup_contest(platform, contest_id, language, problem_id)
M.setup_problem(pid, language)
local cached_len = #vim.tbl_filter(function(p)
return cache.get_test_cases(platform, contest_id, p.id) ~= nil
return not vim.tbl_isempty(cache.get_test_cases(platform, contest_id, p.id))
end, problems)
if cached_len ~= #problems then
logger.log(('Found %s problems, expected %s; re-fetching'):format(cached_len, #problems))
scraper.scrape_all_tests(platform, contest_id, function(ev)
local cached_tests = {}
for i, t in ipairs(ev.tests) do
@ -89,7 +90,7 @@ function M.setup_contest(platform, contest_id, language, problem_id)
logger.log('Fetching contests problems...', vim.log.levels.INFO, true)
scraper.scrape_contest_metadata(platform, contest_id, function(result)
local problems = result.problems or {}
cache.set_contest_data(platform, contest_id, problems, result.name, result.display_name)
cache.set_contest_data(platform, contest_id, problems)
logger.log(('Found %d problems for %s contest %s.'):format(#problems, platform, contest_id))
proceed(cache.get_contest_data(platform, contest_id))
end)