Fladder/lib/providers/settings/pigeon_player_settings_provider.dart

85 lines
3.7 KiB
Dart

import 'dart:io';
import 'package:flutter/foundation.dart';
import 'package:flutter/services.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:fladder/models/items/media_segments_model.dart';
import 'package:fladder/models/settings/video_player_settings.dart';
import 'package:fladder/providers/settings/client_settings_provider.dart';
import 'package:fladder/providers/settings/video_player_settings_provider.dart';
import 'package:fladder/providers/user_provider.dart';
import 'package:fladder/src/player_settings_helper.g.dart' as pigeon;
final pigeonPlayerSettingsSyncProvider = Provider<void>((ref) {
void sendSettings() {
final userData = ref.read(userProvider);
final color = ref.read(
clientSettingsProvider.select(
(value) => value.themeColor?.color.toARGB32(),
),
);
final value = ref.read(videoPlayerSettingsProvider);
if (!kIsWeb && Platform.isAndroid) {
pigeon.PlayerSettingsPigeon().sendPlayerSettings(
pigeon.PlayerSettings(
enableTunneling: value.enableTunneling,
skipTypes: value.segmentSkipSettings.map(
(key, value) => MapEntry(
switch (key) {
MediaSegmentType.unknown => pigeon.SegmentType.intro,
MediaSegmentType.commercial => pigeon.SegmentType.commercial,
MediaSegmentType.preview => pigeon.SegmentType.preview,
MediaSegmentType.recap => pigeon.SegmentType.recap,
MediaSegmentType.outro => pigeon.SegmentType.outro,
MediaSegmentType.intro => pigeon.SegmentType.intro,
},
switch (value) {
SegmentSkip.none => pigeon.SegmentSkip.none,
SegmentSkip.askToSkip => pigeon.SegmentSkip.ask,
SegmentSkip.skip => pigeon.SegmentSkip.skip,
},
),
),
themeColor: color,
autoNextType: switch (value.nextVideoType) {
AutoNextType.off => pigeon.AutoNextType.off,
AutoNextType.static => pigeon.AutoNextType.static,
AutoNextType.smart => pigeon.AutoNextType.smart,
},
skipBackward: (userData?.userSettings?.skipBackDuration ?? const Duration(seconds: 15)).inMilliseconds,
skipForward: (userData?.userSettings?.skipForwardDuration ?? const Duration(seconds: 30)).inMilliseconds,
fillScreen: value.fillScreen,
videoFit: switch (value.videoFit) {
BoxFit.fill => pigeon.VideoPlayerFit.fill,
BoxFit.contain => pigeon.VideoPlayerFit.contain,
BoxFit.cover => pigeon.VideoPlayerFit.cover,
BoxFit.fitWidth => pigeon.VideoPlayerFit.fitWidth,
BoxFit.fitHeight => pigeon.VideoPlayerFit.fitHeight,
BoxFit.none => pigeon.VideoPlayerFit.none,
BoxFit.scaleDown => pigeon.VideoPlayerFit.scaleDown,
},
acceptedOrientations: (value.allowedOrientations?.toList() ?? DeviceOrientation.values)
.map(
(e) => switch (e) {
DeviceOrientation.portraitUp => pigeon.PlayerOrientations.portraitUp,
DeviceOrientation.portraitDown => pigeon.PlayerOrientations.portraitDown,
DeviceOrientation.landscapeLeft => pigeon.PlayerOrientations.landScapeLeft,
DeviceOrientation.landscapeRight => pigeon.PlayerOrientations.landScapeRight,
},
)
.toList(),
),
);
}
}
ref.listen(userProvider, (_, __) => sendSettings());
ref.listen(clientSettingsProvider, (_, __) => sendSettings());
ref.listen(videoPlayerSettingsProvider, (_, __) => sendSettings());
sendSettings();
});