Skip to content

Commit

Permalink
feat(flutter_discord_rpc): retry on broken pipe
Browse files Browse the repository at this point in the history
  • Loading branch information
KRTirtho committed Jul 14, 2024
1 parent ea12cdf commit 9c9ff18
Showing 1 changed file with 21 additions and 4 deletions.
25 changes: 21 additions & 4 deletions packages/flutter_discord_rpc/lib/src/flutter_discord_rpc_base.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'dart:async';

import 'package:flutter_discord_rpc/src/ffi.dart';
import 'package:flutter_discord_rpc/src/bridge_generated.dart' as bridge;
import 'package:flutter_rust_bridge/flutter_rust_bridge.dart';

final class FlutterDiscordRPC {
static FlutterDiscordRPC? _instance;
Expand Down Expand Up @@ -43,7 +44,6 @@ final class FlutterDiscordRPC {
_onConnected(true);
_timer?.cancel();
} catch (e) {
_onConnected(false);
if (autoRetry) {
_timer = Timer.periodic(retryDelay, (timer) async {
try {
Expand All @@ -56,6 +56,7 @@ final class FlutterDiscordRPC {
});
return;
}
_onConnected(false);
rethrow;
}
}
Expand All @@ -76,13 +77,29 @@ final class FlutterDiscordRPC {
}

Future<void> setActivity({required bridge.RPCActivity activity}) async {
if (!_isConnected) return;
await _lib.discordSetActivity(activity: activity);
try {
await _lib.discordSetActivity(activity: activity);
} on FrbAnyhowException catch (e) {
if (e.anyhow.contains("BrokenPipe")) {
await connect(autoRetry: true);
await _lib.discordSetActivity(activity: activity);
} else {
rethrow;
}
}
}

Future<void> clearActivity() async {
if (!_isConnected) return;
await _lib.discordClearActivity();
try {
await _lib.discordClearActivity();
} catch (e) {
if (e is FrbAnyhowException && e.anyhow.contains("BrokenPipe")) {
await disconnect();
return;
}
rethrow;
}
}

Future<void> dispose() async {
Expand Down

0 comments on commit 9c9ff18

Please sign in to comment.