From 65a152cada15c5d07a6beac45041e65b99cb4a11 Mon Sep 17 00:00:00 2001 From: zarzet Date: Wed, 4 Feb 2026 17:43:43 +0700 Subject: [PATCH] fix: persist metadata and download provider priority across app restarts - Save priority order to SharedPreferences when set - Load from SharedPreferences on app start, sync to Go backend - Fixes issue where custom order reverted to default after restart --- CHANGELOG.md | 9 +++++ lib/providers/extension_provider.dart | 55 +++++++++++++++++++++++++-- 2 files changed, 60 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 64fa40b5..ca83bf5f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,14 @@ # Changelog +## [3.4.1] - 2026-02-04 + +### Fixed + +- Metadata Priority order now persists after app restart +- Download Provider Priority order now persists after app restart + +--- + ## [3.4.0] - 2026-02-03 ### Highlights diff --git a/lib/providers/extension_provider.dart b/lib/providers/extension_provider.dart index 7ee38ca3..03a8e13b 100644 --- a/lib/providers/extension_provider.dart +++ b/lib/providers/extension_provider.dart @@ -1,10 +1,15 @@ +import 'dart:convert'; import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:shared_preferences/shared_preferences.dart'; import 'package:spotiflac_android/services/platform_bridge.dart'; import 'package:spotiflac_android/utils/logger.dart'; import 'package:spotiflac_android/providers/settings_provider.dart'; final _log = AppLogger('ExtensionProvider'); +const _metadataProviderPriorityKey = 'metadata_provider_priority'; +const _providerPriorityKey = 'provider_priority'; + class Extension { final String id; final String name; @@ -622,7 +627,23 @@ class ExtensionNotifier extends Notifier { Future loadProviderPriority() async { try { - final priority = await PlatformBridge.getProviderPriority(); + // Load from SharedPreferences first (persisted) + final prefs = await SharedPreferences.getInstance(); + final savedJson = prefs.getString(_providerPriorityKey); + + List priority; + if (savedJson != null) { + final saved = jsonDecode(savedJson) as List; + priority = saved.map((e) => e as String).toList(); + _log.d('Loaded provider priority from prefs: $priority'); + // Sync to Go backend + await PlatformBridge.setProviderPriority(priority); + } else { + // Fallback to Go backend default + priority = await PlatformBridge.getProviderPriority(); + _log.d('Using default provider priority: $priority'); + } + state = state.copyWith(providerPriority: priority); } catch (e) { _log.e('Failed to load provider priority: $e'); @@ -632,9 +653,14 @@ class ExtensionNotifier extends Notifier { Future setProviderPriority(List priority) async { try { + // Save to SharedPreferences for persistence + final prefs = await SharedPreferences.getInstance(); + await prefs.setString(_providerPriorityKey, jsonEncode(priority)); + + // Sync to Go backend await PlatformBridge.setProviderPriority(priority); state = state.copyWith(providerPriority: priority); - _log.d('Updated provider priority: $priority'); + _log.d('Saved provider priority: $priority'); } catch (e) { _log.e('Failed to set provider priority: $e'); state = state.copyWith(error: e.toString()); @@ -643,7 +669,23 @@ class ExtensionNotifier extends Notifier { Future loadMetadataProviderPriority() async { try { - final priority = await PlatformBridge.getMetadataProviderPriority(); + // Load from SharedPreferences first (persisted) + final prefs = await SharedPreferences.getInstance(); + final savedJson = prefs.getString(_metadataProviderPriorityKey); + + List priority; + if (savedJson != null) { + final saved = jsonDecode(savedJson) as List; + priority = saved.map((e) => e as String).toList(); + _log.d('Loaded metadata provider priority from prefs: $priority'); + // Sync to Go backend + await PlatformBridge.setMetadataProviderPriority(priority); + } else { + // Fallback to Go backend default + priority = await PlatformBridge.getMetadataProviderPriority(); + _log.d('Using default metadata provider priority: $priority'); + } + state = state.copyWith(metadataProviderPriority: priority); } catch (e) { _log.e('Failed to load metadata provider priority: $e'); @@ -652,9 +694,14 @@ class ExtensionNotifier extends Notifier { Future setMetadataProviderPriority(List priority) async { try { + // Save to SharedPreferences for persistence + final prefs = await SharedPreferences.getInstance(); + await prefs.setString(_metadataProviderPriorityKey, jsonEncode(priority)); + + // Sync to Go backend await PlatformBridge.setMetadataProviderPriority(priority); state = state.copyWith(metadataProviderPriority: priority); - _log.d('Updated metadata provider priority: $priority'); + _log.d('Saved metadata provider priority: $priority'); } catch (e) { _log.e('Failed to set metadata provider priority: $e'); state = state.copyWith(error: e.toString());