diff --git a/lib/pangea/controllers/get_analytics_controller.dart b/lib/pangea/controllers/get_analytics_controller.dart index 2853a27e4..2c55b203b 100644 --- a/lib/pangea/controllers/get_analytics_controller.dart +++ b/lib/pangea/controllers/get_analytics_controller.dart @@ -77,10 +77,10 @@ class GetAnalyticsController { ...(_getConstructsLocal() ?? []), ..._locallyCachedConstructs, ]); - _updateAnalyticsStream(); } catch (err, s) { ErrorHandler.logError(e: err, s: s); } finally { + _updateAnalyticsStream(); if (!initCompleter.isCompleted) initCompleter.complete(); } } @@ -124,8 +124,13 @@ class GetAnalyticsController { Map>.from(locallySaved); final Map> formattedCache = {}; for (final entry in cache.entries) { - formattedCache[entry.key] = - entry.value.map((e) => OneConstructUse.fromJson(e)).toList(); + try { + formattedCache[entry.key] = + entry.value.map((e) => OneConstructUse.fromJson(e)).toList(); + } catch (err, s) { + ErrorHandler.logError(e: err, s: s); + continue; + } } return formattedCache; } catch (err) { diff --git a/lib/pangea/models/analytics/constructs_model.dart b/lib/pangea/models/analytics/constructs_model.dart index d26cd0e89..1a9118838 100644 --- a/lib/pangea/models/analytics/constructs_model.dart +++ b/lib/pangea/models/analytics/constructs_model.dart @@ -29,7 +29,12 @@ class ConstructAnalyticsModel { if (["grammar", "g"].contains(useJson['constructType'])) { continue; } else { - uses.add(OneConstructUse.fromJson(useJson)); + try { + uses.add(OneConstructUse.fromJson(useJson)); + } catch (err, s) { + ErrorHandler.logError(e: err, s: s); + continue; + } } } } else { @@ -94,7 +99,7 @@ class OneConstructUse { useType: ConstructUseTypeUtil.fromString(json['useType']), lemma: json['lemma'], form: json['form'], - category: getCategory(json), + category: getCategory(json, constructType), constructType: constructType, id: json['id'], metadata: ConstructUseMetaData( @@ -117,9 +122,21 @@ class OneConstructUse { 'id': id, }; - static String getCategory(Map json) { + static String getCategory( + Map json, + ConstructTypeEnum constructType, + ) { final categoryEntry = json['cat'] ?? json['categories']; + if (constructType == ConstructTypeEnum.vocab) { + final String? category = categoryEntry is String + ? categoryEntry + : categoryEntry is List && categoryEntry.isNotEmpty + ? categoryEntry.first + : null; + return category ?? "Other"; + } + if (categoryEntry == null) { return _guessGrammarCategory(json["lemma"]); } diff --git a/lib/pangea/widgets/chat_list/analytics_summary/learning_progress_indicators.dart b/lib/pangea/widgets/chat_list/analytics_summary/learning_progress_indicators.dart index a96df6f91..9075aa38b 100644 --- a/lib/pangea/widgets/chat_list/analytics_summary/learning_progress_indicators.dart +++ b/lib/pangea/widgets/chat_list/analytics_summary/learning_progress_indicators.dart @@ -39,8 +39,7 @@ class LearningProgressIndicatorsState // if getAnalytics has already finished initializing, // the data is loaded and should be displayed. - if (MatrixState.pangeaController.getAnalytics.initCompleter?.isCompleted ?? - false) { + if (MatrixState.pangeaController.getAnalytics.initCompleter.isCompleted) { updateData(null); } _analyticsSubscription = MatrixState