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.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;
23 import java.util.List;
25 public class CCPushLesson extends DumbAwareAction {
26 public CCPushLesson() {
27 super("Update Lesson on Stepik", "Update Lesson on Stepik", null);
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) {
38 final Course course = StudyTaskManager.getInstance(project).getCourse();
42 if (!course.getCourseMode().equals(CCUtils.COURSE_MODE)) return;
43 PsiDirectory lessonDir = DirectoryChooserUtil.getOrChooseDirectory(view);
44 if (lessonDir == null || !lessonDir.getName().contains("lesson")) {
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");
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) {
63 final Course course = StudyTaskManager.getInstance(project).getCourse();
67 PsiDirectory lessonDir = DirectoryChooserUtil.getOrChooseDirectory(view);
68 if (lessonDir == null || !lessonDir.getName().contains("lesson")) {
71 final Lesson lesson = course.getLesson(lessonDir.getName());
75 ProgressManager.getInstance().run(new Task.Modal(project, "Uploading Lesson", true) {
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);
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);