From 34ef7bafd6916baa6d8a50231e9956122250f9b4 Mon Sep 17 00:00:00 2001 From: Barrett Ruth Date: Fri, 3 Oct 2025 14:41:32 -0400 Subject: [PATCH] fix print order --- lua/cp/pickers/init.lua | 14 +++---- lua/cp/setup.lua | 82 +++++++++++++++-------------------------- 2 files changed, 34 insertions(+), 62 deletions(-) diff --git a/lua/cp/pickers/init.lua b/lua/cp/pickers/init.lua index 8a38ba9..143bb73 100644 --- a/lua/cp/pickers/init.lua +++ b/lua/cp/pickers/init.lua @@ -36,9 +36,8 @@ function M.get_platforms() return result end ----Get list of contests for a specific platform ----@param platform string Platform identifier (e.g. "codeforces", "atcoder") ----@param refresh? boolean Whether to skip caching and append new contests +---@param platform string +---@param refresh? boolean ---@return cp.ContestItem[] function M.get_platform_contests(platform, refresh) logger.log( @@ -48,24 +47,21 @@ function M.get_platform_contests(platform, refresh) ) cache.load() - local picker_contests = cache.get_contest_summaries(platform) if refresh or vim.tbl_isempty(picker_contests) then logger.log(('Cache miss on %s contests'):format(platform)) - local contests = scraper.scrape_contest_list(platform) - + local contests = scraper.scrape_contest_list(platform) -- sync cache.set_contest_summaries(platform, contests) + picker_contests = cache.get_contest_summaries(platform) -- <-- reload after write end logger.log( - ('Loaded %s %s contests.'):format(#picker_contests, constants.PLATFORM_DISPLAY_NAMES[platform]), + ('Loaded %d %s contests.'):format(#picker_contests, constants.PLATFORM_DISPLAY_NAMES[platform]), vim.log.levels.INFO, true ) - picker_contests = cache.get_contest_summaries(platform) - return picker_contests end diff --git a/lua/cp/setup.lua b/lua/cp/setup.lua index bfcd329..c821df2 100644 --- a/lua/cp/setup.lua +++ b/lua/cp/setup.lua @@ -57,6 +57,33 @@ function M.setup_contest(platform, contest_id, language, problem_id) state.set_contest_id(contest_id) cache.load() + local function proceed(contest_data) + local problems = contest_data.problems + local pid = problems[(problem_id and contest_data.index_map[problem_id] or 1)].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 + end, problems) + + if cached_len ~= #problems then + scraper.scrape_all_tests(platform, contest_id, function(ev) + local cached_tests = {} + for i, t in ipairs(ev.tests) do + cached_tests[i] = { index = i, input = t.input, expected = t.expected } + end + cache.set_test_cases( + platform, + contest_id, + ev.problem_id, + cached_tests, + ev.timeout_ms or 0, + ev.memory_mb or 0 + ) + end) + end + end + local contest_data = cache.get_contest_data(platform, contest_id) if not contest_data or not contest_data.problems then logger.log('Fetching contests problems...', vim.log.levels.INFO, true) @@ -64,63 +91,12 @@ function M.setup_contest(platform, contest_id, language, problem_id) local problems = result.problems or {} cache.set_contest_data(platform, contest_id, problems, result.name, result.display_name) logger.log(('Found %d problems for %s contest %s.'):format(#problems, platform, contest_id)) - - contest_data = cache.get_contest_data(platform, contest_id) - local pid = contest_data.problems[problem_id and contest_data.index_map[problem_id] or 1].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 - end, problems) - if cached_len < #problems then - scraper.scrape_all_tests(platform, contest_id, function(ev) - if not ev or not ev.tests or not ev.problem_id then - return - end - local cached_tests = {} - for i, t in ipairs(ev.tests) do - cached_tests[i] = { index = i, input = t.input, expected = t.expected } - end - cache.set_test_cases( - platform, - contest_id, - ev.problem_id, - cached_tests, - ev.timeout_ms or 0, - ev.memory_mb or 0 - ) - end) - end + proceed(cache.get_contest_data(platform, contest_id)) end) - return end - local problems = contest_data.problems - local pid = problems[(problem_id and contest_data.index_map[problem_id] or 1)].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 - end, problems) - if cached_len < #problems then - scraper.scrape_all_tests(platform, contest_id, function(ev) - if not ev or not ev.tests or not ev.problem_id then - return - end - local cached_tests = {} - for i, t in ipairs(ev.tests) do - cached_tests[i] = { index = i, input = t.input, expected = t.expected } - end - cache.set_test_cases( - platform, - contest_id, - ev.problem_id, - cached_tests, - ev.timeout_ms or 0, - ev.memory_mb or 0 - ) - end) - end + proceed(contest_data) end ---@param problem_id string