getting next recommendation in check listener (EDU-882)

This commit is contained in:
Liana.Bakradze
2017-04-18 17:11:17 +03:00
parent e58c91834a
commit ec8fc1825b
5 changed files with 45 additions and 28 deletions
@@ -191,7 +191,7 @@
<extensions defaultExtensionNs="Edu">
<optionsProvider instance="com.jetbrains.edu.learning.stepic.StepicStudyOptions"/>
<checkListener implementation="com.jetbrains.edu.learning.twitter.StudyTwitterAction"/>
<checkListener implementation="com.jetbrains.edu.learning.stepic.EduNextRecommendationCheckListener"/>
<!--course creator-->
<optionsProvider instance="com.jetbrains.edu.coursecreator.settings.CCOptions"/>
</extensions>
@@ -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<Boolean, String> 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<Boolean, String> pair = EduAdaptiveStepicConnector.checkCodeTask(myProject, myTask, user);
processStepicCheckOutput(indicator, pair);
processStepicCheckOutput(pair);
}
}
}
}
private void processStepicCheckOutput(@NotNull ProgressIndicator indicator, @Nullable Pair<Boolean, String> pair) {
private void processStepicCheckOutput(@Nullable Pair<Boolean, String> 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(() -> {
@@ -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";
@@ -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);
}
});
}
}
@@ -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);