1
0
mirror of https://github.com/git-touch/git-touch synced 2025-02-21 22:07:51 +01:00

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; return info;
} }
Future<DataWithPage> fetchGiteaWithPage(String p) async { Future<DataWithPage> fetchGiteaWithPage(String path,
final res = await http.get('${activeAccount.domain}/api/v1$p', {int page, int limit}) async {
headers: {'Authorization': 'token $token'}); 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)); final info = json.decode(utf8.decode(res.bodyBytes));
return DataWithPage( return DataWithPage(
data: info, data: info,
cursor: int.tryParse(res.headers["x-page"] ?? ''), cursor: page + 1,
hasMore: res.headers['x-hasmore'] == 'true', hasMore: info is List && info.length > 0,
total: int.tryParse(res.headers['x-total'] ?? ''), total: int.tryParse(res.headers['x-total-count'] ?? ''),
); );
} }

View File

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

View File

@ -18,10 +18,10 @@ class GtIssuesScreen extends StatelessWidget {
title: AppBarTitle(isPr ? 'Pull Requests' : 'Issues'), title: AppBarTitle(isPr ? 'Pull Requests' : 'Issues'),
// TODO: create issue // TODO: create issue
onLoadMore: (page) async { onLoadMore: (page) async {
page = page ?? 1;
final type = isPr ? 'pulls' : 'issues'; final type = isPr ? 'pulls' : 'issues';
final res = await context.read<AuthModel>().fetchGiteaWithPage( 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( return ListPayload(
cursor: res.cursor, cursor: res.cursor,
hasMore: res.hasMore, hasMore: res.hasMore,

View File

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

View File

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