feat(gitlab): add gql client

This commit is contained in:
Rongjian Zhang 2022-10-02 01:26:34 +08:00
parent 3474d931ac
commit 048d35112b
13 changed files with 38 additions and 27 deletions

View File

@ -664,7 +664,8 @@ class AuthModel with ChangeNotifier {
StorageKeys.getDefaultStartTabKey(activeAccount!.platform)) ?? StorageKeys.getDefaultStartTabKey(activeAccount!.platform)) ??
0; 0;
_ghClient = null; _ghClient = null;
_gqlClient = null; _ghGqlClient = null;
_glGqlClient = null;
notifyListeners(); notifyListeners();
// TODO: strategy // TODO: strategy
@ -689,20 +690,30 @@ class AuthModel with ChangeNotifier {
return _ghClient!; return _ghClient!;
} }
Client? _gqlClient; Client? _ghGqlClient;
Client get gqlClient { Client get ghGqlClient {
_gqlClient ??= Client( return _ghGqlClient ??= Client(
link: HttpLink( link: HttpLink(
'$_apiPrefix/graphql', '$_apiPrefix/graphql',
defaultHeaders: {HttpHeaders.authorizationHeader: 'token $token'}, defaultHeaders: {HttpHeaders.authorizationHeader: 'token $token'},
), ),
// https://ferrygraphql.com/docs/fetch-policies#default-fetchpolicies // https://ferrygraphql.com/docs/fetch-policies#default-fetchpolicies
defaultFetchPolicies: { defaultFetchPolicies: {OperationType.query: FetchPolicy.NetworkOnly},
OperationType.query: FetchPolicy.NetworkOnly,
},
); );
}
return _gqlClient!; Client? _glGqlClient;
Client get glGqlClient {
return _glGqlClient ??= Client(
link: HttpLink(
Uri.parse(activeAccount!.domain)
.replace(path: '/api/graphql')
.toString(),
defaultHeaders: {'Private-Token': token},
),
// https://ferrygraphql.com/docs/fetch-policies#default-fetchpolicies
defaultFetchPolicies: {OperationType.query: FetchPolicy.NetworkOnly},
);
} }
Future<dynamic> query(String query, [String? token]) async { Future<dynamic> query(String query, [String? token]) async {

View File

@ -41,7 +41,7 @@ class GhCommits extends StatelessWidget {
b.vars.after = cursor; b.vars.after = cursor;
}); });
final res = final res =
await context.read<AuthModel>().gqlClient.request(req).first; await context.read<AuthModel>().ghGqlClient.request(req).first;
final ref = res.data!.repository!.defaultBranchRef ?? final ref = res.data!.repository!.defaultBranchRef ??
res.data!.repository!.ref!; res.data!.repository!.ref!;
final history = (ref.target as GCommitsRefCommit).history; final history = (ref.target as GCommitsRefCommit).history;

View File

@ -22,7 +22,7 @@ class GhGistsScreen extends StatelessWidget {
..vars.login = login ..vars.login = login
..vars.after = page); ..vars.after = page);
final res = final res =
await context.read<AuthModel>().gqlClient.request(req).first; await context.read<AuthModel>().ghGqlClient.request(req).first;
final gists = res.data!.user!.gists; final gists = res.data!.user!.gists;
return ListPayload( return ListPayload(
cursor: gists.pageInfo.endCursor, cursor: gists.pageInfo.endCursor,

View File

@ -24,7 +24,7 @@ class GhGistsFilesScreen extends StatelessWidget {
..vars.login = login ..vars.login = login
..vars.name = id); ..vars.name = id);
final res = final res =
await context.read<AuthModel>().gqlClient.request(req).first; await context.read<AuthModel>().ghGqlClient.request(req).first;
final gist = res.data!.user!.gist; final gist = res.data!.user!.gist;
return gist; return gist;
}, },

View File

@ -93,7 +93,7 @@ class GhIssueScreen extends StatelessWidget {
b.vars.number = number; b.vars.number = number;
b.vars.cursor = cursor; b.vars.cursor = cursor;
}); });
final res = await context.read<AuthModel>().gqlClient.request(req).first; final res = await context.read<AuthModel>().ghGqlClient.request(req).first;
return res.data!.repository!; return res.data!.repository!;
} }

View File

@ -30,7 +30,7 @@ class GhIssuesScreen extends StatelessWidget {
b.vars.cursor = cursor; b.vars.cursor = cursor;
}); });
final res = final res =
await context.read<AuthModel>().gqlClient.request(req).first; await context.read<AuthModel>().ghGqlClient.request(req).first;
final issues = res.data!.repository!.issues; final issues = res.data!.repository!.issues;
return ListPayload( return ListPayload(
cursor: issues.pageInfo.endCursor, cursor: issues.pageInfo.endCursor,

View File

@ -16,7 +16,7 @@ class GhMetaScreen extends StatelessWidget {
fetch: () async { fetch: () async {
final req = GMetaReq(); final req = GMetaReq();
final res = final res =
await context.read<AuthModel>().gqlClient.request(req).first; await context.read<AuthModel>().ghGqlClient.request(req).first;
return res.data!.meta; return res.data!.meta;
}, },
bodyBuilder: (meta, _) { bodyBuilder: (meta, _) {

View File

@ -26,7 +26,7 @@ class GhPullsScreen extends StatelessWidget {
b.vars.cursor = cursor; b.vars.cursor = cursor;
}); });
final res = final res =
await context.read<AuthModel>().gqlClient.request(req).first; await context.read<AuthModel>().ghGqlClient.request(req).first;
final pulls = res.data!.repository!.pullRequests; final pulls = res.data!.repository!.pullRequests;
return ListPayload( return ListPayload(
cursor: pulls.pageInfo.endCursor, cursor: pulls.pageInfo.endCursor,

View File

@ -24,7 +24,7 @@ class GhReleasesScreen extends StatelessWidget {
..vars.name = name ..vars.name = name
..vars.cursor = page); ..vars.cursor = page);
final res = final res =
await context.read<AuthModel>().gqlClient.request(req).first; await context.read<AuthModel>().ghGqlClient.request(req).first;
final releases = res.data!.repository!.releases; final releases = res.data!.repository!.releases;
return ListPayload( return ListPayload(
cursor: releases.pageInfo.endCursor, cursor: releases.pageInfo.endCursor,

View File

@ -56,7 +56,7 @@ class GhRepoScreen extends StatelessWidget {
..vars.branchSpecified = branch != null ..vars.branchSpecified = branch != null
..vars.branch = branch ?? ''); ..vars.branch = branch ?? '');
final res = final res =
await context.read<AuthModel>().gqlClient.request(req).first; await context.read<AuthModel>().ghGqlClient.request(req).first;
final repo = res.data!.repository; final repo = res.data!.repository;
final ghClient = context.read<AuthModel>().ghClient; final ghClient = context.read<AuthModel>().ghClient;

View File

@ -22,7 +22,7 @@ class GhRepos extends StatelessWidget {
b.vars.login = login; b.vars.login = login;
b.vars.after = cursor; b.vars.after = cursor;
}); });
final res = await auth.gqlClient.request(req).first; final res = await auth.ghGqlClient.request(req).first;
final p = res.data!.repositoryOwner!.repositories; final p = res.data!.repositoryOwner!.repositories;
return ListPayload( return ListPayload(
cursor: p.pageInfo.endCursor, cursor: p.pageInfo.endCursor,
@ -52,7 +52,7 @@ class GhStars extends StatelessWidget {
b.vars.login = login; b.vars.login = login;
b.vars.after = cursor; b.vars.after = cursor;
}); });
final res = await auth.gqlClient.request(req).first; final res = await auth.ghGqlClient.request(req).first;
final p = res.data!.user!.starredRepositories; final p = res.data!.user!.starredRepositories;
return ListPayload( return ListPayload(
cursor: p.pageInfo.endCursor, cursor: p.pageInfo.endCursor,

View File

@ -217,7 +217,7 @@ class GhViewerScreen extends StatelessWidget {
return RefreshStatefulScaffold<GUserParts?>( return RefreshStatefulScaffold<GUserParts?>(
fetch: () async { fetch: () async {
final req = GViewerReq(); final req = GViewerReq();
final res = await auth.gqlClient.request(req).first; final res = await auth.ghGqlClient.request(req).first;
return res.data?.viewer; return res.data?.viewer;
}, },
title: AppBarTitle(AppLocalizations.of(context)!.me), title: AppBarTitle(AppLocalizations.of(context)!.me),
@ -243,7 +243,7 @@ class GhUserScreen extends StatelessWidget {
return RefreshStatefulScaffold<GUserData?>( return RefreshStatefulScaffold<GUserData?>(
fetch: () async { fetch: () async {
final req = GUserReq((b) => b..vars.login = login); final req = GUserReq((b) => b..vars.login = login);
final res = await auth.gqlClient.request(req).first; final res = await auth.ghGqlClient.request(req).first;
return res.data; return res.data;
}, },
title: AppBarTitle(login), title: AppBarTitle(login),

View File

@ -21,7 +21,7 @@ class GhFollowers extends StatelessWidget {
b.vars.login = login; b.vars.login = login;
b.vars.after = cursor; b.vars.after = cursor;
}); });
final res = await auth.gqlClient.request(req).first; final res = await auth.ghGqlClient.request(req).first;
final p = res.data!.user!.followers; final p = res.data!.user!.followers;
return ListPayload( return ListPayload(
cursor: p.pageInfo.endCursor, cursor: p.pageInfo.endCursor,
@ -50,7 +50,7 @@ class GhFollowing extends StatelessWidget {
b.vars.login = login; b.vars.login = login;
b.vars.after = cursor; b.vars.after = cursor;
}); });
final res = await auth.gqlClient.request(req).first; final res = await auth.ghGqlClient.request(req).first;
final p = res.data!.user!.following; final p = res.data!.user!.following;
return ListPayload( return ListPayload(
cursor: p.pageInfo.endCursor, cursor: p.pageInfo.endCursor,
@ -79,7 +79,7 @@ class GhOrgs extends StatelessWidget {
b.vars.login = login; b.vars.login = login;
b.vars.after = cursor; b.vars.after = cursor;
}); });
final res = await auth.gqlClient.request(req).first; final res = await auth.ghGqlClient.request(req).first;
final p = res.data!.user!.organizations; final p = res.data!.user!.organizations;
return ListPayload( return ListPayload(
cursor: p.pageInfo.endCursor, cursor: p.pageInfo.endCursor,
@ -108,7 +108,7 @@ class GhMembers extends StatelessWidget {
b.vars.login = login; b.vars.login = login;
b.vars.after = cursor; b.vars.after = cursor;
}); });
final res = await auth.gqlClient.request(req).first; final res = await auth.ghGqlClient.request(req).first;
final p = res.data!.organization!.membersWithRole; final p = res.data!.organization!.membersWithRole;
return ListPayload( return ListPayload(
cursor: p.pageInfo.endCursor, cursor: p.pageInfo.endCursor,
@ -139,7 +139,7 @@ class GhWachers extends StatelessWidget {
b.vars.name = name; b.vars.name = name;
b.vars.after = cursor; b.vars.after = cursor;
}); });
final res = await auth.gqlClient.request(req).first; final res = await auth.ghGqlClient.request(req).first;
final p = res.data!.repository!.watchers; final p = res.data!.repository!.watchers;
return ListPayload( return ListPayload(
cursor: p.pageInfo.endCursor, cursor: p.pageInfo.endCursor,
@ -170,7 +170,7 @@ class GhStargazers extends StatelessWidget {
b.vars.name = name; b.vars.name = name;
b.vars.after = cursor; b.vars.after = cursor;
}); });
final res = await auth.gqlClient.request(req).first; final res = await auth.ghGqlClient.request(req).first;
final p = res.data!.repository!.stargazers; final p = res.data!.repository!.stargazers;
return ListPayload( return ListPayload(
cursor: p.pageInfo.endCursor, cursor: p.pageInfo.endCursor,