diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index a9477bc..56e25c5 100644 Binary files a/.idea/caches/build_file_checksums.ser and b/.idea/caches/build_file_checksums.ser differ diff --git a/.idea/modules.xml b/.idea/modules.xml index bee9e70..62306f1 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,7 +2,7 @@ - + diff --git a/app/src/main/java/de/sebse/fuplanner/services/KVV/Gradebook.java b/app/src/main/java/de/sebse/fuplanner/services/KVV/Gradebook.java new file mode 100644 index 0000000..76e2ab2 --- /dev/null +++ b/app/src/main/java/de/sebse/fuplanner/services/KVV/Gradebook.java @@ -0,0 +1,25 @@ +package de.sebse.fuplanner.services.KVV; + +public class Gradebook { + private final String itemName; + private final String grade; + private final double maxPoints; + + public Gradebook(String itemName, String grade, double maxPoints) { + this.itemName = itemName; + this.grade = grade; + this.maxPoints = maxPoints; + } + + public double getMaxPoints() { + return maxPoints; + } + + public String getGrade() { + return grade; + } + + public String getItemName() { + return itemName; + } +} 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 df92c36..8c4a695 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 @@ -83,6 +83,17 @@ public class KVV { }); } + public void getModuleGradebook(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.getGradebook(module, callback, error); + }); + } + private void getLastToken(LastTokenCallback lastTokenCallback) { if (this.isUpdating) { this.updatingList.add(lastTokenCallback); 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 83bede0..b70c058 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 @@ -232,9 +232,8 @@ public class KVVModuleList extends HTTPService { } - // private void getGradebookUpgrade(String ID, final NetworkCallback> callback, final NetworkErrorCallback errorCallback) { - // } + @@ -285,4 +284,56 @@ public class KVVModuleList extends HTTPService { callback.onResponse(events); }, error -> errorCallback.onError(new NetworkError(101403, error.networkResponse.statusCode, "Cannot get calendar entries!"))); } + + + + public void getGradebook(Modules.Module module, final NetworkCallback callback, final NetworkErrorCallback errorCallback) { + //log.d("In getAssignments"); + queueModuleDetails.add(module.getID(), () -> { + if (module.gradebook != null) { + callback.onResponse(module); + queueModuleDetails.next(module.getID()); + return; + } + getGradebookUpgrade(module.getID(), success -> { + module.gradebook = success; + callback.onResponse(module); + queueModuleDetails.next(module.getID()); + }, errorCallback); + }); + } + + private void getGradebookUpgrade(String ID, final NetworkCallback> callback, final NetworkErrorCallback errorCallback) { + get(String.format("https://kvv.imp.fu-berlin.de/direct/gradebook/site/%s.json", ID ), token.getCookies(), response ->{ + String body = response.getParsed(); + if (body == null) { + errorCallback.onError(new NetworkError(101501, 403, "No assignments retrieved!")); + return; + } + ArrayList gradebook = new ArrayList<>(); + try { + JSONObject json = new JSONObject(body); + JSONArray sites = json.getJSONArray("assignments"); + + for (int i = 0; i < sites.length(); 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); + gradebook.add(0, new Gradebook(itemName, grade, maxPoints)); + } + + }catch (JSONException e) { + errorCallback.onError(new NetworkError(101504, 403, "Cannot parse gradebook for announcements!")); + return; + } + callback.onResponse(gradebook); + }, error -> errorCallback.onError(new NetworkError(101505, error.networkResponse.statusCode, "Cannot get gradebook for assignments!"))); + + } + + } diff --git a/app/src/main/java/de/sebse/fuplanner/services/KVV/Modules.java b/app/src/main/java/de/sebse/fuplanner/services/KVV/Modules.java index eaae7f7..03d4bb0 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/KVV/Modules.java +++ b/app/src/main/java/de/sebse/fuplanner/services/KVV/Modules.java @@ -194,6 +194,7 @@ public class Modules /*extends EventEmitter announcements; public ArrayList assignments; public EventList events; + public ArrayList gradebook; /*private Module() { this(null, null, null, null, null); diff --git a/build.gradle b/build.gradle index 44bac8f..ad6a928 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { google() } dependencies { - classpath 'com.android.tools.build:gradle:3.1.2' + classpath 'com.android.tools.build:gradle:3.1.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files