diff --git a/.idea/misc.xml b/.idea/misc.xml
index a8cce1b..4e024a8 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -25,5 +25,5 @@
-
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 62306f1..bee9e70 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,7 +2,7 @@
-
+
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index 35eb1dd..8306744 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -2,5 +2,6 @@
+
\ No newline at end of file
diff --git a/app/src/main/java/de/sebse/fuplanner/services/KVV/KVV.java b/app/src/main/java/de/sebse/fuplanner/services/KVV/KVV.java
index 648bdcc..6b4335a 100644
--- a/app/src/main/java/de/sebse/fuplanner/services/KVV/KVV.java
+++ b/app/src/main/java/de/sebse/fuplanner/services/KVV/KVV.java
@@ -38,6 +38,10 @@ public class KVV {
public void logout() {
lastToken = null;
+ KVVModuleList modules = (KVVModuleList) addons.get("modules");
+ if (modules != null) {
+ modules.deleteModules(this.context);
+ }
addons.clear();
}
diff --git a/app/src/main/java/de/sebse/fuplanner/services/KVV/KVVModuleList.java b/app/src/main/java/de/sebse/fuplanner/services/KVV/KVVModuleList.java
index 54f1f86..741accc 100644
--- a/app/src/main/java/de/sebse/fuplanner/services/KVV/KVVModuleList.java
+++ b/app/src/main/java/de/sebse/fuplanner/services/KVV/KVVModuleList.java
@@ -8,6 +8,7 @@ import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.concurrent.atomic.AtomicInteger;
@@ -42,9 +43,36 @@ public class KVVModuleList extends HTTPService {
KVVModuleList(Context context, LoginToken token) {
super(context);
this.token = token;
+ try {
+ this.moduleList = Modules.load(context);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
}
public void getModuleList(final NetworkCallback callback, final NetworkErrorCallback errorCallback) {
+ getModuleList(callback, errorCallback, false);
+ }
+
+ public void getModuleList(final NetworkCallback callback, final NetworkErrorCallback errorCallback, boolean forceOverride) {
+ queueModuleDetails.add("list", () -> {
+ if (this.moduleList != null && !forceOverride) {
+ callback.onResponse(this.moduleList);
+ queueModuleDetails.next("list");
+ return;
+ }
+ this.getModuleListUpgrade(success -> {
+ this.moduleList = success;
+ callback.onResponse(this.moduleList);
+ queueModuleDetails.next("list");
+ }, errorCallback);
+ });
+ }
+
+ public void getModuleListUpgrade(final NetworkCallback callback, final NetworkErrorCallback errorCallback) {
+ log.d("Module List refreshed");
get("https://kvv.imp.fu-berlin.de/direct/site.json", token.getCookies(), response -> {
String body = response.getParsed();
if (body == null) {
@@ -82,11 +110,20 @@ public class KVVModuleList extends HTTPService {
errorCallback.onError(new NetworkError(101103, 403, "Cannot parse module list!"));
return;
}
- moduleList = modules;
- callback.onResponse(moduleList);
+ callback.onResponse(modules);
}, error -> errorCallback.onError(new NetworkError(101104, error.networkResponse.statusCode, "Cannot get module list!")));
}
+ public void deleteModules(Context context) {
+ if (this.moduleList != null)
+ this.moduleList.delete(context);
+ }
+
+ public void saveModules(Context context) throws IOException {
+ if (this.moduleList != null)
+ this.moduleList.save(context);
+ }
+
public void getModule(int index, final NetworkCallback callback, final NetworkErrorCallback errorCallback) {
this.getModuleList(success -> callback.onResponse(success.get(index)), errorCallback);
}
@@ -95,7 +132,12 @@ public class KVVModuleList extends HTTPService {
+
public void getModuleDetails(Modules.Module module, final NetworkCallback callback, final NetworkErrorCallback errorCallback) {
+ this.getModuleDetails(module, callback, errorCallback, false);
+ }
+
+ public void getModuleDetails(Modules.Module module, final NetworkCallback callback, final NetworkErrorCallback errorCallback, boolean forceOverride) {
AtomicInteger returns = new AtomicInteger(0);
AtomicReference lastError = new AtomicReference<>(null);
final int items = 4;
@@ -116,10 +158,10 @@ public class KVVModuleList extends HTTPService {
}
};
Runnable[] methods = { // UPDATE VARIABLE items ABOVE
- () -> this.getAssignments(module, successCb, errorCb),
- () -> this.getEvents(module, successCb, errorCb),
- () -> this.getAnnouncements(module, successCb, errorCb),
- () -> this.getGradebook(module, successCb, errorCb)
+ () -> this.getAssignments(module, successCb, errorCb, forceOverride),
+ () -> this.getEvents(module, successCb, errorCb, forceOverride),
+ () -> this.getAnnouncements(module, successCb, errorCb, forceOverride),
+ () -> this.getGradebook(module, successCb, errorCb, forceOverride)
};
//noinspection ConstantConditions
if (methods.length != items) throw new AssertionError();
@@ -131,11 +173,13 @@ public class KVVModuleList extends HTTPService {
-
-
public void getAnnouncements(Modules.Module module, final NetworkCallback callback, final NetworkErrorCallback errorCallback) {
+ getAnnouncements(module, callback, errorCallback, false);
+ }
+
+ public void getAnnouncements(Modules.Module module, final NetworkCallback callback, final NetworkErrorCallback errorCallback, boolean forceOverride) {
queueModuleDetails.add(module.getID(), () -> {
- if (module.announcements != null) {
+ if (module.announcements != null && !forceOverride) {
callback.onResponse(module);
queueModuleDetails.next(module.getID());
return;
@@ -183,12 +227,13 @@ public class KVVModuleList extends HTTPService {
-
-
public void getAssignments(Modules.Module module, final NetworkCallback callback, final NetworkErrorCallback errorCallback) {
- //log.d("In getAssignments");
+ getAssignments(module, callback, errorCallback, false);
+ }
+
+ public void getAssignments(Modules.Module module, final NetworkCallback callback, final NetworkErrorCallback errorCallback, boolean forceOverride) {
queueModuleDetails.add(module.getID(), () -> {
- if (module.assignments != null) {
+ if (module.assignments != null && !forceOverride) {
callback.onResponse(module);
queueModuleDetails.next(module.getID());
return;
@@ -250,10 +295,13 @@ public class KVVModuleList extends HTTPService {
-
public void getEvents(Modules.Module module, final NetworkCallback callback, final NetworkErrorCallback errorCallback) {
+ getEvents(module, callback, errorCallback, false);
+ }
+
+ public void getEvents(Modules.Module module, final NetworkCallback callback, final NetworkErrorCallback errorCallback, boolean forceOverride) {
queueModuleDetails.add(module.getID(), () -> {
- if (module.events != null) {
+ if (module.events != null && !forceOverride) {
callback.onResponse(module);
queueModuleDetails.next(module.getID());
return;
@@ -300,10 +348,15 @@ public class KVVModuleList extends HTTPService {
+
+
public void getGradebook(Modules.Module module, final NetworkCallback callback, final NetworkErrorCallback errorCallback) {
- //log.d("In getAssignments");
+ getGradebook(module, callback, errorCallback, false);
+ }
+
+ public void getGradebook(Modules.Module module, final NetworkCallback callback, final NetworkErrorCallback errorCallback, boolean forceOverride) {
queueModuleDetails.add(module.getID(), () -> {
- if (module.gradebook != null) {
+ if (module.gradebook != null && !forceOverride) {
callback.onResponse(module);
queueModuleDetails.next(module.getID());
return;
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 74cdf42..afba01f 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
@@ -1,8 +1,16 @@
package de.sebse.fuplanner.services.KVV.types;
+import android.content.Context;
import android.support.annotation.NonNull;
import android.support.v7.util.SortedList;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
@@ -16,10 +24,11 @@ import de.sebse.fuplanner.tools.logging.Logger;
* Created by sebastian on 29.10.17.
*/
-public class Modules /*extends EventEmitter>>*/ implements Iterable {
+public class Modules /*extends EventEmitter>>*/ implements Iterable, Serializable {
private final SortedList list;
private String latestSemester = null;
private Logger log = new Logger(this);
+ private static final String FILE_NAME = "ModuleListSaving";
public Modules() {
this.list = new SortedList<>(Module.class, new SortedList.Callback() {
@@ -183,6 +192,27 @@ public class Modules /*extends EventEmitter lvNumber;
diff --git a/app/src/main/java/de/sebse/fuplanner/tools/EventList.java b/app/src/main/java/de/sebse/fuplanner/tools/EventList.java
index 239b509..c233f0a 100644
--- a/app/src/main/java/de/sebse/fuplanner/tools/EventList.java
+++ b/app/src/main/java/de/sebse/fuplanner/tools/EventList.java
@@ -6,11 +6,10 @@ import java.util.Collections;
import java.util.Iterator;
import de.sebse.fuplanner.services.KVV.types.Event;
-import de.sebse.fuplanner.tools.logging.Logger;
public class EventList extends ArrayList {
private int split = 0;
- private Logger log = new Logger(this);
+
public Event getPast(int index) {
if (split < 0)
sort();
@@ -79,10 +78,8 @@ public class EventList extends ArrayList {
@Override
public Event next() {
if (hasNext()) {
- log.d("Event hasnext", hasNext());
return EventList.this.get(i[0]++);
} else {
- log.d("Event null", hasNext());
return null;
}
}