From 9f50d8db2d77a0a7ca2c420453095002614b3b8e Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Tue, 1 Oct 2024 16:59:28 -0400 Subject: [PATCH] UI bugfixes on add app page (#1866) --- lib/pages/add_app.dart | 8 +++++++- lib/providers/source_provider.dart | 15 +++++++++++---- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/lib/pages/add_app.dart b/lib/pages/add_app.dart index faa610cb..9717decc 100644 --- a/lib/pages/add_app.dart +++ b/lib/pages/add_app.dart @@ -30,6 +30,7 @@ class AddAppPageState extends State { String userInput = ''; String searchQuery = ''; String? pickedSourceOverride; + String? previousPickedSourceOverride; AppSource? pickedSource; Map additionalSettings = {}; bool additionalSettingsValid = true; @@ -58,6 +59,9 @@ class AddAppPageState extends State { if (overrideSource != null) { pickedSourceOverride = overrideSource; } + bool overrideChanged = + pickedSourceOverride != previousPickedSourceOverride; + previousPickedSourceOverride = pickedSourceOverride; if (updateUrlInput) { urlInputKey++; } @@ -69,6 +73,7 @@ class AddAppPageState extends State { overrideSource: pickedSourceOverride) : null; if (pickedSource.runtimeType != source.runtimeType || + overrideChanged || (prevHost != null && prevHost != source?.hosts[0])) { pickedSource = source; pickedSource?.runOnAddAppInputChange(userInput); @@ -487,7 +492,8 @@ class AddAppPageState extends State { height: 16, ), GeneratedForm( - key: Key(pickedSource.runtimeType.toString()), + key: Key( + '${pickedSource.runtimeType.toString()}-${pickedSource?.hostChanged.toString()}-${pickedSource?.hostIdenticalDespiteAnyChange.toString()}'), items: [ ...pickedSource!.combinedAppSpecificSettingFormItems, ...(pickedSourceOverride != null diff --git a/lib/providers/source_provider.dart b/lib/providers/source_provider.dart index 3c592975..8e77f544 100644 --- a/lib/providers/source_provider.dart +++ b/lib/providers/source_provider.dart @@ -414,6 +414,7 @@ HttpClient createHttpClient(bool insecure) { abstract class AppSource { List hosts = []; bool hostChanged = false; + bool hostIdenticalDespiteAnyChange = false; late String name; bool enforceTrackOnly = false; bool changeLogIfAnyIsMarkDown = true; @@ -628,9 +629,10 @@ abstract class AppSource { SettingsProvider settingsProvider) async { Map results = {}; for (var e in sourceConfigSettingFormItems) { - var val = hostChanged + var val = hostChanged && !hostIdenticalDespiteAnyChange ? additionalSettings[e.key] - : settingsProvider.getSettingString(e.key); + : additionalSettings[e.key] ?? + settingsProvider.getSettingString(e.key); if (val != null) { results[e.key] = val; } @@ -813,9 +815,14 @@ class SourceProvider { throw UnsupportedURLError(); } var res = srcs.first; - res.hosts = [Uri.parse(url).host]; + var originalHosts = res.hosts; + var newHost = Uri.parse(url).host; + res.hosts = [newHost]; res.hostChanged = true; - return srcs.first; + if (originalHosts.contains(newHost)) { + res.hostIdenticalDespiteAnyChange = true; + } + return res; } AppSource? source; for (var s in sources.where((element) => element.hosts.isNotEmpty)) {