All checks were successful
Release / meta (push) Successful in 8s
Release / linux-build (push) Successful in 7m11s
Release / web-build (push) Successful in 5m3s
Release / android-build (push) Successful in 18m23s
Release / release-master (push) Successful in 22s
Release / release-dev (push) Successful in 25s
63 lines
1.8 KiB
Dart
63 lines
1.8 KiB
Dart
part of 'data_service.dart';
|
|
|
|
extension DataServiceStats on DataService {
|
|
Future<void> fetchAboutStats({bool force = false}) async {
|
|
if (_isAboutStatsLoading) return;
|
|
if (!force && _aboutStats != null) return;
|
|
_isAboutStatsLoading = true;
|
|
_notifyAsync();
|
|
try {
|
|
final json = await api.get('/stats/about');
|
|
if (json is Map<String, dynamic>) {
|
|
_aboutStats = StatsAbout.fromJson(json);
|
|
} else if (json is Map) {
|
|
_aboutStats = StatsAbout.fromJson(
|
|
json.map((key, value) => MapEntry(key.toString(), value)),
|
|
);
|
|
} else {
|
|
throw Exception('Unexpected stats response: $json');
|
|
}
|
|
} catch (e) {
|
|
debugPrint('Failed to fetch about stats: $e');
|
|
_aboutStats = null;
|
|
} finally {
|
|
_isAboutStatsLoading = false;
|
|
_notifyAsync();
|
|
}
|
|
}
|
|
|
|
Future<void> fetchFriendsLeaderboard() async {
|
|
if (_isFriendsLeaderboardLoading) return;
|
|
_isFriendsLeaderboardLoading = true;
|
|
_notifyAsync();
|
|
try {
|
|
final json = await api.get('/stats/leaderboard/friends');
|
|
List<dynamic>? list;
|
|
if (json is List) {
|
|
list = json;
|
|
} else if (json is Map) {
|
|
for (final key in ['leaderboard', 'data', 'items', 'results']) {
|
|
final value = json[key];
|
|
if (value is List) {
|
|
list = value;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
_friendsLeaderboard = list
|
|
?.whereType<Map>()
|
|
.map((e) => LeaderboardEntry.fromJson(
|
|
e.map((k, v) => MapEntry(k.toString(), v)),
|
|
))
|
|
.toList() ??
|
|
const [];
|
|
} catch (e) {
|
|
debugPrint('Failed to fetch friends leaderboard: $e');
|
|
_friendsLeaderboard = [];
|
|
} finally {
|
|
_isFriendsLeaderboardLoading = false;
|
|
_notifyAsync();
|
|
}
|
|
}
|
|
}
|