Skip to content

Commit 8a0b27a

Browse files
committed
fix: use hybrid transformer for CallControlEvent to prevent duplicate calls
1 parent 4c1e715 commit 8a0b27a

3 files changed

Lines changed: 10 additions & 2 deletions

File tree

lib/features/call/bloc/call_bloc.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import 'package:freezed_annotation/freezed_annotation.dart';
1313
import 'package:logging/logging.dart';
1414
import 'package:ssl_certificates/ssl_certificates.dart';
1515
import 'package:url_launcher/url_launcher.dart';
16+
import 'package:async/async.dart';
1617

1718
import 'package:webtrit_api/webtrit_api.dart';
1819
import 'package:webtrit_callkeep/webtrit_callkeep.dart';
@@ -130,7 +131,13 @@ class CallBloc extends Bloc<CallEvent, CallState> with WidgetsBindingObserver im
130131
on<_HandshakeSignalingEventState>(_onHandshakeSignalingEventState, transformer: sequential());
131132
on<_CallSignalingEvent>(_onCallSignalingEvent, transformer: sequential());
132133
on<_CallPushEventIncoming>(_onCallPushEventIncoming, transformer: sequential());
133-
on<CallControlEvent>(_onCallControlEvent, transformer: droppable());
134+
on<CallControlEvent>(
135+
_onCallControlEvent,
136+
transformer: (events, mapper) => StreamGroup.merge([
137+
droppable<CallControlEvent>().call(events.where((e) => e is _CallControlEventStarted), mapper),
138+
sequential<CallControlEvent>().call(events.where((e) => e is! _CallControlEventStarted), mapper),
139+
]),
140+
);
134141
on<_CallPerformEvent>(_onCallPerformEvent, transformer: sequential());
135142
on<_PeerConnectionEvent>(_onPeerConnectionEvent, transformer: sequential());
136143
on<CallScreenEvent>(_onCallScreenEvent, transformer: sequential());

pubspec.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ packages:
7171
source: hosted
7272
version: "2.7.0"
7373
async:
74-
dependency: transitive
74+
dependency: "direct main"
7575
description:
7676
name: async
7777
sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb"

pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ dependencies:
9393
icon_decoration: ^2.1.0
9494
emoji_picker_flutter: ^4.3.0
9595
mask_text_input_formatter: ^2.9.0
96+
async: ^2.13.0
9697

9798
webtrit_api:
9899
path: ./packages/webtrit_api

0 commit comments

Comments
 (0)