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]
-

+
---
@@ -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

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]
-
+
---
@@ -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
-

Local debugging
-

Configuration (configuration for first installation)
-

@@ -52,7 +52,7 @@ Configuration (configuration for first installation)
Window
-

Menu
-

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);
+ }
+ }
+
}