From e366e55143198781668d3df3b44c0ed59e6bc26d Mon Sep 17 00:00:00 2001 From: Caesar2011 Date: Mon, 11 Feb 2019 11:16:41 +0100 Subject: [PATCH] Lecturer feching delayed --- .../fuplanner/services/kvv/ModulesList.java | 23 ++++++++++++++----- .../fuplanner/services/kvv/types/Modules.java | 6 ++++- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/de/sebse/fuplanner/services/kvv/ModulesList.java b/app/src/main/java/de/sebse/fuplanner/services/kvv/ModulesList.java index 1183158..173fe4b 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/kvv/ModulesList.java +++ b/app/src/main/java/de/sebse/fuplanner/services/kvv/ModulesList.java @@ -312,12 +312,19 @@ public class ModulesList extends HTTPService { return; } final int[] latch = {sites[0].length()}; + // fetching lecturers takes a lot of time, send success twice: first without lecturers + final int[] latchNoLecturers = {sites[0].length()}; + if (sites[0].length() == 0) { + successCallback.onResponse(modulesKVV); + return; + } for (int i = 0; i < sites[0].length(); i++) { try { JSONObject site = sites[0].getJSONObject(i); String courseId = site.getString("courseId"); if (cacheBBCourse().hasKVVCourseID(courseId)) { if (--latch[0] == 0) successCallback.onResponse(modulesKVV); + if (--latchNoLecturers[0] == 0) successCallback.onResponse(modulesKVV); continue; } Modules.Module bbCourse = cacheBBCourse().getBBCourse(courseId); @@ -325,12 +332,13 @@ public class ModulesList extends HTTPService { bbCourse = bbCourse.clone(); modulesKVV.addModule(bbCourse); if (--latch[0] == 0) successCallback.onResponse(modulesKVV); + if (--latchNoLecturers[0] == 0) successCallback.onResponse(modulesKVV); continue; } get(String.format("https://lms.fu-berlin.de/learn/api/v1/courses/%s?fields=name,courseId,description", courseId), mLogin.getLoginTokenBB().getCookies(), response1 -> { String body1 = response1.getParsed(); if (body1 == null) { - errorCallback.onError(new NetworkError(101124, 403, "No module list retrieved!")); + errorCallback.onError(new NetworkError(101124, 403, "No course entry retrieved!")); return; } try { @@ -360,27 +368,30 @@ public class ModulesList extends HTTPService { type = "Projekt"; } if (!found) { - Semester finalSemester = semester; - String finalType = type; + Modules.Module module = modulesKVV.addModule(semester, lvNumberSet, name, new LinkedHashSet<>(), type, description, courseId, Modules.TYPE_BB); lecturer().getBBLecturers(courseId, success -> { - Modules.Module module = modulesKVV.addModule(finalSemester, lvNumberSet, name, success, finalType, description, courseId, Modules.TYPE_BB); + module.setLecturers(success); cacheBBCourse().setBBCourse(courseId, module.clone()); if (--latch[0] == 0) successCallback.onResponse(modulesKVV); }, error -> { log.e(error); if (--latch[0] == 0) successCallback.onResponse(modulesKVV); }); + if (--latchNoLecturers[0] == 0) successCallback.onResponse(modulesKVV); } else { cacheBBCourse().addKVVCourseID(courseId); if (--latch[0] == 0) successCallback.onResponse(modulesKVV); + if (--latchNoLecturers[0] == 0) successCallback.onResponse(modulesKVV); } } catch (JSONException e) { e.printStackTrace(); - errorCallback.onError(new NetworkError(101125, 403, "Cannot parse module list!")); + log.e(new NetworkError(101125, 403, "Cannot parse course entry!")); + if (--latch[0] == 0) successCallback.onResponse(modulesKVV); + if (--latchNoLecturers[0] == 0) successCallback.onResponse(modulesKVV); } }, error -> errorCallback.onError(new NetworkError(101126, error.networkResponse.statusCode, "Cannot get module list!"))); } catch (JSONException e) { - log.e(new NetworkError(101123, 403, "Cannot parse module list!")); + log.e(new NetworkError(101123, 403, "Cannot parse course entry")); log.e("ID:", i, "JSON:", sites[0]); e.printStackTrace(); } diff --git a/app/src/main/java/de/sebse/fuplanner/services/kvv/types/Modules.java b/app/src/main/java/de/sebse/fuplanner/services/kvv/types/Modules.java index 78608b7..146f9fa 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/kvv/types/Modules.java +++ b/app/src/main/java/de/sebse/fuplanner/services/kvv/types/Modules.java @@ -170,7 +170,7 @@ public class Modules implements Iterable, Serializable { @NotNull public final HashSet lvNumber; @NotNull public final String title; @NotNull - public final ArrayList lecturer; + public ArrayList lecturer; @Nullable public final String type; @Nullable public final String description; @NotNull private final String ID; @@ -209,6 +209,10 @@ public class Modules implements Iterable, Serializable { this.moduleType = moduleType; } + public void setLecturers(LinkedHashSet lecturers) { + this.lecturer = new ArrayList<>(lecturers); + } + @NonNull public String getID() { return ID;