From f695f7b192a701fe00a0aced1398eafdfe4951d9 Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Mon, 27 Jul 2026 17:44:52 +0200 Subject: [PATCH] fix(settings): export string-list preferences after a cold start Match the tolerant list predicate the import path already uses. The platform preference cache returns List after a restart, so the exact List pattern silently dropped tracker library filter ids and a restored profile resumed scrobbling libraries the user had excluded. --- lib/services/settings_export_service.dart | 5 ++++- .../settings_export_service_test.dart | 19 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) 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', () {