From d47ea5a092cbc41eaa0920affae2dc5267f436df Mon Sep 17 00:00:00 2001 From: Rongjian Zhang Date: Tue, 6 Oct 2020 11:54:35 +0800 Subject: [PATCH] fix(gitea): pagination has more and cursor --- lib/models/auth.dart | 19 +++++++++++++------ lib/screens/gt_commits.dart | 6 +++--- lib/screens/gt_issues.dart | 4 ++-- lib/screens/gt_orgs.dart | 7 +++---- lib/screens/gt_repos.dart | 8 +++----- lib/screens/gt_users.dart | 6 ++---- 6 files changed, 26 insertions(+), 24 deletions(-) diff --git a/lib/models/auth.dart b/lib/models/auth.dart index 495b1589..d377f306 100644 --- a/lib/models/auth.dart +++ b/lib/models/auth.dart @@ -233,15 +233,22 @@ class AuthModel with ChangeNotifier { return info; } - Future fetchGiteaWithPage(String p) async { - final res = await http.get('${activeAccount.domain}/api/v1$p', - headers: {'Authorization': 'token $token'}); + Future 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'] ?? ''), ); } diff --git a/lib/screens/gt_commits.dart b/lib/screens/gt_commits.dart index da9ae3af..3a1e4249 100644 --- a/lib/screens/gt_commits.dart +++ b/lib/screens/gt_commits.dart @@ -17,9 +17,9 @@ class GtCommitsScreen extends StatelessWidget { return ListStatefulScaffold( title: AppBarTitle('Commits'), onLoadMore: (page) async { - page = page ?? 1; - final res = await context.read().fetchGiteaWithPage( - '/repos/$owner/$name/commits?page=$page&limit=20'); + final res = await context + .read() + .fetchGiteaWithPage('/repos/$owner/$name/commits', page: page); return ListPayload( cursor: res.cursor, hasMore: res.hasMore, diff --git a/lib/screens/gt_issues.dart b/lib/screens/gt_issues.dart index 56f6199c..72491677 100644 --- a/lib/screens/gt_issues.dart +++ b/lib/screens/gt_issues.dart @@ -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().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, diff --git a/lib/screens/gt_orgs.dart b/lib/screens/gt_orgs.dart index 98ba94ab..0e5be286 100644 --- a/lib/screens/gt_orgs.dart +++ b/lib/screens/gt_orgs.dart @@ -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() - .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(), ); }, diff --git a/lib/screens/gt_repos.dart b/lib/screens/gt_repos.dart index 370a1aab..d42e8f1c 100644 --- a/lib/screens/gt_repos.dart +++ b/lib/screens/gt_repos.dart @@ -29,12 +29,10 @@ class GtReposScreen extends StatelessWidget { return ListStatefulScaffold( title: AppBarTitle(title), onLoadMore: (page) async { - page = page ?? 1; - final res = await context - .read() - .fetchGiteaWithPage('$api?page=$page'); + final res = + await context.read().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)], ); diff --git a/lib/screens/gt_users.dart b/lib/screens/gt_users.dart index 644099c5..f842e545 100644 --- a/lib/screens/gt_users.dart +++ b/lib/screens/gt_users.dart @@ -32,10 +32,8 @@ class GtUsersScreen extends StatelessWidget { return ListStatefulScaffold( title: AppBarTitle(title), onLoadMore: (page) async { - page = page ?? 1; - final res = await context - .read() - .fetchGiteaWithPage('$api?page=$page'); + final res = + await context.read().fetchGiteaWithPage(api, page: page); return ListPayload( cursor: res.cursor, hasMore: res.hasMore,