Serialization working, Auto-save and load
This commit is contained in:
@@ -1,9 +1,11 @@
|
|||||||
package de.sebse.fuplanner.services.KVV;
|
package de.sebse.fuplanner.services.KVV;
|
||||||
|
|
||||||
|
import android.arch.core.util.Function;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.util.Pair;
|
import android.util.Pair;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
@@ -66,14 +68,7 @@ public class KVV {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void getModuleDetails(Modules.Module module, final NetworkCallback<Pair<Modules.Module, Boolean>> callback, final NetworkErrorCallback error, boolean forceRefresh) {
|
public void getModuleDetails(Modules.Module module, final NetworkCallback<Pair<Modules.Module, Boolean>> callback, final NetworkErrorCallback error, boolean forceRefresh) {
|
||||||
this.getLastToken(token -> {
|
getModulePart(modules -> modules.getModuleDetails(module, saveOnCallback(modules, callback), error, forceRefresh));
|
||||||
KVVModuleList modules = (KVVModuleList) addons.get("modules");
|
|
||||||
if (modules == null) {
|
|
||||||
modules = new KVVModuleList(KVV.this.context, token);
|
|
||||||
addons.put("modules", modules);
|
|
||||||
}
|
|
||||||
modules.getModuleDetails(module, callback, error, forceRefresh);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getModuleAnnouncements(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error) {
|
public void getModuleAnnouncements(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error) {
|
||||||
@@ -81,14 +76,7 @@ public class KVV {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void getModuleAnnouncements(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error, boolean forceRefresh) {
|
public void getModuleAnnouncements(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error, boolean forceRefresh) {
|
||||||
this.getLastToken(token -> {
|
getModulePart(modules -> modules.getAnnouncements(module, saveOnCallback(modules, callback), error, forceRefresh));
|
||||||
KVVModuleList modules = (KVVModuleList) addons.get("modules");
|
|
||||||
if (modules == null) {
|
|
||||||
modules = new KVVModuleList(KVV.this.context, token);
|
|
||||||
addons.put("modules", modules);
|
|
||||||
}
|
|
||||||
modules.getAnnouncements(module, callback, error, forceRefresh);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getModuleAssignments(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error) {
|
public void getModuleAssignments(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error) {
|
||||||
@@ -96,14 +84,7 @@ public class KVV {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void getModuleAssignments(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error, boolean forceRefresh) {
|
public void getModuleAssignments(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error, boolean forceRefresh) {
|
||||||
this.getLastToken(token -> {
|
getModulePart(modules -> modules.getAssignments(module, saveOnCallback(modules, callback), error, forceRefresh));
|
||||||
KVVModuleList modules = (KVVModuleList) addons.get("modules");
|
|
||||||
if (modules == null) {
|
|
||||||
modules = new KVVModuleList(KVV.this.context, token);
|
|
||||||
addons.put("modules", modules);
|
|
||||||
}
|
|
||||||
modules.getAssignments(module, callback, error, forceRefresh);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getModuleEvents(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error) {
|
public void getModuleEvents(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error) {
|
||||||
@@ -111,14 +92,7 @@ public class KVV {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void getModuleEvents(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error, boolean forceRefresh) {
|
public void getModuleEvents(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error, boolean forceRefresh) {
|
||||||
this.getLastToken(token -> {
|
getModulePart(modules -> modules.getEvents(module, saveOnCallback(modules, callback), error, forceRefresh));
|
||||||
KVVModuleList modules = (KVVModuleList) addons.get("modules");
|
|
||||||
if (modules == null) {
|
|
||||||
modules = new KVVModuleList(KVV.this.context, token);
|
|
||||||
addons.put("modules", modules);
|
|
||||||
}
|
|
||||||
modules.getEvents(module, callback, error, forceRefresh);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void getModuleGradebook(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error) {
|
public void getModuleGradebook(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error) {
|
||||||
@@ -126,16 +100,38 @@ public class KVV {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void getModuleGradebook(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error, boolean forceRefresh) {
|
public void getModuleGradebook(Modules.Module module, final NetworkCallback<Modules.Module> callback, final NetworkErrorCallback error, boolean forceRefresh) {
|
||||||
|
getModulePart(modules -> modules.getGradebook(module, saveOnCallback(modules, callback), error, forceRefresh));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
private void getModulePart(ModListFunction func) {
|
||||||
this.getLastToken(token -> {
|
this.getLastToken(token -> {
|
||||||
KVVModuleList modules = (KVVModuleList) addons.get("modules");
|
KVVModuleList modules = (KVVModuleList) addons.get("modules");
|
||||||
if (modules == null) {
|
if (modules == null) {
|
||||||
modules = new KVVModuleList(KVV.this.context, token);
|
modules = new KVVModuleList(KVV.this.context, token);
|
||||||
addons.put("modules", modules);
|
addons.put("modules", modules);
|
||||||
}
|
}
|
||||||
modules.getGradebook(module, callback, error, forceRefresh);
|
func.apply(modules);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private<T> NetworkCallback<T> saveOnCallback(KVVModuleList modules, NetworkCallback<T> callback){
|
||||||
|
return (success -> {
|
||||||
|
try {
|
||||||
|
modules.saveModules(this.context);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
callback.onResponse(success);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@FunctionalInterface
|
||||||
|
interface ModListFunction {
|
||||||
|
void apply(KVVModuleList mod);
|
||||||
|
}
|
||||||
|
|
||||||
private void getLastToken(LastTokenCallback lastTokenCallback) {
|
private void getLastToken(LastTokenCallback lastTokenCallback) {
|
||||||
if (this.isUpdating) {
|
if (this.isUpdating) {
|
||||||
this.updatingList.add(lastTokenCallback);
|
this.updatingList.add(lastTokenCallback);
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ import de.sebse.fuplanner.tools.network.NetworkErrorCallback;
|
|||||||
public class KVVModuleList extends HTTPService {
|
public class KVVModuleList extends HTTPService {
|
||||||
private final LoginToken token;
|
private final LoginToken token;
|
||||||
private Modules moduleList;
|
private Modules moduleList;
|
||||||
//private AsyncQueue<NetworkCallback<String>, NetworkErrorCallback> queueUpgradeModule = new AsyncQueue<>();
|
|
||||||
private AsyncQueue queueModuleDetails = new AsyncQueue();
|
private AsyncQueue queueModuleDetails = new AsyncQueue();
|
||||||
|
|
||||||
KVVModuleList(Context context, LoginToken token) {
|
KVVModuleList(Context context, LoginToken token) {
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package de.sebse.fuplanner.services.KVV.types;
|
package de.sebse.fuplanner.services.KVV.types;
|
||||||
|
|
||||||
public class Announcement {
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class Announcement implements Serializable {
|
||||||
private final String id;
|
private final String id;
|
||||||
private final String title;
|
private final String title;
|
||||||
private final String body;
|
private final String body;
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
package de.sebse.fuplanner.services.KVV.types;
|
package de.sebse.fuplanner.services.KVV.types;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.lang.reflect.Array;
|
import java.lang.reflect.Array;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
public class Assignment {
|
public class Assignment implements Serializable {
|
||||||
private final String id;
|
private final String id;
|
||||||
private final String title;
|
private final String title;
|
||||||
private final long dueTime;
|
private final long dueTime;
|
||||||
|
|||||||
@@ -1,8 +1,9 @@
|
|||||||
package de.sebse.fuplanner.services.KVV.types;
|
package de.sebse.fuplanner.services.KVV.types;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
public class Event {
|
public class Event implements Serializable {
|
||||||
private final String id;
|
private final String id;
|
||||||
private final String type;
|
private final String type;
|
||||||
private final String title;
|
private final String title;
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
package de.sebse.fuplanner.services.KVV.types;
|
package de.sebse.fuplanner.services.KVV.types;
|
||||||
|
|
||||||
public class Gradebook {
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
public class Gradebook implements Serializable {
|
||||||
private final String itemName;
|
private final String itemName;
|
||||||
private final String grade;
|
private final String grade;
|
||||||
private final double maxPoints;
|
private final double maxPoints;
|
||||||
|
|||||||
@@ -1,9 +1,10 @@
|
|||||||
package de.sebse.fuplanner.services.KVV.types;
|
package de.sebse.fuplanner.services.KVV.types;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class Lecturer {
|
public class Lecturer implements Serializable {
|
||||||
private final String firstname;
|
private final String firstname;
|
||||||
private final String surname;
|
private final String surname;
|
||||||
private final String mail;
|
private final String mail;
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package de.sebse.fuplanner.services.KVV.types;
|
package de.sebse.fuplanner.services.KVV.types;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -18,58 +18,21 @@ import java.util.Iterator;
|
|||||||
import de.sebse.fuplanner.tools.Compare;
|
import de.sebse.fuplanner.tools.Compare;
|
||||||
import de.sebse.fuplanner.tools.EventList;
|
import de.sebse.fuplanner.tools.EventList;
|
||||||
import de.sebse.fuplanner.tools.Regex;
|
import de.sebse.fuplanner.tools.Regex;
|
||||||
|
import de.sebse.fuplanner.tools.SortedModuleList;
|
||||||
import de.sebse.fuplanner.tools.logging.Logger;
|
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>, Serializable {
|
public class Modules implements Iterable<Modules.Module>, Serializable {
|
||||||
private final SortedList<Module> list;
|
private final SortedModuleList list;
|
||||||
private String latestSemester = null;
|
private String latestSemester = null;
|
||||||
private Logger log = new Logger(this);
|
private transient Logger log = new Logger(this);
|
||||||
private static final String FILE_NAME = "ModuleListSaving";
|
private static final String FILE_NAME = "ModuleListSaving";
|
||||||
|
|
||||||
public Modules() {
|
public Modules() {
|
||||||
this.list = new SortedList<>(Module.class, new SortedList.Callback<Module>() {
|
this.list = new SortedModuleList();
|
||||||
@Override
|
|
||||||
public int compare(Module o1, Module o2) {
|
|
||||||
int semester = o1.semester.compareTo(o2.semester);
|
|
||||||
if (semester != 0)
|
|
||||||
return semester;
|
|
||||||
return o1.title.compareToIgnoreCase(o2.title);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onChanged(int position, int count) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean areContentsTheSame(Module oldItem, Module newItem) {
|
|
||||||
return compare(oldItem, newItem) == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean areItemsTheSame(Module item1, Module item2) {
|
|
||||||
return item1.ID.equals(item2.ID);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onInserted(int position, int count) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onRemoved(int position, int count) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onMoved(int fromPosition, int toPosition) {
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Module addModule(String semester, HashSet<String> lvNumber, String title, HashSet<Lecturer> lecturer, String type, String description, String ID) {
|
public Module addModule(String semester, HashSet<String> lvNumber, String title, HashSet<Lecturer> lecturer, String type, String description, String ID) {
|
||||||
@@ -213,7 +176,7 @@ public class Modules /*extends EventEmitter<Triplet<Integer, Modules.UpgradeModu
|
|||||||
context.deleteFile(FILE_NAME);
|
context.deleteFile(FILE_NAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
public class Module {
|
public class Module implements Serializable {
|
||||||
public final String semester;
|
public final String semester;
|
||||||
public final HashSet<String> lvNumber;
|
public final HashSet<String> lvNumber;
|
||||||
public final String title;
|
public final String title;
|
||||||
|
|||||||
@@ -0,0 +1,37 @@
|
|||||||
|
package de.sebse.fuplanner.tools;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.AbstractList;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
|
|
||||||
|
import de.sebse.fuplanner.services.KVV.types.Modules;
|
||||||
|
|
||||||
|
public class SortedModuleList extends AbstractList<Modules.Module> implements Serializable {
|
||||||
|
|
||||||
|
private ArrayList<Modules.Module> internalList = new ArrayList<Modules.Module>();
|
||||||
|
|
||||||
|
// Note that add(E e) in AbstractList is calling this one
|
||||||
|
@Override
|
||||||
|
public void add(int position, Modules.Module e) {
|
||||||
|
internalList.add(e);
|
||||||
|
Collections.sort(internalList, (o1, o2) -> {
|
||||||
|
int semester = o1.semester.compareTo(o2.semester);
|
||||||
|
if (semester != 0)
|
||||||
|
return semester;
|
||||||
|
return o1.title.compareToIgnoreCase(o2.title);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Modules.Module get(int i) {
|
||||||
|
return internalList.get(i);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int size() {
|
||||||
|
return internalList.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user