fix: persist extension enabled state and clear search provider when disabled

- Save enabled state to settings store when extension is enabled/disabled
- Restore enabled state from settings store when extension is loaded
- Clear searchProvider setting when the extension is disabled
- Update search hint to check if extension is still enabled
This commit is contained in:
zarzet
2026-01-12 01:56:16 +07:00
parent 3dbd131e49
commit 93b4047143
3 changed files with 34 additions and 3 deletions
+16
View File
@@ -369,6 +369,13 @@ func (m *ExtensionManager) SetExtensionEnabled(extensionID string, enabled bool)
ext.Enabled = enabled
GoLog("[Extension] %s %s\n", extensionID, map[bool]string{true: "enabled", false: "disabled"}[enabled])
// Persist enabled state to settings store
store := GetExtensionSettingsStore()
if err := store.Set(extensionID, "_enabled", enabled); err != nil {
GoLog("[Extension] Failed to persist enabled state for %s: %v\n", extensionID, err)
}
return nil
}
@@ -457,6 +464,15 @@ func (m *ExtensionManager) loadExtensionFromDirectory(dirPath string) (*LoadedEx
SourceDir: dirPath,
}
// Restore enabled state from settings store
store := GetExtensionSettingsStore()
if enabledVal, err := store.Get(manifest.Name, "_enabled"); err == nil {
if enabled, ok := enabledVal.(bool); ok {
ext.Enabled = enabled
GoLog("[Extension] Restored enabled state for %s: %v\n", manifest.Name, enabled)
}
}
// Initialize Goja VM
if err := m.initializeVM(ext); err != nil {
ext.Error = err.Error()
+10
View File
@@ -1,6 +1,7 @@
import 'package:flutter_riverpod/flutter_riverpod.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');
@@ -528,6 +529,15 @@ class ExtensionNotifier extends Notifier<ExtensionState> {
}).toList();
state = state.copyWith(extensions: extensions);
// If disabling an extension that is the current search provider, clear it
if (!enabled) {
final settings = ref.read(settingsProvider);
if (settings.searchProvider == extensionId) {
ref.read(settingsProvider.notifier).setSearchProvider(null);
_log.d('Cleared search provider because extension $extensionId was disabled');
}
}
} catch (e) {
_log.e('Failed to set extension enabled: $e');
state = state.copyWith(error: e.toString());
+8 -3
View File
@@ -779,10 +779,15 @@ class _HomeTabState extends ConsumerState<HomeTab> with AutomaticKeepAliveClient
if (searchProvider != null && searchProvider.isNotEmpty) {
final extState = ref.read(extensionProvider);
final ext = extState.extensions.where((e) => e.id == searchProvider).firstOrNull;
if (ext?.searchBehavior?.placeholder != null) {
return ext!.searchBehavior!.placeholder!;
// Only show extension placeholder if extension exists AND is enabled
if (ext != null && ext.enabled) {
if (ext.searchBehavior?.placeholder != null) {
return ext.searchBehavior!.placeholder!;
}
return 'Search with ${ext.displayName}...';
}
return 'Search with ${ext?.displayName ?? 'extension'}...';
// Extension not found or disabled - clear the search provider setting
// and return default hint
}
return 'Paste Spotify URL or search...';
}