Merge pull request #911 from pangeachat/829-remove-bad-activities

redact the current activity event when submitting feedback
pull/1476/head
ggurdin 1 year ago committed by GitHub
commit e427a85f40
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -19,7 +19,7 @@ import 'package:matrix/matrix.dart';
/// Represents an item in the completion cache.
class _RequestCacheItem {
MessageActivityRequest req;
PracticeActivityModel? practiceActivity;
PracticeActivityModelResponse? practiceActivity;
_RequestCacheItem({
required this.req,
@ -99,7 +99,7 @@ class PracticeGenerationController {
//TODO - allow return of activity content before sending the event
// this requires some downstream changes to the way the event is handled
Future<PracticeActivityModel?> getPracticeActivity(
Future<PracticeActivityModelResponse?> getPracticeActivity(
MessageActivityRequest req,
PangeaMessageEvent event,
) async {
@ -119,6 +119,8 @@ class PracticeGenerationController {
return null;
}
final eventCompleter = Completer<PracticeActivityEvent?>();
// if the server points to an existing event, return that event
if (res.existingActivityEventId != null) {
final Event? existingEvent =
@ -127,11 +129,19 @@ class PracticeGenerationController {
debugPrint(
'Existing activity event found: ${existingEvent?.content}',
);
if (existingEvent != null) {
return PracticeActivityEvent(
debugPrint(
"eventID: ${existingEvent?.eventId}, event is redacted: ${existingEvent?.redacted}",
);
if (existingEvent != null && !existingEvent.redacted) {
final activityEvent = PracticeActivityEvent(
event: existingEvent,
timeline: event.timeline,
).practiceActivity;
);
eventCompleter.complete(activityEvent);
return PracticeActivityModelResponse(
activity: activityEvent.practiceActivity,
eventCompleter: eventCompleter,
);
}
}
@ -141,11 +151,30 @@ class PracticeGenerationController {
}
debugPrint('Activity generated: ${res.activity!.toJson()}');
_sendAndPackageEvent(res.activity!, event).then((event) {
eventCompleter.complete(event);
});
_sendAndPackageEvent(res.activity!, event);
_cache[cacheKey] =
_RequestCacheItem(req: req, practiceActivity: res.activity!);
final responseModel = PracticeActivityModelResponse(
activity: res.activity!,
eventCompleter: eventCompleter,
);
return _cache[cacheKey]!.practiceActivity;
_cache[cacheKey] = _RequestCacheItem(
req: req,
practiceActivity: responseModel,
);
return responseModel;
}
}
class PracticeActivityModelResponse {
final PracticeActivityModel? activity;
final Completer<PracticeActivityEvent?> eventCompleter;
PracticeActivityModelResponse({
required this.activity,
required this.eventCompleter,
});
}

@ -3,6 +3,7 @@ import 'dart:developer';
import 'package:fluffychat/pangea/controllers/my_analytics_controller.dart';
import 'package:fluffychat/pangea/controllers/pangea_controller.dart';
import 'package:fluffychat/pangea/controllers/practice_activity_generation_controller.dart';
import 'package:fluffychat/pangea/enum/activity_type_enum.dart';
import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart';
import 'package:fluffychat/pangea/matrix_event_wrappers/practice_activity_event.dart';
@ -45,6 +46,8 @@ class PracticeActivityCard extends StatefulWidget {
class PracticeActivityCardState extends State<PracticeActivityCard> {
PracticeActivityModel? currentActivity;
Completer<PracticeActivityEvent?>? currentActivityCompleter;
PracticeActivityRecordModel? currentCompletionRecord;
bool fetchingActivity = false;
@ -133,8 +136,8 @@ class PracticeActivityCardState extends State<PracticeActivityCard> {
return null;
}
final PracticeActivityModel? ourNewActivity = await pangeaController
.practiceGenerationController
final PracticeActivityModelResponse? activityResponse =
await pangeaController.practiceGenerationController
.getPracticeActivity(
MessageActivityRequest(
userL1: pangeaController.languageController.userL1!.langCode,
@ -157,9 +160,10 @@ class PracticeActivityCardState extends State<PracticeActivityCard> {
widget.pangeaMessageEvent,
);
currentActivityCompleter = activityResponse?.eventCompleter;
_updateFetchingActivity(false);
return ourNewActivity;
return activityResponse?.activity;
} catch (e, s) {
debugger(when: kDebugMode);
ErrorHandler.logError(
@ -255,12 +259,27 @@ class PracticeActivityCardState extends State<PracticeActivityCard> {
/// clear the current activity, record, and selection
/// fetch a new activity, including the offending activity in the request
void submitFeedback(String feedback) {
if (currentActivity == null) {
Future<void> submitFeedback(String feedback) async {
if (currentActivity == null || currentCompletionRecord == null) {
debugger(when: kDebugMode);
return;
}
if (currentActivityCompleter != null) {
final activityEvent = await currentActivityCompleter!.future;
await activityEvent?.event.redactEvent(reason: feedback);
} else {
debugger(when: kDebugMode);
ErrorHandler.logError(
e: Exception('No completer found for current activity'),
data: {
'activity': currentActivity,
'record': currentCompletionRecord,
'feedback': feedback,
},
);
}
_fetchNewActivity(
ActivityQualityFeedback(
feedbackText: feedback,

@ -6,7 +6,7 @@ description: Learn a language while texting your friends.
# Pangea#
publish_to: none
# On version bump also increase the build number for F-Droid
version: 1.23.3+3562
version: 1.23.4+3563
environment:
sdk: ">=3.0.0 <4.0.0"

Loading…
Cancel
Save