Added Blackboard Announcements

This commit is contained in:
Caesar2011
2019-01-28 02:21:41 +01:00
parent c15fc1339f
commit 068344ff5c

View File

@@ -10,6 +10,7 @@ import java.util.ArrayList;
import de.sebse.fuplanner.services.kvv.types.Announcement; import de.sebse.fuplanner.services.kvv.types.Announcement;
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;
@@ -91,6 +92,59 @@ public class ModulesAnnouncements extends PartModules<ArrayList<Announcement>> {
@Override @Override
protected void upgradeBB(String ID, NetworkCallback<ArrayList<Announcement>> callback, NetworkErrorCallback errorCallback) { protected void upgradeBB(String ID, NetworkCallback<ArrayList<Announcement>> callback, NetworkErrorCallback errorCallback) {
callback.onResponse(new ArrayList<>()); if (!mLogin.isInOnlineMode() || mLogin.getLoginTokenBB() == null) {
errorCallback.onError(new NetworkError(101214, 500, "Currently running in offline mode!"));
return;
}
super.get(String.format("https://lms.fu-berlin.de/learn/api/v1/courses/%s/announcements", ID), mLogin.getLoginTokenBB().getCookies(), response -> {
String body = response.getParsed();
if (body == null) {
errorCallback.onError(new NetworkError(101211, 403, "No announcements retrieved!"));
return;
}
ArrayList<Announcement> announcements = new ArrayList<>();
JSONArray sites;
try {
JSONObject json = new JSONObject(body);
sites = json.getJSONArray("results");
} catch (JSONException e) {
e.printStackTrace();
errorCallback.onError(new NetworkError(101212, 403, "Cannot parse announcements!"));
return;
}
for (int i = 0; i < sites.length(); i++) {
try {
JSONObject site = sites.getJSONObject(i);
String id = site.getString("id");
String title = site.getString("title");
String text = site.getJSONObject("body").getString("rawText");
text = String.valueOf(fromHtml(text));
String createdBy = "";//site.getString("createdByDisplayName");
long createdOn = UtilsDate.stringToMillis(site.getString("startDateRestriction"), "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
//long createdOn = 0;//site.getLong("createdOn");
// Extract attachment links
//JSONArray attachments = site.getJSONArray("attachments");
ArrayList<String> urls = new ArrayList<>();
/*for (int j = 0; j < attachments.length(); j++) {
urls.add(attachments.getJSONObject(j).optString("url", null));
}*/
announcements.add(new Announcement(id, title, text, createdBy, createdOn, urls));
} catch (JSONException e) {
log.e(new NetworkError(101215, 403, "Cannot parse announcements!"));
log.e("ID:", i, "JSON:", sites);
e.printStackTrace();
return;
}
}
// Empty announcements *may be* because token is invalid -> check
if (announcements.size() == 0)
mLogin.testLoginToken(token -> callback.onResponse(announcements), errorCallback);
else
callback.onResponse(announcements);
}, error -> errorCallback.onError(new NetworkError(101213, error.networkResponse.statusCode, "Cannot get announcements!")));
} }
} }