irongit

A Neovim plugin enabling you to solve LeetCode problems.

fix: crash on `q_close_all`

kawreauthored
parent cb5f0c3commit df4dd2d1ca4b190aa68150dc4fb94eac72548474Browse files

5 files changed, +54 -21

+2-2lua/leetcode/api/utils.lua
@@ -203,8 +203,8 @@ end
203203 ---@param titles { questionId: integer, title: string }[]
204204 function utils.translate_titles(problems, titles)
205205 local map = {}
206- for _, t in ipairs(titles) do
207- map[t.questionId] = t.title
206+ for _, title in ipairs(titles) do
207+ map[title.questionId] = title.title
208208 end
209209
210210 return vim.tbl_map(function(p)
+3-3lua/leetcode/cache/cookie.lua
@@ -30,7 +30,7 @@ function Cookie.set(str)
3030 local _, aerr = auth_api.user()
3131
3232 if aerr then
33- Cookie.delete()
33+ require("leetcode.command").delete_cookie()
3434 return false
3535 else
3636 return true
@@ -55,13 +55,13 @@ function Cookie.get()
5555
5656 local contents = file:read()
5757 if not contents or type(contents) ~= "string" then
58- Cookie.delete()
58+ require("leetcode.command").delete_cookie()
5959 return
6060 end
6161
6262 local cookie = Cookie.parse(contents)
6363 if not cookie then
64- Cookie.delete()
64+ require("leetcode.command").delete_cookie()
6565 return
6666 end
6767
+22-8lua/leetcode/command/init.lua
@@ -2,6 +2,7 @@ local log = require("leetcode.logger")
22 local arguments = require("leetcode.command.arguments")
33 local config = require("leetcode.config")
44 local t = require("leetcode.translator")
5+local event = require("nui.utils.autocmd").event
56
67 ---@class lc.Commands
78 local cmd = {}
@@ -12,10 +13,16 @@ function cmd.deprecate(old_name, new_name)
1213 log.warn(("`%s` is deprecated, use `%s` instead."):format(old_name, new_name))
1314 end
1415
15-function cmd.cache_update() require("leetcode.cache").update() end
16+function cmd.cache_update()
17+ require("leetcode.utils").auth_guard()
18+
19+ require("leetcode.cache").update()
20+end
1621
1722 ---@param options table<string, string[]>
1823 function cmd.problems(options)
24+ require("leetcode.utils").auth_guard()
25+
1926 local async = require("plenary.async")
2027 local problems = require("leetcode.cache.problemlist")
2128
@@ -65,8 +72,10 @@ function cmd.cookie_prompt(cb)
6572 end,
6673 })
6774
68- input:map("n", { "<Esc>", "q" }, function() input:unmount() end)
6975 input:mount()
76+
77+ input:map("n", { "<Esc>", "q" }, function() input:unmount() end)
78+ input:on(event.BufLeave, function() input:unmount() end)
7079 end
7180
7281 function cmd.sign_out()
@@ -78,6 +87,7 @@ end
7887
7988 ---Sign out
8089 function cmd.delete_cookie()
90+ config.auth = {}
8191 local cookie = require("leetcode.cache.cookie")
8292 cookie.delete()
8393 end
@@ -97,12 +107,12 @@ function cmd.expire()
97107
98108 cmd.cookie_prompt(function(success)
99109 if success then
100- if vim.api.nvim_tabpage_is_valid(tabp) then vim.cmd.tabnext(tabp) end
110+ if vim.api.nvim_tabpage_is_valid(tabp) then pcall(vim.cmd.tabnext, tabp) end
101111 log.info("Successful re-login")
102112 else
103113 cmd.delete_cookie()
104114 cmd.menu_layout("signin")
105- cmd.q_close_all()
115+ vim.schedule(cmd.q_close_all)
106116 end
107117 end)
108118 end
@@ -111,6 +121,8 @@ end
111121 ---
112122 --@param theme lc-db.Theme
113123 function cmd.qot()
124+ require("leetcode.utils").auth_guard()
125+
114126 local problems = require("leetcode.api.problems")
115127 local Question = require("leetcode.ui.question")
116128
@@ -122,16 +134,16 @@ function cmd.qot()
122134 end
123135
124136 function cmd.random_question()
137+ require("leetcode.utils").auth_guard()
138+
125139 local problems = require("leetcode.cache.problemlist")
126140 local question = require("leetcode.api.question")
127141
128142 local q, err = question.random()
129143 if err then return log.err(err) end
130144
131- if q then
132- local item = problems.get_by_title_slug(q.title_slug) or {}
133- require("leetcode.ui.question"):init(item)
134- end
145+ local item = problems.get_by_title_slug(q.title_slug) or {}
146+ require("leetcode.ui.question"):init(item)
135147 end
136148
137149 function cmd.menu()
@@ -175,12 +187,14 @@ end
175187
176188 function cmd.q_run()
177189 local utils = require("leetcode.utils")
190+ utils.auth_guard()
178191 local q = utils.curr_question()
179192 if q then q.console:run() end
180193 end
181194
182195 function cmd.q_submit()
183196 local utils = require("leetcode.utils")
197+ utils.auth_guard()
184198 local q = utils.curr_question()
185199 if q then q.console:submit() end
186200 end
+17-8lua/leetcode/config/template.lua
@@ -28,6 +28,15 @@
2828 ---| "LeetEnter"
2929 ---| "LeetQuestionNew"
3030
31+---@alias lc.size
32+---| string
33+---| number
34+---| { width: string | number, height: string | number }
35+
36+---@alias lc.position "top" | "right" | "bottom" | "left"
37+
38+---@alias lc.direction "col" | "row"
39+
3140 ---@class lc.UserConfig
3241 local M = {
3342 ---@type string
@@ -55,28 +64,28 @@ local M = {
5564 console = {
5665 open_on_runcode = true, ---@type boolean
5766
58- dir = "row", ---@type "col" | "row"
67+ dir = "row", ---@type lc.direction
5968
60- size = {
61- width = "90%", ---@type string | integer
62- height = "75%", ---@type string | integer
69+ size = { ---@type lc.size
70+ width = "90%",
71+ height = "75%",
6372 },
6473
6574 result = {
66- size = "60%", ---@type string | integer
75+ size = "60%", ---@type lc.size
6776 },
6877
6978 testcase = {
7079 virt_text = true, ---@type boolean
7180
72- size = "40%", ---@type string | integer
81+ size = "40%", ---@type lc.size
7382 },
7483 },
7584
7685 description = {
77- position = "left", ---@type "top" | "right" | "bottom" | "left"
86+ position = "left", ---@type lc.position
7887
79- width = "40%", ---@type string | integer
88+ width = "40%", ---@type lc.size
8089 },
8190
8291 hooks = {
+10-0lua/leetcode/utils.lua
@@ -138,4 +138,14 @@ function utils.translate(content, translated_content)
138138 end
139139 end
140140
141+function utils.auth_guard()
142+ -- if not config.auth.is_signed_in then
143+ -- local log = require("leetcode.logger")
144+ -- log.error("User not logged-in")
145+ -- return false
146+ -- end
147+ -- require("leetcode.logger").info(config.auth)
148+ assert(config.auth.is_signed_in, "User not logged-in")
149+end
150+
141151 return utils