Blackboard Gradebook (untested)

This commit is contained in:
Caesar2011
2019-02-06 20:42:00 +01:00
parent 94e05ef8ba
commit 94ea032389
2 changed files with 69 additions and 2 deletions

View File

@@ -8,8 +8,10 @@ import org.json.JSONObject;
import java.util.ArrayList; 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.Grade;
import de.sebse.fuplanner.services.kvv.types.Modules; 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.NetworkCallback;
import de.sebse.fuplanner.tools.network.NetworkError; import de.sebse.fuplanner.tools.network.NetworkError;
import de.sebse.fuplanner.tools.network.NetworkErrorCallback; import de.sebse.fuplanner.tools.network.NetworkErrorCallback;
@@ -81,6 +83,72 @@ public class ModulesGradebook extends PartModules<ArrayList<Grade>> {
@Override @Override
protected void upgradeBB(String ID, NetworkCallback<ArrayList<Grade>> callback, NetworkErrorCallback errorCallback) { protected void upgradeBB(String ID, NetworkCallback<ArrayList<Grade>> 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<Grade> 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!")));
} }
} }

View File

@@ -6,7 +6,6 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="@dimen/cardview_margin" android:layout_margin="@dimen/cardview_margin"
android:textIsSelectable="true"
card_view:cardElevation="@dimen/card_elevation" card_view:cardElevation="@dimen/card_elevation"
app:animationDuration="300" app:animationDuration="300"
app:inner_view="@layout/list_announcement_body" app:inner_view="@layout/list_announcement_body"