diff --git a/lib/services/settings_export_service.dart b/lib/services/settings_export_service.dart index 531f38aa..dc298c7a 100644 --- a/lib/services/settings_export_service.dart +++ b/lib/services/settings_export_service.dart @@ -195,7 +195,10 @@ class SettingsExportService { _typeInt when value is int => {'type': _typeInt, 'value': value}, _typeDouble when value is double => {'type': _typeDouble, 'value': value}, _typeString when value is String => {'type': _typeString, 'value': value}, - _typeStringList when value is List => {'type': _typeStringList, 'value': value}, + _typeStringList when _isValidValue(_typeStringList, value) => { + 'type': _typeStringList, + 'value': (value! as List).cast().toList(), + }, _ => null, }; } diff --git a/test/services/settings_export_service_test.dart b/test/services/settings_export_service_test.dart index 7d8a4ee6..d5477869 100644 --- a/test/services/settings_export_service_test.dart +++ b/test/services/settings_export_service_test.dart @@ -178,6 +178,25 @@ void main() { expect(exported.keys.where((key) => key.startsWith('tvos_db_recovery_')), isEmpty); expect(encoded, isNot(contains(canary))); }); + test('exports cold-start string lists while rejecting lists with non-string elements', () async { + resetSharedPreferencesForTest( + initialAsync: { + 'tracker_library_filter_mode_trakt': 'blacklist', + 'tracker_library_filter_ids_trakt': ['srv-1:lib-a', 'srv-1:lib-b'], + 'tracker_library_filter_ids_simkl': ['ok', 7], + }, + ); + final prefs = await BaseSharedPreferencesService.sharedCache(); + + final exported = + SettingsExportService.buildExportMap(prefs, currentUserUuid: 'alice')['prefs'] as Map; + + expect(exported['tracker_library_filter_ids_trakt'], { + 'type': 'stringList', + 'value': ['srv-1:lib-a', 'srv-1:lib-b'], + }); + expect(exported, isNot(contains('tracker_library_filter_ids_simkl'))); + }); }); group('transactional import', () {