Merge pull request #825 from pangeachat/store-num-completed-activities-locally

store num completed activities in memory instead of local cache
pull/1428/head
ggurdin 1 year ago committed by GitHub
commit f0dd984e7a
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -2,7 +2,6 @@ import 'dart:async';
import 'dart:collection'; import 'dart:collection';
import 'dart:developer'; import 'dart:developer';
import 'package:fluffychat/pangea/constants/local.key.dart';
import 'package:fluffychat/pangea/constants/pangea_event_types.dart'; import 'package:fluffychat/pangea/constants/pangea_event_types.dart';
import 'package:fluffychat/pangea/controllers/pangea_controller.dart'; import 'package:fluffychat/pangea/controllers/pangea_controller.dart';
import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart'; import 'package:fluffychat/pangea/extensions/pangea_room_extension/pangea_room_extension.dart';
@ -26,66 +25,60 @@ class PracticeActivityRecordController {
static const int maxStoredEvents = 100; static const int maxStoredEvents = 100;
static final Map<int, _RecordCacheItem> _cache = {}; static final Map<int, _RecordCacheItem> _cache = {};
late final PangeaController _pangeaController; late final PangeaController _pangeaController;
Timer? _cacheClearTimer;
PracticeActivityRecordController(this._pangeaController) { PracticeActivityRecordController(this._pangeaController);
_initializeCacheClearing();
}
LinkedHashMap<String, int> get completedActivities {
try {
final dynamic locallySaved = _pangeaController.pStoreService.read(
PLocalKey.completedActivities,
);
if (locallySaved == null) return LinkedHashMap<String, int>();
try {
final LinkedHashMap<String, int> cache =
LinkedHashMap<String, int>.from(locallySaved);
return cache;
} catch (err) {
_pangeaController.pStoreService.delete(
PLocalKey.completedActivities,
);
return LinkedHashMap<String, int>();
}
} catch (exception, stackTrace) {
ErrorHandler.logError(
e: PangeaWarningError(
"Failed to get completed activities from cache: $exception",
),
s: stackTrace,
m: 'Failed to get completed activities from cache',
);
return LinkedHashMap<String, int>();
}
}
Future<void> completeActivity(String messageID) async { int getCompletedActivityCount(String messageID) {
final LinkedHashMap<String, int> currentCache = completedActivities; return _completedActivities[messageID] ?? 0;
final numCompleted = currentCache[messageID] ?? 0;
currentCache[messageID] = numCompleted + 1;
if (currentCache.length > maxStoredEvents) {
currentCache.remove(currentCache.keys.first);
} }
await _pangeaController.pStoreService.save( final LinkedHashMap<String, int> _completedActivities =
PLocalKey.completedActivities, LinkedHashMap<String, int>();
currentCache,
); // LinkedHashMap<String, int> get _completedActivities {
} // try {
// final dynamic locallySaved = _pangeaController.pStoreService.read(
// PLocalKey.completedActivities,
// );
// if (locallySaved == null) return LinkedHashMap<String, int>();
// try {
// final LinkedHashMap<String, int> cache =
// LinkedHashMap<String, int>.from(locallySaved);
// return cache;
// } catch (err) {
// _pangeaController.pStoreService.delete(
// PLocalKey.completedActivities,
// );
// return LinkedHashMap<String, int>();
// }
// } catch (exception, stackTrace) {
// ErrorHandler.logError(
// e: PangeaWarningError(
// "Failed to get completed activities from cache: $exception",
// ),
// s: stackTrace,
// m: 'Failed to get completed activities from cache',
// );
// return LinkedHashMap<String, int>();
// }
// }
void _initializeCacheClearing() { Future<void> completeActivity(String messageID) async {
const duration = Duration(minutes: 2); final numCompleted = _completedActivities[messageID] ?? 0;
_cacheClearTimer = Timer.periodic(duration, (Timer t) => _clearCache()); _completedActivities[messageID] = numCompleted + 1;
} // final LinkedHashMap<String, int> currentCache = _completedActivities;
// final numCompleted = currentCache[messageID] ?? 0;
void _clearCache() { // currentCache[messageID] = numCompleted + 1;
_cache.clear();
} // if (currentCache.length > maxStoredEvents) {
// currentCache.remove(currentCache.keys.first);
void dispose() { // }
_cacheClearTimer?.cancel();
// await _pangeaController.pStoreService.save(
// PLocalKey.completedActivities,
// currentCache,
// );
debugPrint("completed activities is now: $_completedActivities");
} }
/// Sends a practice activity record to the server and returns the corresponding event. /// Sends a practice activity record to the server and returns the corresponding event.

@ -540,8 +540,7 @@ class PangeaMessageEvent {
int get numberOfActivitiesCompleted { int get numberOfActivitiesCompleted {
return MatrixState.pangeaController.activityRecordController return MatrixState.pangeaController.activityRecordController
.completedActivities[eventId] ?? .getCompletedActivityCount(eventId);
0;
} }
String? get l2Code => String? get l2Code =>

@ -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.21.5+3545 version: 1.21.6+3546
environment: environment:
sdk: ">=3.0.0 <4.0.0" sdk: ">=3.0.0 <4.0.0"

Loading…
Cancel
Save