From a7044c24084f4e75ef5cf816beb68c9b6421127e Mon Sep 17 00:00:00 2001 From: Caesar2011 Date: Tue, 3 Jul 2018 17:21:57 +0200 Subject: [PATCH] Event list working --- .../moddetails/ModDetailOverviewFragment.java | 15 +--- .../de/sebse/fuplanner/services/KVV/KVV.java | 11 +++ .../fuplanner/services/KVV/KVVModuleList.java | 81 ++++++++++--------- .../de/sebse/fuplanner/tools/EventList.java | 22 +++-- 4 files changed, 74 insertions(+), 55 deletions(-) diff --git a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewFragment.java b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewFragment.java index d69cbc9..5545e8d 100644 --- a/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewFragment.java +++ b/app/src/main/java/de/sebse/fuplanner/fragments/moddetails/ModDetailOverviewFragment.java @@ -96,20 +96,7 @@ public class ModDetailOverviewFragment extends Fragment { Modules.Module module = success.get(mItemPos); log.d("Print c"); adapter.setModule(module); - kvv.getModuleAnnouncements(module, module1 -> { - //log.d("announcements", module.announcements); - adapter.setModule(); - }, error -> log.e(error)); - kvv.getModuleAssignments(module, module1 -> { - //log.d("assignments", module.assignments); - adapter.setModule(); - }, error -> log.e(error)); - kvv.getModuleEvents(module, module1 -> { - //log.d("events", module.events); - adapter.setModule(); - }, error -> log.e(error)); - kvv.getModuleGradebook(module, module1 -> { - log.d("gradebook", module.gradebook); + kvv.getModuleDetails(module, module1 -> { adapter.setModule(); }, error -> log.e(error)); }, error -> log.e(error)); 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 f0fe9b6..648bdcc 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 @@ -52,6 +52,17 @@ public class KVV { }); } + public void getModuleDetails(Modules.Module module, final NetworkCallback callback, final NetworkErrorCallback error) { + this.getLastToken(token -> { + 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); + }); + } + public void getModuleAnnouncements(Modules.Module module, final NetworkCallback callback, final NetworkErrorCallback error) { this.getLastToken(token -> { KVVModuleList modules = (KVVModuleList) addons.get("modules"); 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 1a0d3f8..54f1f86 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 @@ -10,6 +10,8 @@ import org.json.JSONObject; import java.util.ArrayList; import java.util.HashSet; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.concurrent.atomic.AtomicReference; import java.util.regex.MatchResult; import de.sebse.fuplanner.services.KVV.types.Announcement; @@ -93,6 +95,43 @@ public class KVVModuleList extends HTTPService { + public void getModuleDetails(Modules.Module module, final NetworkCallback callback, final NetworkErrorCallback errorCallback) { + AtomicInteger returns = new AtomicInteger(0); + AtomicReference lastError = new AtomicReference<>(null); + final int items = 4; + NetworkCallback successCb = success -> { + returns.getAndIncrement(); + callback.onResponse(module); + if (returns.get() == items-1) { + if (lastError.get() != null) + errorCallback.onError(lastError.get()); + } + }; + NetworkErrorCallback errorCb = error -> { + lastError.set(error); + returns.getAndIncrement(); + if (returns.get() == items-1) { + if (lastError.get() != null) + errorCallback.onError(lastError.get()); + } + }; + 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) + }; + //noinspection ConstantConditions + if (methods.length != items) throw new AssertionError(); + for (Runnable method: methods) { + method.run(); + } + } + + + + + public void getAnnouncements(Modules.Module module, final NetworkCallback callback, final NetworkErrorCallback errorCallback) { queueModuleDetails.add(module.getID(), () -> { @@ -175,7 +214,7 @@ public class KVVModuleList extends HTTPService { JSONArray sites = json.getJSONArray("assignment_collection"); for (int i = 0; i < sites.length(); i++) { - log.d("Assignment FOUND!", i); + //log.d("Assignment FOUND!", i); JSONObject site = sites.getJSONObject(i); String id = site.getString("id"); String title = site.getString("title"); @@ -189,41 +228,11 @@ public class KVVModuleList extends HTTPService { ArrayList urls = new ArrayList<>(); for (int j =0; j comment = null;//ToDO Sebasian Fragen ???????????????????????? - //AtomicReference grade = null; //Variable used in lambda expression should be final or effectively final - /*if ( !gradebookItemName.equals("null") ){//Wenn gradebookItemName vorhanden dann erhaltene Punkte nachschauen - //https://kvv.imp.fu-berlin.de/direct/gradebook/item/{ModulID}/{gradebookItemName}.json - get(String.format("https://kvv.imp.fu-berlin.de/direct/gradebook/item/%s/%s.json", ID, gradebookItemName ), token.getCookies(), response2 ->{ - String bodygradebook = response2.getParsed(); - if (bodygradebook == null) { - errorCallback.onError(new NetworkError(101302, 403, "No gradebook for assignments!")); - return; - } - try { - JSONObject json2 = new JSONObject(bodygradebook); - //JSONArray sites2 = json2.getJSONArray("assignment_collection"); - //comment.set(json2.getString("comment")); - //grade.set(json2.getString("grade")); - String comment = json2.getString("comment"); - String grade = json2.getString("grade"); - log.d("Note:", comment, grade ); - }catch (JSONException e) { - errorCallback.onError(new NetworkError(101304, 403, "Cannot parse gradebook for announcements!")); - return; - } - }, error -> errorCallback.onError(new NetworkError(101305, error.networkResponse.statusCode, "Cannot get gradebook for assignments!"))); - }*/ - - - + //log.d("Assignment:", id, dueTime, gradebookItemName, gradeScale); assignments.add(0, new Assignment(id, title, dueTime, gradebookItemName, gradeScale, urls)); } } catch (JSONException e) { @@ -271,7 +280,7 @@ public class KVVModuleList extends HTTPService { JSONArray sites = json.getJSONArray("calendar_collection"); for (int i = 0; i < sites.length(); i++) { - log.d("CALENDAR ENTRY FOUND!", i); + //log.d("CALENDAR ENTRY FOUND!", i); JSONObject site = sites.getJSONObject(i); String id = site.getString("eventId"); String type = site.getString("type"); @@ -320,13 +329,13 @@ public class KVVModuleList extends HTTPService { JSONArray sites = json.getJSONArray("assignments"); for (int i = 0; i < sites.length(); i++) { - log.d("gradebook FOUND!", i); + //log.d("gradebook FOUND!", i); JSONObject site = sites.getJSONObject(i); String grade = site.optString("grade", null); String itemName = site.optString("itemName", null); double maxPoints = site.optDouble("points", -1); - log.d("Gradebook:",itemName, grade, maxPoints); + //log.d("Gradebook:",itemName, grade, maxPoints); gradebook.add(0, new Gradebook(itemName, grade, maxPoints)); } 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 31ec11c..6244338 100644 --- a/app/src/main/java/de/sebse/fuplanner/tools/EventList.java +++ b/app/src/main/java/de/sebse/fuplanner/tools/EventList.java @@ -1,6 +1,7 @@ package de.sebse.fuplanner.tools; import java.util.ArrayList; +import java.util.Calendar; import java.util.Collections; import java.util.Iterator; @@ -58,19 +59,30 @@ public class EventList extends ArrayList { public Iterator getEventsOfMonth(int year, int month) { if (split < 0) sort(); - int i = 0; - for (; ; i++) { - break; + 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() { @Override public boolean hasNext() { - return false; + return i[0] < EventList.this.size() && EventList.this.get(i[0]).getEndDate() < maxC.getTimeInMillis(); } @Override public Event next() { - return null; + if (hasNext()) { + i[0]++; + return EventList.this.get(i[0]); + } else { + return null; + } } }; }