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<Object?> after a restart, so the exact
List<String> pattern silently dropped tracker library filter ids and a
restored profile resumed scrobbling libraries the user had excluded.
This commit is contained in:
edde746
2026-07-27 17:44:52 +02:00
parent c45113fefe
commit f695f7b192
2 changed files with 23 additions and 1 deletions
+4 -1
View File
@@ -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<String> => {'type': _typeStringList, 'value': value},
_typeStringList when _isValidValue(_typeStringList, value) => {
'type': _typeStringList,
'value': (value! as List).cast<String>().toList(),
},
_ => null,
};
}
@@ -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': <Object?>['srv-1:lib-a', 'srv-1:lib-b'],
'tracker_library_filter_ids_simkl': <Object?>['ok', 7],
},
);
final prefs = await BaseSharedPreferencesService.sharedCache();
final exported =
SettingsExportService.buildExportMap(prefs, currentUserUuid: 'alice')['prefs'] as Map<String, dynamic>;
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', () {