feature: Video quality options (#234)

Co-authored-by: PartyDonut <PartyDonut@users.noreply.github.com>
This commit is contained in:
PartyDonut 2025-02-23 13:29:59 +01:00 committed by GitHub
parent 957ad6c991
commit 935d6fe176
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
25 changed files with 644 additions and 232 deletions

View file

@ -0,0 +1,39 @@
import 'package:connectivity_plus/connectivity_plus.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'connectivity_provider.g.dart';
enum ConnectionState {
offline,
mobile,
wifi,
ethernet;
bool get homeInternet => switch (this) {
ConnectionState.offline => false,
ConnectionState.mobile => false,
ConnectionState.wifi => true,
ConnectionState.ethernet => true,
};
}
@Riverpod(keepAlive: true)
class ConnectivityStatus extends _$ConnectivityStatus {
@override
ConnectionState build() {
Connectivity().onConnectivityChanged.listen(onStateChange);
return ConnectionState.offline;
}
void onStateChange(List<ConnectivityResult> connectivityResult) {
if (connectivityResult.contains(ConnectivityResult.ethernet)) {
state = ConnectionState.ethernet;
} else if (connectivityResult.contains(ConnectivityResult.wifi)) {
state = ConnectionState.wifi;
} else if (connectivityResult.contains(ConnectivityResult.mobile)) {
state = ConnectionState.mobile;
} else if (connectivityResult.contains(ConnectivityResult.none)) {
state = ConnectionState.offline;
}
}
}

View file

@ -0,0 +1,27 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'connectivity_provider.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$connectivityStatusHash() =>
r'2e9b645c78146ed25456e1286df83761588b8e27';
/// See also [ConnectivityStatus].
@ProviderFor(ConnectivityStatus)
final connectivityStatusProvider =
NotifierProvider<ConnectivityStatus, ConnectionState>.internal(
ConnectivityStatus.new,
name: r'connectivityStatusProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$connectivityStatusHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$ConnectivityStatus = Notifier<ConnectionState>;
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package

View file

@ -499,34 +499,21 @@ class JellyService {
Future<Response<PlaybackInfoResponse>> itemsItemIdPlaybackInfoPost({
required String? itemId,
int? maxStreamingBitrate,
int? startTimeTicks,
int? audioStreamIndex,
int? subtitleStreamIndex,
int? maxAudioChannels,
String? mediaSourceId,
String? liveStreamId,
bool? autoOpenLiveStream,
bool? enableDirectPlay,
bool? enableDirectStream,
bool? enableTranscoding,
bool? allowVideoStreamCopy,
bool? allowAudioStreamCopy,
required PlaybackInfoDto? body,
}) async =>
api.itemsItemIdPlaybackInfoPost(
itemId: itemId,
userId: account?.id,
enableDirectPlay: enableDirectPlay,
enableDirectStream: enableDirectStream,
enableTranscoding: enableTranscoding,
autoOpenLiveStream: autoOpenLiveStream,
maxStreamingBitrate: maxStreamingBitrate,
liveStreamId: liveStreamId,
startTimeTicks: startTimeTicks,
mediaSourceId: mediaSourceId,
audioStreamIndex: audioStreamIndex,
subtitleStreamIndex: subtitleStreamIndex,
enableDirectPlay: body?.enableDirectPlay,
enableDirectStream: body?.enableDirectStream,
enableTranscoding: body?.enableTranscoding,
autoOpenLiveStream: body?.autoOpenLiveStream,
maxStreamingBitrate: body?.maxStreamingBitrate,
liveStreamId: body?.liveStreamId,
startTimeTicks: body?.startTimeTicks,
mediaSourceId: body?.mediaSourceId,
audioStreamIndex: body?.audioStreamIndex,
subtitleStreamIndex: body?.subtitleStreamIndex,
body: body,
);