Skip to content

Commit 5a59c43

Browse files
committed
Emit Connected state when hybrid tunnel is established
1 parent c1af404 commit 5a59c43

3 files changed

Lines changed: 33 additions & 5 deletions

File tree

xyz-iinuwa-credential-manager-portal-gtk/src/credential_service/hybrid.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,9 @@ pub(super) enum HybridStateInternal {
111111
/// BLE advertisement has been received from phone, tunnel is being established
112112
Connecting,
113113

114+
/// Hybrid tunnel has been established
115+
Connected,
116+
114117
/// Authenticator data
115118
Completed(AuthenticatorResponse),
116119

@@ -133,6 +136,9 @@ pub enum HybridState {
133136
/// BLE advertisement has been received from phone, tunnel is being established
134137
Connecting,
135138

139+
/// Tunnel is established, waiting for user to release credential on their device.
140+
Connected,
141+
136142
/// Authenticator data
137143
Completed,
138144

@@ -145,6 +151,7 @@ impl From<HybridStateInternal> for HybridState {
145151
match value {
146152
HybridStateInternal::Init(qr_code) => HybridState::Init(qr_code),
147153
HybridStateInternal::Connecting => HybridState::Connecting,
154+
HybridStateInternal::Connected => HybridState::Connected,
148155
HybridStateInternal::Completed(_) => HybridState::Completed,
149156
HybridStateInternal::UserCancelled => HybridState::UserCancelled,
150157
}

xyz-iinuwa-credential-manager-portal-gtk/src/view_model/gtk/mod.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -162,10 +162,18 @@ impl ViewModel {
162162
view_model.set_qr_code_visible(false);
163163
_ = view_model.qr_code_paintable().take();
164164
view_model.set_prompt(
165-
"Device connected. Follow the instructions on your device",
165+
"Connecting to your device. Make sure both devices are near each other and have Bluetooth enabled.",
166166
);
167167
view_model.set_qr_spinner_visible(true);
168168
}
169+
ViewUpdate::HybridConnected => {
170+
view_model.set_qr_code_visible(false);
171+
_ = view_model.qr_code_paintable().take();
172+
view_model.set_prompt(
173+
"Device connected. Follow the instructions on your device",
174+
);
175+
view_model.set_qr_spinner_visible(false);
176+
}
169177
ViewUpdate::Completed => {
170178
view_model.set_qr_spinner_visible(false);
171179
view_model.set_completed(true);

xyz-iinuwa-credential-manager-portal-gtk/src/view_model/mod.rs

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,11 @@ impl<C: CredentialServiceClient + Send> ViewModel<C> {
222222
.await
223223
.unwrap();
224224
}
225+
HybridState::Connected => {
226+
tx.send(BackgroundEvent::HybridQrStateChanged(state))
227+
.await
228+
.unwrap();
229+
}
225230
HybridState::Completed => {
226231
tx.send(BackgroundEvent::HybridQrStateChanged(state))
227232
.await
@@ -345,6 +350,13 @@ impl<C: CredentialServiceClient + Send> ViewModel<C> {
345350
.await
346351
.unwrap();
347352
}
353+
HybridState::Connected => {
354+
self.hybrid_qr_code_data = None;
355+
self.tx_update
356+
.send(ViewUpdate::HybridConnected)
357+
.await
358+
.unwrap();
359+
}
348360
HybridState::Completed => {
349361
self.hybrid_qr_code_data = None;
350362
self.tx_update.send(ViewUpdate::Completed).await.unwrap();
@@ -381,6 +393,7 @@ pub enum ViewUpdate {
381393

382394
HybridNeedsQrCode(String),
383395
HybridConnecting,
396+
HybridConnected,
384397
}
385398

386399
pub enum BackgroundEvent {
@@ -431,10 +444,9 @@ pub enum HybridState {
431444
/// BLE advert received, connecting to caBLE tunnel with shared secret.
432445
Connecting,
433446

434-
/* I don't think is necessary to signal.
435-
/// Connected to device via caBLE tunnel.
436-
Connected,
437-
*/
447+
/// Connected to device via caBLE tunnel.
448+
Connected,
449+
438450
/// Credential received over tunnel.
439451
Completed,
440452

@@ -449,6 +461,7 @@ impl From<crate::credential_service::hybrid::HybridState> for HybridState {
449461
HybridState::Started(qr_code)
450462
}
451463
crate::credential_service::hybrid::HybridState::Connecting => HybridState::Connecting,
464+
crate::credential_service::hybrid::HybridState::Connected => HybridState::Connected,
452465
crate::credential_service::hybrid::HybridState::Completed => HybridState::Completed,
453466
crate::credential_service::hybrid::HybridState::UserCancelled => {
454467
HybridState::UserCancelled

0 commit comments

Comments
 (0)