From f5390573cd9d303687fe01fe320d341d3a4508ff Mon Sep 17 00:00:00 2001 From: IcathianRain <2205794866@qq.com> Date: Sun, 27 Oct 2024 12:38:01 +0800 Subject: [PATCH 1/2] feat: add daily challenge problem pick (#919) * feat: add daily chanllenge problem pick, both work on us and cn endpoint --- package.json | 13 ++++++++- src/commands/show.ts | 11 ++++++++ src/extension.ts | 1 + src/request/query-daily-problem.ts | 14 ++++++++++ src/shared.ts | 45 ++++++++++++++++++++++++++++++ 5 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 src/request/query-daily-problem.ts diff --git a/package.json b/package.json index 53552b7..433e9d8 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "onCommand:leetcode.manageSessions", "onCommand:leetcode.refreshExplorer", "onCommand:leetcode.pickOne", + "onCommand:leetcode.pickDaily", "onCommand:leetcode.showProblem", "onCommand:leetcode.previewProblem", "onCommand:leetcode.searchProblem", @@ -82,6 +83,11 @@ "title": "Pick One", "category": "LeetCode" }, + { + "command": "leetcode.pickDaily", + "title": "Pick Daily Problem", + "category": "LeetCode" + }, { "command": "leetcode.showProblem", "title": "Show Problem", @@ -193,9 +199,14 @@ "group": "overflow@2" }, { - "command": "leetcode.problems.sort", + "command": "leetcode.pickDaily", "when": "view == leetCodeExplorer", "group": "overflow@3" + }, + { + "command": "leetcode.problems.sort", + "when": "view == leetCodeExplorer", + "group": "overflow@4" } ], "view/item/context": [ diff --git a/src/commands/show.ts b/src/commands/show.ts index eccf557..7e2c62c 100644 --- a/src/commands/show.ts +++ b/src/commands/show.ts @@ -30,6 +30,7 @@ import { leetCodeSolutionProvider } from "../webview/leetCodeSolutionProvider"; import * as list from "./list"; import { getLeetCodeEndpoint } from "./plugin"; import { globalState } from "../globalState"; +import { queryDailyProblem } from "../request/query-daily-problem"; export async function previewProblem(input: IProblem | vscode.Uri, isSideMode: boolean = false): Promise { let node: IProblem; @@ -70,6 +71,16 @@ export async function pickOne(): Promise { await showProblemInternal(randomProblem); } +export async function pickDaily(): Promise { + const dailyProblemID: string = await queryDailyProblem(); + const node: IProblem | undefined = explorerNodeManager.getNodeById(dailyProblemID); + if (!node) { + vscode.window.showErrorMessage(`Failed to resolve the problem with id: ${dailyProblemID}.`); + return; + } + await showProblemInternal(node); +} + export async function showProblem(node?: LeetCodeNode): Promise { if (!node) { return; diff --git a/src/extension.ts b/src/extension.ts index 439673f..7599418 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -71,6 +71,7 @@ export async function activate(context: vscode.ExtensionContext): Promise }), vscode.commands.registerCommand("leetcode.showProblem", (node: LeetCodeNode) => show.showProblem(node)), vscode.commands.registerCommand("leetcode.pickOne", () => show.pickOne()), + vscode.commands.registerCommand("leetcode.pickDaily", () => show.pickDaily()), vscode.commands.registerCommand("leetcode.searchProblem", () => show.searchProblem()), vscode.commands.registerCommand("leetcode.showSolution", (input: LeetCodeNode | vscode.Uri) => show.showSolution(input)), vscode.commands.registerCommand("leetcode.refreshExplorer", () => leetCodeTreeDataProvider.refresh()), diff --git a/src/request/query-daily-problem.ts b/src/request/query-daily-problem.ts new file mode 100644 index 0000000..da3cbb9 --- /dev/null +++ b/src/request/query-daily-problem.ts @@ -0,0 +1,14 @@ +import { getUrl, getDailyQueryStr, getDailyProblemID } from "../shared"; +import { LcAxios } from "../utils/httpUtils"; + + +export const queryDailyProblem = async (): Promise => { + return LcAxios(getUrl("graphql"), { + method: "POST", + data: { + query: getDailyQueryStr(), + variables: {}, + operationName: "questionOfToday" + }, + }).then((res) => getDailyProblemID(res)); +}; diff --git a/src/shared.ts b/src/shared.ts index e8b59d8..ddc459c 100644 --- a/src/shared.ts +++ b/src/shared.ts @@ -2,6 +2,7 @@ // Licensed under the MIT license. import * as vscode from "vscode"; +import { AxiosResponse } from "axios"; export interface IQuickItemEx extends vscode.QuickPickItem { value: T; @@ -156,3 +157,47 @@ export const getUrl = (key: string) => { return urls[key]; } }; + +export const dailyQueryStr = ` + query questionOfToday { + activeDailyCodingChallengeQuestion { + question { + frontendQuestionId: questionFrontendId + } + } + } +`; + +export const dailyQueryStrCn = ` + query questionOfToday { + todayRecord { + question { + questionId + } + } + } +`; + +export const getDailyQueryStr = () => { + const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode"); + const point = leetCodeConfig.get("endpoint", Endpoint.LeetCode); + switch (point) { + case Endpoint.LeetCodeCN: + return dailyQueryStrCn; + case Endpoint.LeetCode: + default: + return dailyQueryStr; + } +}; + +export const getDailyProblemID = (res : AxiosResponse) => { + const leetCodeConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("leetcode"); + const point = leetCodeConfig.get("endpoint", Endpoint.LeetCode); + switch (point) { + case Endpoint.LeetCodeCN: + return res.data.data.todayRecord[0].question.questionId; + case Endpoint.LeetCode: + default: + return res.data.data.activeDailyCodingChallengeQuestion.question.frontendQuestionId; + } +} From 85bb11f602caab6caff353f09b7a9376f1bf47bc Mon Sep 17 00:00:00 2001 From: IcathianRain <2205794866@qq.com> Date: Tue, 29 Oct 2024 08:25:44 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=90=9E=20fix(DailyPicak):=20Fix=20Pro?= =?UTF-8?q?blem=20ID=20field?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit + Fix the daily question query string on leetcodeCN + Fix the daily question id field --- src/shared.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/shared.ts b/src/shared.ts index ddc459c..f8542e6 100644 --- a/src/shared.ts +++ b/src/shared.ts @@ -172,7 +172,7 @@ export const dailyQueryStrCn = ` query questionOfToday { todayRecord { question { - questionId + frontendQuestionId: questionFrontendId } } } @@ -195,7 +195,7 @@ export const getDailyProblemID = (res : AxiosResponse) => { const point = leetCodeConfig.get("endpoint", Endpoint.LeetCode); switch (point) { case Endpoint.LeetCodeCN: - return res.data.data.todayRecord[0].question.questionId; + return res.data.data.todayRecord[0].question.frontendQuestionId; case Endpoint.LeetCode: default: return res.data.data.activeDailyCodingChallengeQuestion.question.frontendQuestionId; pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy