From 252f972d5b0fe57d5c11b5af784c4742a0ded56d Mon Sep 17 00:00:00 2001 From: yangrui271 Date: Mon, 7 Apr 2025 18:09:38 +0800 Subject: [PATCH 1/2] Add leetcode top150 --- lua/leetcode-ui/group/page/problems.lua | 7 +++++++ lua/leetcode/api/problems.lua | 19 +++++++++++++++++++ lua/leetcode/api/queries.lua | 12 ++++++++++++ lua/leetcode/api/question.lua | 15 +++++++++++++++ lua/leetcode/cache/problemlist.lua | 8 ++++++++ lua/leetcode/command/init.lua | 18 ++++++++++++++++++ 6 files changed, 79 insertions(+) diff --git a/lua/leetcode-ui/group/page/problems.lua b/lua/leetcode-ui/group/page/problems.lua index 8e0cfcd..87c41c3 100644 --- a/lua/leetcode-ui/group/page/problems.lua +++ b/lua/leetcode-ui/group/page/problems.lua @@ -33,6 +33,12 @@ local daily = Button("Daily", { on_press = cmd.qot, }) +local top_interview = Button("Top Interview", { + icon = "🔝", + sc = "t", + on_press = cmd.top_interview_150, +}) + local back = BackButton("menu") page:insert(Buttons({ @@ -40,6 +46,7 @@ page:insert(Buttons({ random, daily, back, + top_interview, })) page:insert(footer) diff --git a/lua/leetcode/api/problems.lua b/lua/leetcode/api/problems.lua index 9049bb8..23d2085 100644 --- a/lua/leetcode/api/problems.lua +++ b/lua/leetcode/api/problems.lua @@ -110,6 +110,25 @@ function Problems.question_of_today(cb) }) end +function Problems.top_interview_150(cb) + local query = queries.study_plan_detail + + utils.query(query, { slug = "top-interview-150"}, { + callback = function(res, err) + if err then + return cb(nil, err) + end + local title_slugs = {} + for _, v in ipairs(res.data["studyPlanV2Detail"]["planSubGroups"]) do + for _, q in ipairs(v["questions"]) do + table.insert(title_slugs, q.title_slug) + end + end + return cb(title_slugs) + end + }) +end + function Problems.translated_titles(cb) local query = queries.translations diff --git a/lua/leetcode/api/queries.lua b/lua/leetcode/api/queries.lua index b835620..02b8276 100644 --- a/lua/leetcode/api/queries.lua +++ b/lua/leetcode/api/queries.lua @@ -178,5 +178,17 @@ queries.session_progress = [[ } } ]] + + queries.study_plan_detail = [[ + query studyPlanDetail($slug: String!) { + studyPlanV2Detail(planSlug: $slug) { + planSubGroups { + questions { + title_slug: titleSlug + } + } + } + } + ]] return queries diff --git a/lua/leetcode/api/question.lua b/lua/leetcode/api/question.lua index f76f561..65b17a3 100644 --- a/lua/leetcode/api/question.lua +++ b/lua/leetcode/api/question.lua @@ -34,6 +34,21 @@ function question.by_title_slug(title_slug) return q end +function question.get_top150() + local variables = { + slug = "top-interview-150" + } + local query = queries.top150 + + local res, err = utils.query(query, variables) + if not res or err then + return log.err(err) + end + + local q = res.data.studyPlanV2Detail.planSubGroups + +end + ---@param filters? table function question.random(filters) local variables = { diff --git a/lua/leetcode/cache/problemlist.lua b/lua/leetcode/cache/problemlist.lua index 13cbf0d..4b556ac 100644 --- a/lua/leetcode/cache/problemlist.lua +++ b/lua/leetcode/cache/problemlist.lua @@ -142,4 +142,12 @@ function Problemlist.delete() return pcall(path.rm, file) end +---@return lc.cache.Question +function Problemlist.get_by_title_slugs(title_slugs) + local problems = Problemlist.get() + return vim.tbl_filter(function(e) + return vim.tbl_contains(title_slugs, e.title_slug) + end, problems) +end + return Problemlist diff --git a/lua/leetcode/command/init.lua b/lua/leetcode/command/init.lua index a04d172..7c28152 100644 --- a/lua/leetcode/command/init.lua +++ b/lua/leetcode/command/init.lua @@ -612,6 +612,21 @@ function cmd.setup() }) end +function cmd.top_interview_150() + require("leetcode.utils").auth_guard() + + local problems = require("leetcode.api.problems") + + problems.top_interview_150(function(slugs, err) + if err then + return log.err(err) + end + local p = require("leetcode.cache.problemlist").get_by_title_slugs(slugs) + local picker = require("leetcode.picker") + picker.question(p) + end) +end + cmd.commands = { cmd.menu, @@ -668,6 +683,9 @@ cmd.commands = { cmd.fix, _private = true, }, + top_iterview = { + cmd.top_interview_150, + }, } return cmd From 160142ae54e1d16bd5b813fdfb3b71abb5e1dc89 Mon Sep 17 00:00:00 2001 From: yangrui271 Date: Mon, 7 Apr 2025 18:26:38 +0800 Subject: [PATCH 2/2] make it looks better --- lua/leetcode-ui/group/page/problems.lua | 2 +- lua/leetcode/command/init.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/leetcode-ui/group/page/problems.lua b/lua/leetcode-ui/group/page/problems.lua index 87c41c3..aaa2e66 100644 --- a/lua/leetcode-ui/group/page/problems.lua +++ b/lua/leetcode-ui/group/page/problems.lua @@ -45,8 +45,8 @@ page:insert(Buttons({ list, random, daily, - back, top_interview, + back, })) page:insert(footer) diff --git a/lua/leetcode/command/init.lua b/lua/leetcode/command/init.lua index 7c28152..1474289 100644 --- a/lua/leetcode/command/init.lua +++ b/lua/leetcode/command/init.lua @@ -683,7 +683,7 @@ cmd.commands = { cmd.fix, _private = true, }, - top_iterview = { + top_interview = { cmd.top_interview_150, }, }