💄 Fixes and improvements
This commit is contained in:
		| @@ -32,7 +32,7 @@ class Sticker { | |||||||
|     required this.account, |     required this.account, | ||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   String get textPlaceholder => '${pack?.prefix}$alias'.camelCase!; |   String get textPlaceholder => '${pack?.prefix}$alias'; | ||||||
|   String get textWarpedPlaceholder => ':$textPlaceholder:'; |   String get textWarpedPlaceholder => ':$textPlaceholder:'; | ||||||
|  |  | ||||||
|   String get imageUrl => ServiceFinder.buildUrl( |   String get imageUrl => ServiceFinder.buildUrl( | ||||||
|   | |||||||
| @@ -8,6 +8,9 @@ class StickerProvider extends GetxController { | |||||||
|   final RxList<Sticker> availableStickers = RxList.empty(growable: true); |   final RxList<Sticker> availableStickers = RxList.empty(growable: true); | ||||||
|  |  | ||||||
|   Future<void> refreshAvailableStickers() async { |   Future<void> refreshAvailableStickers() async { | ||||||
|  |     availableStickers.clear(); | ||||||
|  |     aliasImageMapping.clear(); | ||||||
|  |  | ||||||
|     final client = ServiceFinder.configureClient('files'); |     final client = ServiceFinder.configureClient('files'); | ||||||
|     final resp = await client.get( |     final resp = await client.get( | ||||||
|       '/stickers/manifest?take=100', |       '/stickers/manifest?take=100', | ||||||
| @@ -20,7 +23,7 @@ class StickerProvider extends GetxController { | |||||||
|       for (final pack in out) { |       for (final pack in out) { | ||||||
|         for (final sticker in (pack.stickers ?? List<Sticker>.empty())) { |         for (final sticker in (pack.stickers ?? List<Sticker>.empty())) { | ||||||
|           sticker.pack = pack; |           sticker.pack = pack; | ||||||
|           aliasImageMapping['${pack.prefix}${sticker.alias}'.camelCase!] = |           aliasImageMapping[sticker.textPlaceholder.toUpperCase()] = | ||||||
|               sticker.imageUrl; |               sticker.imageUrl; | ||||||
|           availableStickers.add(sticker); |           availableStickers.add(sticker); | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -70,7 +70,7 @@ class _StickerScreenState extends State<StickerScreen> { | |||||||
|     ); |     ); | ||||||
|     return ListTile( |     return ListTile( | ||||||
|       title: Text(item.name), |       title: Text(item.name), | ||||||
|       subtitle: Text(':${'$prefix${item.alias}'.camelCase}:'), |       subtitle: Text(item.textWarpedPlaceholder), | ||||||
|       contentPadding: const EdgeInsets.only(left: 16, right: 14), |       contentPadding: const EdgeInsets.only(left: 16, right: 14), | ||||||
|       trailing: Row( |       trailing: Row( | ||||||
|         mainAxisSize: MainAxisSize.min, |         mainAxisSize: MainAxisSize.min, | ||||||
| @@ -174,9 +174,10 @@ class _StickerScreenState extends State<StickerScreen> { | |||||||
|                       maxLines: 1, |                       maxLines: 1, | ||||||
|                       overflow: TextOverflow.ellipsis, |                       overflow: TextOverflow.ellipsis, | ||||||
|                     ), |                     ), | ||||||
|                     children: item.stickers |                     children: item.stickers?.map((x) { | ||||||
|                             ?.map((x) => _buildEmoteEntry(x, item.prefix)) |                           x.pack = item; | ||||||
|                             .toList() ?? |                           return _buildEmoteEntry(x, item.prefix); | ||||||
|  |                         }).toList() ?? | ||||||
|                         List.empty(), |                         List.empty(), | ||||||
|                   ); |                   ); | ||||||
|                 }, |                 }, | ||||||
|   | |||||||
| @@ -239,7 +239,7 @@ class _ChatMessageInputState extends State<ChatMessageInput> { | |||||||
|     if (suggestion.type == 'emotes') { |     if (suggestion.type == 'emotes') { | ||||||
|       insertText = suggestion.content; |       insertText = suggestion.content; | ||||||
|       startText = replaceText.replaceFirstMapped( |       startText = replaceText.replaceFirstMapped( | ||||||
|         RegExp(r':(?:([a-z0-9_+-]+)~)?([a-z0-9_+-]+)$'), |         RegExp(r':(?:([-\w]+)~)?([-\w]+)$'), | ||||||
|         (Match m) => insertText, |         (Match m) => insertText, | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
| @@ -247,7 +247,7 @@ class _ChatMessageInputState extends State<ChatMessageInput> { | |||||||
|     if (suggestion.type == 'users') { |     if (suggestion.type == 'users') { | ||||||
|       insertText = suggestion.content; |       insertText = suggestion.content; | ||||||
|       startText = replaceText.replaceFirstMapped( |       startText = replaceText.replaceFirstMapped( | ||||||
|         RegExp(r'(?:\s|^)@([a-z0-9_+-]+)$'), |         RegExp(r'(?:\s|^)@([-\w]+)$'), | ||||||
|         (Match m) => insertText, |         (Match m) => insertText, | ||||||
|       ); |       ); | ||||||
|     } |     } | ||||||
| @@ -349,15 +349,17 @@ class _ChatMessageInputState extends State<ChatMessageInput> { | |||||||
|                     final searchText = _textController.text |                     final searchText = _textController.text | ||||||
|                         .substring(0, _textController.selection.baseOffset); |                         .substring(0, _textController.selection.baseOffset); | ||||||
|  |  | ||||||
|                     final emojiMatch = |                     final emojiMatch = RegExp(r':(?:([-\w]+)~)?([-\w]+)$') | ||||||
|                         RegExp(r':(?:([a-z0-9_+-]+)~)?([a-z0-9_+-]+)$') |  | ||||||
|                         .firstMatch(searchText); |                         .firstMatch(searchText); | ||||||
|                     if (emojiMatch != null) { |                     if (emojiMatch != null) { | ||||||
|                       final StickerProvider stickers = Get.find(); |                       final StickerProvider stickers = Get.find(); | ||||||
|                       final emoteSearch = emojiMatch[2]!; |                       final emoteSearch = emojiMatch[2]!; | ||||||
|                       return stickers.availableStickers |                       return stickers.availableStickers | ||||||
|                           .where((x) => |                           .where( | ||||||
|                               x.textWarpedPlaceholder.contains(emoteSearch)) |                             (x) => x.textWarpedPlaceholder | ||||||
|  |                                 .toUpperCase() | ||||||
|  |                                 .contains(emoteSearch.toUpperCase()), | ||||||
|  |                           ) | ||||||
|                           .map( |                           .map( | ||||||
|                             (x) => ChatMessageSuggestion( |                             (x) => ChatMessageSuggestion( | ||||||
|                               type: 'emotes', |                               type: 'emotes', | ||||||
| @@ -379,8 +381,8 @@ class _ChatMessageInputState extends State<ChatMessageInput> { | |||||||
|                           .toList(); |                           .toList(); | ||||||
|                     } |                     } | ||||||
|  |  | ||||||
|                     final userMatch = RegExp(r'(?:\s|^)@([a-z0-9_+-]+)$') |                     final userMatch = | ||||||
|                         .firstMatch(searchText); |                         RegExp(r'(?:\s|^)@([-\w]+)$').firstMatch(searchText); | ||||||
|                     if (userMatch != null) { |                     if (userMatch != null) { | ||||||
|                       final userSearch = userMatch[1]!.toLowerCase(); |                       final userSearch = userMatch[1]!.toLowerCase(); | ||||||
|                       final AuthProvider auth = Get.find(); |                       final AuthProvider auth = Get.find(); | ||||||
|   | |||||||
| @@ -24,9 +24,9 @@ class MarkdownTextContent extends StatelessWidget { | |||||||
|   }); |   }); | ||||||
|  |  | ||||||
|   Widget _buildContent(BuildContext context) { |   Widget _buildContent(BuildContext context) { | ||||||
|     final emojiMatch = RegExp(r':([a-z0-9_+-]+):').allMatches(content); |     final emojiRegex = RegExp(r':([-\w]+):'); | ||||||
|     final isOnlyEmoji = |     final emojiMatch = emojiRegex.allMatches(content); | ||||||
|         content.replaceAll(RegExp(r':([a-z0-9_+-]+):'), '').trim().isEmpty; |     final isOnlyEmoji = content.replaceAll(emojiRegex, '').trim().isEmpty; | ||||||
|  |  | ||||||
|     return Markdown( |     return Markdown( | ||||||
|       shrinkWrap: true, |       shrinkWrap: true, | ||||||
| @@ -89,7 +89,7 @@ class MarkdownTextContent extends StatelessWidget { | |||||||
|           switch (segments[0]) { |           switch (segments[0]) { | ||||||
|             case 'stickers': |             case 'stickers': | ||||||
|               final StickerProvider sticker = Get.find(); |               final StickerProvider sticker = Get.find(); | ||||||
|               url = sticker.aliasImageMapping[segments[1]]!; |               url = sticker.aliasImageMapping[segments[1].toUpperCase()]!; | ||||||
|               if (emojiMatch.length <= 1 && isOnlyEmoji) { |               if (emojiMatch.length <= 1 && isOnlyEmoji) { | ||||||
|                 width = 112; |                 width = 112; | ||||||
|                 height = 112; |                 height = 112; | ||||||
| @@ -161,12 +161,12 @@ class _UserNameCardInlineSyntax extends InlineSyntax { | |||||||
| } | } | ||||||
|  |  | ||||||
| class _CustomEmoteInlineSyntax extends InlineSyntax { | class _CustomEmoteInlineSyntax extends InlineSyntax { | ||||||
|   _CustomEmoteInlineSyntax() : super(r':([a-z0-9_+-]+):'); |   _CustomEmoteInlineSyntax() : super(r':([-\w]+):'); | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   bool onMatch(markdown.InlineParser parser, Match match) { |   bool onMatch(markdown.InlineParser parser, Match match) { | ||||||
|     final StickerProvider sticker = Get.find(); |     final StickerProvider sticker = Get.find(); | ||||||
|     final alias = match[1]!; |     final alias = match[1]!.toUpperCase(); | ||||||
|     if (sticker.aliasImageMapping[alias] == null) { |     if (sticker.aliasImageMapping[alias] == null) { | ||||||
|       parser.advanceBy(1); |       parser.advanceBy(1); | ||||||
|       return false; |       return false; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user