⬆️ Support some new server stuff
This commit is contained in:
		| @@ -1,3 +1,5 @@ | ||||
| import 'dart:convert'; | ||||
|  | ||||
| import 'package:solian/models/account.dart'; | ||||
| import 'package:solian/models/channel.dart'; | ||||
| import 'package:solian/models/post.dart'; | ||||
| @@ -7,9 +9,9 @@ class Message { | ||||
|   DateTime createdAt; | ||||
|   DateTime updatedAt; | ||||
|   DateTime? deletedAt; | ||||
|   String content; | ||||
|   String rawContent; | ||||
|   Map<String, dynamic>? metadata; | ||||
|   int type; | ||||
|   String type; | ||||
|   List<Attachment>? attachments; | ||||
|   Channel? channel; | ||||
|   Sender sender; | ||||
| @@ -20,12 +22,16 @@ class Message { | ||||
|  | ||||
|   bool isSending = false; | ||||
|  | ||||
|   Map<String, dynamic> get decodedContent { | ||||
|     return jsonDecode(utf8.fuse(base64).decode(rawContent)); | ||||
|   } | ||||
|  | ||||
|   Message({ | ||||
|     required this.id, | ||||
|     required this.createdAt, | ||||
|     required this.updatedAt, | ||||
|     this.deletedAt, | ||||
|     required this.content, | ||||
|     required this.rawContent, | ||||
|     required this.metadata, | ||||
|     required this.type, | ||||
|     this.attachments, | ||||
| @@ -42,18 +48,14 @@ class Message { | ||||
|         createdAt: DateTime.parse(json['created_at']), | ||||
|         updatedAt: DateTime.parse(json['updated_at']), | ||||
|         deletedAt: json['deleted_at'], | ||||
|         content: json['content'], | ||||
|         rawContent: json['content'], | ||||
|         metadata: json['metadata'], | ||||
|         type: json['type'], | ||||
|         attachments: List<Attachment>.from( | ||||
|             json['attachments']?.map((x) => Attachment.fromJson(x)) ?? | ||||
|                 List.empty()), | ||||
|         attachments: List<Attachment>.from(json['attachments']?.map((x) => Attachment.fromJson(x)) ?? List.empty()), | ||||
|         channel: Channel.fromJson(json['channel']), | ||||
|         sender: Sender.fromJson(json['sender']), | ||||
|         replyId: json['reply_id'], | ||||
|         replyTo: json['reply_to'] != null | ||||
|             ? Message.fromJson(json['reply_to']) | ||||
|             : null, | ||||
|         replyTo: json['reply_to'] != null ? Message.fromJson(json['reply_to']) : null, | ||||
|         channelId: json['channel_id'], | ||||
|         senderId: json['sender_id'], | ||||
|       ); | ||||
| @@ -63,11 +65,10 @@ class Message { | ||||
|         'created_at': createdAt.toIso8601String(), | ||||
|         'updated_at': updatedAt.toIso8601String(), | ||||
|         'deleted_at': deletedAt, | ||||
|         'content': content, | ||||
|         'content': rawContent, | ||||
|         'metadata': metadata, | ||||
|         'type': type, | ||||
|         'attachments': List<dynamic>.from( | ||||
|             attachments?.map((x) => x.toJson()) ?? List.empty()), | ||||
|         'attachments': List<dynamic>.from(attachments?.map((x) => x.toJson()) ?? List.empty()), | ||||
|         'channel': channel?.toJson(), | ||||
|         'sender': sender.toJson(), | ||||
|         'reply_id': replyId, | ||||
|   | ||||
| @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; | ||||
| import 'package:flutter_secure_storage/flutter_secure_storage.dart'; | ||||
| import 'package:oauth2/oauth2.dart' as oauth2; | ||||
| import 'package:solian/utils/http.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
|  | ||||
| class AuthProvider extends ChangeNotifier { | ||||
|   AuthProvider() { | ||||
|   | ||||
| @@ -13,7 +13,7 @@ import 'package:solian/models/message.dart'; | ||||
| import 'package:solian/models/packet.dart'; | ||||
| import 'package:solian/models/pagination.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/widgets/chat/call/exts.dart'; | ||||
| import 'package:solian/widgets/exts.dart'; | ||||
| import 'package:wakelock_plus/wakelock_plus.dart'; | ||||
| @@ -41,6 +41,7 @@ class ChatProvider extends ChangeNotifier { | ||||
|     var uri = Uri( | ||||
|       scheme: ori.scheme.replaceFirst('http', 'ws'), | ||||
|       host: ori.host, | ||||
|       port: ori.port, | ||||
|       path: ori.path, | ||||
|       queryParameters: {'tk': Uri.encodeComponent(auth.client!.currentToken!)}, | ||||
|     ); | ||||
|   | ||||
| @@ -3,7 +3,7 @@ import 'dart:convert'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:solian/models/friendship.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
|  | ||||
| class FriendProvider extends ChangeNotifier { | ||||
|   List<Friendship> friends = List.empty(); | ||||
|   | ||||
| @@ -6,7 +6,7 @@ import 'package:livekit_client/livekit_client.dart'; | ||||
| import 'package:permission_handler/permission_handler.dart'; | ||||
| import 'package:solian/models/pagination.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/models/notification.dart' as model; | ||||
| import 'package:web_socket_channel/web_socket_channel.dart'; | ||||
| import 'dart:math' as math; | ||||
| @@ -74,10 +74,11 @@ class NotifyProvider extends ChangeNotifier { | ||||
|  | ||||
|     await auth.client!.refreshToken(auth.client!.currentRefreshToken!); | ||||
|  | ||||
|     var ori = getRequestUri('passport', '/api/notifications/listen'); | ||||
|     var ori = getRequestUri('passport', '/api/ws'); | ||||
|     var uri = Uri( | ||||
|       scheme: ori.scheme.replaceFirst('http', 'ws'), | ||||
|       host: ori.host, | ||||
|       port: ori.port, | ||||
|       path: ori.path, | ||||
|       queryParameters: { | ||||
|         'tk': Uri.encodeComponent(auth.client!.currentToken!) | ||||
|   | ||||
| @@ -3,7 +3,7 @@ import 'dart:convert'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:solian/models/realm.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
|  | ||||
| class RealmProvider with ChangeNotifier { | ||||
|   List<Realm> realms = List.empty(); | ||||
|   | ||||
| @@ -5,7 +5,7 @@ import 'package:flutter_animate/flutter_animate.dart'; | ||||
| import 'package:provider/provider.dart'; | ||||
| import 'package:solian/models/friendship.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/widgets/account/account_avatar.dart'; | ||||
| import 'package:solian/widgets/exts.dart'; | ||||
| import 'package:solian/widgets/scaffold.dart'; | ||||
|   | ||||
| @@ -8,7 +8,7 @@ import 'package:image_picker/image_picker.dart'; | ||||
| import 'package:intl/intl.dart'; | ||||
| import 'package:provider/provider.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/widgets/account/account_avatar.dart'; | ||||
| import 'package:solian/widgets/exts.dart'; | ||||
| import 'package:solian/widgets/scaffold.dart'; | ||||
|   | ||||
| @@ -3,7 +3,7 @@ import 'package:flutter_gen/gen_l10n/app_localizations.dart'; | ||||
| import 'package:provider/provider.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/router.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/widgets/exts.dart'; | ||||
| import 'package:solian/widgets/scaffold.dart'; | ||||
| import 'package:url_launcher/url_launcher_string.dart'; | ||||
|   | ||||
| @@ -3,7 +3,7 @@ import 'dart:convert'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:flutter_gen/gen_l10n/app_localizations.dart'; | ||||
| import 'package:solian/router.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/widgets/exts.dart'; | ||||
| import 'package:solian/widgets/scaffold.dart'; | ||||
| import 'package:http/http.dart' as http; | ||||
|   | ||||
| @@ -7,7 +7,7 @@ import 'package:provider/provider.dart'; | ||||
| import 'package:solian/models/channel.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/router.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/widgets/exts.dart'; | ||||
| import 'package:solian/widgets/scaffold.dart'; | ||||
| import 'package:flutter_gen/gen_l10n/app_localizations.dart'; | ||||
|   | ||||
| @@ -6,7 +6,7 @@ import 'package:provider/provider.dart'; | ||||
| import 'package:solian/models/account.dart'; | ||||
| import 'package:solian/models/channel.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/widgets/account/account_avatar.dart'; | ||||
| import 'package:solian/widgets/account/friend_picker.dart'; | ||||
| import 'package:solian/widgets/exts.dart'; | ||||
|   | ||||
| @@ -8,7 +8,7 @@ import 'package:solian/models/message.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/providers/chat.dart'; | ||||
| import 'package:solian/router.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/utils/theme.dart'; | ||||
| import 'package:solian/widgets/chat/channel_action.dart'; | ||||
| import 'package:solian/widgets/chat/message.dart'; | ||||
|   | ||||
| @@ -6,7 +6,7 @@ import 'package:solian/models/channel.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/providers/chat.dart'; | ||||
| import 'package:solian/router.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/utils/theme.dart'; | ||||
| import 'package:solian/widgets/chat/chat_new.dart'; | ||||
| import 'package:solian/widgets/exts.dart'; | ||||
|   | ||||
| @@ -7,7 +7,7 @@ import 'package:solian/models/post.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/providers/realm.dart'; | ||||
| import 'package:solian/router.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart'; | ||||
| import 'package:flutter_gen/gen_l10n/app_localizations.dart'; | ||||
| import 'package:http/http.dart' as http; | ||||
|   | ||||
| @@ -5,7 +5,7 @@ import 'package:flutter_animate/flutter_animate.dart'; | ||||
| import 'package:provider/provider.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/providers/notify.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/widgets/scaffold.dart'; | ||||
| import 'package:flutter_gen/gen_l10n/app_localizations.dart'; | ||||
| import 'package:url_launcher/url_launcher_string.dart'; | ||||
|   | ||||
| @@ -7,7 +7,7 @@ import 'package:provider/provider.dart'; | ||||
| import 'package:solian/models/post.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/router.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:flutter_gen/gen_l10n/app_localizations.dart'; | ||||
| import 'package:solian/widgets/account/account_avatar.dart'; | ||||
| import 'package:solian/widgets/exts.dart'; | ||||
|   | ||||
| @@ -7,7 +7,7 @@ import 'package:provider/provider.dart'; | ||||
| import 'package:solian/models/post.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/router.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:flutter_gen/gen_l10n/app_localizations.dart'; | ||||
| import 'package:solian/widgets/account/account_avatar.dart'; | ||||
| import 'package:solian/widgets/exts.dart'; | ||||
| @@ -55,7 +55,6 @@ class _MomentEditorScreenState extends State<MomentEditorScreen> { | ||||
|     final uri = widget.editing == null | ||||
|         ? getRequestUri('interactive', '/api/p/moments') | ||||
|         : getRequestUri('interactive', '/api/p/moments/${widget.editing!.id}'); | ||||
|     print(uri); | ||||
|  | ||||
|     final req = Request(widget.editing == null ? 'POST' : 'PUT', uri); | ||||
|     req.headers['Content-Type'] = 'application/json'; | ||||
|   | ||||
| @@ -4,7 +4,7 @@ import 'package:flutter/material.dart'; | ||||
| import 'package:http/http.dart' as http; | ||||
| import 'package:infinite_scroll_pagination/infinite_scroll_pagination.dart'; | ||||
| import 'package:solian/models/post.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/widgets/exts.dart'; | ||||
| import 'package:solian/widgets/scaffold.dart'; | ||||
| import 'package:solian/widgets/posts/comment_list.dart'; | ||||
|   | ||||
| @@ -7,7 +7,7 @@ import 'package:provider/provider.dart'; | ||||
| import 'package:solian/models/realm.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/router.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/utils/theme.dart'; | ||||
| import 'package:solian/widgets/exts.dart'; | ||||
| import 'package:solian/widgets/scaffold.dart'; | ||||
|   | ||||
| @@ -6,7 +6,7 @@ import 'package:provider/provider.dart'; | ||||
| import 'package:solian/models/account.dart'; | ||||
| import 'package:solian/models/realm.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/utils/theme.dart'; | ||||
| import 'package:solian/widgets/account/account_avatar.dart'; | ||||
| import 'package:solian/widgets/account/friend_picker.dart'; | ||||
|   | ||||
| @@ -5,7 +5,7 @@ import 'package:flutter/material.dart'; | ||||
| import 'package:http/http.dart'; | ||||
| import 'package:solian/models/account.dart'; | ||||
| import 'package:solian/models/personal_page.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/utils/theme.dart'; | ||||
| import 'package:solian/widgets/account/account_avatar.dart'; | ||||
| import 'package:solian/widgets/account/personal_page_content.dart'; | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| import 'dart:convert'; | ||||
|  | ||||
| import 'package:http/http.dart' as http; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
|  | ||||
| class HttpClient extends http.BaseClient { | ||||
|   final bool isUnauthorizedRetry; | ||||
|   | ||||
| @@ -1,7 +1,7 @@ | ||||
| const serviceUrls = { | ||||
|   'passport': 'https://id.solsynth.dev', | ||||
|   'interactive': 'https://co.solsynth.dev', | ||||
|   'messaging': 'https://im.solsynth.dev' | ||||
|   'messaging': 'http://192.168.50.83:8447' // 'https://im.solsynth.dev' | ||||
| }; | ||||
| 
 | ||||
| Uri getRequestUri(String service, String path) { | ||||
| @@ -1,7 +1,7 @@ | ||||
| import 'package:cached_network_image/cached_network_image.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:solian/utils/platform.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
|  | ||||
| class AccountAvatar extends StatelessWidget { | ||||
|   final String source; | ||||
|   | ||||
| @@ -7,7 +7,7 @@ import 'package:solian/models/channel.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/providers/chat.dart'; | ||||
| import 'package:solian/router.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/widgets/exts.dart'; | ||||
|  | ||||
| class ChannelCallAction extends StatefulWidget { | ||||
|   | ||||
| @@ -5,7 +5,7 @@ import 'package:provider/provider.dart'; | ||||
| import 'package:solian/models/channel.dart'; | ||||
| import 'package:flutter_gen/gen_l10n/app_localizations.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/widgets/exts.dart'; | ||||
|  | ||||
| class ChannelDeletion extends StatefulWidget { | ||||
|   | ||||
| @@ -10,19 +10,23 @@ class ChatMessageContent extends StatelessWidget { | ||||
|  | ||||
|   @override | ||||
|   Widget build(BuildContext context) { | ||||
|     return Markdown( | ||||
|       data: item.content, | ||||
|       shrinkWrap: true, | ||||
|       selectable: true, | ||||
|       physics: const NeverScrollableScrollPhysics(), | ||||
|       padding: const EdgeInsets.all(0), | ||||
|       onTapLink: (text, href, title) async { | ||||
|         if (href == null) return; | ||||
|         await launchUrlString( | ||||
|           href, | ||||
|           mode: LaunchMode.externalApplication, | ||||
|         ); | ||||
|       }, | ||||
|     ); | ||||
|     if (item.type == 'm.text') { | ||||
|       return Markdown( | ||||
|         data: item.decodedContent['value'], | ||||
|         shrinkWrap: true, | ||||
|         selectable: true, | ||||
|         physics: const NeverScrollableScrollPhysics(), | ||||
|         padding: const EdgeInsets.all(0), | ||||
|         onTapLink: (text, href, title) async { | ||||
|           if (href == null) return; | ||||
|           await launchUrlString( | ||||
|             href, | ||||
|             mode: LaunchMode.externalApplication, | ||||
|           ); | ||||
|         }, | ||||
|       ); | ||||
|     } | ||||
|  | ||||
|     return Container(); | ||||
|   } | ||||
| } | ||||
|   | ||||
| @@ -5,7 +5,7 @@ import 'package:provider/provider.dart'; | ||||
| import 'package:solian/models/message.dart'; | ||||
| import 'package:flutter_gen/gen_l10n/app_localizations.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/widgets/exts.dart'; | ||||
|  | ||||
| class ChatMessageDeletionDialog extends StatefulWidget { | ||||
|   | ||||
| @@ -9,7 +9,7 @@ import 'package:provider/provider.dart'; | ||||
| import 'package:solian/models/message.dart'; | ||||
| import 'package:solian/models/post.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/widgets/exts.dart'; | ||||
| import 'package:solian/widgets/posts/attachment_editor.dart'; | ||||
| import 'package:badges/badges.dart' as badge; | ||||
| @@ -55,6 +55,10 @@ class _ChatMessageEditorState extends State<ChatMessageEditor> { | ||||
|     ); | ||||
|   } | ||||
|  | ||||
|   Map<String, dynamic> buildContentBody(String content, {String algorithm = 'plain'}) { | ||||
|     return {'value': content, 'algorithm': algorithm}; | ||||
|   } | ||||
|  | ||||
|   Future<void> sendMessage(BuildContext context) async { | ||||
|     _focusNode.requestFocus(); | ||||
|  | ||||
| @@ -68,7 +72,8 @@ class _ChatMessageEditorState extends State<ChatMessageEditor> { | ||||
|     final req = Request(widget.editing == null ? 'POST' : 'PUT', uri); | ||||
|     req.headers['Content-Type'] = 'application/json'; | ||||
|     req.body = jsonEncode(<String, dynamic>{ | ||||
|       'content': _textController.value.text, | ||||
|       'type': 'm.text', | ||||
|       'content': buildContentBody(_textController.value.text), | ||||
|       'attachments': _attachments, | ||||
|       'reply_to': widget.replying?.id, | ||||
|     }); | ||||
| @@ -106,7 +111,10 @@ class _ChatMessageEditorState extends State<ChatMessageEditor> { | ||||
|       setState(() { | ||||
|         _prevEditingId = widget.editing!.id; | ||||
|         _attachments = widget.editing!.attachments ?? List.empty(growable: true); | ||||
|         _textController.text = widget.editing!.content; | ||||
|  | ||||
|         if (widget.editing!.type == 'm.text') { | ||||
|           _textController.text = widget.editing!.decodedContent['value']; | ||||
|         } | ||||
|       }); | ||||
|     } | ||||
|   } | ||||
|   | ||||
| @@ -2,6 +2,7 @@ import 'dart:convert'; | ||||
|  | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:provider/provider.dart'; | ||||
| import 'package:solian/models/packet.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/providers/notify.dart'; | ||||
| import 'package:solian/router.dart'; | ||||
| @@ -35,9 +36,13 @@ class _NotificationNotifierState extends State<NotificationNotifier> { | ||||
|       nty.connect(auth).then((snapshot) { | ||||
|         snapshot!.stream.listen( | ||||
|           (event) { | ||||
|             final result = model.Notification.fromJson(jsonDecode(event)); | ||||
|             nty.onRemoteMessage(result); | ||||
|             nty.notifyMessage(result.subject, result.content); | ||||
|             final result = NetworkPackage.fromJson(jsonDecode(event)); | ||||
|             switch (result.method) { | ||||
|               case 'notifications.new': | ||||
|                 final result = model.Notification.fromJson(jsonDecode(event)); | ||||
|                 nty.onRemoteMessage(result); | ||||
|                 nty.notifyMessage(result.subject, result.content); | ||||
|             } | ||||
|           }, | ||||
|           onError: (_, __) => connect(), | ||||
|           onDone: () => connect(), | ||||
|   | ||||
| @@ -11,7 +11,7 @@ import 'package:provider/provider.dart'; | ||||
| import 'package:solian/models/post.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/utils/file.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:flutter_gen/gen_l10n/app_localizations.dart'; | ||||
| import 'package:solian/widgets/exts.dart'; | ||||
|  | ||||
|   | ||||
| @@ -9,7 +9,7 @@ import 'package:http/http.dart' as http; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/router.dart'; | ||||
| import 'package:solian/screens/posts/comment_editor.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/widgets/posts/post.dart'; | ||||
| import 'package:flutter_gen/gen_l10n/app_localizations.dart'; | ||||
|  | ||||
|   | ||||
| @@ -4,7 +4,7 @@ import 'package:flutter_markdown/flutter_markdown.dart'; | ||||
| import 'package:solian/models/post.dart'; | ||||
| import 'package:markdown/markdown.dart' as markdown; | ||||
| import 'package:solian/utils/platform.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:url_launcher/url_launcher_string.dart'; | ||||
|  | ||||
| class ArticleContent extends StatelessWidget { | ||||
|   | ||||
| @@ -4,7 +4,7 @@ import 'package:media_kit/media_kit.dart'; | ||||
| import 'package:media_kit_video/media_kit_video.dart'; | ||||
| import 'package:solian/models/post.dart'; | ||||
| import 'package:solian/utils/platform.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:flutter_carousel_widget/flutter_carousel_widget.dart'; | ||||
| import 'package:solian/widgets/posts/attachment_screen.dart'; | ||||
| import 'package:uuid/uuid.dart'; | ||||
|   | ||||
| @@ -5,7 +5,7 @@ import 'package:provider/provider.dart'; | ||||
| import 'package:solian/models/post.dart'; | ||||
| import 'package:flutter_gen/gen_l10n/app_localizations.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/widgets/exts.dart'; | ||||
|  | ||||
| class ItemDeletionDialog extends StatefulWidget { | ||||
|   | ||||
| @@ -5,7 +5,7 @@ import 'package:flutter_animate/flutter_animate.dart'; | ||||
| import 'package:provider/provider.dart'; | ||||
| import 'package:solian/models/reaction.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:flutter_gen/gen_l10n/app_localizations.dart'; | ||||
| import 'package:solian/widgets/exts.dart'; | ||||
|  | ||||
|   | ||||
| @@ -5,7 +5,7 @@ import 'package:provider/provider.dart'; | ||||
| import 'package:flutter_gen/gen_l10n/app_localizations.dart'; | ||||
| import 'package:solian/models/realm.dart'; | ||||
| import 'package:solian/providers/auth.dart'; | ||||
| import 'package:solian/utils/service_url.dart'; | ||||
| import 'package:solian/utils/services_url.dart'; | ||||
| import 'package:solian/widgets/exts.dart'; | ||||
|  | ||||
| class RealmDeletion extends StatefulWidget { | ||||
|   | ||||
							
								
								
									
										16
									
								
								pubspec.lock
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								pubspec.lock
									
									
									
									
									
								
							| @@ -17,6 +17,14 @@ packages: | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.5.0" | ||||
|   asn1lib: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: asn1lib | ||||
|       sha256: c9c85fedbe2188b95133cbe960e16f5f448860f7133330e272edbbca5893ddc6 | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "1.5.2" | ||||
|   async: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -217,6 +225,14 @@ packages: | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.0.3" | ||||
|   encrypt: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|       name: encrypt | ||||
|       sha256: "62d9aa4670cc2a8798bab89b39fc71b6dfbacf615de6cf5001fb39f7e4a996a2" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "5.0.3" | ||||
|   fake_async: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|   | ||||
| @@ -72,6 +72,7 @@ dependencies: | ||||
|   cached_network_image: ^3.3.1 | ||||
|   desktop_drop: ^0.4.4 | ||||
|   easy_debounce: ^2.0.3 | ||||
|   encrypt: ^5.0.3 | ||||
|  | ||||
| dev_dependencies: | ||||
|   flutter_test: | ||||
|   | ||||
							
								
								
									
										
											BIN
										
									
								
								web/favicon.png
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								web/favicon.png
									
									
									
									
									
										
										
										Normal file → Executable file
									
								
							
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 480 B After Width: | Height: | Size: 70 KiB | 
		Reference in New Issue
	
	Block a user