[fix]: Avoid duplicate repo entries

This commit is contained in:
nahnah
2026-02-03 21:47:15 +00:00
parent e2fc0fc369
commit 781cabd7c8
+66 -53
View File
@@ -121,26 +121,30 @@ class _RepositoriesScreenState extends State<RepositoriesScreen> {
onChanged: (newValue) async { onChanged: (newValue) async {
if (newValue) { if (newValue) {
// Add the preset // Add the preset
await _runRepositoryActionWithDialog( final repoProvider = context
context, .read<RepositoriesProvider>();
() async { await repoProvider.addRepository(
final repoProvider = context preset['name']!,
.read<RepositoriesProvider>(); preset['url']!,
final apiService = context
.read<FDroidApiService>();
final appProvider = context
.read<AppProvider>();
await repoProvider.addRepository(
preset['name']!,
preset['url']!,
);
await apiService.clearRepositoryCache();
await appProvider.refreshAll(
repositoriesProvider: repoProvider,
);
},
); );
// Only proceed with modal and refresh if addition succeeded (no error)
if (repoProvider.error == null &&
context.mounted) {
await _runRepositoryActionWithDialog(
context,
() async {
final apiService = context
.read<FDroidApiService>();
final appProvider = context
.read<AppProvider>();
await apiService.clearRepositoryCache();
await appProvider.refreshAll(
repositoriesProvider: repoProvider,
);
},
);
}
} else { } else {
// Remove the preset // Remove the preset
Repository? addedRepo; Repository? addedRepo;
@@ -153,25 +157,28 @@ class _RepositoriesScreenState extends State<RepositoriesScreen> {
addedRepo = null; addedRepo = null;
} }
if (addedRepo != null) { if (addedRepo != null) {
await _runRepositoryActionWithDialog( final repoProvider = context
context, .read<RepositoriesProvider>();
() async { repoProvider.deleteRepository(addedRepo.id);
final repoProvider = context // Only proceed with modal and refresh if deletion succeeded (no error)
.read<RepositoriesProvider>(); if (repoProvider.error == null &&
final apiService = context context.mounted) {
.read<FDroidApiService>(); await _runRepositoryActionWithDialog(
final appProvider = context context,
.read<AppProvider>(); () async {
final apiService = context
.read<FDroidApiService>();
final appProvider = context
.read<AppProvider>();
repoProvider.deleteRepository( await apiService
addedRepo!.id, .clearRepositoryCache();
); await appProvider.refreshAll(
await apiService.clearRepositoryCache(); repositoriesProvider: repoProvider,
await appProvider.refreshAll( );
repositoriesProvider: repoProvider, },
); );
}, }
);
} }
} }
}, },
@@ -338,26 +345,32 @@ class _RepositoriesScreenState extends State<RepositoriesScreen> {
onAdd: (name, url) async { onAdd: (name, url) async {
// Close the add dialog, then run the add flow with a blocking progress dialog. // Close the add dialog, then run the add flow with a blocking progress dialog.
Navigator.pop(context); Navigator.pop(context);
await _runRepositoryActionWithDialog(context, () async { final repoProvider = context.read<RepositoriesProvider>();
final repoProvider = context.read<RepositoriesProvider>(); await repoProvider.addRepository(name, url);
final apiService = context.read<FDroidApiService>(); // Only proceed with modal and refresh if addition succeeded (no error)
final appProvider = context.read<AppProvider>(); if (repoProvider.error == null && context.mounted) {
await _runRepositoryActionWithDialog(context, () async {
final apiService = context.read<FDroidApiService>();
final appProvider = context.read<AppProvider>();
await repoProvider.addRepository(name, url); await apiService.clearRepositoryCache();
await apiService.clearRepositoryCache(); await appProvider.refreshAll(repositoriesProvider: repoProvider);
await appProvider.refreshAll(repositoriesProvider: repoProvider); });
}); }
}, },
onAddPreset: (name, url) async { onAddPreset: (name, url) async {
await _runRepositoryActionWithDialog(context, () async { final repoProvider = context.read<RepositoriesProvider>();
final repoProvider = context.read<RepositoriesProvider>(); await repoProvider.addRepository(name, url);
final apiService = context.read<FDroidApiService>(); // Only proceed with modal and refresh if addition succeeded (no error)
final appProvider = context.read<AppProvider>(); if (repoProvider.error == null && context.mounted) {
await _runRepositoryActionWithDialog(context, () async {
final apiService = context.read<FDroidApiService>();
final appProvider = context.read<AppProvider>();
await repoProvider.addRepository(name, url); await apiService.clearRepositoryCache();
await apiService.clearRepositoryCache(); await appProvider.refreshAll(repositoriesProvider: repoProvider);
await appProvider.refreshAll(repositoriesProvider: repoProvider); });
}); }
}, },
), ),
); );