import 'package:json_annotation/json_annotation.dart'; import '../utils/json_utils.dart'; import 'livetv_dvr.dart'; import 'media_subscription.dart'; part 'media_grabber_device.g.dart'; List _parseChannelMappings(Object? raw) { final list = flexibleList(raw) ?? const []; return [ for (final item in list) if (item is Map) ChannelMapping.fromJson(item), ]; } List _parseSettings(Object? raw) { final list = flexibleList(raw) ?? const []; return [ for (final item in list) if (item is Map) SubscriptionSetting.fromJson(item), ]; } @JsonSerializable(createToJson: false) class MediaGrabber { @JsonKey(defaultValue: '') final String identifier; final String? protocol; final String? title; const MediaGrabber({required this.identifier, this.protocol, this.title}); factory MediaGrabber.fromJson(Map json) => _$MediaGrabberFromJson(json); } /// Tuner/grabber device known to Plex Media Server. @JsonSerializable(createToJson: false) class MediaGrabberDevice { @JsonKey(defaultValue: '') final String key; @JsonKey(defaultValue: '') final String uuid; final String? uri; final String? protocol; final String? title; final String? make; final String? model; final String? modelNumber; final String? firmware; @JsonKey(fromJson: flexibleInt) final int? tuners; final String? sources; @JsonKey(fromJson: flexibleInt) final int? status; @JsonKey(fromJson: flexibleInt) final int? state; @JsonKey(fromJson: flexibleInt) final int? lastSeenAt; @JsonKey(name: 'ChannelMapping', fromJson: _parseChannelMappings) final List channelMappings; @JsonKey(name: 'Setting', fromJson: _parseSettings) final List settings; const MediaGrabberDevice({ required this.key, required this.uuid, this.uri, this.protocol, this.title, this.make, this.model, this.modelNumber, this.firmware, this.tuners, this.sources, this.status, this.state, this.lastSeenAt, this.channelMappings = const [], this.settings = const [], }); factory MediaGrabberDevice.fromJson(Map json) => _$MediaGrabberDeviceFromJson(json); } @JsonSerializable(createToJson: false) class MediaGrabberDeviceChannel { @JsonKey(readValue: readStringField, defaultValue: '') final String identifier; @JsonKey(readValue: readStringField) final String? key; @JsonKey(readValue: readStringField) final String? name; @JsonKey(fromJson: flexibleBool) final bool drm; @JsonKey(fromJson: flexibleBool) final bool hd; const MediaGrabberDeviceChannel({required this.identifier, this.key, this.name, this.drm = false, this.hd = false}); factory MediaGrabberDeviceChannel.fromJson(Map json) => _$MediaGrabberDeviceChannelFromJson(json); } class MediaGrabberChannelMapRequest { final List channelsEnabled; final Map channelMapping; final Map channelMappingByKey; const MediaGrabberChannelMapRequest({ this.channelsEnabled = const [], this.channelMapping = const {}, this.channelMappingByKey = const {}, }); }