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>
|
</value>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</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>
|
</project>
|
||||||
2
.idea/modules.xml
generated
2
.idea/modules.xml
generated
@@ -2,7 +2,7 @@
|
|||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ProjectModuleManager">
|
<component name="ProjectModuleManager">
|
||||||
<modules>
|
<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" />
|
<module fileurl="file://$PROJECT_DIR$/app/app.iml" filepath="$PROJECT_DIR$/app/app.iml" />
|
||||||
</modules>
|
</modules>
|
||||||
</component>
|
</component>
|
||||||
|
|||||||
1
.idea/vcs.xml
generated
1
.idea/vcs.xml
generated
@@ -2,5 +2,6 @@
|
|||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="VcsDirectoryMappings">
|
<component name="VcsDirectoryMappings">
|
||||||
<mapping directory="" vcs="Git" />
|
<mapping directory="" vcs="Git" />
|
||||||
|
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
||||||
@@ -38,6 +38,10 @@ public class KVV {
|
|||||||
|
|
||||||
public void logout() {
|
public void logout() {
|
||||||
lastToken = null;
|
lastToken = null;
|
||||||
|
KVVModuleList modules = (KVVModuleList) addons.get("modules");
|
||||||
|
if (modules != null) {
|
||||||
|
modules.deleteModules(this.context);
|
||||||
|
}
|
||||||
addons.clear();
|
addons.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import org.json.JSONArray;
|
|||||||
import org.json.JSONException;
|
import org.json.JSONException;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
@@ -42,9 +43,36 @@ public class KVVModuleList extends HTTPService {
|
|||||||
KVVModuleList(Context context, LoginToken token) {
|
KVVModuleList(Context context, LoginToken token) {
|
||||||
super(context);
|
super(context);
|
||||||
this.token = token;
|
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) {
|
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 -> {
|
get("https://kvv.imp.fu-berlin.de/direct/site.json", token.getCookies(), response -> {
|
||||||
String body = response.getParsed();
|
String body = response.getParsed();
|
||||||
if (body == null) {
|
if (body == null) {
|
||||||
@@ -82,11 +110,20 @@ public class KVVModuleList extends HTTPService {
|
|||||||
errorCallback.onError(new NetworkError(101103, 403, "Cannot parse module list!"));
|
errorCallback.onError(new NetworkError(101103, 403, "Cannot parse module list!"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
moduleList = modules;
|
callback.onResponse(modules);
|
||||||
callback.onResponse(moduleList);
|
|
||||||
}, error -> errorCallback.onError(new NetworkError(101104, error.networkResponse.statusCode, "Cannot get module list!")));
|
}, 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) {
|
public void getModule(int index, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback errorCallback) {
|
||||||
this.getModuleList(success -> callback.onResponse(success.get(index)), 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) {
|
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);
|
AtomicInteger returns = new AtomicInteger(0);
|
||||||
AtomicReference<NetworkError> lastError = new AtomicReference<>(null);
|
AtomicReference<NetworkError> lastError = new AtomicReference<>(null);
|
||||||
final int items = 4;
|
final int items = 4;
|
||||||
@@ -116,10 +158,10 @@ public class KVVModuleList extends HTTPService {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
Runnable[] methods = { // UPDATE VARIABLE items ABOVE
|
Runnable[] methods = { // UPDATE VARIABLE items ABOVE
|
||||||
() -> this.getAssignments(module, successCb, errorCb),
|
() -> this.getAssignments(module, successCb, errorCb, forceOverride),
|
||||||
() -> this.getEvents(module, successCb, errorCb),
|
() -> this.getEvents(module, successCb, errorCb, forceOverride),
|
||||||
() -> this.getAnnouncements(module, successCb, errorCb),
|
() -> this.getAnnouncements(module, successCb, errorCb, forceOverride),
|
||||||
() -> this.getGradebook(module, successCb, errorCb)
|
() -> this.getGradebook(module, successCb, errorCb, forceOverride)
|
||||||
};
|
};
|
||||||
//noinspection ConstantConditions
|
//noinspection ConstantConditions
|
||||||
if (methods.length != items) throw new AssertionError();
|
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) {
|
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(), () -> {
|
queueModuleDetails.add(module.getID(), () -> {
|
||||||
if (module.announcements != null) {
|
if (module.announcements != null && !forceOverride) {
|
||||||
callback.onResponse(module);
|
callback.onResponse(module);
|
||||||
queueModuleDetails.next(module.getID());
|
queueModuleDetails.next(module.getID());
|
||||||
return;
|
return;
|
||||||
@@ -183,12 +227,13 @@ public class KVVModuleList extends HTTPService {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void getAssignments(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback errorCallback) {
|
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(), () -> {
|
queueModuleDetails.add(module.getID(), () -> {
|
||||||
if (module.assignments != null) {
|
if (module.assignments != null && !forceOverride) {
|
||||||
callback.onResponse(module);
|
callback.onResponse(module);
|
||||||
queueModuleDetails.next(module.getID());
|
queueModuleDetails.next(module.getID());
|
||||||
return;
|
return;
|
||||||
@@ -250,10 +295,13 @@ public class KVVModuleList extends HTTPService {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void getEvents(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback errorCallback) {
|
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(), () -> {
|
queueModuleDetails.add(module.getID(), () -> {
|
||||||
if (module.events != null) {
|
if (module.events != null && !forceOverride) {
|
||||||
callback.onResponse(module);
|
callback.onResponse(module);
|
||||||
queueModuleDetails.next(module.getID());
|
queueModuleDetails.next(module.getID());
|
||||||
return;
|
return;
|
||||||
@@ -300,10 +348,15 @@ public class KVVModuleList extends HTTPService {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public void getGradebook(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback errorCallback) {
|
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(), () -> {
|
queueModuleDetails.add(module.getID(), () -> {
|
||||||
if (module.gradebook != null) {
|
if (module.gradebook != null && !forceOverride) {
|
||||||
callback.onResponse(module);
|
callback.onResponse(module);
|
||||||
queueModuleDetails.next(module.getID());
|
queueModuleDetails.next(module.getID());
|
||||||
return;
|
return;
|
||||||
|
|||||||
@@ -1,8 +1,16 @@
|
|||||||
package de.sebse.fuplanner.services.KVV.types;
|
package de.sebse.fuplanner.services.KVV.types;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.support.v7.util.SortedList;
|
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.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
@@ -16,10 +24,11 @@ import de.sebse.fuplanner.tools.logging.Logger;
|
|||||||
* Created by sebastian on 29.10.17.
|
* 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 final SortedList<Module> list;
|
||||||
private String latestSemester = null;
|
private String latestSemester = null;
|
||||||
private Logger log = new Logger(this);
|
private Logger log = new Logger(this);
|
||||||
|
private static final String FILE_NAME = "ModuleListSaving";
|
||||||
|
|
||||||
public Modules() {
|
public Modules() {
|
||||||
this.list = new SortedList<>(Module.class, new SortedList.Callback<Module>() {
|
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);
|
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 class Module {
|
||||||
public final String semester;
|
public final String semester;
|
||||||
public final HashSet<String> lvNumber;
|
public final HashSet<String> lvNumber;
|
||||||
|
|||||||
@@ -6,11 +6,10 @@ import java.util.Collections;
|
|||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
import de.sebse.fuplanner.services.KVV.types.Event;
|
import de.sebse.fuplanner.services.KVV.types.Event;
|
||||||
import de.sebse.fuplanner.tools.logging.Logger;
|
|
||||||
|
|
||||||
public class EventList extends ArrayList<Event> {
|
public class EventList extends ArrayList<Event> {
|
||||||
private int split = 0;
|
private int split = 0;
|
||||||
private Logger log = new Logger(this);
|
|
||||||
public Event getPast(int index) {
|
public Event getPast(int index) {
|
||||||
if (split < 0)
|
if (split < 0)
|
||||||
sort();
|
sort();
|
||||||
@@ -79,10 +78,8 @@ public class EventList extends ArrayList<Event> {
|
|||||||
@Override
|
@Override
|
||||||
public Event next() {
|
public Event next() {
|
||||||
if (hasNext()) {
|
if (hasNext()) {
|
||||||
log.d("Event hasnext", hasNext());
|
|
||||||
return EventList.this.get(i[0]++);
|
return EventList.this.get(i[0]++);
|
||||||
} else {
|
} else {
|
||||||
log.d("Event null", hasNext());
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user