1 package com.jetbrains.edu.coursecreator.actions;
3 import com.intellij.ide.IdeView;
4 import com.intellij.openapi.actionSystem.AnActionEvent;
5 import com.intellij.openapi.actionSystem.CommonDataKeys;
6 import com.intellij.openapi.actionSystem.LangDataKeys;
7 import com.intellij.openapi.actionSystem.Presentation;
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.jetbrains.edu.coursecreator.CCUtils;
14 import com.jetbrains.edu.learning.StudyTaskManager;
15 import com.jetbrains.edu.learning.courseFormat.Course;
16 import com.jetbrains.edu.learning.courseFormat.Lesson;
17 import com.jetbrains.edu.learning.statistics.EduUsagesCollector;
18 import com.jetbrains.edu.learning.stepic.CourseInfo;
19 import com.jetbrains.edu.learning.stepic.EduStepicConnector;
20 import org.jetbrains.annotations.NotNull;
22 import java.util.List;
24 public class CCPushCourse extends DumbAwareAction {
25 public CCPushCourse() {
26 super("Upload Course to Stepik", "Upload Course to Stepik", null);
30 public void update(@NotNull AnActionEvent e) {
31 Presentation presentation = e.getPresentation();
32 Project project = e.getProject();
33 presentation.setEnabledAndVisible(project != null && CCUtils.isCourseCreator(project));
34 if (project != null) {
35 final Course course = StudyTaskManager.getInstance(project).getCourse();
37 final int id = course.getId();
39 presentation.setText("Update Course on Stepik");
46 public void actionPerformed(@NotNull AnActionEvent e) {
47 final IdeView view = e.getData(LangDataKeys.IDE_VIEW);
48 final Project project = e.getData(CommonDataKeys.PROJECT);
49 if (view == null || project == null) {
52 final Course course = StudyTaskManager.getInstance(project).getCourse();
56 if (course.getId() > 0) {
57 ProgressManager.getInstance().run(new Task.Modal(project, "Updating Course", true) {
59 public void run(@NotNull ProgressIndicator indicator) {
60 for (Lesson lesson : course.getLessons()) {
61 if (lesson.getId() > 0) {
62 EduStepicConnector.updateLesson(project, lesson, indicator);
65 final CourseInfo info = CourseInfo.fromCourse(course);
66 final int lessonId = EduStepicConnector.postLesson(project, lesson, indicator);
67 final List<Integer> sections = info.getSections();
68 final Integer sectionId = sections.get(sections.size() - 1);
69 EduStepicConnector.postUnit(project, lessonId, lesson.getIndex(), sectionId);
76 EduStepicConnector.postCourseWithProgress(project, course);
78 EduUsagesCollector.courseUploaded();