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 67526bd..d5b1d18 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 @@ -278,6 +278,12 @@ public class ModulesList extends HTTPService { if (--latch[0] == 0) successCallback.onResponse(modulesKVV); continue; } + Modules.Module bbCourse = cacheBBCourse().getBBCourse(courseId); + if (bbCourse != null) { + modulesKVV.addModule(bbCourse); + if (--latch[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) { @@ -313,7 +319,8 @@ public class ModulesList extends HTTPService { Semester finalSemester = semester; String finalType = type; lecturer().getBBLecturers(courseId, success -> { - modulesKVV.addModule(finalSemester, lvNumberSet, name, success, finalType, description, courseId, Modules.TYPE_BB); + Modules.Module module = modulesKVV.addModule(finalSemester, lvNumberSet, name, success, finalType, description, courseId, Modules.TYPE_BB); + cacheBBCourse().setBBCourse(courseId, module); if (--latch[0] == 0) successCallback.onResponse(modulesKVV); }, error -> { log.e(error); diff --git a/app/src/main/java/de/sebse/fuplanner/services/kvv/ModulesListLecturer.java b/app/src/main/java/de/sebse/fuplanner/services/kvv/ModulesListLecturer.java index 5d9ae64..8ca32b0 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/kvv/ModulesListLecturer.java +++ b/app/src/main/java/de/sebse/fuplanner/services/kvv/ModulesListLecturer.java @@ -10,8 +10,8 @@ import java.io.IOException; import java.util.ArrayList; import java.util.LinkedHashSet; -import de.sebse.fuplanner.services.kvv.types.Lecturer; import de.sebse.fuplanner.services.kvv.types.CacheLecturer; +import de.sebse.fuplanner.services.kvv.types.Lecturer; import de.sebse.fuplanner.tools.network.HTTPService; import de.sebse.fuplanner.tools.network.NetworkCallback; import de.sebse.fuplanner.tools.network.NetworkError; @@ -53,6 +53,8 @@ class ModulesListLecturer extends HTTPService { if (--latch[0] == 0) callback.onResponse(lecturers); }); } + if (lecturerString.size() == 0) + callback.onResponse(lecturers); return; } diff --git a/app/src/main/java/de/sebse/fuplanner/services/kvv/types/CacheBBCourse.java b/app/src/main/java/de/sebse/fuplanner/services/kvv/types/CacheBBCourse.java index 0101348..4a3eeaf 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/kvv/types/CacheBBCourse.java +++ b/app/src/main/java/de/sebse/fuplanner/services/kvv/types/CacheBBCourse.java @@ -8,6 +8,7 @@ import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; +import java.util.HashMap; import java.util.HashSet; public class CacheBBCourse implements Serializable { @@ -18,6 +19,8 @@ public class CacheBBCourse implements Serializable { private HashSet mKVVCourseList = new HashSet<>(); private long mKVVCourseListRefresh = 0; + private HashMap mBBCourseList = new HashMap<>(); + private HashMap mBBCourseListRefresh = new HashMap<>(); public static CacheBBCourse load(Context context) throws IOException, ClassNotFoundException { FileInputStream fis = context.openFileInput(FILE_NAME); @@ -72,4 +75,18 @@ public class CacheBBCourse implements Serializable { return false; return mKVVCourseList.contains(courseID); } + + public void setBBCourse(String courseID, Modules.Module lecturer) { + mBBCourseList.put(courseID, lecturer); + mBBCourseListRefresh.put(courseID, System.currentTimeMillis()); + } + + public Modules.Module getBBCourse(String courseID) { + if (!mBBCourseListRefresh.containsKey(courseID)) + return null; + //noinspection ConstantConditions + if (mBBCourseListRefresh.get(courseID) + RESAVE_TIMER < System.currentTimeMillis()) + return null; + return mBBCourseList.get(courseID); + } } 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 b5e35c9..5c02cbd 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 @@ -39,9 +39,14 @@ public class Modules implements Iterable, Serializable { this.list = new SortedListModule(); } - public void addModule(@Nullable Semester semester, HashSet lvNumber, String title, LinkedHashSet lecturer, String type, String description, String ID, int moduleType) { + public Module addModule(@Nullable Semester semester, HashSet lvNumber, String title, LinkedHashSet lecturer, String type, String description, String ID, int moduleType) { Module m = new Module(semester, lvNumber, title, lecturer, type, description, ID, moduleType); this.list.add(m); + return m; + } + + public void addModule(Module module) { + this.list.add(module); } @NonNull @@ -224,5 +229,9 @@ public class Modules implements Iterable, Serializable { public int getModuleType() { return moduleType; } + + public Module clone() { + return new Module(semester, lvNumber, title, new LinkedHashSet<>(lecturer), type, description, ID, moduleType); + } } }