Merge pull request #209 from pangeachat/analytics-updates

fix for error with msg events with multiple of the same type of pange…
pull/1183/head
ggurdin 2 years ago committed by GitHub
commit 56682cedbf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -564,17 +564,20 @@ class PangeaMessageEvent {
return langCode ?? LanguageKeys.unknownLanguage;
}
PangeaMatch? firstErrorStep(String lemma) {
List<PangeaMatch>? errorSteps(String lemma) {
final RepresentationEvent? repEvent = originalSent ?? originalWritten;
if (repEvent?.choreo == null) return null;
final PangeaMatch? step = repEvent!.choreo!.choreoSteps
.firstWhereOrNull(
(element) =>
element.acceptedOrIgnoredMatch?.match.shortMessage == lemma,
final List<PangeaMatch> steps = repEvent!.choreo!.choreoSteps
.where(
(choreoStep) =>
choreoStep.acceptedOrIgnoredMatch != null &&
choreoStep.acceptedOrIgnoredMatch?.match.shortMessage == lemma,
)
?.acceptedOrIgnoredMatch;
return step;
.map((element) => element.acceptedOrIgnoredMatch)
.cast<PangeaMatch>()
.toList();
return steps;
}
// List<SpanData> get activities =>

@ -1,3 +1,4 @@
import 'package:fluffychat/widgets/matrix.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/l10n.dart';
@ -20,7 +21,12 @@ class ClassAnalyticsView extends StatelessWidget {
.map(
(room) => TabItem(
avatar: room.avatarUrl,
displayName: room.name ?? "",
displayName: room.name ??
Matrix.of(context)
.client
.getRoomById(room.roomId)
?.getLocalizedDisplayname() ??
"",
id: room.roomId,
),
)

@ -248,6 +248,38 @@ class ConstructListViewState extends State<ConstructListView> {
(element) => element.content.lemma == widget.controller.currentLemma,
);
// given the current lemma and list of message events, return a list of
// MessageEventMatch objects, which contain one PangeaMessageEvent to one PangeaMatch
// this is because some message events may have has more than one PangeaMatch of a
// given lemma type.
List<MessageEventMatch> getMessageEventMatches() {
if (widget.controller.currentLemma == null) return [];
final List<MessageEventMatch> allMsgErrorSteps = [];
for (final msgEvent in _msgEvents) {
if (allMsgErrorSteps.any(
(element) => element.msgEvent.eventId == msgEvent.eventId,
)) {
continue;
}
// get all the pangea matches in that message which have that lemma
final List<PangeaMatch>? msgErrorSteps = msgEvent.errorSteps(
widget.controller.currentLemma!,
);
if (msgErrorSteps == null) continue;
allMsgErrorSteps.addAll(
msgErrorSteps.map(
(errorStep) => MessageEventMatch(
msgEvent: msgEvent,
lemmaMatch: errorStep,
),
),
);
}
return allMsgErrorSteps;
}
@override
Widget build(BuildContext context) {
if (!widget.init || fetchingUses) {
@ -262,6 +294,8 @@ class ConstructListViewState extends State<ConstructListView> {
);
}
final msgEventMatches = getMessageEventMatches();
return widget.controller.currentLemma == null
? Expanded(
child: ListView.builder(
@ -299,11 +333,12 @@ class ConstructListViewState extends State<ConstructListView> {
child: ListView.separated(
separatorBuilder: (context, index) =>
const Divider(height: 1),
itemCount: _msgEvents.length,
itemCount: msgEventMatches.length,
itemBuilder: (context, index) {
return ConstructMessage(
msgEvent: _msgEvents[index],
msgEvent: msgEventMatches[index].msgEvent,
lemma: widget.controller.currentLemma!,
errorMessage: msgEventMatches[index].lemmaMatch,
);
},
),
@ -316,21 +351,18 @@ class ConstructListViewState extends State<ConstructListView> {
class ConstructMessage extends StatelessWidget {
final PangeaMessageEvent msgEvent;
final PangeaMatch errorMessage;
final String lemma;
const ConstructMessage({
super.key,
required this.msgEvent,
required this.errorMessage,
required this.lemma,
});
@override
Widget build(BuildContext context) {
final PangeaMatch? errorMessage = msgEvent.firstErrorStep(lemma);
if (errorMessage == null) {
return const SizedBox.shrink();
}
final String? chosen = errorMessage.match.choices
?.firstWhereOrNull(
(element) => element.selected == true,
@ -488,6 +520,14 @@ class ConstructMessageMetadata extends StatelessWidget {
@override
Widget build(BuildContext context) {
final String roomName = msgEvent.event.room.name.isEmpty
? Matrix.of(context)
.client
.getRoomById(msgEvent.event.room.id)
?.getLocalizedDisplayname() ??
""
: msgEvent.event.room.name;
return Padding(
padding: const EdgeInsets.fromLTRB(10, 0, 30, 0),
child: Column(
@ -496,9 +536,19 @@ class ConstructMessageMetadata extends StatelessWidget {
msgEvent.event.originServerTs.localizedTime(context),
style: TextStyle(fontSize: 13 * AppConfig.fontSizeFactor),
),
Text(msgEvent.event.room.name),
Text(roomName),
],
),
);
}
}
class MessageEventMatch {
final PangeaMessageEvent msgEvent;
final PangeaMatch lemmaMatch;
MessageEventMatch({
required this.msgEvent,
required this.lemmaMatch,
});
}

Loading…
Cancel
Save