Skip to content

Commit a0d1f9c

Browse files
Don't show offer to reconnect on final attempt (#226)
1 parent a906cd5 commit a0d1f9c

File tree

5 files changed

+24
-7
lines changed

5 files changed

+24
-7
lines changed

src/script/microbit-interfacing/MicrobitBluetooth.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@ export class MicrobitBluetooth implements MicrobitConnection {
6464
private connecting = false;
6565
private isReconnect = false;
6666
private reconnectReadyPromise: Promise<void> | undefined;
67+
// Whether this is the final reconnection attempt.
68+
private finalAttempt = false;
6769

6870
private outputWriteQueue: {
6971
busy: boolean;
@@ -173,6 +175,7 @@ export class MicrobitBluetooth implements MicrobitConnection {
173175
await this.disconnectInternal(false);
174176
throw new Error('Failed to establish a connection!');
175177
} finally {
178+
this.finalAttempt = false;
176179
this.duringExplicitConnectDisconnect--;
177180
}
178181
}
@@ -204,14 +207,19 @@ export class MicrobitBluetooth implements MicrobitConnection {
204207
this.inUseAs.forEach(value =>
205208
stateOnDisconnected(
206209
value,
207-
userTriggered ? false : this.isReconnect ? 'autoReconnect' : 'connect',
210+
userTriggered || this.finalAttempt
211+
? false
212+
: this.isReconnect
213+
? 'autoReconnect'
214+
: 'connect',
208215
'bluetooth',
209216
),
210217
);
211218
}
212219
}
213220

214-
async reconnect(): Promise<void> {
221+
async reconnect(finalAttempt: boolean = false): Promise<void> {
222+
this.finalAttempt = finalAttempt;
215223
logMessage('Bluetooth reconnect');
216224
this.isReconnect = true;
217225
const as = Array.from(this.inUseAs);

src/script/microbit-interfacing/MicrobitConnection.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export enum DeviceRequestStates {
1616
interface MicrobitConnection {
1717
connect(...states: DeviceRequestStates[]): Promise<void>;
1818

19-
reconnect(): Promise<void>;
19+
reconnect(finalAttempt: boolean): Promise<void>;
2020

2121
disconnect(): Promise<void>;
2222
}

src/script/microbit-interfacing/MicrobitSerial.ts

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ export class MicrobitSerial implements MicrobitConnection {
3535
private connectionCheckIntervalId: ReturnType<typeof setInterval> | undefined;
3636
private lastReceivedMessageTimestamp: number | undefined;
3737
private isReconnect: boolean = false;
38+
// Whether this is the final reconnection attempt.
39+
private finalAttempt = false;
3840

3941
constructor(
4042
private usb: MicrobitUSB,
@@ -174,6 +176,7 @@ export class MicrobitSerial implements MicrobitConnection {
174176
await this.disconnectInternal(false, reconnectHelp);
175177
throw e;
176178
} finally {
179+
this.finalAttempt = false;
177180
this.isConnecting = false;
178181
}
179182
}
@@ -202,7 +205,11 @@ export class MicrobitSerial implements MicrobitConnection {
202205
await this.usb.stopSerial();
203206
stateOnDisconnected(
204207
DeviceRequestStates.INPUT,
205-
userDisconnect ? false : this.isReconnect ? 'autoReconnect' : 'connect',
208+
userDisconnect || this.finalAttempt
209+
? false
210+
: this.isReconnect
211+
? 'autoReconnect'
212+
: 'connect',
206213
reconnectHelp,
207214
);
208215
}
@@ -226,7 +233,8 @@ export class MicrobitSerial implements MicrobitConnection {
226233
}
227234
}
228235

229-
async reconnect(): Promise<void> {
236+
async reconnect(finalAttempt: boolean = false): Promise<void> {
237+
this.finalAttempt = finalAttempt;
230238
logMessage('Serial reconnect');
231239
this.isReconnect = true;
232240
await this.connect(DeviceRequestStates.INPUT);

src/script/microbit-interfacing/Microbits.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,9 @@ class Microbits {
9191

9292
public static async reconnect(
9393
requestState: DeviceRequestStates.INPUT | DeviceRequestStates.OUTPUT,
94+
finalAttempt: boolean = false,
9495
) {
95-
return this.getMicrobit(requestState)?.reconnect();
96+
return this.getMicrobit(requestState)?.reconnect(finalAttempt);
9697
}
9798

9899
public static async disconnect(

src/script/utils/reconnect.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ export const reconnect = async (finalAttempt: boolean = false) => {
3434
}
3535
try {
3636
for (const inUseAs of reconnectState.inUseAs.values()) {
37-
await Microbits.reconnect(inUseAs);
37+
await Microbits.reconnect(inUseAs, finalAttempt);
3838
}
3939
connectionDialogState.update(s => {
4040
s.connectionState = ConnectDialogStates.NONE;

0 commit comments

Comments
 (0)