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 : 51 0 : @override 52 : Widget getPreviewWidget(BuildContext context, {BoxConstraints? constraints}) { 53 0 : return ChangeNotifierProvider.value( 54 0 : value: this.metadata, 55 0 : builder: (bcontext, child) { 56 : String inviteTarget; 57 : String inviteNick; 58 0 : String invite = this.content; 59 0 : if (this.content.length == TorV3ContactHandleLength) { 60 0 : inviteTarget = this.content; 61 0 : var targetContact = Provider.of<ProfileInfoState>(context).contactList.findContact(inviteTarget); 62 0 : inviteNick = targetContact == null ? this.content : targetContact.nickname; 63 : } else { 64 0 : var parts = this.content.toString().split("||"); 65 0 : if (parts.length == 2) { 66 : try { 67 0 : var jsonObj = jsonDecode(utf8.fuse(base64).decode(parts[1].substring(5))); 68 0 : inviteTarget = jsonObj['GroupID']; 69 0 : inviteNick = jsonObj['GroupName']; 70 : } catch (e) { 71 0 : return MalformedBubble(); 72 : } 73 : } else { 74 0 : return MalformedBubble(); 75 : } 76 : } 77 0 : return InvitationBubble(overlay, inviteTarget, inviteNick, invite); 78 : }, 79 : ); 80 : } 81 : 82 0 : @override 83 : MessageMetadata getMetadata() { 84 0 : return this.metadata; 85 : } 86 : }