getAnnouncements method
Returns a list of Course's announcements. Requires that the User is logged in.
Implementation
Future<List<Announcement>> getAnnouncements(
{required String courseId}) async {
List<Announcement> announcements = [];
Announcement announcement;
XmlDocument xmlDecodedResponse;
await _getUid();
var response = await _client.get(
Uri.https(
'eclass.$instituteId.gr',
'/modules/announcements/',
{'course': courseId},
),
headers: {'Cookie': 'PHPSESSID=$_token'},
);
if (response.statusCode != 200 ||
response.statusCode == 403 ||
response.statusCode == 404) {
throw ("Failed to get course's announcements");
}
final htmlDecodedResponse = parse(response.body);
final link = htmlDecodedResponse
.getElementsByTagName('a')
.where((e) => e.attributes.containsKey('href'))
.map((e) => e.attributes['href'])
.where((e) => e!.contains('rss'))
.first
?.split('&')
.last
.split('=')
.last;
if (link != null) {
response = await _client.get(
Uri.https(
'eclass.$instituteId.gr',
'/modules/announcements/rss.php',
{
'c': courseId,
'uid': _uid,
'token': link,
},
),
headers: {'Cookie': 'PHPSESSID=$_token'},
);
}
if (response.statusCode != 200) {
throw Exception("Failed to get course's announcements.");
}
try {
xmlDecodedResponse =
XmlDocument.parse(Utf8Codec().decode(response.bodyBytes));
} on Exception {
throw ("Can't retrieve course's announcements because user is not logged in or the token has expired.");
}
final nodes = xmlDecodedResponse.findAllElements('item');
for (final node in nodes) {
announcement = Announcement(
title: node.children[0].text,
link: node.children[1].text,
description: node.children[2].text,
pubDate: node.children[3].text,
guid: node.children[4].text,
);
announcements.add(announcement);
}
return announcements;
}