fix: remove DVR recording features (plex pass)

close #530
This commit is contained in:
edde746
2026-02-24 23:13:38 +01:00
parent 238391b886
commit af41d937c3
25 changed files with 20 additions and 1206 deletions
-114
View File
@@ -9,8 +9,6 @@ import '../models/livetv_channel.dart';
import '../models/livetv_dvr.dart';
import '../models/livetv_hub_result.dart';
import '../models/livetv_program.dart';
import '../models/livetv_scheduled_recording.dart';
import '../models/livetv_subscription.dart';
import '../models/plex_config.dart';
import '../models/play_queue_response.dart';
import '../models/plex_file_info.dart';
@@ -2408,11 +2406,6 @@ class PlexClient {
}
}
/// Reload the DVR guide data
Future<bool> reloadGuide(String dvrKey) {
return _wrapBoolApiCall(() => _dio.post('/livetv/dvrs/$dvrKey/reloadGuide'), 'Failed to reload guide');
}
/// Get active live TV sessions
Future<List<PlexMetadata>> getLiveTvSessions() {
return _wrapListApiCall<PlexMetadata>(
@@ -2422,113 +2415,6 @@ class PlexClient {
);
}
/// Get all DVR recording subscriptions
Future<List<LiveTvSubscription>> getSubscriptions() async {
return _wrapListApiCall<LiveTvSubscription>(() => _dio.get('/media/subscriptions'), (response) {
final container = _getMediaContainer(response);
if (container != null && container['MediaSubscription'] != null) {
return (container['MediaSubscription'] as List).map((json) {
final sub = LiveTvSubscription.fromJson(json as Map<String, dynamic>);
return LiveTvSubscription(
key: sub.key,
ratingKey: sub.ratingKey,
guid: sub.guid,
title: sub.title,
summary: sub.summary,
type: sub.type,
thumb: sub.thumb,
art: sub.art,
targetLibrarySectionID: sub.targetLibrarySectionID,
targetSectionID: sub.targetSectionID,
createdAt: sub.createdAt,
settings: sub.settings,
serverId: serverId,
);
}).toList();
}
return [];
}, 'Failed to get subscriptions');
}
/// Create a DVR recording subscription
Future<LiveTvSubscription?> createSubscription({
required String type,
required int targetSectionID,
required int targetLibrarySectionID,
Map<String, String>? prefs,
String? hint,
String? uri,
}) async {
try {
final queryParams = <String, dynamic>{
'type': type,
'targetSectionID': targetSectionID,
'targetLibrarySectionID': targetLibrarySectionID,
};
if (hint != null) queryParams['hint'] = hint;
if (uri != null) queryParams['uri'] = uri;
if (prefs != null) {
for (final entry in prefs.entries) {
queryParams['prefs[${entry.key}]'] = entry.value;
}
}
final response = await _dio.post('/media/subscriptions', queryParameters: queryParams);
final container = _getMediaContainer(response);
if (container != null && container['MediaSubscription'] != null) {
final subs = container['MediaSubscription'] as List;
if (subs.isNotEmpty) {
return LiveTvSubscription.fromJson(subs.first as Map<String, dynamic>);
}
}
return null;
} catch (e) {
appLogger.e('Failed to create subscription', error: e);
return null;
}
}
/// Delete a DVR recording subscription
Future<bool> deleteSubscription(String subscriptionId) {
return _wrapBoolApiCall(() => _dio.delete('/media/subscriptions/$subscriptionId'), 'Failed to delete subscription');
}
/// Edit a DVR recording subscription's preferences
Future<bool> editSubscription(String subscriptionId, Map<String, String> prefs) {
final queryParams = <String, dynamic>{};
for (final entry in prefs.entries) {
queryParams['prefs[${entry.key}]'] = entry.value;
}
return _wrapBoolApiCall(
() => _dio.put('/media/subscriptions/$subscriptionId', queryParameters: queryParams),
'Failed to edit subscription',
);
}
/// Get scheduled DVR recordings
Future<List<ScheduledRecording>> getScheduledRecordings() async {
return _wrapListApiCall<ScheduledRecording>(() => _dio.get('/media/subscriptions/scheduled'), (response) {
final container = _getMediaContainer(response);
if (container != null && container['Metadata'] != null) {
return (container['Metadata'] as List)
.map((json) => ScheduledRecording.fromJson(json as Map<String, dynamic>))
.toList();
}
return [];
}, 'Failed to get scheduled recordings');
}
/// Get subscription template for a program (used for recording setup)
Future<Map<String, dynamic>?> getSubscriptionTemplate(String guid) async {
try {
final response = await _dio.get('/media/subscriptions/template', queryParameters: {'guid': guid});
return _getMediaContainer(response);
} catch (e) {
appLogger.e('Failed to get subscription template', error: e);
return null;
}
}
Future<void> _handleEndpointSwitch(String newBaseUrl) async {
if (config.baseUrl == newBaseUrl) {
return;