♻️ Better http client management, no more expired token

This commit is contained in:
2024-06-06 20:49:18 +08:00
parent d1a8793550
commit ce15944018
26 changed files with 96 additions and 152 deletions

View File

@ -22,7 +22,7 @@ class _AccountProfilePopupState extends State<AccountProfilePopup> {
void getUserinfo() async {
setState(() => _isBusy = true);
final client = GetConnect(maxAuthRetries: 3);
final client = GetConnect();
client.httpClient.baseUrl = ServiceFinder.services['passport'];
final resp = await client.get('/api/users/${widget.account.name}');

View File

@ -3,7 +3,6 @@ import 'package:get/get.dart';
import 'package:solian/exts.dart';
import 'package:solian/models/channel.dart';
import 'package:solian/providers/auth.dart';
import 'package:solian/services.dart';
class ChannelDeletionDialog extends StatefulWidget {
final Channel channel;
@ -30,9 +29,7 @@ class _ChannelDeletionDialogState extends State<ChannelDeletionDialog> {
setState(() => _isBusy = true);
final client = GetConnect(maxAuthRetries: 3);
client.httpClient.baseUrl = ServiceFinder.services['messaging'];
client.httpClient.addAuthenticator(auth.requestAuthenticator);
final client = auth.configureClient(service: 'messaging');
final resp = await client
.delete('/api/channels/${widget.realm}/${widget.channel.id}');
@ -51,9 +48,7 @@ class _ChannelDeletionDialogState extends State<ChannelDeletionDialog> {
setState(() => _isBusy = true);
final client = GetConnect(maxAuthRetries: 3);
client.httpClient.baseUrl = ServiceFinder.services['messaging'];
client.httpClient.addAuthenticator(auth.requestAuthenticator);
final client = auth.configureClient(service: 'messaging');
final resp = await client.delete(
'/api/channels/${widget.realm}/${widget.channel.alias}/members/me',

View File

@ -39,8 +39,7 @@ class _ChannelMemberListPopupState extends State<ChannelMemberListPopup> {
void getMembers() async {
setState(() => _isBusy = true);
final client = GetConnect(maxAuthRetries: 3);
client.httpClient.baseUrl = ServiceFinder.services['messaging'];
final client = ServiceFinder.configureClient('messaging');
final resp = await client
.get('/api/channels/${widget.realm}/${widget.channel.alias}/members');
@ -76,9 +75,7 @@ class _ChannelMemberListPopupState extends State<ChannelMemberListPopup> {
setState(() => _isBusy = true);
final client = GetConnect(maxAuthRetries: 3);
client.httpClient.baseUrl = ServiceFinder.services['messaging'];
client.httpClient.addAuthenticator(auth.requestAuthenticator);
final client = auth.configureClient(service: 'messaging');
final resp = await client.post(
'/api/channels/${widget.realm}/${widget.channel.alias}/members',
@ -99,9 +96,7 @@ class _ChannelMemberListPopupState extends State<ChannelMemberListPopup> {
setState(() => _isBusy = true);
final client = GetConnect(maxAuthRetries: 3);
client.httpClient.baseUrl = ServiceFinder.services['messaging'];
client.httpClient.addAuthenticator(auth.requestAuthenticator);
final client = auth.configureClient(service: 'messaging');
final resp = await client.request(
'/api/channels/${widget.realm}/${widget.channel.alias}/members',

View File

@ -5,7 +5,6 @@ import 'package:solian/models/call.dart';
import 'package:solian/models/channel.dart';
import 'package:solian/models/realm.dart';
import 'package:solian/providers/auth.dart';
import 'package:solian/services.dart';
class ChatCallButton extends StatefulWidget {
final Realm? realm;
@ -34,9 +33,7 @@ class _ChatCallButtonState extends State<ChatCallButton> {
final AuthProvider auth = Get.find();
if (!await auth.isAuthorized) return;
final client = GetConnect(maxAuthRetries: 3);
client.httpClient.baseUrl = ServiceFinder.services['messaging'];
client.httpClient.addAuthenticator(auth.requestAuthenticator);
final client = auth.configureClient(service: 'messaging');
setState(() => _isBusy = true);
@ -60,9 +57,7 @@ class _ChatCallButtonState extends State<ChatCallButton> {
final AuthProvider auth = Get.find();
if (!await auth.isAuthorized) return;
final client = GetConnect(maxAuthRetries: 3);
client.httpClient.baseUrl = ServiceFinder.services['messaging'];
client.httpClient.addAuthenticator(auth.requestAuthenticator);
final client = auth.configureClient(service: 'messaging');
setState(() => _isBusy = true);

View File

@ -5,7 +5,6 @@ import 'package:solian/models/channel.dart';
import 'package:solian/models/message.dart';
import 'package:solian/models/realm.dart';
import 'package:solian/providers/auth.dart';
import 'package:solian/services.dart';
class ChatMessageDeletionDialog extends StatefulWidget {
final Channel channel;
@ -31,9 +30,7 @@ class _ChatMessageDeletionDialogState extends State<ChatMessageDeletionDialog> {
final AuthProvider auth = Get.find();
if (!await auth.isAuthorized) return;
final client = GetConnect(maxAuthRetries: 3);
client.httpClient.baseUrl = ServiceFinder.services['messaging'];
client.httpClient.addAuthenticator(auth.requestAuthenticator);
final client = auth.configureClient(service: 'messaging');
setState(() => _isBusy = true);

View File

@ -6,7 +6,6 @@ import 'package:solian/models/account.dart';
import 'package:solian/models/channel.dart';
import 'package:solian/models/message.dart';
import 'package:solian/providers/auth.dart';
import 'package:solian/services.dart';
import 'package:solian/widgets/attachments/attachment_publish.dart';
import 'package:solian/widgets/chat/chat_message.dart';
import 'package:uuid/uuid.dart';
@ -70,9 +69,7 @@ class _ChatMessageInputState extends State<ChatMessageInput> {
final prof = await auth.getProfile();
if (!await auth.isAuthorized) return;
final client = GetConnect(maxAuthRetries: 3);
client.httpClient.baseUrl = ServiceFinder.services['messaging'];
client.httpClient.addAuthenticator(auth.requestAuthenticator);
final client = auth.configureClient(service: 'messaging');
final payload = {
'uuid': const Uuid().v4(),

View File

@ -29,9 +29,9 @@ class BackgroundStateWidget extends StatelessWidget {
].join('\n'),
icon: const Icon(Icons.wifi_off)
.animate(onPlay: (c) => c.repeat())
.fadeIn(duration: 500.ms)
.fadeIn(duration: 800.ms)
.then()
.fadeOut(duration: 500.ms),
.fadeOut(duration: 800.ms),
onPressed: () {
if (account.isConnected.isFalse) account.connect();
if (chat.isConnected.isFalse) chat.connect();

View File

@ -9,7 +9,6 @@ import 'package:solian/models/post.dart';
import 'package:solian/providers/auth.dart';
import 'package:solian/router.dart';
import 'package:solian/screens/posts/post_publish.dart';
import 'package:solian/services.dart';
class PostAction extends StatefulWidget {
final Post item;
@ -154,9 +153,7 @@ class _PostDeletionDialogState extends State<PostDeletionDialog> {
final AuthProvider auth = Get.find();
if (!await auth.isAuthorized) return;
final client = GetConnect(maxAuthRetries: 3);
client.httpClient.baseUrl = ServiceFinder.services['interactive'];
client.httpClient.addAuthenticator(auth.requestAuthenticator);
final client = auth.configureClient(service: 'interactive');
setState(() => _isBusy = true);
final resp = await client.delete('/api/posts/${widget.item.id}');

View File

@ -4,7 +4,6 @@ import 'package:solian/exts.dart';
import 'package:solian/models/post.dart';
import 'package:solian/models/reaction.dart';
import 'package:solian/providers/auth.dart';
import 'package:solian/services.dart';
import 'package:solian/widgets/posts/post_reaction.dart';
import 'package:solian/widgets/posts/post_replies.dart';
@ -51,9 +50,7 @@ class _PostQuickActionState extends State<PostQuickAction> {
if (_isSubmitting) return;
if (!await auth.isAuthorized) return;
final client = GetConnect(maxAuthRetries: 3);
client.httpClient.baseUrl = ServiceFinder.services['interactive'];
client.httpClient.addAuthenticator(auth.requestAuthenticator);
final client = auth.configureClient(service: 'interactive');
setState(() => _isSubmitting = true);

View File

@ -3,7 +3,6 @@ import 'package:get/get.dart';
import 'package:solian/exts.dart';
import 'package:solian/models/realm.dart';
import 'package:solian/providers/auth.dart';
import 'package:solian/services.dart';
class RealmDeletionDialog extends StatefulWidget {
final Realm realm;
@ -22,15 +21,13 @@ class RealmDeletionDialog extends StatefulWidget {
class _RealmDeletionDialogState extends State<RealmDeletionDialog> {
bool _isBusy = false;
Future<void> deleteChannel() async {
Future<void> deleteRealm() async {
final AuthProvider auth = Get.find();
if (!await auth.isAuthorized) return;
setState(() => _isBusy = true);
final client = GetConnect(maxAuthRetries: 3);
client.httpClient.baseUrl = ServiceFinder.services['passport'];
client.httpClient.addAuthenticator(auth.requestAuthenticator);
final client = auth.configureClient(service: 'passport');
final resp = await client.delete('/api/realms/${widget.realm.id}');
if (resp.statusCode != 200) {
@ -42,15 +39,13 @@ class _RealmDeletionDialogState extends State<RealmDeletionDialog> {
setState(() => _isBusy = false);
}
Future<void> leaveChannel() async {
Future<void> leaveRealm() async {
final AuthProvider auth = Get.find();
if (!await auth.isAuthorized) return;
setState(() => _isBusy = true);
final client = GetConnect(maxAuthRetries: 3);
client.httpClient.baseUrl = ServiceFinder.services['passport'];
client.httpClient.addAuthenticator(auth.requestAuthenticator);
final client = auth.configureClient(service: 'passport');
final resp =
await client.delete('/api/realms/${widget.realm.id}/members/me');
@ -80,8 +75,8 @@ class _RealmDeletionDialogState extends State<RealmDeletionDialog> {
onPressed: _isBusy
? null
: widget.isOwned
? deleteChannel
: leaveChannel,
? deleteRealm
: leaveRealm,
child: Text('confirm'.tr),
),
],

View File

@ -37,8 +37,7 @@ class _RealmMemberListPopupState extends State<RealmMemberListPopup> {
void getMembers() async {
setState(() => _isBusy = true);
final client = GetConnect(maxAuthRetries: 3);
client.httpClient.baseUrl = ServiceFinder.services['passport'];
final client = ServiceFinder.configureClient('passport');
final resp = await client.get('/api/realms/${widget.realm.alias}/members');
if (resp.statusCode == 200) {
@ -73,9 +72,7 @@ class _RealmMemberListPopupState extends State<RealmMemberListPopup> {
setState(() => _isBusy = true);
final client = GetConnect(maxAuthRetries: 3);
client.httpClient.baseUrl = ServiceFinder.services['passport'];
client.httpClient.addAuthenticator(auth.requestAuthenticator);
final client = auth.configureClient(service: 'passport');
final resp = await client.post(
'/api/realms/${widget.realm.alias}/members',
@ -96,9 +93,7 @@ class _RealmMemberListPopupState extends State<RealmMemberListPopup> {
setState(() => _isBusy = true);
final client = GetConnect(maxAuthRetries: 3);
client.httpClient.baseUrl = ServiceFinder.services['passport'];
client.httpClient.addAuthenticator(auth.requestAuthenticator);
final client = auth.configureClient(service: 'passport');
final resp = await client.request(
'/api/realms/${widget.realm.alias}/members',