getChapter method Null safety
Gets the chapter specified by the UUID
Returns Null if no chapters found
Implementation
Future<Chapter?> getChapter(String uuid, {bool useLogin = false}) async {
var res;
if (token != '' && useLogin) {
res = await http
.get(Uri.parse('https://api.mangadex.org/chapter/$uuid'), headers: {
HttpHeaders.authorizationHeader: 'Bearer $token',
HttpHeaders.userAgentHeader: 'mangadex_dart_api/1.0'
});
} else {
res = await http.get(Uri.parse('https://api.mangadex.org/chapter/$uuid'),
headers: {HttpHeaders.userAgentHeader: 'mangadex_dart_api/1.0'});
}
if (res.statusCode == 404) {
return null;
}
var data = jsonDecode(res.body)['data'];
if (res.statusCode == 403 && res.headers['X-Captcha-Sitekey'] != null) {
throw CaptchaException(res.headers['X-Captcha-Sitekey'],
message:
'You need to solve a captcha, check `.sitekey` for the sitekey.');
}
// get MD@H URL
var md = await http.get(
Uri.parse("https://api.mangadex.org/at-home/server/${data['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 data['attributes']['data']) {
normalChapter
.add('$atHomeURL/data/${data["attributes"]["hash"]}/$chapter');
}
// create data-saver URL
// ignore: omit_local_variable_types
List<String> saverChapter = [];
for (var chapter in data['attributes']['data']) {
saverChapter
.add('$atHomeURL/data-saver/${data["attributes"]["hash"]}/$chapter');
}
var chapter = Chapter(
id: data['id'],
title: data['attributes']['title'],
volume: data['attributes']['volume'],
chapter: data['attributes']['chapter'],
translatedLanguage: data['attributes']['translatedLanguage'],
chapterURLs: normalChapter,
dataSaverChapterURLs: saverChapter,
createdAt: data['attributes']['createdAt'],
updatedAt: data['attributes']['updatedAt'],
groupIds: data['attributes']['groups'],
mangaId: data['attributes']['manga'],
uploader: data['attributes']['uploader']);
return chapter;
}