From ce8c80dad04bf2ac0feb8c7fc8f6136801fe0aad Mon Sep 17 00:00:00 2001 From: Alex Date: Sat, 21 Jun 2025 21:56:49 -0500 Subject: [PATCH] refactor(mobile): cast_destination.interface.dart (#19346) --- .../cast_destination_service.interface.dart | 27 ------------------- mobile/lib/providers/cast.provider.dart | 3 +-- mobile/lib/services/gcast.service.dart | 22 ++++----------- 3 files changed, 6 insertions(+), 46 deletions(-) delete mode 100644 mobile/lib/interfaces/cast_destination_service.interface.dart diff --git a/mobile/lib/interfaces/cast_destination_service.interface.dart b/mobile/lib/interfaces/cast_destination_service.interface.dart deleted file mode 100644 index add8ad7c51..0000000000 --- a/mobile/lib/interfaces/cast_destination_service.interface.dart +++ /dev/null @@ -1,27 +0,0 @@ -import 'package:immich_mobile/entities/asset.entity.dart'; -import 'package:immich_mobile/models/cast/cast_manager_state.dart'; - -abstract interface class ICastDestinationService { - Future initialize(); - CastDestinationType getType(); - - void Function(bool)? onConnectionState; - - void Function(Duration)? onCurrentTime; - void Function(Duration)? onDuration; - - void Function(String)? onReceiverName; - void Function(CastState)? onCastState; - - Future connect(dynamic device); - - void loadMedia(Asset asset, bool reload); - - void play(); - void pause(); - void seekTo(Duration position); - void stop(); - Future disconnect(); - - Future> getDevices(); -} diff --git a/mobile/lib/providers/cast.provider.dart b/mobile/lib/providers/cast.provider.dart index c80789d2e0..f70bdad9dc 100644 --- a/mobile/lib/providers/cast.provider.dart +++ b/mobile/lib/providers/cast.provider.dart @@ -1,6 +1,5 @@ import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/entities/asset.entity.dart'; -import 'package:immich_mobile/interfaces/cast_destination_service.interface.dart'; import 'package:immich_mobile/models/cast/cast_manager_state.dart'; import 'package:immich_mobile/services/gcast.service.dart'; @@ -10,7 +9,7 @@ final castProvider = StateNotifierProvider( class CastNotifier extends StateNotifier { // more cast providers can be added here (ie Fcast) - final ICastDestinationService _gCastService; + final GCastService _gCastService; List<(String, CastDestinationType, dynamic)> discovered = List.empty(); diff --git a/mobile/lib/services/gcast.service.dart b/mobile/lib/services/gcast.service.dart index 60c94c712c..5a8c27b0db 100644 --- a/mobile/lib/services/gcast.service.dart +++ b/mobile/lib/services/gcast.service.dart @@ -3,7 +3,6 @@ import 'dart:async'; import 'package:cast/session.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/entities/asset.entity.dart'; -import 'package:immich_mobile/interfaces/cast_destination_service.interface.dart'; import 'package:immich_mobile/models/cast/cast_manager_state.dart'; import 'package:immich_mobile/models/sessions/session_create_response.model.dart'; import 'package:immich_mobile/repositories/asset_api.repository.dart'; @@ -21,7 +20,7 @@ final gCastServiceProvider = Provider( ), ); -class GCastService implements ICastDestinationService { +class GCastService { final GCastRepository _gCastRepository; final SessionsAPIRepository _sessionsApiService; final AssetApiRepository _assetApiRepository; @@ -32,15 +31,14 @@ class GCastService implements ICastDestinationService { int? _sessionId; Timer? _mediaStatusPollingTimer; - @override void Function(bool)? onConnectionState; - @override + void Function(Duration)? onCurrentTime; - @override + void Function(Duration)? onDuration; - @override + void Function(String)? onReceiverName; - @override + void Function(CastState)? onCastState; GCastService( @@ -120,25 +118,21 @@ class GCastService implements ICastDestinationService { } } - @override Future connect(dynamic device) async { await _gCastRepository.connect(device); onReceiverName?.call(device.extras["fn"] ?? "Google Cast"); } - @override CastDestinationType getType() { return CastDestinationType.googleCast; } - @override Future initialize() async { // there is nothing blocking us from using Google Cast that we can check for return true; } - @override Future disconnect() async { onReceiverName?.call(""); currentAssetId = null; @@ -162,7 +156,6 @@ class GCastService implements ICastDestinationService { return bufferedExpiration.isAfter(DateTime.now()); } - @override void loadMedia(Asset asset, bool reload) async { if (!isConnected) { return; @@ -234,7 +227,6 @@ class GCastService implements ICastDestinationService { } } - @override void play() { _gCastRepository.sendMessage(CastSession.kNamespaceMedia, { "type": "PLAY", @@ -242,7 +234,6 @@ class GCastService implements ICastDestinationService { }); } - @override void pause() { _gCastRepository.sendMessage(CastSession.kNamespaceMedia, { "type": "PAUSE", @@ -250,7 +241,6 @@ class GCastService implements ICastDestinationService { }); } - @override void seekTo(Duration position) { _gCastRepository.sendMessage(CastSession.kNamespaceMedia, { "type": "SEEK", @@ -259,7 +249,6 @@ class GCastService implements ICastDestinationService { }); } - @override void stop() { _gCastRepository.sendMessage(CastSession.kNamespaceMedia, { "type": "STOP", @@ -273,7 +262,6 @@ class GCastService implements ICastDestinationService { // 0x01 is display capability bitmask bool isDisplay(int ca) => (ca & 0x01) != 0; - @override Future> getDevices() async { final dests = await _gCastRepository.listDestinations();