-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathgroups.dart
More file actions
100 lines (84 loc) · 2.68 KB
/
groups.dart
File metadata and controls
100 lines (84 loc) · 2.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import 'dart:convert';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'package:piwigo_ng/domain/models/group_model.dart';
import 'package:piwigo_ng/data/services/api/api_client.dart';
import 'package:piwigo_ng/utils/settings.dart';
import 'api_error.dart';
Future<List<GroupModel>?> getAllGroups({
List<int>? groups,
String? name,
}) async {
int page = 0;
bool reachedEnd = false;
List<GroupModel> groupsResponse = [];
Map<String, dynamic> queries = {
'format': 'json',
'method': 'pwg.groups.getList',
'order': Settings.defaultGroupSort,
'per_page': Settings.defaultElementPerPage,
'page': page,
};
if (groups != null) queries['group_id[]'] = groups;
if (name != null) queries['name'] = "$name%";
try {
while (!reachedEnd) {
Response response = await ApiClient.get(queryParameters: queries);
if (response.statusCode == 200) {
Map<String, dynamic> data = json.decode(response.data);
var jsonGroups = data['result']['groups'];
List<GroupModel> pageGroups = List<GroupModel>.from(
jsonGroups.map((group) => GroupModel.fromJson(group)),
);
groupsResponse.addAll(pageGroups);
if (pageGroups.length < Settings.defaultElementPerPage) {
reachedEnd = true;
} else {
page++;
queries['page'] = page;
}
} else {
if (groupsResponse.isEmpty) {
return null;
}
reachedEnd = true;
}
}
return groupsResponse;
} on DioException catch (e) {
debugPrint('Fetch all groups: ${e.message}');
} on Error catch (e) {
debugPrint('Fetch all groups: ${e.stackTrace}');
}
return null;
}
Future<ApiResponse<List<GroupModel>?>> getGroups([int page = 0]) async {
Map<String, dynamic> queries = {
'format': 'json',
'method': 'pwg.groups.getList',
'order': Settings.defaultGroupSort,
'per_page': Settings.defaultElementPerPage,
'page': page,
};
try {
Response response = await ApiClient.get(queryParameters: queries);
if (response.statusCode == 200) {
Map<String, dynamic> data = json.decode(response.data);
var jsonGroups = data['result']['groups'];
List<GroupModel> groups = List<GroupModel>.from(
jsonGroups.map((group) => GroupModel.fromJson(group)),
);
return ApiResponse<List<GroupModel>?>(
paging: PagingModel.fromJson(json: data['result']['paging']),
data: groups,
);
}
} on DioException catch (e) {
debugPrint('Fetch groups: ${e.message}');
} on Error catch (e) {
debugPrint('Fetch groups: ${e.stackTrace}');
}
return ApiResponse<List<GroupModel>?>(
error: ApiErrors.error,
);
}