From a686d8d6a851c0404b9e8f5a0077fc46232ec1ab Mon Sep 17 00:00:00 2001 From: cogwheel0 <172976095+cogwheel0@users.noreply.github.com> Date: Thu, 28 Aug 2025 19:17:05 +0530 Subject: [PATCH] fix: regressions --- lib/core/providers/app_providers.dart | 53 +++++++++++++++++++ lib/main.dart | 3 ++ lib/shared/theme/app_theme.dart | 9 ++++ .../widgets/improved_loading_states.dart | 8 +++ lib/shared/widgets/loading_states.dart | 8 +++ lib/shared/widgets/skeleton_loader.dart | 9 ++++ 6 files changed, 90 insertions(+) diff --git a/lib/core/providers/app_providers.dart b/lib/core/providers/app_providers.dart index b65f6db..1ca0988 100644 --- a/lib/core/providers/app_providers.dart +++ b/lib/core/providers/app_providers.dart @@ -299,6 +299,59 @@ final _settingsWatcherProvider = Provider((ref) { }); }); +// Auto-apply default model from settings when it changes (and not manually overridden) +final defaultModelAutoSelectionProvider = Provider((ref) { + ref.listen(appSettingsProvider, (previous, next) { + // Only react when default model value changes + if (previous?.defaultModel == next.defaultModel) return; + + // Do not override manual selections + if (ref.read(isManualModelSelectionProvider)) return; + + final desired = next.defaultModel; + if (desired == null || desired.isEmpty) return; + + // Resolve the desired model against available models + Future(() async { + try { + // Prefer already-loaded models to avoid unnecessary fetches + List models; + final modelsAsync = ref.read(modelsProvider); + if (modelsAsync.hasValue) { + models = modelsAsync.value!; + } else { + models = await ref.read(modelsProvider.future); + } + Model? selected; + try { + selected = models.firstWhere( + (model) => + model.id == desired || + model.name == desired || + model.id.contains(desired) || + model.name.contains(desired), + ); + } catch (_) {} + + // Fallback: keep current selection or pick first available + selected ??= ref.read(selectedModelProvider) ?? + (models.isNotEmpty ? models.first : null); + + if (selected != null) { + ref.read(selectedModelProvider.notifier).state = selected; + foundation.debugPrint( + 'DEBUG: Auto-applied default model from settings: ${selected.name}', + ); + } + } catch (e) { + foundation.debugPrint( + 'DEBUG: defaultModel auto-selection listener failed: $e', + ); + } + }); + }); +}); + // Cache timestamp for conversations to prevent rapid re-fetches final _conversationsCacheTimestamp = StateProvider((ref) => null); diff --git a/lib/main.dart b/lib/main.dart index ea179b8..37e1675 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -68,6 +68,9 @@ class _ConduitAppState extends ConsumerState { // Ensure API service auth integration is active ref.read(authApiIntegrationProvider); + // Initialize auto-selection listener for default model changes in settings + ref.read(defaultModelAutoSelectionProvider); + // Initialize OS share receiver so users can share text/files to Conduit ref.read(shareReceiverInitializerProvider); } diff --git a/lib/shared/theme/app_theme.dart b/lib/shared/theme/app_theme.dart index 4e0184b..ad3dcc4 100644 --- a/lib/shared/theme/app_theme.dart +++ b/lib/shared/theme/app_theme.dart @@ -382,6 +382,15 @@ class _AnimatedThemeWrapperState extends State super.deactivate(); } + @override + void activate() { + super.activate(); + // If a theme transition was in progress, resume it + if (_controller.value < 1.0 && !_controller.isAnimating) { + _controller.forward(); + } + } + @override Widget build(BuildContext context) { return AnimatedBuilder( diff --git a/lib/shared/widgets/improved_loading_states.dart b/lib/shared/widgets/improved_loading_states.dart index 528eee2..8dc1db0 100644 --- a/lib/shared/widgets/improved_loading_states.dart +++ b/lib/shared/widgets/improved_loading_states.dart @@ -475,6 +475,14 @@ class _ShimmerLoaderState extends State super.deactivate(); } + @override + void activate() { + super.activate(); + if (!_shimmerController.isAnimating) { + _shimmerController.repeat(); + } + } + @override Widget build(BuildContext context) { final theme = context.conduitTheme; diff --git a/lib/shared/widgets/loading_states.dart b/lib/shared/widgets/loading_states.dart index 9a27fc4..a2bec18 100644 --- a/lib/shared/widgets/loading_states.dart +++ b/lib/shared/widgets/loading_states.dart @@ -236,6 +236,14 @@ class _SkeletonLoaderState extends State<_SkeletonLoader> super.deactivate(); } + @override + void activate() { + super.activate(); + if (!_controller.isAnimating) { + _controller.repeat(); + } + } + @override Widget build(BuildContext context) { return Container( diff --git a/lib/shared/widgets/skeleton_loader.dart b/lib/shared/widgets/skeleton_loader.dart index c7e037d..2eb40ff 100644 --- a/lib/shared/widgets/skeleton_loader.dart +++ b/lib/shared/widgets/skeleton_loader.dart @@ -62,6 +62,15 @@ class _SkeletonLoaderState extends State super.deactivate(); } + @override + void activate() { + super.activate(); + if (!_controller.isAnimating) { + // Resume shimmer after re-activation + _controller.repeat(); + } + } + @override Widget build(BuildContext context) { return AnimatedBuilder(