From 9cdba97a1c35d2cf45006bca9c00c791e7df3f12 Mon Sep 17 00:00:00 2001 From: Wilson Date: Wed, 12 Mar 2025 11:44:34 -0400 Subject: [PATCH] (chore) save parse from json language detections (#2119) Co-authored-by: ggurdin Co-authored-by: ggurdin <46800240+ggurdin@users.noreply.github.com> --- .../models/igc_text_data_model.dart | 21 +++++++++++--- .../models/language_detection_model.dart | 13 ++++++++- .../event_wrappers/pangea_message_event.dart | 28 +++++++++++++------ 3 files changed, 49 insertions(+), 13 deletions(-) diff --git a/lib/pangea/choreographer/models/igc_text_data_model.dart b/lib/pangea/choreographer/models/igc_text_data_model.dart index 134ca9341..2058a557b 100644 --- a/lib/pangea/choreographer/models/igc_text_data_model.dart +++ b/lib/pangea/choreographer/models/igc_text_data_model.dart @@ -109,12 +109,25 @@ class IGCTextData { fullText: content.text, ); - final LanguageDetectionResponse detections = event.detections != null - ? LanguageDetectionResponse.fromJson({ + LanguageDetectionResponse detections = defaultDetections; + if (event.detections != null) { + try { + detections = LanguageDetectionResponse.fromJson({ + "detections": event.detections, + "full_text": content.text, + }); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + m: "Error parsing detections in IGCTextData.fromRepresentationEvent", + data: { "detections": event.detections, "full_text": content.text, - }) - : defaultDetections; + }, + ); + } + } return IGCTextData( detections: detections, diff --git a/lib/pangea/choreographer/models/language_detection_model.dart b/lib/pangea/choreographer/models/language_detection_model.dart index bb7b32b92..aaac2decd 100644 --- a/lib/pangea/choreographer/models/language_detection_model.dart +++ b/lib/pangea/choreographer/models/language_detection_model.dart @@ -10,9 +10,20 @@ class LanguageDetection { }); factory LanguageDetection.fromJson(Map json) { + final dynamic confValue = json[ModelKey.confidence]; + double confidence; + if (confValue is String) { + confidence = double.parse(confValue); + } else if (confValue is double) { + confidence = confValue; + } else if (confValue is int) { + confidence = confValue.toDouble(); + } else { + throw TypeError(); + } return LanguageDetection( langCode: json[ModelKey.langCode], - confidence: json[ModelKey.confidence], + confidence: confidence, ); } diff --git a/lib/pangea/events/event_wrappers/pangea_message_event.dart b/lib/pangea/events/event_wrappers/pangea_message_event.dart index 01092165d..e5dc98e48 100644 --- a/lib/pangea/events/event_wrappers/pangea_message_event.dart +++ b/lib/pangea/events/event_wrappers/pangea_message_event.dart @@ -510,14 +510,26 @@ class PangeaMessageEvent { } Future representationByDetectedLanguage() async { - final resp = await LanguageDetectionRepo.get( - MatrixState.pangeaController.userController.accessToken, - request: LanguageDetectionRequest( - text: _latestEdit.body, - senderl1: l1Code, - senderl2: l2Code, - ), - ); + LanguageDetectionResponse? resp; + try { + resp = await LanguageDetectionRepo.get( + MatrixState.pangeaController.userController.accessToken, + request: LanguageDetectionRequest( + text: _latestEdit.body, + senderl1: l1Code, + senderl2: l2Code, + ), + ); + } catch (e, s) { + ErrorHandler.logError( + e: e, + s: s, + data: { + "event": _event.toJson(), + }, + ); + return null; + } final langCode = resp.detections.firstOrNull?.langCode; if (langCode == null) return null;