1 package com.jetbrains.edu.coursecreator.actions;
3 import com.intellij.ide.IdeView;
4 import com.intellij.ide.util.DirectoryChooserUtil;
5 import com.intellij.openapi.actionSystem.AnActionEvent;
6 import com.intellij.openapi.actionSystem.CommonDataKeys;
7 import com.intellij.openapi.actionSystem.LangDataKeys;
8 import com.intellij.openapi.progress.ProgressIndicator;
9 import com.intellij.openapi.progress.ProgressManager;
10 import com.intellij.openapi.progress.Task;
11 import com.intellij.openapi.project.DumbAwareAction;
12 import com.intellij.openapi.project.Project;
13 import com.intellij.psi.PsiDirectory;
14 import com.jetbrains.edu.coursecreator.CCUtils;
15 import com.jetbrains.edu.learning.StudyTaskManager;
16 import com.jetbrains.edu.learning.core.EduNames;
17 import com.jetbrains.edu.learning.courseFormat.Course;
18 import com.jetbrains.edu.learning.courseFormat.Lesson;
19 import com.jetbrains.edu.learning.stepic.EduStepicConnector;
20 import com.jetbrains.edu.learning.stepic.EduStepicNames;
21 import org.jetbrains.annotations.NotNull;
23 public class CCPushTask extends DumbAwareAction {
25 super("Update Task on Stepik", "Update Task on Stepik", null);
29 public void update(@NotNull AnActionEvent e) {
30 e.getPresentation().setEnabledAndVisible(false);
31 final IdeView view = e.getData(LangDataKeys.IDE_VIEW);
32 final Project project = e.getData(CommonDataKeys.PROJECT);
33 if (view == null || project == null) {
36 final Course course = StudyTaskManager.getInstance(project).getCourse();
40 if (!course.getCourseMode().equals(CCUtils.COURSE_MODE)) return;
41 PsiDirectory taskDir = DirectoryChooserUtil.getOrChooseDirectory(view);
42 if (taskDir == null || !taskDir.getName().contains(EduNames.TASK)) {
45 final PsiDirectory lessonDir = taskDir.getParentDirectory();
46 if (lessonDir == null) return;
47 final Lesson lesson = course.getLesson(lessonDir.getName());
48 if (lesson != null && lesson.getId() > 0 && course.getId() > 0) {
49 e.getPresentation().setEnabledAndVisible(true);
50 final com.jetbrains.edu.learning.courseFormat.Task task = lesson.getTask(taskDir.getName());
51 if (task.getStepicId() <= 0) {
52 e.getPresentation().setText("Upload Task to Stepik");
58 public void actionPerformed(@NotNull AnActionEvent e) {
59 final IdeView view = e.getData(LangDataKeys.IDE_VIEW);
60 final Project project = e.getData(CommonDataKeys.PROJECT);
61 if (view == null || project == null) {
64 final Course course = StudyTaskManager.getInstance(project).getCourse();
68 PsiDirectory taskDir = DirectoryChooserUtil.getOrChooseDirectory(view);
69 if (taskDir == null || !taskDir.getName().contains(EduNames.TASK)) {
72 final PsiDirectory lessonDir = taskDir.getParentDirectory();
73 if (lessonDir == null) return;
74 final Lesson lesson = course.getLesson(lessonDir.getName());
75 if (lesson == null) return;
77 final com.jetbrains.edu.learning.courseFormat.Task task = lesson.getTask(taskDir.getName());
78 if (task == null) return;
80 ProgressManager.getInstance().run(new Task.Modal(project, "Uploading Task", true) {
82 public void run(@NotNull ProgressIndicator indicator) {
83 indicator.setText("Uploading task to " + EduStepicNames.STEPIC_URL);
84 if (task.getStepicId() <= 0) {
85 EduStepicConnector.postTask(project, task, lesson.getId());
88 EduStepicConnector.updateTask(project, task);