Added Blackboard Announcements
This commit is contained in:
@@ -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!")));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user