Lecturer feching delayed

This commit is contained in:
Caesar2011
2019-02-11 11:16:41 +01:00
parent 34db5bf901
commit e366e55143
2 changed files with 22 additions and 7 deletions

View File

@@ -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();
}

View File

@@ -170,7 +170,7 @@ public class Modules implements Iterable<Modules.Module>, Serializable {
@NotNull public final HashSet<String> lvNumber;
@NotNull public final String title;
@NotNull
public final ArrayList<Lecturer> lecturer;
public ArrayList<Lecturer> 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<Modules.Module>, Serializable {
this.moduleType = moduleType;
}
public void setLecturers(LinkedHashSet<Lecturer> lecturers) {
this.lecturer = new ArrayList<>(lecturers);
}
@NonNull
public String getID() {
return ID;