From 94ea0323893e3a1e2e1ca154dd46e35a9270d67c Mon Sep 17 00:00:00 2001 From: Caesar2011 Date: Wed, 6 Feb 2019 20:42:00 +0100 Subject: [PATCH] Blackboard Gradebook (untested) --- .../services/kvv/ModulesGradebook.java | 70 ++++++++++++++++++- .../res/layout/list_announcement_items.xml | 1 - 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/de/sebse/fuplanner/services/kvv/ModulesGradebook.java b/app/src/main/java/de/sebse/fuplanner/services/kvv/ModulesGradebook.java index d28af00..13b9cba 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/kvv/ModulesGradebook.java +++ b/app/src/main/java/de/sebse/fuplanner/services/kvv/ModulesGradebook.java @@ -8,8 +8,10 @@ import org.json.JSONObject; import java.util.ArrayList; +import de.sebse.fuplanner.services.kvv.types.Announcement; import de.sebse.fuplanner.services.kvv.types.Grade; import de.sebse.fuplanner.services.kvv.types.Modules; +import de.sebse.fuplanner.tools.UtilsDate; import de.sebse.fuplanner.tools.network.NetworkCallback; import de.sebse.fuplanner.tools.network.NetworkError; import de.sebse.fuplanner.tools.network.NetworkErrorCallback; @@ -81,6 +83,72 @@ public class ModulesGradebook extends PartModules> { @Override protected void upgradeBB(String ID, NetworkCallback> callback, NetworkErrorCallback errorCallback) { - callback.onResponse(new ArrayList<>()); + if (!mLogin.isInOnlineMode() || mLogin.getLoginTokenBB() == null || !mLogin.getLoginTokenBB().isAvailable()) { + errorCallback.onError(new NetworkError(101510, 500, "Currently running in offline mode!")); + return; + } + super.get(String.format("https://lms.fu-berlin.de/learn/api/public/v2/courses/%s/gradebook/columns", ID), mLogin.getLoginTokenBB().getCookies(), response -> { + String body = response.getParsed(); + if (body == null) { + errorCallback.onError(new NetworkError(101511, 400, "No gradebook columns retrieved!")); + return; + } + JSONArray gradeColumns; + try { + JSONObject json = new JSONObject(body); + gradeColumns = json.getJSONArray("results"); + } catch (JSONException e) { + e.printStackTrace(); + errorCallback.onError(new NetworkError(101512, 400, "Cannot parse gradebook columns!")); + return; + } + + get(String.format("https://lms.fu-berlin.de/learn/api/public/v2/courses/%s/gradebook/users/%s", ID, mLogin.getLoginTokenBB().getId()), mLogin.getLoginTokenBB().getCookies(), response1 -> { + String body1 = response1.getParsed(); + if (body1 == null) { + errorCallback.onError(new NetworkError(101513, 400, "No gradebook entries retrieved!")); + return; + } + JSONArray grades; + try { + JSONObject json = new JSONObject(body1); + grades = json.getJSONArray("results"); + } catch (JSONException e) { + e.printStackTrace(); + errorCallback.onError(new NetworkError(101514, 400, "Cannot parse gradebook entries!")); + return; + } + log.d("COLS", gradeColumns); + log.d("GRADES", grades); + + ArrayList result = new ArrayList<>(); + for (int i = 0; i < grades.length(); i++) { + for (int j = 0; j < gradeColumns.length(); j++) { + try { + JSONObject grade = grades.getJSONObject(i); + JSONObject column = gradeColumns.getJSONObject(j); + String grade_id = grade.getString("columnId"); + String column_id = column.getString("id"); + if (!grade_id.equals(column_id)) + continue; + String name = column.getString("name"); + JSONObject displayGrade = grade.optJSONObject("displayGrade"); + double points = displayGrade != null ? displayGrade.optDouble("score", 0) : 0; + JSONObject score = column.optJSONObject("score"); + double maxPoints = score != null ? score.optDouble("possible", 0) : 0; + + result.add(new Grade(name, points, maxPoints)); + } catch (JSONException e) { + log.e(new NetworkError(101515, 400, "Cannot parse grades!")); + log.e("ID:", i, "JSON-grades:", grades); + log.e("ID:", j, "JSON-gradeColumns:", gradeColumns); + e.printStackTrace(); + return; + } + } + } + callback.onResponse(result); + }, error -> errorCallback.onError(new NetworkError(101516, error.networkResponse.statusCode, "Cannot get gradebook columns!"))); + }, error -> errorCallback.onError(new NetworkError(101517, error.networkResponse.statusCode, "Cannot get gradebook entries!"))); } } diff --git a/app/src/main/res/layout/list_announcement_items.xml b/app/src/main/res/layout/list_announcement_items.xml index a769558..41a97af 100644 --- a/app/src/main/res/layout/list_announcement_items.xml +++ b/app/src/main/res/layout/list_announcement_items.xml @@ -6,7 +6,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="@dimen/cardview_margin" - android:textIsSelectable="true" card_view:cardElevation="@dimen/card_elevation" app:animationDuration="300" app:inner_view="@layout/list_announcement_body"