Source configuration settings changes

- "Source config" refers to source-specific, app-agnostic settings
- Don't use saved config for overridden sources
- For overridden sources, use app-specific source config
- Allow sources to show notes on add-app page (#720)
This commit is contained in:
Imran Remtulla
2023-07-29 22:06:42 -04:00
parent a8bfb03f58
commit 76f8cd4102
19 changed files with 131 additions and 29 deletions

View File

@@ -41,6 +41,7 @@ class _AddAppPageState extends State<AddAppPage> {
@override
Widget build(BuildContext context) {
AppsProvider appsProvider = context.read<AppsProvider>();
SettingsProvider settingsProvider = context.watch<SettingsProvider>();
bool doingSomething = gettingAppInfo || searching;
@@ -85,8 +86,7 @@ class _AddAppPageState extends State<AddAppPage> {
}
}
Future<bool> getTrackOnlyConfirmationIfNeeded(
bool userPickedTrackOnly, SettingsProvider settingsProvider,
Future<bool> getTrackOnlyConfirmationIfNeeded(bool userPickedTrackOnly,
{bool ignoreHideSetting = false}) async {
var useTrackOnly = userPickedTrackOnly || pickedSource!.enforceTrackOnly;
if (useTrackOnly &&
@@ -138,11 +138,9 @@ class _AddAppPageState extends State<AddAppPage> {
gettingAppInfo = true;
});
try {
var settingsProvider = context.read<SettingsProvider>();
var userPickedTrackOnly = additionalSettings['trackOnly'] == true;
App? app;
if ((await getTrackOnlyConfirmationIfNeeded(
userPickedTrackOnly, settingsProvider)) &&
if ((await getTrackOnlyConfirmationIfNeeded(userPickedTrackOnly)) &&
(await getReleaseDateAsVersionConfirmationIfNeeded(
userPickedTrackOnly))) {
var trackOnly = pickedSource!.enforceTrackOnly || userPickedTrackOnly;
@@ -410,7 +408,13 @@ class _AddAppPageState extends State<AddAppPage> {
),
GeneratedForm(
key: Key(pickedSource.runtimeType.toString()),
items: pickedSource!.combinedAppSpecificSettingFormItems,
items: [
...pickedSource!.combinedAppSpecificSettingFormItems,
...(pickedSourceOverride != null
? pickedSource!.sourceConfigSettingFormItems
.map((e) => [e])
: [])
],
onValueChanges: (values, valid, isBuilding) {
if (!isBuilding) {
setState(() {
@@ -504,6 +508,18 @@ class _AddAppPageState extends State<AddAppPage> {
HTML().runtimeType.toString()))
getHTMLSourceOverrideDropdown(),
if (shouldShowSearchBar()) getSearchBarRow(),
if (pickedSource != null)
FutureBuilder(
builder: (ctx, val) {
return val.data != null && val.data!.isNotEmpty
? Text(
val.data!,
style:
Theme.of(context).textTheme.bodySmall,
)
: const SizedBox();
},
future: pickedSource?.getSourceNote()),
const SizedBox(
height: 16,
),

View File

@@ -166,9 +166,9 @@ class _SettingsPageState extends State<SettingsPage> {
});
var sourceSpecificFields = sourceProvider.sources.map((e) {
if (e.additionalSourceSpecificSettingFormItems.isNotEmpty) {
if (e.sourceConfigSettingFormItems.isNotEmpty) {
return GeneratedForm(
items: e.additionalSourceSpecificSettingFormItems.map((e) {
items: e.sourceConfigSettingFormItems.map((e) {
e.defaultValue = settingsProvider.getSettingString(e.key);
return [e];
}).toList(),