Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 16 additions & 2 deletions lib/src/agent/session.dart
Original file line number Diff line number Diff line change
Expand Up @@ -146,9 +146,21 @@ class Session extends DisposableChangeNotifier {
static final Uuid _uuid = const Uuid();

final Room room;
final SessionOptions _options;
final _TokenSourceConfiguration _tokenSourceConfiguration;

SessionOptions get options => _options;

set options(SessionOptions value) {
if (!identical(value.room, room)) {
// Keep Session.room authoritative to avoid split-brain state.
value = value.copyWith(room: room);
}
_options = value;
notifyListeners();
}

SessionOptions _options;

final Agent _agent = Agent();
Agent get agent => _agent;

Expand Down Expand Up @@ -211,7 +223,9 @@ class Session extends DisposableChangeNotifier {
_setConnectionState(ConnectionState.connecting);
_agent.connecting(buffering: false);
dispatchesAgent = await connect();
await room.localParticipant?.setMicrophoneEnabled(true);
if (_options.defaultMicrophoneEnabled) {
await room.localParticipant?.setMicrophoneEnabled(true);
}
}

if (dispatchesAgent) {
Expand Down
13 changes: 12 additions & 1 deletion lib/src/agent/session_options.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,21 +30,32 @@ class SessionOptions {
/// to a failed state.
final Duration agentConnectTimeout;

/// Whether to enable the microphone by default when the session starts.
///
/// If set to `true`, the microphone will be enabled automatically after connecting
/// to the room. If set to `false`, the microphone will remain disabled until
/// explicitly enabled.
/// Defaults to `true`.
final bool defaultMicrophoneEnabled;

SessionOptions({
Room? room,
this.preConnectAudio = true,
this.preConnectAudio = false,
this.agentConnectTimeout = const Duration(seconds: 20),
this.defaultMicrophoneEnabled = true,
}) : room = room ?? Room();

SessionOptions copyWith({
Room? room,
bool? preConnectAudio,
Duration? agentConnectTimeout,
bool? defaultMicrophoneEnabled,
}) {
return SessionOptions(
room: room ?? this.room,
preConnectAudio: preConnectAudio ?? this.preConnectAudio,
agentConnectTimeout: agentConnectTimeout ?? this.agentConnectTimeout,
defaultMicrophoneEnabled: defaultMicrophoneEnabled ?? this.defaultMicrophoneEnabled,
);
}
}
8 changes: 4 additions & 4 deletions pubspec.lock
Original file line number Diff line number Diff line change
Expand Up @@ -452,10 +452,10 @@ packages:
dependency: "direct main"
description:
name: meta
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
url: "https://pub.dev"
source: hosted
version: "1.17.0"
version: "1.16.0"
mime:
dependency: transitive
description:
Expand Down Expand Up @@ -721,10 +721,10 @@ packages:
dependency: transitive
description:
name: test_api
sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55
sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
url: "https://pub.dev"
source: hosted
version: "0.7.7"
version: "0.7.6"
timing:
dependency: transitive
description:
Expand Down