Skip to content

Commit d6bf670

Browse files
committed
feat: calendar query
1 parent 502f99c commit d6bf670

File tree

2 files changed

+82
-0
lines changed

2 files changed

+82
-0
lines changed

lib/api/Anilist/AnilistQueries.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ part 'AnilistQueries/Search.dart';
2727
part 'AnilistQueries/GetAnimeMangaListData.dart';
2828
part 'AnilistQueries/GetUserMediaList.dart';
2929
part 'AnilistQueries/GetGenresAndTags.dart';
30+
part 'AnilistQueries/GetCalendarData.dart';
3031

3132
class AnilistQueries {
3233
// main function in the [AnilistQueries.dart]
@@ -86,6 +87,10 @@ class AnilistQueries {
8687
/// Returns a map where the keys are list categories and values are lists of [media] objects.
8788
Future<Map<String, List<media>>> getMangaList() => _getMangaList();
8889

90+
/// Fetches the user's calender data.
91+
/// Returns a list of [media] objects.
92+
Future<List<media>> getCalendarData() => _getCalendarData();
93+
8994
/// Searches for media based on various parameters.
9095
///
9196
/// Required:
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
part of '../AnilistQueries.dart';
2+
extension on AnilistQueries {
3+
4+
Future<List<media>> _getCalendarData() async {
5+
int page = 1;
6+
List<media> mediaList = [];
7+
8+
Future<Page?> execute(int page) async => (await executeQuery<PageResponse>(_queryCalendar(page),force: true))?.data?.page;
9+
10+
Page? result;
11+
do {
12+
result = await execute(page);
13+
if (result != null && result.airingSchedules != null) {
14+
mediaList.addAll(result.airingSchedules!
15+
.where((m) =>
16+
m.media != null &&
17+
m.media!.countryOfOrigin == "JP" &&
18+
(!Anilist.adult || m.media!.isAdult == false))
19+
.map((j) {
20+
final mediaItem = mediaData(j.media!);
21+
mediaItem.relation = "${j.episode},${j.airingAt}";
22+
return mediaItem;
23+
}).toList());
24+
page++;
25+
}
26+
} while (result?.pageInfo?.hasNextPage == true);
27+
28+
return mediaList.reversed.toList();
29+
}
30+
31+
_queryCalendar(int page){
32+
final int curr = DateTime.now().millisecondsSinceEpoch ~/ 1000;
33+
return '''{
34+
Page(page: $page, perPage: 50) {
35+
pageInfo {
36+
hasNextPage
37+
total
38+
}
39+
airingSchedules(
40+
airingAt_greater: ${curr - 86400},
41+
airingAt_lesser: ${curr + (86400 * 6)},
42+
sort: TIME_DESC
43+
) {
44+
episode
45+
airingAt
46+
media {
47+
id
48+
idMal
49+
status
50+
chapters
51+
episodes
52+
nextAiringEpisode { episode }
53+
isAdult
54+
type
55+
meanScore
56+
isFavourite
57+
format
58+
bannerImage
59+
countryOfOrigin
60+
coverImage { large }
61+
title {
62+
english
63+
romaji
64+
userPreferred
65+
}
66+
mediaListEntry {
67+
progress
68+
private
69+
score(format: POINT_100)
70+
status
71+
}
72+
}
73+
}
74+
}
75+
}''';
76+
}
77+
}

0 commit comments

Comments
 (0)