import '../../utils/json_utils.dart'; /// Preference rows embedded in a Plex metadata response when /// `includePreferences=1` is requested. class PlexMetadataPreferences { final Map values; const PlexMetadataPreferences._(this.values); static const empty = PlexMetadataPreferences._({}); factory PlexMetadataPreferences.fromMediaContainer(Map? container) { final metadata = firstFlexibleMap(container?['Metadata']); if (metadata == null) return empty; final preferences = firstFlexibleMap(metadata['Preferences']); final settings = flexibleList(preferences?['Setting']) ?? flexibleList(metadata['Setting']) ?? const []; final values = {}; for (final setting in settings) { if (setting is! Map) continue; final rawId = setting['id']; final id = rawId is String ? rawId.trim() : null; final value = _preferenceValue(setting['value']); if (id == null || id.isEmpty || value == null) continue; values[id] = value; } return values.isEmpty ? empty : PlexMetadataPreferences._(Map.unmodifiable(values)); } } String? _preferenceValue(Object? value) => switch (value) { final String value => value, final num value => value.toString(), final bool value => value ? '1' : '0', _ => null, };