Sorted assignments
This commit is contained in:
@@ -23,6 +23,7 @@ import de.sebse.fuplanner.services.KVV.types.Gradebook;
|
|||||||
import de.sebse.fuplanner.services.KVV.types.Lecturer;
|
import de.sebse.fuplanner.services.KVV.types.Lecturer;
|
||||||
import de.sebse.fuplanner.services.KVV.types.LoginToken;
|
import de.sebse.fuplanner.services.KVV.types.LoginToken;
|
||||||
import de.sebse.fuplanner.services.KVV.types.Modules;
|
import de.sebse.fuplanner.services.KVV.types.Modules;
|
||||||
|
import de.sebse.fuplanner.tools.AssignmentList;
|
||||||
import de.sebse.fuplanner.tools.AsyncQueue;
|
import de.sebse.fuplanner.tools.AsyncQueue;
|
||||||
import de.sebse.fuplanner.tools.EventList;
|
import de.sebse.fuplanner.tools.EventList;
|
||||||
import de.sebse.fuplanner.tools.Regex;
|
import de.sebse.fuplanner.tools.Regex;
|
||||||
@@ -243,14 +244,14 @@ public class KVVModuleList extends HTTPService {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private void getAssignmentsUpgrade(String ID, final NetworkCallback<ArrayList<Assignment>> callback, final NetworkErrorCallback errorCallback) {
|
private void getAssignmentsUpgrade(String ID, final NetworkCallback<AssignmentList> callback, final NetworkErrorCallback errorCallback) {
|
||||||
get(String.format("https://kvv.imp.fu-berlin.de/direct/assignment/site/%s.json", ID), token.getCookies(), response ->{
|
get(String.format("https://kvv.imp.fu-berlin.de/direct/assignment/site/%s.json", ID), token.getCookies(), response ->{
|
||||||
String body = response.getParsed();
|
String body = response.getParsed();
|
||||||
if (body == null) {
|
if (body == null) {
|
||||||
errorCallback.onError(new NetworkError(101301, 403, "No assignments retrieved!"));
|
errorCallback.onError(new NetworkError(101301, 403, "No assignments retrieved!"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ArrayList<Assignment> assignments = new ArrayList<>();
|
AssignmentList assignments = new AssignmentList();
|
||||||
try {
|
try {
|
||||||
JSONObject json = new JSONObject(body);
|
JSONObject json = new JSONObject(body);
|
||||||
JSONArray sites = json.getJSONArray("assignment_collection");
|
JSONArray sites = json.getJSONArray("assignment_collection");
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import de.sebse.fuplanner.tools.AssignmentList;
|
||||||
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;
|
||||||
@@ -189,7 +190,7 @@ public class Modules implements Iterable<Modules.Module>, Serializable {
|
|||||||
public final String description;
|
public final String description;
|
||||||
private final String ID;
|
private final String ID;
|
||||||
public ArrayList<Announcement> announcements;
|
public ArrayList<Announcement> announcements;
|
||||||
public ArrayList<Assignment> assignments;
|
public AssignmentList assignments;
|
||||||
public EventList events;
|
public EventList events;
|
||||||
public ArrayList<Gradebook> gradebook;
|
public ArrayList<Gradebook> gradebook;
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package de.sebse.fuplanner.tools;
|
||||||
|
|
||||||
|
import de.sebse.fuplanner.services.KVV.types.Assignment;
|
||||||
|
import de.sebse.fuplanner.tools.logging.Logger;
|
||||||
|
|
||||||
|
public class AssignmentList extends DateSortedList<Assignment> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
long getDateByItem(Assignment item) {
|
||||||
|
Logger log = new Logger(this);
|
||||||
|
log.d(item.getTitle(), Conversion.getModifiedDateTime(item.getDueDate()));
|
||||||
|
return item.getDueDate();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean reversed() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
108
app/src/main/java/de/sebse/fuplanner/tools/DateSortedList.java
Normal file
108
app/src/main/java/de/sebse/fuplanner/tools/DateSortedList.java
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
package de.sebse.fuplanner.tools;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Iterator;
|
||||||
|
|
||||||
|
import de.sebse.fuplanner.services.KVV.types.Event;
|
||||||
|
|
||||||
|
public abstract class DateSortedList<T> extends ArrayList<T> {
|
||||||
|
private int split = -1;
|
||||||
|
|
||||||
|
public T getPast(int index) {
|
||||||
|
if (split < 0)
|
||||||
|
sort();
|
||||||
|
if (index >= split)
|
||||||
|
throw new ArrayIndexOutOfBoundsException(String.format("Index %d out of bounds! Only %d past events found!", index, split));
|
||||||
|
if (reversed())
|
||||||
|
index = sizePast() - index - 1;
|
||||||
|
return this.get(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
public T getUpcoming(int index) {
|
||||||
|
if (split < 0)
|
||||||
|
sort();
|
||||||
|
index += split;
|
||||||
|
if (index >= this.size())
|
||||||
|
throw new ArrayIndexOutOfBoundsException(String.format("Index %d out of bounds! Only %d upcoming events found!", index-split, this.size()-split));
|
||||||
|
if (reversed())
|
||||||
|
index = sizeUpcoming() - index - 1;
|
||||||
|
return this.get(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T get(int index) {
|
||||||
|
if (split < 0)
|
||||||
|
sort();
|
||||||
|
if (reversed())
|
||||||
|
index = size() - index - 1;
|
||||||
|
return super.get(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int sizePast() {
|
||||||
|
if (split < 0)
|
||||||
|
sort();
|
||||||
|
return split;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int sizeUpcoming() {
|
||||||
|
if (split < 0)
|
||||||
|
sort();
|
||||||
|
return this.size()-split;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean add(T event) {
|
||||||
|
split = -1;
|
||||||
|
return super.add(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sort() {
|
||||||
|
|
||||||
|
Collections.sort(this, ((e1, e2) -> Long.compare(getDateByItem(e1), getDateByItem(e2))));
|
||||||
|
long now = System.currentTimeMillis();
|
||||||
|
split = 0;
|
||||||
|
for (T event: this) {
|
||||||
|
if (getDateByItem(event) < now)
|
||||||
|
split++;
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Iterator<T> getEventsOfMonth(int year, int month) {
|
||||||
|
if (split < 0)
|
||||||
|
sort();
|
||||||
|
final int[] i = {0};
|
||||||
|
Calendar minC = Calendar.getInstance();
|
||||||
|
minC.set(year, month-1, 1, 0, 0);
|
||||||
|
Calendar maxC = Calendar.getInstance();
|
||||||
|
maxC.set(year, month, 1, 0, 0);
|
||||||
|
for (; i[0] < this.size(); i[0]++) {
|
||||||
|
if (getDateByItem(this.get(i[0])) > minC.getTimeInMillis()) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return new Iterator<T>() {
|
||||||
|
@Override
|
||||||
|
public boolean hasNext() {
|
||||||
|
return i[0] < DateSortedList.this.size() && getDateByItem(DateSortedList.this.get(i[0])) < maxC.getTimeInMillis();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public T next() {
|
||||||
|
if (hasNext()) {
|
||||||
|
return DateSortedList.this.get(i[0]++);
|
||||||
|
} else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean reversed() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract long getDateByItem(T item);
|
||||||
|
}
|
||||||
@@ -1,88 +1,11 @@
|
|||||||
package de.sebse.fuplanner.tools;
|
package de.sebse.fuplanner.tools;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Calendar;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Iterator;
|
|
||||||
|
|
||||||
import de.sebse.fuplanner.services.KVV.types.Event;
|
import de.sebse.fuplanner.services.KVV.types.Event;
|
||||||
|
|
||||||
public class EventList extends ArrayList<Event> {
|
public class EventList extends DateSortedList<Event> {
|
||||||
private int split = 0;
|
|
||||||
|
|
||||||
public Event getPast(int index) {
|
@Override
|
||||||
if (split < 0)
|
long getDateByItem(Event item) {
|
||||||
sort();
|
return item.getEndDate();
|
||||||
if (index >= split)
|
|
||||||
throw new ArrayIndexOutOfBoundsException(String.format("Index %d out of bounds! Only %d past events found!", index, split));
|
|
||||||
return this.get(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Event getUpcoming(int index) {
|
|
||||||
if (split < 0)
|
|
||||||
sort();
|
|
||||||
index += split;
|
|
||||||
if (index >= this.size())
|
|
||||||
throw new ArrayIndexOutOfBoundsException(String.format("Index %d out of bounds! Only %d upcoming events found!", index-split, this.size()-split));
|
|
||||||
return this.get(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int sizePast() {
|
|
||||||
if (split < 0)
|
|
||||||
sort();
|
|
||||||
return split;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int sizeUpcoming() {
|
|
||||||
if (split < 0)
|
|
||||||
sort();
|
|
||||||
return this.size()-split;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean add(Event event) {
|
|
||||||
split = -1;
|
|
||||||
return super.add(event);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sort() {
|
|
||||||
Collections.sort(this, ((e1, e2) -> Long.compare(e1.getEndDate(), e2.getEndDate())));
|
|
||||||
long now = System.currentTimeMillis();
|
|
||||||
split = 0;
|
|
||||||
for (Event event : this) {
|
|
||||||
if (event.getEndDate() < now)
|
|
||||||
split++;
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Iterator<Event> getEventsOfMonth(int year, int month) {
|
|
||||||
if (split < 0)
|
|
||||||
sort();
|
|
||||||
final int[] i = {0};
|
|
||||||
Calendar minC = Calendar.getInstance();
|
|
||||||
minC.set(year, month-1, 1, 0, 0);
|
|
||||||
Calendar maxC = Calendar.getInstance();
|
|
||||||
maxC.set(year, month, 1, 0, 0);
|
|
||||||
for (; i[0] < this.size(); i[0]++) {
|
|
||||||
if (this.get(i[0]).getEndDate() > minC.getTimeInMillis()) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return new Iterator<Event>() {
|
|
||||||
@Override
|
|
||||||
public boolean hasNext() {
|
|
||||||
return i[0] < EventList.this.size() && EventList.this.get(i[0]).getEndDate() < maxC.getTimeInMillis();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Event next() {
|
|
||||||
if (hasNext()) {
|
|
||||||
return EventList.this.get(i[0]++);
|
|
||||||
} else {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user