fluffychat/lib/pangea/activity_sessions/activity_session_analytics_repo.dart
ggurdin 89bb560347
4110 playtest 92325 (#4121)
* style activity role tooltip like instruction inline tooltips

* style updates to activity details

* don't show token underlines in practice mode

* show loading activity analytics

* use all construct types to calculate activity analytics, include audio messages in activity summary request

* update chat context menus for activities

* fix positioning on menu in main chat list
2025-09-25 08:46:46 -04:00

57 lines
1.7 KiB
Dart

import 'package:get_storage/get_storage.dart';
import 'package:fluffychat/pangea/activity_summary/activity_summary_analytics_model.dart';
class CachedActivityAnalytics {
final DateTime timestamp;
final DateTime lastUseTimestamp;
final ActivitySummaryAnalyticsModel analytics;
CachedActivityAnalytics(
this.timestamp,
this.lastUseTimestamp,
this.analytics,
);
}
class ActivitySessionAnalyticsRepo {
static final GetStorage _activityAnalyticsStorage =
GetStorage('activity_analytics_storage');
static Duration cacheDuration = const Duration(minutes: 30);
static CachedActivityAnalytics? get(String roomId) {
final json = _activityAnalyticsStorage.read(roomId);
if (json == null) return null;
try {
final timestamp = DateTime.parse(json['timestamp'] as String);
if (DateTime.now().difference(timestamp) > cacheDuration) {
_activityAnalyticsStorage.remove(roomId);
return null;
}
final lastUseTimestamp =
DateTime.parse(json['last_use_timestamp'] as String);
final analyticsJson = json['analytics'] as Map<String, dynamic>;
final analytics = ActivitySummaryAnalyticsModel.fromJson(analyticsJson);
return CachedActivityAnalytics(timestamp, lastUseTimestamp, analytics);
} catch (e) {
_activityAnalyticsStorage.remove(roomId);
return null;
}
}
static Future<void> set(
String roomId,
DateTime lastUseTimestamp,
ActivitySummaryAnalyticsModel analytics,
) async {
final json = {
'timestamp': DateTime.now().toIso8601String(),
'last_use_timestamp': lastUseTimestamp.toIso8601String(),
'analytics': analytics.toJson(),
};
await _activityAnalyticsStorage.write(roomId, json);
}
}