Skip to content

Commit

Permalink
krille-chan#81 FluffyChat: progress indicator for giving read receipt…
Browse files Browse the repository at this point in the history
…s improved
  • Loading branch information
Caroline committed Mar 29, 2023
1 parent 4fd0a04 commit 913caea
Show file tree
Hide file tree
Showing 2 changed files with 68 additions and 67 deletions.
70 changes: 46 additions & 24 deletions lib/pages/read_receipt_overview/read_receipt_overview.dart
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ class ReadReceiptOverviewPage extends StatefulWidget {

class ExpansionPanelItem {
List<Event> readReceiptRequests = [];
List<MessageItem> messageItems = [];
Map<String, MessageItem> messageItems = {};
bool messagesLoaded = false;
Timeline? timeline;
Room? room;
Expand Down Expand Up @@ -147,7 +147,7 @@ class ReadReceiptOverviewController extends State<ReadReceiptOverviewPage> {
await _addParentToMessages(event, panelItem);

setState(() {
panelItem.messages;
panelItem.messageItems;
panelItem.hasToGiveReadReceipt =
_client!.roomsWithOpenReadReceipts.contains(room.id);
});
Expand All @@ -167,7 +167,7 @@ class ReadReceiptOverviewController extends State<ReadReceiptOverviewPage> {
final String roomId = panelItem.room!.id;

panelItem.timeline = await _getTimeline(panelItem.room);
panelItem.messages.clear();
panelItem.messageItems.clear();

if (_client!.readReceiptRequests.containsKey(roomId)) {
for (final MatrixEvent mEvent
Expand All @@ -178,7 +178,7 @@ class ReadReceiptOverviewController extends State<ReadReceiptOverviewPage> {

setState(() {
panelItem.messagesLoaded = true;
panelItem.messages;
panelItem.messageItems;
});
}
}
Expand Down Expand Up @@ -207,7 +207,8 @@ class ReadReceiptOverviewController extends State<ReadReceiptOverviewPage> {

// events from sync are sorted chronologically up
// but we need latest event first -> therefore insert(0, ...
panelItem.messages.insert(0, parentEvent);
panelItem.messageItems
.addAll({parentEvent.eventId: MessageItem(parentEvent)});
return true;
}
}
Expand Down Expand Up @@ -280,30 +281,51 @@ class ReadReceiptOverviewController extends State<ReadReceiptOverviewPage> {
return parentEvent;
}

void onReadReceiptClick(Event event, ExpansionPanelItem panelItem) async {
final String? readReceiptEventId =
await event.onReadReceiptIconClick(event, panelItem.timeline!, context);
void onReadReceiptClick(Event event, ExpansionPanelItem panelItem,
MessageItem messageItem) async {
if (!messageItem.readReceiptInProgress) {
setState(() {
messageItem.readReceiptInProgress = true;
});

// if readReceiptEventId is !null, then the user has given a new read receipt
if (readReceiptEventId != null) {
final MatrixEvent readReceiptEvent = await panelItem.room!.client
.getOneRoomEvent(panelItem.room!.id, readReceiptEventId);
final String? readReceiptEventId = await event.onReadReceiptIconClick(
event, panelItem.timeline!, context);

_addAggregatedEventsToTimeline(
event,
readReceiptEvent,
panelItem.timeline!,
panelItem.room!,
);
// if readReceiptEventId is !null, then the user has given a new read receipt
if (readReceiptEventId != null) {
final MatrixEvent readReceiptEvent = await panelItem.room!.client
.getOneRoomEvent(panelItem.room!.id, readReceiptEventId);

await _client!.updateOpenReadReceipts(panelItem.room!.id);
_updateOpenReadReceipt(panelItem);
_sortPanelItems();
_addAggregatedEventsToTimeline(
event,
readReceiptEvent,
panelItem.timeline!,
panelItem.room!,
);

setState(() {
panelItems;
});
await _client!.updateOpenReadReceipts(panelItem.room!.id);
_updateOpenReadReceipt(panelItem);
_sortPanelItems();

messageItem.readReceiptInProgress = false;
setState(() {
messageItem;
});
}
}
}

// returns true if process of giving read receipt for current user is in progress
bool readReceiptInProgress(Event event) {
if (panelItems.containsKey(event.roomId)) {
final panelItem = panelItems[event.roomId]!;

if (panelItem.messageItems.containsKey(event.eventId)) {
return panelItem.messageItems[event.eventId]!.readReceiptInProgress;
}
}

return false;
}

void expansionCallback(panelIndex, isExpanded) {
Expand Down
65 changes: 22 additions & 43 deletions lib/pages/read_receipt_overview/read_receipt_overview_view.dart
Original file line number Diff line number Diff line change
Expand Up @@ -104,50 +104,29 @@ class ReadReceiptOverviewView extends StatelessWidget {
.noReadReceiptRequestsFound,
)
else
for (var messageItem
in item.messageItems)
for (var messageItem in item
.messageItems.values
.toList()
.reversed)
Padding(
padding: const EdgeInsets.only(
right: 25,
),
child: Stack(children: [
Message(
messageItem.message,
onSwipe:
(swipeDirection) {},
onReadReceipt: (event) =>
controller
.onReadReceiptClick(
event,
item,
messageItem),
onSelect: (event) {},
timeline: item.timeline!,
),
if (messageItem
.readReceiptInProgress)
Container(
width: 500,
height: 150,
alignment:
Alignment.center,
foregroundDecoration:
const BoxDecoration(
color: Colors.grey,
backgroundBlendMode:
BlendMode
.saturation,
),
),
const Align(
alignment: Alignment
.bottomCenter,
child:
CircularProgressIndicator
.adaptive(
strokeWidth: 2,
))
])),
padding: const EdgeInsets.only(
right: 25,
),
child: Message(
messageItem.message,
onSwipe: (swipeDirection) {},
onReadReceipt: (event) =>
controller
.onReadReceiptClick(
event,
item,
messageItem),
onSelect: (event) {},
timeline: item.timeline!,
readReceiptOverviewController:
controller,
),
),
],
)
: const Center(
Expand Down

0 comments on commit 913caea

Please # to comment.