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. /// Represents an item in the completion cache.
class _RequestCacheItem { class _RequestCacheItem {
MessageActivityRequest req; MessageActivityRequest req;
PracticeActivityModel? practiceActivity; PracticeActivityModelResponse? practiceActivity;
_RequestCacheItem({ _RequestCacheItem({
required this.req, required this.req,
@ -99,7 +99,7 @@ class PracticeGenerationController {
//TODO - allow return of activity content before sending the event //TODO - allow return of activity content before sending the event
// this requires some downstream changes to the way the event is handled // this requires some downstream changes to the way the event is handled
Future<PracticeActivityModel?> getPracticeActivity( Future<PracticeActivityModelResponse?> getPracticeActivity(
MessageActivityRequest req, MessageActivityRequest req,
PangeaMessageEvent event, PangeaMessageEvent event,
) async { ) async {
@ -119,6 +119,8 @@ class PracticeGenerationController {
return null; return null;
} }
final eventCompleter = Completer<PracticeActivityEvent?>();
// if the server points to an existing event, return that event // if the server points to an existing event, return that event
if (res.existingActivityEventId != null) { if (res.existingActivityEventId != null) {
final Event? existingEvent = final Event? existingEvent =
@ -127,11 +129,19 @@ class PracticeGenerationController {
debugPrint( debugPrint(
'Existing activity event found: ${existingEvent?.content}', 'Existing activity event found: ${existingEvent?.content}',
); );
if (existingEvent != null) { debugPrint(
return PracticeActivityEvent( "eventID: ${existingEvent?.eventId}, event is redacted: ${existingEvent?.redacted}",
);
if (existingEvent != null && !existingEvent.redacted) {
final activityEvent = PracticeActivityEvent(
event: existingEvent, event: existingEvent,
timeline: event.timeline, 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()}'); debugPrint('Activity generated: ${res.activity!.toJson()}');
_sendAndPackageEvent(res.activity!, event).then((event) {
eventCompleter.complete(event);
});
final responseModel = PracticeActivityModelResponse(
activity: res.activity!,
eventCompleter: eventCompleter,
);
_sendAndPackageEvent(res.activity!, event); _cache[cacheKey] = _RequestCacheItem(
_cache[cacheKey] = req: req,
_RequestCacheItem(req: req, practiceActivity: res.activity!); practiceActivity: responseModel,
);
return _cache[cacheKey]!.practiceActivity; 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/my_analytics_controller.dart';
import 'package:fluffychat/pangea/controllers/pangea_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/enum/activity_type_enum.dart';
import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart'; import 'package:fluffychat/pangea/matrix_event_wrappers/pangea_message_event.dart';
import 'package:fluffychat/pangea/matrix_event_wrappers/practice_activity_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> { class PracticeActivityCardState extends State<PracticeActivityCard> {
PracticeActivityModel? currentActivity; PracticeActivityModel? currentActivity;
Completer<PracticeActivityEvent?>? currentActivityCompleter;
PracticeActivityRecordModel? currentCompletionRecord; PracticeActivityRecordModel? currentCompletionRecord;
bool fetchingActivity = false; bool fetchingActivity = false;
@ -133,9 +136,9 @@ class PracticeActivityCardState extends State<PracticeActivityCard> {
return null; return null;
} }
final PracticeActivityModel? ourNewActivity = await pangeaController final PracticeActivityModelResponse? activityResponse =
.practiceGenerationController await pangeaController.practiceGenerationController
.getPracticeActivity( .getPracticeActivity(
MessageActivityRequest( MessageActivityRequest(
userL1: pangeaController.languageController.userL1!.langCode, userL1: pangeaController.languageController.userL1!.langCode,
userL2: pangeaController.languageController.userL2!.langCode, userL2: pangeaController.languageController.userL2!.langCode,
@ -157,9 +160,10 @@ class PracticeActivityCardState extends State<PracticeActivityCard> {
widget.pangeaMessageEvent, widget.pangeaMessageEvent,
); );
currentActivityCompleter = activityResponse?.eventCompleter;
_updateFetchingActivity(false); _updateFetchingActivity(false);
return ourNewActivity; return activityResponse?.activity;
} catch (e, s) { } catch (e, s) {
debugger(when: kDebugMode); debugger(when: kDebugMode);
ErrorHandler.logError( ErrorHandler.logError(
@ -255,12 +259,27 @@ class PracticeActivityCardState extends State<PracticeActivityCard> {
/// clear the current activity, record, and selection /// clear the current activity, record, and selection
/// fetch a new activity, including the offending activity in the request /// fetch a new activity, including the offending activity in the request
void submitFeedback(String feedback) { Future<void> submitFeedback(String feedback) async {
if (currentActivity == null) { if (currentActivity == null || currentCompletionRecord == null) {
debugger(when: kDebugMode); debugger(when: kDebugMode);
return; 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( _fetchNewActivity(
ActivityQualityFeedback( ActivityQualityFeedback(
feedbackText: feedback, feedbackText: feedback,

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

Loading…
Cancel
Save