Modules list cached, implemented offline load and forceOverride-refresh
This commit is contained in:
2
.idea/misc.xml
generated
2
.idea/misc.xml
generated
@@ -25,5 +25,5 @@
|
||||
</value>
|
||||
</option>
|
||||
</component>
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
|
||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8 (2)" project-jdk-type="JavaSDK" />
|
||||
</project>
|
||||
2
.idea/modules.xml
generated
2
.idea/modules.xml
generated
@@ -2,7 +2,7 @@
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/FUPlanner.iml" filepath="$PROJECT_DIR$/FUPlanner.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/FUPlanner.iml" filepath="$PROJECT_DIR$/.idea/FUPlanner.iml" />
|
||||
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
|
||||
1
.idea/vcs.xml
generated
1
.idea/vcs.xml
generated
@@ -2,5 +2,6 @@
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="Git" />
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
@@ -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<Modules> callback, final NetworkErrorCallback errorCallback) {
|
||||
getModuleList(callback, errorCallback, false);
|
||||
}
|
||||
|
||||
public void getModuleList(final NetworkCallback<Modules> 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<Modules> 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<Modules.Module> 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<Modules.Module> callback, final NetworkErrorCallback errorCallback) {
|
||||
this.getModuleDetails(module, callback, errorCallback, false);
|
||||
}
|
||||
|
||||
public void getModuleDetails(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback errorCallback, boolean forceOverride) {
|
||||
AtomicInteger returns = new AtomicInteger(0);
|
||||
AtomicReference<NetworkError> 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<Modules.Module> callback, final NetworkErrorCallback errorCallback) {
|
||||
getAnnouncements(module, callback, errorCallback, false);
|
||||
}
|
||||
|
||||
public void getAnnouncements(Modules.Module module, final NetworkCallback<Modules.Module> 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<Modules.Module> callback, final NetworkErrorCallback errorCallback) {
|
||||
//log.d("In getAssignments");
|
||||
getAssignments(module, callback, errorCallback, false);
|
||||
}
|
||||
|
||||
public void getAssignments(Modules.Module module, final NetworkCallback<Modules.Module> 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<Modules.Module> callback, final NetworkErrorCallback errorCallback) {
|
||||
getEvents(module, callback, errorCallback, false);
|
||||
}
|
||||
|
||||
public void getEvents(Modules.Module module, final NetworkCallback<Modules.Module> 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<Modules.Module> callback, final NetworkErrorCallback errorCallback) {
|
||||
//log.d("In getAssignments");
|
||||
getGradebook(module, callback, errorCallback, false);
|
||||
}
|
||||
|
||||
public void getGradebook(Modules.Module module, final NetworkCallback<Modules.Module> 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;
|
||||
|
||||
@@ -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<Triplet<Integer, Modules.UpgradeModule, ArrayList<String>>>*/ implements Iterable<Modules.Module> {
|
||||
public class Modules /*extends EventEmitter<Triplet<Integer, Modules.UpgradeModule, ArrayList<String>>>*/ implements Iterable<Modules.Module>, Serializable {
|
||||
private final SortedList<Module> 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<Module>() {
|
||||
@@ -183,6 +192,27 @@ public class Modules /*extends EventEmitter<Triplet<Integer, Modules.UpgradeModu
|
||||
return this.list.get(index);
|
||||
}
|
||||
|
||||
public static Modules load(Context context) throws IOException, ClassNotFoundException {
|
||||
FileInputStream fis = context.openFileInput(FILE_NAME);
|
||||
ObjectInputStream is = new ObjectInputStream(fis);
|
||||
Modules modules = (Modules) is.readObject();
|
||||
is.close();
|
||||
fis.close();
|
||||
return modules;
|
||||
}
|
||||
|
||||
public void save(Context context) throws IOException {
|
||||
FileOutputStream fos = context.openFileOutput(FILE_NAME, Context.MODE_PRIVATE);
|
||||
ObjectOutputStream os = new ObjectOutputStream(fos);
|
||||
os.writeObject(this);
|
||||
os.close();
|
||||
fos.close();
|
||||
}
|
||||
|
||||
public void delete(Context context) {
|
||||
context.deleteFile(FILE_NAME);
|
||||
}
|
||||
|
||||
public class Module {
|
||||
public final String semester;
|
||||
public final HashSet<String> lvNumber;
|
||||
|
||||
@@ -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<Event> {
|
||||
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<Event> {
|
||||
@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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user