diff --git a/app/src/main/java/de/sebse/fuplanner/services/kvv/ModulesAnnouncements.java b/app/src/main/java/de/sebse/fuplanner/services/kvv/ModulesAnnouncements.java index 35c7a20..459d4bb 100644 --- a/app/src/main/java/de/sebse/fuplanner/services/kvv/ModulesAnnouncements.java +++ b/app/src/main/java/de/sebse/fuplanner/services/kvv/ModulesAnnouncements.java @@ -10,6 +10,7 @@ import java.util.ArrayList; import de.sebse.fuplanner.services.kvv.types.Announcement; 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; @@ -91,6 +92,59 @@ public class ModulesAnnouncements extends PartModules> { @Override protected void upgradeBB(String ID, NetworkCallback> 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 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 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!"))); } }