@@ -1,3 +1,5 @@
|
||||
import 'dart:async';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
import 'package:provider/provider.dart';
|
||||
@@ -6,6 +8,7 @@ import '../mpv/mpv.dart';
|
||||
import '../models/plex_metadata.dart';
|
||||
import '../models/plex_video_playback_data.dart';
|
||||
import '../providers/download_provider.dart';
|
||||
import '../providers/multi_server_provider.dart';
|
||||
import '../screens/video_player_screen.dart';
|
||||
import '../services/external_player_service.dart';
|
||||
import '../services/settings_service.dart';
|
||||
@@ -14,6 +17,15 @@ import 'app_logger.dart';
|
||||
|
||||
const String kVideoPlayerRouteName = '/video_player';
|
||||
|
||||
class WatchTogetherPlaybackNavigationException implements Exception {
|
||||
final String message;
|
||||
|
||||
const WatchTogetherPlaybackNavigationException(this.message);
|
||||
|
||||
@override
|
||||
String toString() => message;
|
||||
}
|
||||
|
||||
/// Navigates to the VideoPlayerScreen with instant transitions to prevent white flash.
|
||||
///
|
||||
/// This utility function provides a consistent way to navigate to the video player
|
||||
@@ -175,3 +187,28 @@ Future<bool?> navigateToVideoPlayerWithRefresh(
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/// Resolves the current Watch Together media and opens the video player.
|
||||
Future<void> navigateToWatchTogetherPlayback(
|
||||
BuildContext context, {
|
||||
required String ratingKey,
|
||||
required String serverId,
|
||||
VoidCallback? onBeforeNavigate,
|
||||
}) async {
|
||||
final multiServer = context.read<MultiServerProvider>();
|
||||
final client = multiServer.getClientForServer(serverId);
|
||||
|
||||
if (client == null) {
|
||||
throw const WatchTogetherPlaybackNavigationException('Watch Together server is unavailable');
|
||||
}
|
||||
|
||||
final metadata = await client.getMetadataWithImages(ratingKey);
|
||||
if (metadata == null) {
|
||||
throw const WatchTogetherPlaybackNavigationException('Current Watch Together media is unavailable');
|
||||
}
|
||||
|
||||
if (!context.mounted) return;
|
||||
|
||||
onBeforeNavigate?.call();
|
||||
unawaited(navigateToVideoPlayer(context, metadata: metadata));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user