diff --git a/lua/cp/cache.lua b/lua/cp/cache.lua index ba977a8..11471db 100644 --- a/lua/cp/cache.lua +++ b/lua/cp/cache.lua @@ -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 diff --git a/lua/cp/log.lua b/lua/cp/log.lua index 9c702b4..02bc5f4 100644 --- a/lua/cp/log.lua +++ b/lua/cp/log.lua @@ -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) diff --git a/lua/cp/setup.lua b/lua/cp/setup.lua index c821df2..0ee7725 100644 --- a/lua/cp/setup.lua +++ b/lua/cp/setup.lua @@ -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)