fix: send local analytics to correct analytics room on language update (#5194)
This commit is contained in:
parent
8a8ca1026a
commit
a96e767595
3 changed files with 28 additions and 13 deletions
|
|
@ -208,8 +208,8 @@ class AnalyticsDataService {
|
|||
return analyticsRoom?.blockedConstructs ?? {};
|
||||
}
|
||||
|
||||
Future<void> waitForSync() async {
|
||||
await _syncController?.syncStream.stream.first;
|
||||
Future<void> waitForSync(String analyticsRoomID) async {
|
||||
await _syncController?.waitForSync(analyticsRoomID);
|
||||
}
|
||||
|
||||
Future<DerivedAnalyticsDataModel> get derivedData async {
|
||||
|
|
|
|||
|
|
@ -14,8 +14,6 @@ class AnalyticsSyncController {
|
|||
final AnalyticsDataService dataService;
|
||||
|
||||
StreamSubscription? _subscription;
|
||||
StreamController<List<String>> syncStream =
|
||||
StreamController<List<String>>.broadcast();
|
||||
|
||||
AnalyticsSyncController({
|
||||
required this.client,
|
||||
|
|
@ -29,7 +27,6 @@ class AnalyticsSyncController {
|
|||
void dispose() {
|
||||
_subscription?.cancel();
|
||||
_subscription = null;
|
||||
syncStream.close();
|
||||
}
|
||||
|
||||
Future<void> _onSync(SyncUpdate update) async {
|
||||
|
|
@ -55,10 +52,22 @@ class AnalyticsSyncController {
|
|||
|
||||
if (constructEvents.isEmpty) return;
|
||||
await dataService.updateServerAnalytics(constructEvents);
|
||||
}
|
||||
|
||||
syncStream.add(
|
||||
List<String>.from(constructEvents.map((e) => e.event.eventId)),
|
||||
);
|
||||
Future<void> waitForSync(String analyticsRoomId) async {
|
||||
await client.onSync.stream.firstWhere((update) {
|
||||
final roomUpdate = update.rooms?.join?[analyticsRoomId];
|
||||
if (roomUpdate == null) return false;
|
||||
|
||||
final hasAnalyticsEvent = roomUpdate.timeline?.events?.any(
|
||||
(e) =>
|
||||
e.type == PangeaEventTypes.construct &&
|
||||
e.senderId == client.userID,
|
||||
) ??
|
||||
false;
|
||||
|
||||
return hasAnalyticsEvent;
|
||||
});
|
||||
}
|
||||
|
||||
Future<void> bulkUpdate() async {
|
||||
|
|
|
|||
|
|
@ -29,8 +29,8 @@ class AnalyticsUpdateService {
|
|||
|
||||
LanguageModel? get _l2 => MatrixState.pangeaController.userController.userL2;
|
||||
|
||||
Future<Room?> _getAnalyticsRoom() async {
|
||||
final l2 = _l2;
|
||||
Future<Room?> _getAnalyticsRoom({LanguageModel? l2Override}) async {
|
||||
final l2 = l2Override ?? _l2;
|
||||
if (l2 == null) return null;
|
||||
|
||||
final analyticsRoom = await dataService.getAnalyticsRoom(l2);
|
||||
|
|
@ -101,11 +101,17 @@ class AnalyticsUpdateService {
|
|||
Future<void> _updateAnalytics({LanguageModel? l2Override}) async {
|
||||
final localConstructs = await dataService.getLocalUses();
|
||||
if (localConstructs.isEmpty) return;
|
||||
final analyticsRoom = await _getAnalyticsRoom();
|
||||
final analyticsRoom = await _getAnalyticsRoom(l2Override: l2Override);
|
||||
if (analyticsRoom == null) {
|
||||
debugPrint(
|
||||
"No analytics room found for L2 Override: ${l2Override?.langCode}",
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// and send cached analytics data to the room
|
||||
final future = dataService.waitForSync();
|
||||
await analyticsRoom?.sendConstructsEvent(localConstructs);
|
||||
final future = dataService.waitForSync(analyticsRoom.id);
|
||||
await analyticsRoom.sendConstructsEvent(localConstructs);
|
||||
await future;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue