🥅 Better unauthorized exceptions
This commit is contained in:
		| @@ -112,15 +112,19 @@ class _BootstrapperShellState extends State<BootstrapperShell> { | |||||||
|       label: 'bsPreparingData', |       label: 'bsPreparingData', | ||||||
|       action: () async { |       action: () async { | ||||||
|         final AuthProvider auth = Get.find(); |         final AuthProvider auth = Get.find(); | ||||||
|         await Future.wait([ |         try { | ||||||
|           Get.find<StickerProvider>().refreshAvailableStickers(), |           await Future.wait([ | ||||||
|           if (auth.isAuthorized.isTrue) |             Get.find<StickerProvider>().refreshAvailableStickers(), | ||||||
|             Get.find<ChannelProvider>().refreshAvailableChannel(), |             if (auth.isAuthorized.isTrue) | ||||||
|           if (auth.isAuthorized.isTrue) |               Get.find<ChannelProvider>().refreshAvailableChannel(), | ||||||
|             Get.find<RelationshipProvider>().refreshRelativeList(), |             if (auth.isAuthorized.isTrue) | ||||||
|           if (auth.isAuthorized.isTrue) |               Get.find<RelationshipProvider>().refreshRelativeList(), | ||||||
|             Get.find<RealmProvider>().refreshAvailableRealms(), |             if (auth.isAuthorized.isTrue) | ||||||
|         ]); |               Get.find<RealmProvider>().refreshAvailableRealms(), | ||||||
|  |           ]); | ||||||
|  |         } catch (e) { | ||||||
|  |           context.showErrorDialog(e); | ||||||
|  |         } | ||||||
|       }, |       }, | ||||||
|     ), |     ), | ||||||
|     ( |     ( | ||||||
|   | |||||||
							
								
								
									
										6
									
								
								lib/exceptions/unauthorized.dart
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								lib/exceptions/unauthorized.dart
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,6 @@ | |||||||
|  | class UnauthorizedException implements Exception { | ||||||
|  |   const UnauthorizedException(); | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   String toString() => 'Unauthorized'; | ||||||
|  | } | ||||||
| @@ -1,5 +1,6 @@ | |||||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||||
| import 'package:get/get.dart'; | import 'package:get/get.dart'; | ||||||
|  | import 'package:solian/exceptions/unauthorized.dart'; | ||||||
|  |  | ||||||
| extension SolianExtenions on BuildContext { | extension SolianExtenions on BuildContext { | ||||||
|   void showSnackbar(String content, {SnackBarAction? action}) { |   void showSnackbar(String content, {SnackBarAction? action}) { | ||||||
| @@ -48,15 +49,17 @@ extension SolianExtenions on BuildContext { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   Future<void> showErrorDialog(dynamic exception) { |   Future<void> showErrorDialog(dynamic exception) { | ||||||
|     var stack = StackTrace.current; |     Widget content = Text(exception.toString().capitalize!); | ||||||
|     var stackTrace = '$stack'; |     if (exception is UnauthorizedException) { | ||||||
|  |       content = Text('errorHappenedUnauthorized'.tr); | ||||||
|  |     } | ||||||
|  |  | ||||||
|     return showDialog<void>( |     return showDialog<void>( | ||||||
|       useRootNavigator: true, |       useRootNavigator: true, | ||||||
|       context: this, |       context: this, | ||||||
|       builder: (ctx) => AlertDialog( |       builder: (ctx) => AlertDialog( | ||||||
|         title: Text('errorHappened'.tr), |         title: Text('errorHappened'.tr), | ||||||
|         content: Text('${exception.toString().capitalize!}\n\nStack Trace: $stackTrace'), |         content: content, | ||||||
|         actions: [ |         actions: [ | ||||||
|           TextButton( |           TextButton( | ||||||
|             onPressed: () => Navigator.pop(ctx), |             onPressed: () => Navigator.pop(ctx), | ||||||
|   | |||||||
| @@ -1,5 +1,6 @@ | |||||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||||
| import 'package:get/get.dart'; | import 'package:get/get.dart'; | ||||||
|  | import 'package:solian/exceptions/unauthorized.dart'; | ||||||
| import 'package:solian/models/account_status.dart'; | import 'package:solian/models/account_status.dart'; | ||||||
| import 'package:solian/providers/auth.dart'; | import 'package:solian/providers/auth.dart'; | ||||||
| import 'package:solian/services.dart'; | import 'package:solian/services.dart'; | ||||||
| @@ -33,15 +34,14 @@ class StatusProvider extends GetConnect { | |||||||
|  |  | ||||||
|   Future<Response> getCurrentStatus() async { |   Future<Response> getCurrentStatus() async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw const UnauthorizedException(); | ||||||
|  |  | ||||||
|     final client = auth.configureClient('auth'); |     final client = auth.configureClient('auth'); | ||||||
|  |  | ||||||
|     return await client.get('/users/me/status'); |     return await client.get('/users/me/status'); | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   Future<Response> getSomeoneStatus(String name) => |   Future<Response> getSomeoneStatus(String name) => get('/users/$name/status'); | ||||||
|       get('/users/$name/status'); |  | ||||||
|  |  | ||||||
|   Future<Response> setStatus( |   Future<Response> setStatus( | ||||||
|     String type, |     String type, | ||||||
| @@ -53,7 +53,7 @@ class StatusProvider extends GetConnect { | |||||||
|     DateTime? clearAt, |     DateTime? clearAt, | ||||||
|   }) async { |   }) async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw const UnauthorizedException(); | ||||||
|  |  | ||||||
|     final client = auth.configureClient('auth'); |     final client = auth.configureClient('auth'); | ||||||
|  |  | ||||||
| @@ -82,7 +82,7 @@ class StatusProvider extends GetConnect { | |||||||
|  |  | ||||||
|   Future<Response> clearStatus() async { |   Future<Response> clearStatus() async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw const UnauthorizedException(); | ||||||
|  |  | ||||||
|     final client = auth.configureClient('auth'); |     final client = auth.configureClient('auth'); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -7,6 +7,7 @@ import 'package:flutter_secure_storage/flutter_secure_storage.dart'; | |||||||
| import 'package:get/get.dart'; | import 'package:get/get.dart'; | ||||||
| import 'package:get/get_connect/http/src/request/request.dart'; | import 'package:get/get_connect/http/src/request/request.dart'; | ||||||
| import 'package:solian/controllers/chat_events_controller.dart'; | import 'package:solian/controllers/chat_events_controller.dart'; | ||||||
|  | import 'package:solian/exceptions/unauthorized.dart'; | ||||||
| import 'package:solian/providers/websocket.dart'; | import 'package:solian/providers/websocket.dart'; | ||||||
| import 'package:solian/services.dart'; | import 'package:solian/services.dart'; | ||||||
|  |  | ||||||
| @@ -128,7 +129,7 @@ class AuthProvider extends GetConnect { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   Future<void> ensureCredentials() async { |   Future<void> ensureCredentials() async { | ||||||
|     if (isAuthorized.isFalse) throw Exception('unauthorized'); |     if (isAuthorized.isFalse) throw const UnauthorizedException(); | ||||||
|     if (credentials == null) await loadCredentials(); |     if (credentials == null) await loadCredentials(); | ||||||
|  |  | ||||||
|     if (credentials!.isExpired) { |     if (credentials!.isExpired) { | ||||||
|   | |||||||
| @@ -2,6 +2,7 @@ import 'dart:async'; | |||||||
|  |  | ||||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||||
| import 'package:get/get.dart'; | import 'package:get/get.dart'; | ||||||
|  | import 'package:solian/exceptions/unauthorized.dart'; | ||||||
| import 'package:livekit_client/livekit_client.dart'; | import 'package:livekit_client/livekit_client.dart'; | ||||||
| import 'package:permission_handler/permission_handler.dart'; | import 'package:permission_handler/permission_handler.dart'; | ||||||
| import 'package:solian/models/call.dart'; | import 'package:solian/models/call.dart'; | ||||||
| @@ -88,7 +89,7 @@ class ChatCallProvider extends GetxController { | |||||||
|  |  | ||||||
|   Future<(String, String)> getRoomToken() async { |   Future<(String, String)> getRoomToken() async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw UnauthorizedException(); | ||||||
|  |  | ||||||
|     final client = auth.configureClient('messaging'); |     final client = auth.configureClient('messaging'); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -2,6 +2,7 @@ import 'dart:convert'; | |||||||
| import 'dart:typed_data'; | import 'dart:typed_data'; | ||||||
|  |  | ||||||
| import 'package:get/get.dart'; | import 'package:get/get.dart'; | ||||||
|  | import 'package:solian/exceptions/unauthorized.dart'; | ||||||
| import 'package:path/path.dart'; | import 'package:path/path.dart'; | ||||||
| import 'package:solian/models/attachment.dart'; | import 'package:solian/models/attachment.dart'; | ||||||
| import 'package:solian/models/pagination.dart'; | import 'package:solian/models/pagination.dart'; | ||||||
| @@ -89,7 +90,7 @@ class AttachmentProvider extends GetConnect { | |||||||
|     Map<String, dynamic>? metadata, |     Map<String, dynamic>? metadata, | ||||||
|   ) async { |   ) async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw UnauthorizedException(); | ||||||
|  |  | ||||||
|     final client = auth.configureClient( |     final client = auth.configureClient( | ||||||
|       'uc', |       'uc', | ||||||
| @@ -131,7 +132,7 @@ class AttachmentProvider extends GetConnect { | |||||||
|     Map<String, dynamic>? metadata, |     Map<String, dynamic>? metadata, | ||||||
|   ) async { |   ) async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw UnauthorizedException(); | ||||||
|  |  | ||||||
|     final client = auth.configureClient('uc'); |     final client = auth.configureClient('uc'); | ||||||
|  |  | ||||||
| @@ -169,7 +170,7 @@ class AttachmentProvider extends GetConnect { | |||||||
|     String cid, |     String cid, | ||||||
|   ) async { |   ) async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw UnauthorizedException(); | ||||||
|  |  | ||||||
|     final client = auth.configureClient( |     final client = auth.configureClient( | ||||||
|       'uc', |       'uc', | ||||||
| @@ -193,7 +194,7 @@ class AttachmentProvider extends GetConnect { | |||||||
|     bool isMature = false, |     bool isMature = false, | ||||||
|   }) async { |   }) async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw UnauthorizedException(); | ||||||
|  |  | ||||||
|     final client = auth.configureClient('files'); |     final client = auth.configureClient('files'); | ||||||
|  |  | ||||||
| @@ -211,7 +212,7 @@ class AttachmentProvider extends GetConnect { | |||||||
|  |  | ||||||
|   Future<Response> deleteAttachment(int id) async { |   Future<Response> deleteAttachment(int id) async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw UnauthorizedException(); | ||||||
|  |  | ||||||
|     final client = auth.configureClient('files'); |     final client = auth.configureClient('files'); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,5 +1,6 @@ | |||||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||||
| import 'package:get/get.dart'; | import 'package:get/get.dart'; | ||||||
|  | import 'package:solian/exceptions/unauthorized.dart'; | ||||||
| import 'package:solian/models/channel.dart'; | import 'package:solian/models/channel.dart'; | ||||||
| import 'package:solian/providers/auth.dart'; | import 'package:solian/providers/auth.dart'; | ||||||
| import 'package:solian/widgets/account/relative_select.dart'; | import 'package:solian/widgets/account/relative_select.dart'; | ||||||
| @@ -16,7 +17,7 @@ class ChannelProvider extends GetxController { | |||||||
|  |  | ||||||
|   Future<void> refreshAvailableChannel() async { |   Future<void> refreshAvailableChannel() async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw UnauthorizedException(); | ||||||
|  |  | ||||||
|     isLoading.value = true; |     isLoading.value = true; | ||||||
|     final resp = await listAvailableChannel(); |     final resp = await listAvailableChannel(); | ||||||
| @@ -29,7 +30,7 @@ class ChannelProvider extends GetxController { | |||||||
|  |  | ||||||
|   Future<Response> getChannel(String alias, {String realm = 'global'}) async { |   Future<Response> getChannel(String alias, {String realm = 'global'}) async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw UnauthorizedException(); | ||||||
|  |  | ||||||
|     final client = auth.configureClient('messaging'); |     final client = auth.configureClient('messaging'); | ||||||
|  |  | ||||||
| @@ -44,7 +45,7 @@ class ChannelProvider extends GetxController { | |||||||
|   Future<Response> getMyChannelProfile(String alias, |   Future<Response> getMyChannelProfile(String alias, | ||||||
|       {String realm = 'global'}) async { |       {String realm = 'global'}) async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw UnauthorizedException(); | ||||||
|  |  | ||||||
|     final client = auth.configureClient('messaging'); |     final client = auth.configureClient('messaging'); | ||||||
|  |  | ||||||
| @@ -59,7 +60,7 @@ class ChannelProvider extends GetxController { | |||||||
|   Future<Response?> getChannelOngoingCall(String alias, |   Future<Response?> getChannelOngoingCall(String alias, | ||||||
|       {String realm = 'global'}) async { |       {String realm = 'global'}) async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw UnauthorizedException(); | ||||||
|  |  | ||||||
|     final client = auth.configureClient('messaging'); |     final client = auth.configureClient('messaging'); | ||||||
|  |  | ||||||
| @@ -75,7 +76,7 @@ class ChannelProvider extends GetxController { | |||||||
|  |  | ||||||
|   Future<Response> listChannel({String scope = 'global'}) async { |   Future<Response> listChannel({String scope = 'global'}) async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw UnauthorizedException(); | ||||||
|  |  | ||||||
|     final client = auth.configureClient('messaging'); |     final client = auth.configureClient('messaging'); | ||||||
|  |  | ||||||
| @@ -89,7 +90,7 @@ class ChannelProvider extends GetxController { | |||||||
|  |  | ||||||
|   Future<Response> listAvailableChannel({String realm = 'global'}) async { |   Future<Response> listAvailableChannel({String realm = 'global'}) async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw UnauthorizedException(); | ||||||
|  |  | ||||||
|     final client = auth.configureClient('messaging'); |     final client = auth.configureClient('messaging'); | ||||||
|  |  | ||||||
| @@ -103,7 +104,7 @@ class ChannelProvider extends GetxController { | |||||||
|  |  | ||||||
|   Future<Response> createChannel(String scope, dynamic payload) async { |   Future<Response> createChannel(String scope, dynamic payload) async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw UnauthorizedException(); | ||||||
|  |  | ||||||
|     final client = auth.configureClient('messaging'); |     final client = auth.configureClient('messaging'); | ||||||
|  |  | ||||||
| @@ -118,7 +119,7 @@ class ChannelProvider extends GetxController { | |||||||
|   Future<Response?> createDirectChannel( |   Future<Response?> createDirectChannel( | ||||||
|       BuildContext context, String scope) async { |       BuildContext context, String scope) async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw UnauthorizedException(); | ||||||
|  |  | ||||||
|     final related = await showModalBottomSheet( |     final related = await showModalBottomSheet( | ||||||
|       useRootNavigator: true, |       useRootNavigator: true, | ||||||
| @@ -149,7 +150,7 @@ class ChannelProvider extends GetxController { | |||||||
|  |  | ||||||
|   Future<Response> updateChannel(String scope, int id, dynamic payload) async { |   Future<Response> updateChannel(String scope, int id, dynamic payload) async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw UnauthorizedException(); | ||||||
|  |  | ||||||
|     final client = auth.configureClient('messaging'); |     final client = auth.configureClient('messaging'); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -1,4 +1,5 @@ | |||||||
| import 'package:get/get.dart'; | import 'package:get/get.dart'; | ||||||
|  | import 'package:solian/exceptions/unauthorized.dart'; | ||||||
| import 'package:solian/providers/auth.dart'; | import 'package:solian/providers/auth.dart'; | ||||||
| import 'package:solian/services.dart'; | import 'package:solian/services.dart'; | ||||||
|  |  | ||||||
| @@ -36,7 +37,7 @@ class PostProvider extends GetConnect { | |||||||
|  |  | ||||||
|   Future<Response> listDraft(int page) async { |   Future<Response> listDraft(int page) async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw UnauthorizedException(); | ||||||
|  |  | ||||||
|     final queries = [ |     final queries = [ | ||||||
|       'take=${10}', |       'take=${10}', | ||||||
|   | |||||||
| @@ -1,4 +1,5 @@ | |||||||
| import 'package:get/get.dart'; | import 'package:get/get.dart'; | ||||||
|  | import 'package:solian/exceptions/unauthorized.dart'; | ||||||
| import 'package:solian/models/realm.dart'; | import 'package:solian/models/realm.dart'; | ||||||
| import 'package:solian/providers/auth.dart'; | import 'package:solian/providers/auth.dart'; | ||||||
|  |  | ||||||
| @@ -8,7 +9,7 @@ class RealmProvider extends GetxController { | |||||||
|  |  | ||||||
|   Future<void> refreshAvailableRealms() async { |   Future<void> refreshAvailableRealms() async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw const UnauthorizedException(); | ||||||
|  |  | ||||||
|     isLoading.value = true; |     isLoading.value = true; | ||||||
|     final resp = await listAvailableRealm(); |     final resp = await listAvailableRealm(); | ||||||
| @@ -21,7 +22,7 @@ class RealmProvider extends GetxController { | |||||||
|  |  | ||||||
|   Future<Response> getRealm(String alias) async { |   Future<Response> getRealm(String alias) async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw const UnauthorizedException(); | ||||||
|  |  | ||||||
|     final client = auth.configureClient('auth'); |     final client = auth.configureClient('auth'); | ||||||
|  |  | ||||||
| @@ -35,7 +36,7 @@ class RealmProvider extends GetxController { | |||||||
|  |  | ||||||
|   Future<Response> listAvailableRealm() async { |   Future<Response> listAvailableRealm() async { | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     if (auth.isAuthorized.isFalse) throw Exception('unauthorized'); |     if (auth.isAuthorized.isFalse) throw const UnauthorizedException(); | ||||||
|  |  | ||||||
|     final client = auth.configureClient('auth'); |     final client = auth.configureClient('auth'); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -50,31 +50,31 @@ class WebSocketProvider extends GetxController { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     final AuthProvider auth = Get.find(); |     final AuthProvider auth = Get.find(); | ||||||
|     await auth.ensureCredentials(); |  | ||||||
|  |  | ||||||
|     if (auth.credentials == null) await auth.loadCredentials(); |  | ||||||
|  |  | ||||||
|     final uri = Uri.parse(ServiceFinder.buildUrl( |  | ||||||
|       'dealer', |  | ||||||
|       '/api/ws?tk=${auth.credentials!.accessToken}', |  | ||||||
|     ).replaceFirst('http', 'ws')); |  | ||||||
|  |  | ||||||
|     isConnecting.value = true; |  | ||||||
|  |  | ||||||
|     try { |     try { | ||||||
|  |       await auth.ensureCredentials(); | ||||||
|  |  | ||||||
|  |       final uri = Uri.parse(ServiceFinder.buildUrl( | ||||||
|  |         'dealer', | ||||||
|  |         '/api/ws?tk=${auth.credentials!.accessToken}', | ||||||
|  |       ).replaceFirst('http', 'ws')); | ||||||
|  |  | ||||||
|  |       isConnecting.value = true; | ||||||
|  |  | ||||||
|       websocket = WebSocketChannel.connect(uri); |       websocket = WebSocketChannel.connect(uri); | ||||||
|       await websocket?.ready; |       await websocket?.ready; | ||||||
|     } catch (e) { |       listen(); | ||||||
|  |  | ||||||
|  |       isConnected.value = true; | ||||||
|  |     } catch (err) { | ||||||
|  |       log('Unable connect dealer via websocket... $err'); | ||||||
|       if (!noRetry) { |       if (!noRetry) { | ||||||
|         await auth.refreshCredentials(); |         await auth.refreshCredentials(); | ||||||
|         return connect(noRetry: true); |         return connect(noRetry: true); | ||||||
|       } |       } | ||||||
|  |     } finally { | ||||||
|  |       isConnecting.value = false; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     listen(); |  | ||||||
|  |  | ||||||
|     isConnected.value = true; |  | ||||||
|     isConnecting.value = false; |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   void disconnect() { |   void disconnect() { | ||||||
|   | |||||||
| @@ -109,11 +109,11 @@ class _PersonalizeScreenState extends State<PersonalizeScreen> { | |||||||
|  |  | ||||||
|     setState(() => _isBusy = true); |     setState(() => _isBusy = true); | ||||||
|  |  | ||||||
|     final AttachmentProvider provider = Get.find(); |     final AttachmentProvider attach = Get.find(); | ||||||
|  |  | ||||||
|     Attachment? attachResult; |     Attachment? attachResult; | ||||||
|     try { |     try { | ||||||
|       attachResult = await provider.createAttachmentDirectly( |       attachResult = await attach.createAttachmentDirectly( | ||||||
|         await file.readAsBytes(), |         await file.readAsBytes(), | ||||||
|         file.path, |         file.path, | ||||||
|         'avatar', |         'avatar', | ||||||
|   | |||||||
| @@ -41,6 +41,8 @@ const i18nEnglish = { | |||||||
|   'openInBrowser': 'Open in browser', |   'openInBrowser': 'Open in browser', | ||||||
|   'notification': 'Notification', |   'notification': 'Notification', | ||||||
|   'errorHappened': 'An error occurred', |   'errorHappened': 'An error occurred', | ||||||
|  |   'errorHappenedUnauthorized': | ||||||
|  |       'Unauthorized request, please sign in or try resign in.', | ||||||
|   'forgotPassword': 'Forgot password', |   'forgotPassword': 'Forgot password', | ||||||
|   'email': 'Email', |   'email': 'Email', | ||||||
|   'username': 'Username', |   'username': 'Username', | ||||||
|   | |||||||
| @@ -41,6 +41,7 @@ const i18nSimplifiedChinese = { | |||||||
|   'openInBrowser': '在浏览器中打开', |   'openInBrowser': '在浏览器中打开', | ||||||
|   'notification': '通知', |   'notification': '通知', | ||||||
|   'errorHappened': '发生错误了', |   'errorHappened': '发生错误了', | ||||||
|  |   'errorHappenedUnauthorized': '未经授权的请求,请登录或尝试重新登录。', | ||||||
|   'forgotPassword': '忘记密码', |   'forgotPassword': '忘记密码', | ||||||
|   'email': '邮件地址', |   'email': '邮件地址', | ||||||
|   'username': '用户名', |   'username': '用户名', | ||||||
|   | |||||||
| @@ -28,11 +28,11 @@ class _AttachmentAttrEditorDialogState | |||||||
|   bool _isMature = false; |   bool _isMature = false; | ||||||
|  |  | ||||||
|   Future<Attachment?> _updateAttachment() async { |   Future<Attachment?> _updateAttachment() async { | ||||||
|     final AttachmentProvider provider = Get.find(); |     final AttachmentProvider attach = Get.find(); | ||||||
|  |  | ||||||
|     setState(() => _isBusy = true); |     setState(() => _isBusy = true); | ||||||
|     try { |     try { | ||||||
|       final resp = await provider.updateAttachment( |       final resp = await attach.updateAttachment( | ||||||
|         widget.item.id, |         widget.item.id, | ||||||
|         _altController.value.text, |         _altController.value.text, | ||||||
|         isMature: _isMature, |         isMature: _isMature, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user