From 5418bb00d828846035baa9c3e42177f2ac4a2d9a Mon Sep 17 00:00:00 2001 From: Sarah Jamie Lewis Date: Mon, 17 Apr 2023 10:36:45 -0700 Subject: [PATCH 1/4] Fix Performance Issues related to File Bubble / Downloading --- lib/models/messages/filemessage.dart | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/models/messages/filemessage.dart b/lib/models/messages/filemessage.dart index c425ae0b..fe4ff9ab 100644 --- a/lib/models/messages/filemessage.dart +++ b/lib/models/messages/filemessage.dart @@ -33,11 +33,11 @@ class FileMessage extends Message { int fileSize = shareObj['s'] as int; String fileKey = rootHash + "." + nonce; - // if (metadata.attributes["file-downloaded"] == "true") { - // if (!Provider.of(context).downloadKnown(fileKey)) { - Provider.of(context, listen: false).cwtch.CheckDownloadStatus(Provider.of(context, listen: false).onion, fileKey); - // } - //} + if (metadata.attributes["file-downloaded"] != "true") { + if (!Provider.of(context,listen: false).downloadKnown(fileKey)) { + Provider.of(context, listen: false).cwtch.CheckDownloadStatus(Provider.of(context, listen: false).onion, fileKey); + } + } if (!validHash(rootHash, nonce)) { return MessageRow(MalformedBubble(), index); From 9c89c93013d9e07166d035ba0b6bbe0517472709 Mon Sep 17 00:00:00 2001 From: Sarah Jamie Lewis Date: Mon, 17 Apr 2023 10:37:56 -0700 Subject: [PATCH 2/4] Formatting --- lib/models/contact.dart | 2 +- lib/models/messages/filemessage.dart | 8 ++++---- lib/views/contactsview.dart | 12 +++++++++--- lib/views/messageview.dart | 11 ++++++----- lib/views/peersettingsview.dart | 15 ++++++++++++--- 5 files changed, 32 insertions(+), 16 deletions(-) diff --git a/lib/models/contact.dart b/lib/models/contact.dart index 4d6c8f30..665e32ff 100644 --- a/lib/models/contact.dart +++ b/lib/models/contact.dart @@ -402,7 +402,7 @@ class ContactInfoState extends ChangeNotifier { } String augmentedNickname(BuildContext context) { - return this.nickname + (this.availabilityStatus == ProfileStatusMenu.available ? "" : " (" +this.statusString(context) + ")"); + return this.nickname + (this.availabilityStatus == ProfileStatusMenu.available ? "" : " (" + this.statusString(context) + ")"); } String statusString(BuildContext context) { diff --git a/lib/models/messages/filemessage.dart b/lib/models/messages/filemessage.dart index fe4ff9ab..53196dcd 100644 --- a/lib/models/messages/filemessage.dart +++ b/lib/models/messages/filemessage.dart @@ -33,10 +33,10 @@ class FileMessage extends Message { int fileSize = shareObj['s'] as int; String fileKey = rootHash + "." + nonce; - if (metadata.attributes["file-downloaded"] != "true") { - if (!Provider.of(context,listen: false).downloadKnown(fileKey)) { - Provider.of(context, listen: false).cwtch.CheckDownloadStatus(Provider.of(context, listen: false).onion, fileKey); - } + if (metadata.attributes["file-downloaded"] != "true") { + if (!Provider.of(context, listen: false).downloadKnown(fileKey)) { + Provider.of(context, listen: false).cwtch.CheckDownloadStatus(Provider.of(context, listen: false).onion, fileKey); + } } if (!validHash(rootHash, nonce)) { diff --git a/lib/views/contactsview.dart b/lib/views/contactsview.dart index 8a37a76e..5a375a85 100644 --- a/lib/views/contactsview.dart +++ b/lib/views/contactsview.dart @@ -164,15 +164,21 @@ class _ContactsViewState extends State { itemBuilder: (BuildContext context) => >[ PopupMenuItem( value: ProfileStatusMenu.available, - child: Text(AppLocalizations.of(context)!.availabilityStatusAvailable!,), + child: Text( + AppLocalizations.of(context)!.availabilityStatusAvailable!, + ), ), PopupMenuItem( value: ProfileStatusMenu.away, - child: Text(AppLocalizations.of(context)!.availabilityStatusAway!,), + child: Text( + AppLocalizations.of(context)!.availabilityStatusAway!, + ), ), PopupMenuItem( value: ProfileStatusMenu.busy, - child: Text(AppLocalizations.of(context)!.availabilityStatusBusy!,), + child: Text( + AppLocalizations.of(context)!.availabilityStatusBusy!, + ), ), ], ), diff --git a/lib/views/messageview.dart b/lib/views/messageview.dart index a66a4561..461d5f9d 100644 --- a/lib/views/messageview.dart +++ b/lib/views/messageview.dart @@ -230,11 +230,12 @@ class _MessageViewState extends State { ), Expanded( child: Container( - height: 42, - clipBehavior: Clip.hardEdge, - decoration: BoxDecoration(), - child: Align( - alignment: Alignment.centerLeft, child: Text( + height: 42, + clipBehavior: Clip.hardEdge, + decoration: BoxDecoration(), + child: Align( + alignment: Alignment.centerLeft, + child: Text( Provider.of(context).augmentedNickname(context), overflow: TextOverflow.clip, maxLines: 1, diff --git a/lib/views/peersettingsview.dart b/lib/views/peersettingsview.dart index a066a315..2688fa71 100644 --- a/lib/views/peersettingsview.dart +++ b/lib/views/peersettingsview.dart @@ -113,15 +113,24 @@ class _PeerSettingsViewState extends State { child: Column(children: [ Padding( padding: EdgeInsets.all(1), - child: SelectableText(Provider.of(context, listen: false).attributes[0] ?? "", textAlign: TextAlign.center,), + child: SelectableText( + Provider.of(context, listen: false).attributes[0] ?? "", + textAlign: TextAlign.center, + ), ), Padding( padding: EdgeInsets.all(1), - child: SelectableText(Provider.of(context, listen: false).attributes[1] ?? "", textAlign: TextAlign.center,), + child: SelectableText( + Provider.of(context, listen: false).attributes[1] ?? "", + textAlign: TextAlign.center, + ), ), Padding( padding: EdgeInsets.all(1), - child: SelectableText(Provider.of(context, listen: false).attributes[2] ?? "", textAlign: TextAlign.center,), + child: SelectableText( + Provider.of(context, listen: false).attributes[2] ?? "", + textAlign: TextAlign.center, + ), ) ])) ]), From 605e9c08c605d35e7570b72c3b8b537f1e322497 Mon Sep 17 00:00:00 2001 From: Sarah Jamie Lewis Date: Mon, 17 Apr 2023 13:05:26 -0700 Subject: [PATCH 3/4] Improve Message Row Highlight/Performance Rendering --- lib/models/appstate.dart | 10 ---------- lib/models/contact.dart | 10 ++++++++++ lib/views/contactsview.dart | 2 +- lib/views/messageview.dart | 2 -- lib/widgets/messagelist.dart | 1 + lib/widgets/messagerow.dart | 30 +++++++++++++++--------------- 6 files changed, 27 insertions(+), 28 deletions(-) diff --git a/lib/models/appstate.dart b/lib/models/appstate.dart index f543211d..a00d15f7 100644 --- a/lib/models/appstate.dart +++ b/lib/models/appstate.dart @@ -12,8 +12,6 @@ class AppState extends ChangeNotifier { String? _selectedProfile; int? _selectedConversation; int _initialScrollIndex = 0; - int _hoveredIndex = -1; - int? _selectedIndex; bool _unreadMessagesBelow = false; bool _disableFilePicker = false; bool _focus = true; @@ -59,14 +57,6 @@ class AppState extends ChangeNotifier { notifyListeners(); } - // Never use this for message lookup - can be a non-indexed value - // e.g. -1 - int get hoveredIndex => _hoveredIndex; - set hoveredIndex(int newVal) { - this._hoveredIndex = newVal; - notifyListeners(); - } - bool get unreadMessagesBelow => _unreadMessagesBelow; set unreadMessagesBelow(bool newVal) { this._unreadMessagesBelow = newVal; diff --git a/lib/models/contact.dart b/lib/models/contact.dart index 665e32ff..dec7bf4f 100644 --- a/lib/models/contact.dart +++ b/lib/models/contact.dart @@ -66,6 +66,8 @@ class ContactInfoState extends ChangeNotifier { String? _acnCircuit; MessageDraft _messageDraft = MessageDraft.empty(); + var _hoveredIndex = -1; + ContactInfoState( this.profileOnion, this.identifier, @@ -405,6 +407,14 @@ class ContactInfoState extends ChangeNotifier { return this.nickname + (this.availabilityStatus == ProfileStatusMenu.available ? "" : " (" + this.statusString(context) + ")"); } + // Never use this for message lookup - can be a non-indexed value + // e.g. -1 + int get hoveredIndex => _hoveredIndex; + set hoveredIndex(int newVal) { + this._hoveredIndex = newVal; + notifyListeners(); + } + String statusString(BuildContext context) { switch (this.availabilityStatus) { case ProfileStatusMenu.available: diff --git a/lib/views/contactsview.dart b/lib/views/contactsview.dart index 5a375a85..3bb9cc30 100644 --- a/lib/views/contactsview.dart +++ b/lib/views/contactsview.dart @@ -50,7 +50,7 @@ void selectConversation(BuildContext context, int handle) { // triggers update in Double/TripleColumnView Provider.of(context, listen: false).initialScrollIndex = unread; Provider.of(context, listen: false).selectedConversation = handle; - Provider.of(context, listen: false).hoveredIndex = -1; + Provider.of(context, listen: false).hoveredIndex = -1; // if in singlepane mode, push to the stack var isLandscape = Provider.of(context, listen: false).isLandscape(context); if (Provider.of(context, listen: false).uiColumns(isLandscape).length == 1) _pushMessageView(context, handle); diff --git a/lib/views/messageview.dart b/lib/views/messageview.dart index 461d5f9d..96791583 100644 --- a/lib/views/messageview.dart +++ b/lib/views/messageview.dart @@ -17,11 +17,9 @@ import 'package:cwtch/models/profile.dart'; import 'package:cwtch/third_party/linkify/flutter_linkify.dart'; import 'package:cwtch/widgets/malformedbubble.dart'; import 'package:cwtch/widgets/messageloadingbubble.dart'; -import 'package:cwtch/widgets/messagerow.dart'; import 'package:cwtch/widgets/profileimage.dart'; import 'package:cwtch/controllers/filesharing.dart' as filesharing; import 'package:cwtch/widgets/staticmessagebubble.dart'; -import 'package:file_picker/file_picker.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; diff --git a/lib/widgets/messagelist.dart b/lib/widgets/messagelist.dart index 6319ba59..99d0d313 100644 --- a/lib/widgets/messagelist.dart +++ b/lib/widgets/messagelist.dart @@ -1,3 +1,4 @@ +import 'package:cwtch/config.dart'; import 'package:cwtch/models/appstate.dart'; import 'package:cwtch/models/contact.dart'; import 'package:cwtch/models/message.dart'; diff --git a/lib/widgets/messagerow.dart b/lib/widgets/messagerow.dart index 8920bdee..2d3faa34 100644 --- a/lib/widgets/messagerow.dart +++ b/lib/widgets/messagerow.dart @@ -81,7 +81,7 @@ class MessageRowState extends State with SingleTickerProviderStateMi Widget wdgReply = Platform.isAndroid ? SizedBox.shrink() : Visibility( - visible: EnvironmentConfig.TEST_MODE || Provider.of(context).hoveredIndex == Provider.of(context).messageID, + visible: EnvironmentConfig.TEST_MODE || Provider.of(context).hoveredIndex == Provider.of(context).messageID, maintainSize: true, maintainAnimation: true, maintainState: true, @@ -106,7 +106,7 @@ class MessageRowState extends State with SingleTickerProviderStateMi Widget wdgSeeReplies = Platform.isAndroid ? SizedBox.shrink() : Visibility( - visible: EnvironmentConfig.TEST_MODE || Provider.of(context).hoveredIndex == Provider.of(context).messageID, + visible: EnvironmentConfig.TEST_MODE || Provider.of(context).hoveredIndex == Provider.of(context).messageID, maintainSize: true, maintainAnimation: true, maintainState: true, @@ -128,8 +128,8 @@ class MessageRowState extends State with SingleTickerProviderStateMi : Visibility( visible: Provider.of(context, listen: false).cwtch.IsBlodeuweddSupported() && Provider.of(context).isExperimentEnabled(BlodeuweddExperiment) && - (EnvironmentConfig.TEST_MODE || Provider.of(context).hoveredIndex == Provider.of(context).messageID), - maintainSize: false, + (EnvironmentConfig.TEST_MODE || Provider.of(context).hoveredIndex == Provider.of(context).messageID), + maintainSize: true, maintainAnimation: true, maintainState: true, maintainInteractivity: false, @@ -245,16 +245,12 @@ class MessageRowState extends State with SingleTickerProviderStateMi var mr = MouseRegion( // For desktop... onHover: (event) { - if (Provider.of(context, listen: false).hoveredIndex != Provider.of(context, listen: false).messageID) { - setState(() { - Provider.of(context, listen: false).hoveredIndex = Provider.of(context, listen: false).messageID; - }); + if (Provider.of(context, listen: false).hoveredIndex != Provider.of(context, listen: false).messageID) { + Provider.of(context, listen: false).hoveredIndex = Provider.of(context, listen: false).messageID; } }, onExit: (event) { - // setState(() { - // Provider.of(context, listen: false).hoveredIndex = -1; - //}); + Provider.of(context, listen: false).hoveredIndex = -1; }, child: GestureDetector( onPanUpdate: (details) { @@ -270,12 +266,16 @@ class MessageRowState extends State with SingleTickerProviderStateMi }, onPanEnd: (details) { _runAnimation(details.velocity.pixelsPerSecond, size); - Provider.of(context, listen: false).messageDraft.quotedReference = Provider.of(context, listen: false).messageID; - Provider.of(context, listen: false).notifyMessageDraftUpdate(); - setState(() {}); + if (Platform.isAndroid) { + Provider.of(context, listen: false).messageDraft.quotedReference = Provider.of(context, listen: false).messageID; + Provider.of(context, listen: false).notifyMessageDraftUpdate(); + setState(() {}); + } }, onLongPress: () async { - modalShowReplies(context, AppLocalizations.of(context)!.headingReplies, AppLocalizations.of(context)!.messageNoReplies, settings, pis, cis, borderColor, cache, messageID); + if (Platform.isAndroid) { + modalShowReplies(context, AppLocalizations.of(context)!.headingReplies, AppLocalizations.of(context)!.messageNoReplies, settings, pis, cis, borderColor, cache, messageID); + } }, child: Padding( padding: EdgeInsets.all(2), From ca770c642ffcc2d6f699fafe6365530ac72468f0 Mon Sep 17 00:00:00 2001 From: Sarah Jamie Lewis Date: Mon, 17 Apr 2023 13:28:34 -0700 Subject: [PATCH 4/4] Update lcg version --- LIBCWTCH-GO.version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LIBCWTCH-GO.version b/LIBCWTCH-GO.version index 8ac98c3e..8cf6253a 100644 --- a/LIBCWTCH-GO.version +++ b/LIBCWTCH-GO.version @@ -1 +1 @@ -2023-04-05-19-46-v0.0.3-13-gb7a4bc2 \ No newline at end of file +2023-04-17-10-52-v0.0.3-15-gf485e37 \ No newline at end of file