fix: ignore the device itself from broadcast list

This commit is contained in:
Kingkor Roy Tirtho 2024-04-04 21:25:55 +06:00
parent a4854fca53
commit 6d4f7e9a85
4 changed files with 23 additions and 2 deletions

View File

@ -183,8 +183,8 @@ class SpotubeState extends ConsumerState<Spotube> {
ref.watch(paletteProvider.select((s) => s?.dominantColor?.color)); ref.watch(paletteProvider.select((s) => s?.dominantColor?.color));
final router = ref.watch(routerProvider); final router = ref.watch(routerProvider);
ref.read(connectServerProvider); ref.listen(connectServerProvider, (_, __) {});
ref.read(connectClientsProvider); ref.listen(connectClientsProvider, (_, __) {});
useDisableBatteryOptimizations(); useDisableBatteryOptimizations();
useInitSysTray(ref); useInitSysTray(ref);

View File

@ -1,5 +1,6 @@
import 'package:bonsoir/bonsoir.dart'; import 'package:bonsoir/bonsoir.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:spotube/services/device_info/device_info.dart';
class ConnectClientsState { class ConnectClientsState {
final List<BonsoirService> services; final List<BonsoirService> services;
@ -31,9 +32,15 @@ class ConnectClientsNotifier extends AsyncNotifier<ConnectClientsState> {
@override @override
build() async { build() async {
final discovery = BonsoirDiscovery(type: '_spotube._tcp'); final discovery = BonsoirDiscovery(type: '_spotube._tcp');
final deviceId = await DeviceInfoService.instance.deviceId();
await discovery.ready; await discovery.ready;
final subscription = discovery.eventStream?.listen((event) { final subscription = discovery.eventStream?.listen((event) {
// ignore device itself
if (event.service?.attributes["deviceId"] == deviceId) {
return;
}
switch (event.type) { switch (event.type) {
case BonsoirDiscoveryEventType.discoveryServiceFound: case BonsoirDiscoveryEventType.discoveryServiceFound:
state = AsyncData(state.value!.copyWith( state = AsyncData(state.value!.copyWith(

View File

@ -239,6 +239,7 @@ final connectServerProvider = FutureProvider((ref) async {
port: port, port: port,
attributes: { attributes: {
"id": PrimitiveUtils.uuid.v4(), "id": PrimitiveUtils.uuid.v4(),
"deviceId": await DeviceInfoService.instance.deviceId(),
}, },
); );

View File

@ -6,6 +6,19 @@ class DeviceInfoService {
static final instance = DeviceInfoService._(); static final instance = DeviceInfoService._();
Future<String> deviceId() async {
final info = await deviceInfo.deviceInfo;
return switch (info) {
AndroidDeviceInfo() => info.id,
IosDeviceInfo() => info.identifierForVendor ?? info.model,
MacOsDeviceInfo() => info.systemGUID ?? info.model,
WindowsDeviceInfo() => info.deviceId,
LinuxDeviceInfo() => info.machineId ?? info.id,
_ => 'Unknown',
};
}
Future<String> computerName() async { Future<String> computerName() async {
final info = await deviceInfo.deviceInfo; final info = await deviceInfo.deviceInfo;