getMangaFeed method Null safety
Returns the latest chapters of the currently logged in user's followed manga
If you did not login, this will return an empty List
Implementation
Future<List<Chapter>> getMangaFeed() async {
// ignore: omit_local_variable_types
List<Chapter> chapters = [];
if (token == '') return chapters;
var res = await http.get(
Uri.parse('https://api.mangadex.org/user/follows/manga/feed'),
headers: {
HttpHeaders.authorizationHeader: 'Bearer $token',
HttpHeaders.userAgentHeader: 'mangadex_dart_api/1.0'
});
if (res.statusCode == 403 && res.headers['X-Captcha-Sitekey'] != null) {
throw CaptchaException(res.headers['X-Captcha-Sitekey'].toString(),
message:
'You need to solve a captcha, check `.sitekey` for the sitekey.');
}
var data = jsonDecode(res.body)['results'];
for (var chapter in data) {
var r = chapter['data'];
// get MD@H URL
var md = await http.get(
Uri.parse("https://api.mangadex.org/at-home/server/${r['id']}"),
headers: {HttpHeaders.userAgentHeader: 'mangadex_dart_api/1.0'});
var atHomeURL = jsonDecode(md.body)['baseUrl'];
// create chapter URL
// ignore: omit_local_variable_types
List<String> normalChapter = [];
for (var chapter in r['attributes']['data']) {
normalChapter
.add('$atHomeURL/data/${r["attributes"]["hash"]}/$chapter');
}
// create data-saver URL
// ignore: omit_local_variable_types
List<String> saverChapter = [];
for (var chapter in r['attributes']['data']) {
saverChapter
.add('$atHomeURL/data-saver/${r["attributes"]["hash"]}/$chapter');
}
chapters.add(Chapter(
chapterURLs: normalChapter,
dataSaverChapterURLs: saverChapter,
id: r['id'],
title: r['attributes']['title'],
translatedLanguage: r['attributes']['translatedLanguage'],
volume: r['attributes']['volume'],
chapter: r['attributes']['chapter'],
createdAt: r['attributes']['createdAt'],
updatedAt: r['attributes']['updatedAt'],
uploader: r['attributes']['uploaded']));
}
return chapters;
}