From 5a30b97a03c7a71b0a1aa8383b5ee5e7a2c669e9 Mon Sep 17 00:00:00 2001 From: shuzijun Date: Sat, 18 Mar 2023 13:01:41 +0800 Subject: [PATCH] fix #613 --- CHANGELOG.md | 14 +++++++ README.md | 4 +- README_ZH.md | 4 +- doc/description.html | 10 ++--- gradle.properties | 2 +- .../actions/editor/OpenSolutionAction.java | 4 +- .../plugin/actions/tree/FavoriteAction.java | 2 +- .../actions/tree/FavoriteActionGroup.java | 3 ++ .../actions/tree/OpenSolutionAction.java | 2 +- .../plugin/manager/QuestionManager.java | 14 ++++++- .../leetcode/plugin/manager/ViewManager.java | 7 +++- .../leetcode/plugin/window/WindowFactory.java | 38 +++++++++++++------ 12 files changed, 76 insertions(+), 28 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 25183bf..fa91270 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,20 @@ [![捐赠][badge:donate-zh]][shuzijun-donate] [![内推][badge:referrals]][shuzijun-referrals] +## 8.7.0 + +### Added + +### Changed + +### Deprecated + +### Fixed +- fix [#613](https://github.com/shuzijun/leetcode-editor/issues/613) +- fix [#625](https://github.com/shuzijun/leetcode-editor/issues/625) + +### Removed + ## 8.6.0 ### Added diff --git a/README.md b/README.md index adacdd9..97b13b0 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ [![捐赠][badge:donate]][shuzijun-donate] [![内推][badge:referrals]][shuzijun-referrals] -

demo

+

demo

--- @@ -27,6 +27,8 @@ - Useful Links - [Login Help][gh:login-help] - [Custom Code][gh:custom-code] ([demo][gh:leetcode-question]) + + - **More open functions**: [shuzijun/lc-sdk](https://github.com/shuzijun/lc-sdk) ## Getting Started

start

diff --git a/README_ZH.md b/README_ZH.md index c171156..e931265 100644 --- a/README_ZH.md +++ b/README_ZH.md @@ -13,7 +13,7 @@ [![捐赠][badge:donate]][shuzijun-donate] [![内推][badge:referrals]][shuzijun-referrals] -

demo

+

demo

--- @@ -27,6 +27,8 @@ - 有用的链接 - [登录帮助][gh:login-help] - [自定义代码生成][gh:custom-code-zh] ([示例][gh:leetcode-question]) + + - **更开放的功能**: [shuzijun/lc-sdk](https://github.com/shuzijun/lc-sdk) ## 开始使用 diff --git a/doc/description.html b/doc/description.html index 42c034d..b76ecd3 100644 --- a/doc/description.html +++ b/doc/description.html @@ -17,15 +17,15 @@

Introduction


Getting Started

-

start

Local debugging

-

loacl

Configuration (configuration for first installation)

-

configconfig

Window

-

windowwindow

Menu

-

menumenu

diff --git a/gradle.properties b/gradle.properties index 9e6cee7..e13f162 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ pluginGroup = com.shuzijun.leetcode pluginName = leetcode-editor -pluginVersion = 8.6 +pluginVersion = 8.7 pluginSinceBuild = 203.0 pluginUntilBuild = diff --git a/src/main/java/com/shuzijun/leetcode/plugin/actions/editor/OpenSolutionAction.java b/src/main/java/com/shuzijun/leetcode/plugin/actions/editor/OpenSolutionAction.java index b8ff5e2..01d77bf 100644 --- a/src/main/java/com/shuzijun/leetcode/plugin/actions/editor/OpenSolutionAction.java +++ b/src/main/java/com/shuzijun/leetcode/plugin/actions/editor/OpenSolutionAction.java @@ -41,11 +41,11 @@ public void update(@NotNull AnActionEvent anActionEvent) { anActionEvent.getPresentation().setEnabled(false); return; } - Question question = QuestionManager.getQuestionByTitleSlug(leetcodeEditor.getTitleSlug(), anActionEvent.getProject()); + Question question = QuestionManager.getQuestionByTitleSlug(leetcodeEditor.getTitleSlug(), anActionEvent.getProject(), true); if (question != null) { anActionEvent.getPresentation().setEnabled(!Constant.ARTICLE_LIVE_NONE.equals(question.getArticleLive())); } else { - anActionEvent.getPresentation().setEnabled(false); + anActionEvent.getPresentation().setEnabled(true); } } diff --git a/src/main/java/com/shuzijun/leetcode/plugin/actions/tree/FavoriteAction.java b/src/main/java/com/shuzijun/leetcode/plugin/actions/tree/FavoriteAction.java index 40de352..531b855 100644 --- a/src/main/java/com/shuzijun/leetcode/plugin/actions/tree/FavoriteAction.java +++ b/src/main/java/com/shuzijun/leetcode/plugin/actions/tree/FavoriteAction.java @@ -38,7 +38,7 @@ public boolean isSelected(AnActionEvent anActionEvent) { if (questionView == null) { return false; } - Question cacheQuestion = QuestionManager.getQuestionByTitleSlug(questionView.getTitleSlug(), anActionEvent.getProject()); + Question cacheQuestion = QuestionManager.getQuestionByTitleSlug(questionView.getTitleSlug(), anActionEvent.getProject(),true); if (cacheQuestion == null) { return false; } diff --git a/src/main/java/com/shuzijun/leetcode/plugin/actions/tree/FavoriteActionGroup.java b/src/main/java/com/shuzijun/leetcode/plugin/actions/tree/FavoriteActionGroup.java index ba1874c..8c610c3 100644 --- a/src/main/java/com/shuzijun/leetcode/plugin/actions/tree/FavoriteActionGroup.java +++ b/src/main/java/com/shuzijun/leetcode/plugin/actions/tree/FavoriteActionGroup.java @@ -21,6 +21,9 @@ public class FavoriteActionGroup extends ActionGroup implements DumbAware { @Override public AnAction[] getChildren(AnActionEvent anActionEvent) { NavigatorAction navigatorAction = WindowFactory.getDataContext(anActionEvent.getProject()).getData(DataKeys.LEETCODE_PROJECTS_NAVIGATORACTION); + if (navigatorAction == null){ + return new AnAction[0]; + } List anActionList = Lists.newArrayList(); List tags = navigatorAction.getFind().getFilter(Constant.FIND_TYPE_LISTS); if (tags != null && !tags.isEmpty()) { diff --git a/src/main/java/com/shuzijun/leetcode/plugin/actions/tree/OpenSolutionAction.java b/src/main/java/com/shuzijun/leetcode/plugin/actions/tree/OpenSolutionAction.java index 4d13568..0703029 100644 --- a/src/main/java/com/shuzijun/leetcode/plugin/actions/tree/OpenSolutionAction.java +++ b/src/main/java/com/shuzijun/leetcode/plugin/actions/tree/OpenSolutionAction.java @@ -39,7 +39,7 @@ public void update(@NotNull AnActionEvent anActionEvent) { anActionEvent.getPresentation().setEnabled(false); return; } - Question question = QuestionManager.getQuestionByTitleSlug(questionView.getTitleSlug(), anActionEvent.getProject()); + Question question = QuestionManager.getQuestionByTitleSlug(questionView.getTitleSlug(), anActionEvent.getProject(), true); if (question == null) { return; } diff --git a/src/main/java/com/shuzijun/leetcode/plugin/manager/QuestionManager.java b/src/main/java/com/shuzijun/leetcode/plugin/manager/QuestionManager.java index 032793f..f2cdf27 100644 --- a/src/main/java/com/shuzijun/leetcode/plugin/manager/QuestionManager.java +++ b/src/main/java/com/shuzijun/leetcode/plugin/manager/QuestionManager.java @@ -16,6 +16,7 @@ import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; /** @@ -317,6 +318,11 @@ public static User getUser() { } public static Question getQuestionByTitleSlug(String titleSlug, Project project) { + return getQuestionByTitleSlug(titleSlug,project, false); + } + + public static Question getQuestionByTitleSlug(String titleSlug, Project project, boolean readOnlyCache) { + if (StringUtils.isBlank(titleSlug)) { return null; } @@ -327,9 +333,13 @@ public static Question getQuestionByTitleSlug(String titleSlug, Project project) try { Question question = new Question(); question.setTitleSlug(titleSlug); - if (ApplicationManager.getApplication().executeOnPooledThread(() -> { + Future questionFuture = ApplicationManager.getApplication().executeOnPooledThread(() -> { return getQuestion(question, project); - }).get()) { + }); + if (readOnlyCache) { + return null; + } + if (questionFuture.get()) { questionCache.put(key, question); } else { return null; diff --git a/src/main/java/com/shuzijun/leetcode/plugin/manager/ViewManager.java b/src/main/java/com/shuzijun/leetcode/plugin/manager/ViewManager.java index 1b19c84..bd82415 100644 --- a/src/main/java/com/shuzijun/leetcode/plugin/manager/ViewManager.java +++ b/src/main/java/com/shuzijun/leetcode/plugin/manager/ViewManager.java @@ -72,8 +72,11 @@ public static void loadAllServiceData(NavigatorAction navigatorAction, Project p PageInfo.Filters filters = pageInfo.getFilters(); if (StringUtils.isNotBlank(filters.getListId())) { List tagList = navigatorAction.getFind().getFilter(Constant.FIND_TYPE_LISTS); - Tag tag = tagList.stream().filter(t -> t.getSlug().equalsIgnoreCase(filters.getListId())).findAny().get(); - conformSet.retainAll(tag.getQuestions()); + Optional optional = tagList.stream().filter(t -> t.getSlug().equalsIgnoreCase(filters.getListId())).findAny(); + if (optional.isPresent()){ + Tag tag = optional.get(); + conformSet.retainAll(tag.getQuestions()); + } } if (CollectionUtils.isNotEmpty(filters.getTags())) { List tagList = navigatorAction.getFind().getFilter(Constant.FIND_TYPE_TAGS); diff --git a/src/main/java/com/shuzijun/leetcode/plugin/window/WindowFactory.java b/src/main/java/com/shuzijun/leetcode/plugin/window/WindowFactory.java index c254cdd..2318bc6 100644 --- a/src/main/java/com/shuzijun/leetcode/plugin/window/WindowFactory.java +++ b/src/main/java/com/shuzijun/leetcode/plugin/window/WindowFactory.java @@ -1,7 +1,7 @@ package com.shuzijun.leetcode.plugin.window; -import com.intellij.ide.DataManager; import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.openapi.actionSystem.DataProvider; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; @@ -16,9 +16,9 @@ import icons.LeetCodeEditorIcons; import org.apache.commons.lang.StringUtils; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import javax.swing.*; -import java.util.concurrent.atomic.AtomicReference; /** * @author shuzijun @@ -48,16 +48,17 @@ public void createToolWindowContent(@NotNull Project project, @NotNull ToolWindo @NotNull public static DataContext getDataContext(@NotNull Project project) { - AtomicReference dataContext = new AtomicReference<>(); - ApplicationManager.getApplication().invokeAndWait(() -> { - ToolWindow leetcodeToolWindows = ToolWindowManager.getInstance(project).getToolWindow(ID); - if (leetcodeToolWindows == null) { - dataContext.set(DataContext.EMPTY_CONTEXT); - } else { - dataContext.set(DataManager.getInstance().getDataContext(leetcodeToolWindows.getContentManager().getContent(0).getComponent())); - } - }); - return dataContext.get(); + ToolWindow leetcodeToolWindows = ToolWindowManager.getInstance(project).getToolWindow(ID); + if (leetcodeToolWindows == null) { + return DataContext.EMPTY_CONTEXT; + } + + JComponent navigatorPanel = leetcodeToolWindows.getContentManager().getContent(0).getComponent(); + if (navigatorPanel instanceof DataProvider){ + return new MyDataContext((DataProvider) navigatorPanel); + } + + return DataContext.EMPTY_CONTEXT; } public static void updateTitle(@NotNull Project project, String userName) { @@ -77,4 +78,17 @@ public static void activateToolWindow(@NotNull Project project) { leetcodeToolWindows.activate(null); } + public static class MyDataContext implements DataContext{ + private final DataProvider dataProvider; + + public MyDataContext(DataProvider dataProvider) { + this.dataProvider = dataProvider; + } + + @Override + public @Nullable Object getData(@NotNull String dataId) { + return dataProvider.getData(dataId); + } + } + }