fix(gitea): pagination has more and cursor

This commit is contained in:
Rongjian Zhang 2020-10-06 11:54:35 +08:00
parent 40a5445dd6
commit d47ea5a092
6 changed files with 26 additions and 24 deletions

View File

@ -233,15 +233,22 @@ class AuthModel with ChangeNotifier {
return info;
}
Future<DataWithPage> fetchGiteaWithPage(String p) async {
final res = await http.get('${activeAccount.domain}/api/v1$p',
headers: {'Authorization': 'token $token'});
Future<DataWithPage> fetchGiteaWithPage(String path,
{int page, int limit}) async {
page = page ?? 1;
limit = limit ?? pageSize;
final uri = Uri.parse('${activeAccount.domain}/api/v1$path').replace(
queryParameters: {'page': page.toString(), 'limit': limit.toString()},
);
final res = await http.get(uri, headers: {'Authorization': 'token $token'});
final info = json.decode(utf8.decode(res.bodyBytes));
return DataWithPage(
data: info,
cursor: int.tryParse(res.headers["x-page"] ?? ''),
hasMore: res.headers['x-hasmore'] == 'true',
total: int.tryParse(res.headers['x-total'] ?? ''),
cursor: page + 1,
hasMore: info is List && info.length > 0,
total: int.tryParse(res.headers['x-total-count'] ?? ''),
);
}

View File

@ -17,9 +17,9 @@ class GtCommitsScreen extends StatelessWidget {
return ListStatefulScaffold<GiteaCommit, int>(
title: AppBarTitle('Commits'),
onLoadMore: (page) async {
page = page ?? 1;
final res = await context.read<AuthModel>().fetchGiteaWithPage(
'/repos/$owner/$name/commits?page=$page&limit=20');
final res = await context
.read<AuthModel>()
.fetchGiteaWithPage('/repos/$owner/$name/commits', page: page);
return ListPayload(
cursor: res.cursor,
hasMore: res.hasMore,

View File

@ -18,10 +18,10 @@ class GtIssuesScreen extends StatelessWidget {
title: AppBarTitle(isPr ? 'Pull Requests' : 'Issues'),
// TODO: create issue
onLoadMore: (page) async {
page = page ?? 1;
final type = isPr ? 'pulls' : 'issues';
final res = await context.read<AuthModel>().fetchGiteaWithPage(
'/repos/$owner/$name/issues?state=open&page=$page&limit=20&type=$type');
'/repos/$owner/$name/issues?state=open&type=$type',
page: page);
return ListPayload(
cursor: res.cursor,
hasMore: res.hasMore,

View File

@ -13,14 +13,13 @@ class GtOrgsScreen extends StatelessWidget {
title: AppBarTitle('Organizations'),
onLoadMore: (page) async {
// final String branch; // TODO:
page = page ?? 1;
final res = await context
.read<AuthModel>()
.fetchGiteaWithPage('/orgs?limit=20&page=$page');
.fetchGiteaWithPage('/orgs', page: page);
// TODO: https://github.com/go-gitea/gitea/issues/10199
return ListPayload(
cursor: page + 1,
hasMore: (res.data as List).length == 20,
cursor: res.cursor,
hasMore: res.hasMore,
items: (res.data as List).map((v) => GiteaOrg.fromJson(v)).toList(),
);
},

View File

@ -29,12 +29,10 @@ class GtReposScreen extends StatelessWidget {
return ListStatefulScaffold<GiteaRepository, int>(
title: AppBarTitle(title),
onLoadMore: (page) async {
page = page ?? 1;
final res = await context
.read<AuthModel>()
.fetchGiteaWithPage('$api?page=$page');
final res =
await context.read<AuthModel>().fetchGiteaWithPage(api, page: page);
return ListPayload(
cursor: page + 1,
cursor: res.cursor,
hasMore: res.hasMore,
items: [for (var v in res.data) GiteaRepository.fromJson(v)],
);

View File

@ -32,10 +32,8 @@ class GtUsersScreen extends StatelessWidget {
return ListStatefulScaffold<GiteaUser, int>(
title: AppBarTitle(title),
onLoadMore: (page) async {
page = page ?? 1;
final res = await context
.read<AuthModel>()
.fetchGiteaWithPage('$api?page=$page');
final res =
await context.read<AuthModel>().fetchGiteaWithPage(api, page: page);
return ListPayload(
cursor: res.cursor,
hasMore: res.hasMore,