From 7ed3f273ab0caf0337c22f0b721d51829bb0c877 Mon Sep 17 00:00:00 2001 From: Ekaterina Tuzova Date: Mon, 8 Jun 2015 16:28:00 +0300 Subject: [PATCH] Stepic now paginates it's output --- .../edu/stepic/EduStepicConnector.java | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/python/educational/src/com/jetbrains/edu/stepic/EduStepicConnector.java b/python/educational/src/com/jetbrains/edu/stepic/EduStepicConnector.java index a37c4680cf34..c2157b2e4b8c 100644 --- a/python/educational/src/com/jetbrains/edu/stepic/EduStepicConnector.java +++ b/python/educational/src/com/jetbrains/edu/stepic/EduStepicConnector.java @@ -142,14 +142,11 @@ public class EduStepicConnector { public static List getCourses() { try { List result = new ArrayList(); - final List courseInfos = getFromStepic("courses", CoursesContainer.class).courses; - for (CourseInfo info : courseInfos) { - final String courseType = info.getType(); - if (StringUtil.isEmptyOrSpaces(courseType)) continue; - final List typeLanguage = StringUtil.split(courseType, " "); - if (typeLanguage.size() == 2 && PYCHARM_PREFIX.equals(typeLanguage.get(0))) { - result.add(info); - } + int pageNumber = 0; + boolean hasNext = addCoursesFromStepic(result, pageNumber); + while (hasNext) { + pageNumber += 1; + hasNext = addCoursesFromStepic(result, pageNumber); } return result; } @@ -159,6 +156,21 @@ public class EduStepicConnector { return Collections.emptyList(); } + private static boolean addCoursesFromStepic(List result, int pageNumber) throws IOException { + final String url = pageNumber == 0 ? "courses" : "courses?page=" + String.valueOf(pageNumber); + final CoursesContainer coursesContainer = getFromStepic(url, CoursesContainer.class); + final List courseInfos = coursesContainer.courses; + for (CourseInfo info : courseInfos) { + final String courseType = info.getType(); + if (StringUtil.isEmptyOrSpaces(courseType)) continue; + final List typeLanguage = StringUtil.split(courseType, " "); + if (typeLanguage.size() == 2 && PYCHARM_PREFIX.equals(typeLanguage.get(0))) { + result.add(info); + } + } + return coursesContainer.meta.containsKey("has_next") && coursesContainer.meta.get("has_next") == Boolean.TRUE; + } + public static Course getCourse(@NotNull final CourseInfo info) { final Course course = new Course(); course.setAuthors(info.getInstructors()); @@ -337,6 +349,7 @@ public class EduStepicConnector { private static class CoursesContainer { public List courses; + public Map meta; } static class StepSourceWrapper {