diff --git a/python/educational-core/resources/META-INF/plugin.xml b/python/educational-core/resources/META-INF/plugin.xml
index b3cf04f03d0c..7745070d43b6 100644
--- a/python/educational-core/resources/META-INF/plugin.xml
+++ b/python/educational-core/resources/META-INF/plugin.xml
@@ -191,7 +191,7 @@
-
+
diff --git a/python/educational-core/src/com/jetbrains/edu/learning/checker/StudyCheckTask.java b/python/educational-core/src/com/jetbrains/edu/learning/checker/StudyCheckTask.java
index 09e411d82931..d85f6b9f436b 100644
--- a/python/educational-core/src/com/jetbrains/edu/learning/checker/StudyCheckTask.java
+++ b/python/educational-core/src/com/jetbrains/edu/learning/checker/StudyCheckTask.java
@@ -84,6 +84,7 @@ public class StudyCheckTask extends com.intellij.openapi.progress.Task.Backgroun
else {
checkForEduCourse(indicator);
}
+ runAfterTaskCheckedActions();
}
}
@@ -141,26 +142,10 @@ public class StudyCheckTask extends com.intellij.openapi.progress.Task.Backgroun
if (myTask instanceof ChoiceTask) {
final Pair result = EduAdaptiveStepicConnector.checkChoiceTask(myProject, (ChoiceTask)myTask, user);
- processStepicCheckOutput(indicator, result);
+ processStepicCheckOutput(result);
}
else if (myTask instanceof TheoryTask) {
- final int lessonId = myTask.getLesson().getId();
- final boolean reactionPosted = EduAdaptiveStepicConnector.postRecommendationReaction(String.valueOf(lessonId),
- String.valueOf(user.getId()),
- EduAdaptiveStepicConnector.NEXT_RECOMMENDATION_REACTION);
-
- if (reactionPosted) {
- if (myStatusBeforeCheck != StudyStatus.Solved) {
- myTask.setStatus(StudyStatus.Solved);
- EduAdaptiveStepicConnector.addNextRecommendedTask(myProject, myTask.getLesson(), indicator,
- EduAdaptiveStepicConnector.NEXT_RECOMMENDATION_REACTION);
- }
- }
- else {
- ApplicationManager.getApplication().invokeLater(() ->
- StudyUtils
- .showErrorPopupOnToolbar(myProject, "Unable to get next recommendation"));
- }
+ myTask.setStatus(StudyStatus.Solved);
}
else {
final StudyTestsOutputParser.TestsOutput testOutput = getTestOutput(indicator);
@@ -172,26 +157,21 @@ public class StudyCheckTask extends com.intellij.openapi.progress.Task.Backgroun
}
else {
final Pair pair = EduAdaptiveStepicConnector.checkCodeTask(myProject, myTask, user);
- processStepicCheckOutput(indicator, pair);
+ processStepicCheckOutput(pair);
}
}
}
}
- private void processStepicCheckOutput(@NotNull ProgressIndicator indicator, @Nullable Pair pair) {
+ private void processStepicCheckOutput(@Nullable Pair pair) {
if (pair != null && pair.getFirst() != null) {
if (pair.getFirst()) {
onTaskSolved("Congratulations! Remote tests passed.");
- if (myStatusBeforeCheck != StudyStatus.Solved) {
- EduAdaptiveStepicConnector.addNextRecommendedTask(myProject, myTask.getLesson(), indicator,
- EduAdaptiveStepicConnector.NEXT_RECOMMENDATION_REACTION);
- }
}
else {
final String checkMessage = pair.getSecond();
onTaskFailed(checkMessage);
}
- runAfterTaskCheckedActions();
}
else {
ApplicationManager.getApplication().invokeLater(() -> {
diff --git a/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduAdaptiveStepicConnector.java b/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduAdaptiveStepicConnector.java
index d1da82314213..28e68911c615 100644
--- a/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduAdaptiveStepicConnector.java
+++ b/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduAdaptiveStepicConnector.java
@@ -62,6 +62,7 @@ public class EduAdaptiveStepicConnector {
public static final int NEXT_RECOMMENDATION_REACTION = 2;
public static final int TOO_HARD_RECOMMENDATION_REACTION = 0;
public static final int TOO_BORING_RECOMMENDATION_REACTION = -1;
+ public static final String LOADING_NEXT_RECOMMENDATION = "Loading Next Recommendation";
private static final Logger LOG = Logger.getInstance(EduAdaptiveStepicConnector.class);
private static final int CONNECTION_TIMEOUT = 60 * 1000;
private static final String CODE_TASK_TYPE = "code";
diff --git a/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduNextRecommendationCheckListener.java b/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduNextRecommendationCheckListener.java
new file mode 100644
index 000000000000..def744a3840d
--- /dev/null
+++ b/python/educational-core/src/com/jetbrains/edu/learning/stepic/EduNextRecommendationCheckListener.java
@@ -0,0 +1,36 @@
+package com.jetbrains.edu.learning.stepic;
+
+import com.intellij.openapi.progress.ProgressIndicator;
+import com.intellij.openapi.progress.ProgressManager;
+import com.intellij.openapi.project.Project;
+import com.jetbrains.edu.learning.checker.StudyCheckListener;
+import com.jetbrains.edu.learning.courseFormat.StudyStatus;
+import com.jetbrains.edu.learning.courseFormat.tasks.Task;
+import org.jetbrains.annotations.NotNull;
+
+public class EduNextRecommendationCheckListener implements StudyCheckListener {
+
+ private StudyStatus myStatusBeforeCheck;
+
+ @Override
+ public void beforeCheck(@NotNull Project project, @NotNull Task task) {
+ myStatusBeforeCheck = task.getStatus();
+ }
+
+ @Override
+ public void afterCheck(@NotNull Project project, @NotNull Task task) {
+ if (myStatusBeforeCheck == StudyStatus.Solved) {
+ return;
+ }
+ StudyStatus statusAfterCheck = task.getStatus();
+ if (statusAfterCheck != StudyStatus.Solved) {
+ return;
+ }
+ ProgressManager.getInstance().run(new com.intellij.openapi.progress.Task.Backgroundable(project, EduAdaptiveStepicConnector.LOADING_NEXT_RECOMMENDATION) {
+ @Override
+ public void run(@NotNull ProgressIndicator indicator) {
+ EduAdaptiveStepicConnector.addNextRecommendedTask(project, task.getLesson(), indicator, EduAdaptiveStepicConnector.NEXT_RECOMMENDATION_REACTION);
+ }
+ });
+ }
+}
diff --git a/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicAdaptiveReactionsPanel.java b/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicAdaptiveReactionsPanel.java
index 8aabf57e7144..a8d6d0fc418c 100644
--- a/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicAdaptiveReactionsPanel.java
+++ b/python/educational-core/src/com/jetbrains/edu/learning/stepic/StepicAdaptiveReactionsPanel.java
@@ -141,9 +141,9 @@ public class StepicAdaptiveReactionsPanel extends JPanel {
final com.jetbrains.edu.learning.courseFormat.tasks.Task task = StudyUtils.getCurrentTask(myProject);
if (task != null && task.getStatus() != StudyStatus.Solved) {
final ProgressIndicatorBase progress = new ProgressIndicatorBase();
- progress.setText("Loading Next Recommendation");
+ progress.setText(EduAdaptiveStepicConnector.LOADING_NEXT_RECOMMENDATION);
ProgressManager.getInstance().run(new Task.Backgroundable(myProject,
- "Loading Next Recommendation") {
+ EduAdaptiveStepicConnector.LOADING_NEXT_RECOMMENDATION) {
@Override
public void run(@NotNull ProgressIndicator indicator) {
StepicAdaptiveReactionsPanel.this.setEnabledRecursive(false);