3424ab3a11594bd040091364f57121e12089351e
[idea/community.git] / python / educational-core / course-creator / src / com / jetbrains / edu / coursecreator / actions / CCPushLesson.java
1 package com.jetbrains.edu.coursecreator.actions;
2
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.courseFormat.Course;
17 import com.jetbrains.edu.learning.courseFormat.Lesson;
18 import com.jetbrains.edu.learning.stepic.CourseInfo;
19 import com.jetbrains.edu.learning.stepic.EduStepicConnector;
20 import com.jetbrains.edu.learning.stepic.EduStepicNames;
21 import org.jetbrains.annotations.NotNull;
22
23 import java.util.List;
24
25 public class CCPushLesson extends DumbAwareAction {
26   public CCPushLesson() {
27     super("Update Lesson on Stepik", "Update Lesson on Stepik", null);
28   }
29
30   @Override
31   public void update(@NotNull AnActionEvent e) {
32     e.getPresentation().setEnabledAndVisible(false);
33     final IdeView view = e.getData(LangDataKeys.IDE_VIEW);
34     final Project project = e.getData(CommonDataKeys.PROJECT);
35     if (view == null || project == null) {
36       return;
37     }
38     final Course course = StudyTaskManager.getInstance(project).getCourse();
39     if (course == null) {
40       return;
41     }
42     if (!course.getCourseMode().equals(CCUtils.COURSE_MODE)) return;
43     PsiDirectory lessonDir = DirectoryChooserUtil.getOrChooseDirectory(view);
44     if (lessonDir == null || !lessonDir.getName().contains("lesson")) {
45       return;
46     }
47     final Lesson lesson = course.getLesson(lessonDir.getName());
48     if (lesson != null && course.getId() > 0) {
49       e.getPresentation().setEnabledAndVisible(true);
50       if (lesson.getId() <= 0) {
51         e.getPresentation().setText("Upload Lesson to Stepik");
52       }
53     }
54   }
55
56   @Override
57   public void actionPerformed(@NotNull AnActionEvent e) {
58     final IdeView view = e.getData(LangDataKeys.IDE_VIEW);
59     final Project project = e.getData(CommonDataKeys.PROJECT);
60     if (view == null || project == null) {
61       return;
62     }
63     final Course course = StudyTaskManager.getInstance(project).getCourse();
64     if (course == null) {
65       return;
66     }
67     PsiDirectory lessonDir = DirectoryChooserUtil.getOrChooseDirectory(view);
68     if (lessonDir == null || !lessonDir.getName().contains("lesson")) {
69       return;
70     }
71     final Lesson lesson = course.getLesson(lessonDir.getName());
72     if (lesson == null) {
73       return;
74     }
75     ProgressManager.getInstance().run(new Task.Modal(project, "Uploading Lesson", true) {
76       @Override
77       public void run(@NotNull ProgressIndicator indicator) {
78         indicator.setText("Uploading lesson to " + EduStepicNames.STEPIC_URL);
79         if (lesson.getId() > 0) {
80           EduStepicConnector.updateLesson(project, lesson, indicator);
81         }
82         else {
83           final CourseInfo info = CourseInfo.fromCourse(course);
84           final int lessonId = EduStepicConnector.postLesson(project, lesson, indicator);
85           final List<Integer> sections = info.getSections();
86           final Integer sectionId = sections.get(sections.size()-1);
87           EduStepicConnector.postUnit(project, lessonId, lesson.getIndex(), sectionId);
88         }
89       }});
90   }
91
92 }