Line data Source code
1 : import 'dart:convert'; 2 : 3 : import 'package:cwtch/models/message.dart'; 4 : import 'package:cwtch/widgets/invitationbubble.dart'; 5 : import 'package:cwtch/widgets/malformedbubble.dart'; 6 : import 'package:cwtch/widgets/messagerow.dart'; 7 : import 'package:flutter/widgets.dart'; 8 : import 'package:provider/provider.dart'; 9 : 10 : import '../profile.dart'; 11 : import '../../constants.dart'; 12 : 13 : class InviteMessage extends Message { 14 : final MessageMetadata metadata; 15 : final String content; 16 : final int overlay; 17 : 18 0 : InviteMessage(this.overlay, this.metadata, this.content); 19 : 20 0 : @override 21 : Widget getWidget(BuildContext context, Key key, int index) { 22 0 : return ChangeNotifierProvider.value( 23 0 : value: this.metadata, 24 0 : builder: (bcontext, child) { 25 : String inviteTarget; 26 : String inviteNick; 27 0 : String invite = this.content; 28 : 29 0 : if (invite.startsWith(ManagedGroupPrefix) && invite.length == ManagedGroupPrefix.length + TorV3ContactHandleLength) { 30 0 : inviteTarget = invite.substring(ManagedGroupPrefix.length); 31 0 : var targetContact = Provider.of<ProfileInfoState>(context).contactList.findContact(inviteTarget); 32 0 : inviteNick = targetContact == null ? inviteTarget : targetContact.nickname; 33 0 : } else if (this.content.length == TorV3ContactHandleLength) { 34 0 : inviteTarget = this.content; 35 0 : var targetContact = Provider.of<ProfileInfoState>(context).contactList.findContact(inviteTarget); 36 0 : inviteNick = targetContact == null ? this.content : targetContact.nickname; 37 : } else { 38 0 : var parts = this.content.toString().split("||"); 39 0 : if (parts.length == 2) { 40 : try { 41 0 : var jsonObj = jsonDecode(utf8.fuse(base64).decode(parts[1].substring(5))); 42 0 : inviteTarget = jsonObj['GroupID']; 43 0 : inviteNick = jsonObj['GroupName']; 44 : } catch (e) { 45 0 : return MessageRow(MalformedBubble(), index); 46 : } 47 : } else { 48 0 : return MessageRow(MalformedBubble(), index); 49 : } 50 : } 51 0 : return MessageRow(InvitationBubble(overlay, inviteTarget, inviteNick, invite), index, key: key); 52 : }, 53 : ); 54 : } 55 : 56 0 : @override 57 : Widget getPreviewWidget(BuildContext context, {BoxConstraints? constraints}) { 58 0 : return ChangeNotifierProvider.value( 59 0 : value: this.metadata, 60 0 : builder: (bcontext, child) { 61 : String inviteTarget; 62 : String inviteNick; 63 0 : String invite = this.content; 64 : 65 0 : if (invite.startsWith(ManagedGroupPrefix) && invite.length == ManagedGroupPrefix.length + TorV3ContactHandleLength) { 66 0 : inviteTarget = this.content; 67 0 : String onion = inviteTarget.substring(ManagedGroupPrefix.length); 68 0 : var targetContact = Provider.of<ProfileInfoState>(context).contactList.findContact(onion); 69 0 : inviteNick = targetContact == null ? onion : targetContact.nickname; 70 0 : } else if (this.content.length == TorV3ContactHandleLength) { 71 0 : inviteTarget = this.content; 72 0 : var targetContact = Provider.of<ProfileInfoState>(context).contactList.findContact(inviteTarget); 73 0 : inviteNick = targetContact == null ? this.content : targetContact.nickname; 74 : } else { 75 0 : var parts = this.content.toString().split("||"); 76 0 : if (parts.length == 2) { 77 : try { 78 0 : var jsonObj = jsonDecode(utf8.fuse(base64).decode(parts[1].substring(5))); 79 0 : inviteTarget = jsonObj['GroupID']; 80 0 : inviteNick = jsonObj['GroupName']; 81 : } catch (e) { 82 0 : return MalformedBubble(); 83 : } 84 : } else { 85 0 : return MalformedBubble(); 86 : } 87 : } 88 0 : return InvitationBubble(overlay, inviteTarget, inviteNick, invite); 89 : }, 90 : ); 91 : } 92 : 93 0 : @override 94 : MessageMetadata getMetadata() { 95 0 : return this.metadata; 96 : } 97 : }