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 : 12 : class InviteMessage extends Message { 13 : final MessageMetadata metadata; 14 : final String content; 15 : final int overlay; 16 : 17 0 : InviteMessage(this.overlay, this.metadata, this.content); 18 : 19 0 : @override 20 : Widget getWidget(BuildContext context, Key key, int index) { 21 0 : return ChangeNotifierProvider.value( 22 0 : value: this.metadata, 23 0 : builder: (bcontext, child) { 24 : String inviteTarget; 25 : String inviteNick; 26 0 : String invite = this.content; 27 : 28 0 : if (this.content.length == TorV3ContactHandleLength) { 29 0 : inviteTarget = this.content; 30 0 : var targetContact = Provider.of<ProfileInfoState>(context).contactList.findContact(inviteTarget); 31 0 : inviteNick = targetContact == null ? this.content : targetContact.nickname; 32 : } else { 33 0 : var parts = this.content.toString().split("||"); 34 0 : if (parts.length == 2) { 35 : try { 36 0 : var jsonObj = jsonDecode(utf8.fuse(base64).decode(parts[1].substring(5))); 37 0 : inviteTarget = jsonObj['GroupID']; 38 0 : inviteNick = jsonObj['GroupName']; 39 : } catch (e) { 40 0 : return MessageRow(MalformedBubble(), index); 41 : } 42 : } else { 43 0 : return MessageRow(MalformedBubble(), index); 44 : } 45 : } 46 0 : return MessageRow(InvitationBubble(overlay, inviteTarget, inviteNick, invite), index, key: key); 47 : }); 48 : } 49 : 50 0 : @override 51 : Widget getPreviewWidget(BuildContext context, {BoxConstraints? constraints}) { 52 0 : return ChangeNotifierProvider.value( 53 0 : value: this.metadata, 54 0 : builder: (bcontext, child) { 55 : String inviteTarget; 56 : String inviteNick; 57 0 : String invite = this.content; 58 0 : if (this.content.length == TorV3ContactHandleLength) { 59 0 : inviteTarget = this.content; 60 0 : var targetContact = Provider.of<ProfileInfoState>(context).contactList.findContact(inviteTarget); 61 0 : inviteNick = targetContact == null ? this.content : targetContact.nickname; 62 : } else { 63 0 : var parts = this.content.toString().split("||"); 64 0 : if (parts.length == 2) { 65 : try { 66 0 : var jsonObj = jsonDecode(utf8.fuse(base64).decode(parts[1].substring(5))); 67 0 : inviteTarget = jsonObj['GroupID']; 68 0 : inviteNick = jsonObj['GroupName']; 69 : } catch (e) { 70 0 : return MalformedBubble(); 71 : } 72 : } else { 73 0 : return MalformedBubble(); 74 : } 75 : } 76 0 : return InvitationBubble(overlay, inviteTarget, inviteNick, invite); 77 : }); 78 : } 79 : 80 0 : @override 81 : MessageMetadata getMetadata() { 82 0 : return this.metadata; 83 : } 84 : }