From ba376d69fce6fd04e74dd6f2b669d651ce3cb915 Mon Sep 17 00:00:00 2001 From: zarzet <42882290+zarzet@users.noreply.github.com> Date: Mon, 19 Oct 2026 00:42:51 +0700 Subject: [PATCH] refactor(repo): prepare install paths in the repo notifier The store list and the detail screen both built the temp and extension directories before calling the notifier. The notifier now offers installExtensionToDefaultPaths and updateExtensionToDefaultPaths; the existing methods keep their signatures. --- lib/providers/repo_provider.dart | 14 ++++++++++++++ lib/screens/repo/extension_details_screen.dart | 11 ++--------- lib/screens/repo_tab.dart | 10 ++-------- 3 files changed, 18 insertions(+), 17 deletions(-) diff --git a/lib/providers/repo_provider.dart b/lib/providers/repo_provider.dart index 247988f0..2505e431 100644 --- a/lib/providers/repo_provider.dart +++ b/lib/providers/repo_provider.dart @@ -3,6 +3,7 @@ import 'dart:async'; import 'package:path_provider/path_provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:spotiflac_android/constants/app_info.dart'; +import 'package:spotiflac_android/services/extension_storage_service.dart'; import 'package:spotiflac_android/services/platform_bridge.dart'; import 'package:spotiflac_android/utils/logger.dart'; import 'package:spotiflac_android/providers/extension_provider.dart'; @@ -383,6 +384,19 @@ class RepoNotifier extends Notifier { ); } + /// Installs [extensionId] using the app's temp and extension directories. + Future installExtensionToDefaultPaths(String extensionId) async { + final tempDir = await getTemporaryDirectory(); + final storage = await ExtensionStorageService.prepare(); + return installExtension(extensionId, tempDir.path, storage.extensionsDir); + } + + /// Updates [extensionId] using the app's temp directory. + Future updateExtensionToDefaultPaths(String extensionId) async { + final tempDir = await getTemporaryDirectory(); + return updateExtension(extensionId, tempDir.path); + } + Future updateExtension(String extensionId, String tempDir) { return _runSerialized( () => _downloadAndApplyExtension( diff --git a/lib/screens/repo/extension_details_screen.dart b/lib/screens/repo/extension_details_screen.dart index 178266c9..10aa6b4b 100644 --- a/lib/screens/repo/extension_details_screen.dart +++ b/lib/screens/repo/extension_details_screen.dart @@ -2,11 +2,9 @@ import 'package:flutter/material.dart'; import 'package:spotiflac_android/widgets/app_snack_bar.dart'; import 'package:flutter/cupertino.dart' show CupertinoIcons; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:path_provider/path_provider.dart'; import 'package:spotiflac_android/l10n/l10n.dart'; import 'package:spotiflac_android/providers/repo_provider.dart'; import 'package:spotiflac_android/providers/extension_provider.dart'; -import 'package:spotiflac_android/services/extension_storage_service.dart'; import 'package:spotiflac_android/utils/adaptive_layout.dart'; import 'package:spotiflac_android/utils/nav_bar_inset.dart'; import 'package:spotiflac_android/theme/mornye_theme.dart'; @@ -569,12 +567,9 @@ class _ExtensionDetailsScreenState } Future _installExtension(RepoExtension ext) async { - final tempDir = await getTemporaryDirectory(); - final storage = await ExtensionStorageService.prepare(); - final success = await ref .read(repoProvider.notifier) - .installExtension(ext.id, tempDir.path, storage.extensionsDir); + .installExtensionToDefaultPaths(ext.id); if (mounted) { showAppSnackBar( @@ -590,11 +585,9 @@ class _ExtensionDetailsScreenState } Future _updateExtension(RepoExtension ext) async { - final tempDir = await getTemporaryDirectory(); - final success = await ref .read(repoProvider.notifier) - .updateExtension(ext.id, tempDir.path); + .updateExtensionToDefaultPaths(ext.id); if (mounted) { showAppSnackBar( diff --git a/lib/screens/repo_tab.dart b/lib/screens/repo_tab.dart index f4e07889..0dc08237 100644 --- a/lib/screens/repo_tab.dart +++ b/lib/screens/repo_tab.dart @@ -15,7 +15,6 @@ import 'package:spotiflac_android/providers/repo_provider.dart'; import 'package:spotiflac_android/widgets/settings_group.dart'; import 'package:spotiflac_android/widgets/animation_utils.dart'; import 'package:spotiflac_android/screens/repo/extension_details_screen.dart'; -import 'package:spotiflac_android/services/extension_storage_service.dart'; import 'package:spotiflac_android/utils/adaptive_layout.dart'; import 'package:spotiflac_android/utils/nav_bar_inset.dart'; import 'package:spotiflac_android/providers/runtime_profile_provider.dart'; @@ -600,12 +599,9 @@ class _RepoTabState extends ConsumerState { } Future _installExtension(RepoExtension ext) async { - final tempDir = await getTemporaryDirectory(); - final storage = await ExtensionStorageService.prepare(); - final success = await ref .read(repoProvider.notifier) - .installExtension(ext.id, tempDir.path, storage.extensionsDir); + .installExtensionToDefaultPaths(ext.id); if (mounted) { showAppSnackBar( @@ -621,11 +617,9 @@ class _RepoTabState extends ConsumerState { } Future _updateExtension(RepoExtension ext) async { - final tempDir = await getTemporaryDirectory(); - final success = await ref .read(repoProvider.notifier) - .updateExtension(ext.id, tempDir.path); + .updateExtensionToDefaultPaths(ext.id); if (mounted) { showAppSnackBar(