mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-10-25 03:43:46 +02:00 
			
		
		
		
	Made defaultvallue part of formitem
This commit is contained in:
		| @@ -49,20 +49,18 @@ class GitHub extends AppSource { | ||||
|           ]) | ||||
|     ]; | ||||
|  | ||||
|     additionalSourceAppSpecificDefaults = { | ||||
|       'includePrereleases': 'true', | ||||
|       'fallbackToOlderReleases': 'true', | ||||
|       'filterReleaseTitlesByRegEx': '' | ||||
|     }; | ||||
|  | ||||
|     additionalSourceAppSpecificFormItems = [ | ||||
|       [ | ||||
|         GeneratedFormItem('includePrereleases', | ||||
|             label: tr('includePrereleases'), type: FormItemType.bool) | ||||
|             label: tr('includePrereleases'), | ||||
|             type: FormItemType.bool, | ||||
|             defaultValue: 'true') | ||||
|       ], | ||||
|       [ | ||||
|         GeneratedFormItem('fallbackToOlderReleases', | ||||
|             label: tr('fallbackToOlderReleases'), type: FormItemType.bool) | ||||
|             label: tr('fallbackToOlderReleases'), | ||||
|             type: FormItemType.bool, | ||||
|             defaultValue: 'true') | ||||
|       ], | ||||
|       [ | ||||
|         GeneratedFormItem('filterReleaseTitlesByRegEx', | ||||
|   | ||||
| @@ -16,6 +16,7 @@ class GeneratedFormItem { | ||||
|   late List<Widget> belowWidgets; | ||||
|   late String? hint; | ||||
|   late List<MapEntry<String, String>>? opts; | ||||
|   late String? defaultValue; | ||||
|  | ||||
|   GeneratedFormItem(this.key, | ||||
|       {this.label = 'Input', | ||||
| @@ -25,7 +26,8 @@ class GeneratedFormItem { | ||||
|       this.additionalValidators = const [], | ||||
|       this.belowWidgets = const [], | ||||
|       this.hint, | ||||
|       this.opts}) { | ||||
|       this.opts, | ||||
|       this.defaultValue}) { | ||||
|     if (type != FormItemType.string) { | ||||
|       required = false; | ||||
|     } | ||||
| @@ -34,14 +36,10 @@ class GeneratedFormItem { | ||||
|  | ||||
| class GeneratedForm extends StatefulWidget { | ||||
|   const GeneratedForm( | ||||
|       {super.key, | ||||
|       required this.items, | ||||
|       required this.onValueChanges, | ||||
|       required this.defaultValues}); | ||||
|       {super.key, required this.items, required this.onValueChanges}); | ||||
|  | ||||
|   final List<List<GeneratedFormItem>> items; | ||||
|   final OnValueChanges onValueChanges; | ||||
|   final Map<String, String> defaultValues; | ||||
|  | ||||
|   @override | ||||
|   State<GeneratedForm> createState() => _GeneratedFormState(); | ||||
| @@ -82,7 +80,7 @@ class _GeneratedFormState extends State<GeneratedForm> { | ||||
|     int j = 0; | ||||
|     for (var row in widget.items) { | ||||
|       for (var e in row) { | ||||
|         values[e.key] = widget.defaultValues[e.key] ?? e.opts?.first.key ?? ''; | ||||
|         values[e.key] = e.defaultValue ?? e.opts?.first.key ?? ''; | ||||
|       } | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -59,8 +59,7 @@ class _GeneratedFormModalState extends State<GeneratedFormModal> { | ||||
|                   this.valid = valid; | ||||
|                 }); | ||||
|               } | ||||
|             }, | ||||
|             defaultValues: widget.defaultValues) | ||||
|             }) | ||||
|       ]), | ||||
|       actions: [ | ||||
|         TextButton( | ||||
|   | ||||
| @@ -43,8 +43,10 @@ class _AddAppPageState extends State<AddAppPage> { | ||||
|         var source = valid ? sourceProvider.getSource(userInput) : null; | ||||
|         if (pickedSource.runtimeType != source.runtimeType) { | ||||
|           pickedSource = source; | ||||
|           sourceSpecificAdditionalData = | ||||
|               source != null ? source.additionalSourceAppSpecificDefaults : {}; | ||||
|           sourceSpecificAdditionalData = source != null | ||||
|               ? getDefaultValuesFromFormItems( | ||||
|                   source.additionalSourceAppSpecificFormItems) | ||||
|               : {}; | ||||
|           sourceSpecificDataIsValid = source != null | ||||
|               ? !sourceProvider.ifSourceAppsRequireAdditionalData(source) | ||||
|               : true; | ||||
| @@ -170,34 +172,33 @@ class _AddAppPageState extends State<AddAppPage> { | ||||
|                           Expanded( | ||||
|                               child: GeneratedForm( | ||||
|                                   items: [ | ||||
|                                     [ | ||||
|                                       GeneratedFormItem('appSourceURL', | ||||
|                                           label: tr('appSourceURL'), | ||||
|                                           additionalValidators: [ | ||||
|                                             (value) { | ||||
|                                               try { | ||||
|                                                 sourceProvider | ||||
|                                                     .getSource(value ?? '') | ||||
|                                                     .standardizeURL( | ||||
|                                                         preStandardizeUrl( | ||||
|                                                             value ?? '')); | ||||
|                                               } catch (e) { | ||||
|                                                 return e is String | ||||
|                                                     ? e | ||||
|                                                     : e is ObtainiumError | ||||
|                                                         ? e.toString() | ||||
|                                                         : tr('error'); | ||||
|                                               } | ||||
|                                               return null; | ||||
|                                             } | ||||
|                                           ]) | ||||
|                                     ] | ||||
|                                   ], | ||||
|                                 [ | ||||
|                                   GeneratedFormItem('appSourceURL', | ||||
|                                       label: tr('appSourceURL'), | ||||
|                                       additionalValidators: [ | ||||
|                                         (value) { | ||||
|                                           try { | ||||
|                                             sourceProvider | ||||
|                                                 .getSource(value ?? '') | ||||
|                                                 .standardizeURL( | ||||
|                                                     preStandardizeUrl( | ||||
|                                                         value ?? '')); | ||||
|                                           } catch (e) { | ||||
|                                             return e is String | ||||
|                                                 ? e | ||||
|                                                 : e is ObtainiumError | ||||
|                                                     ? e.toString() | ||||
|                                                     : tr('error'); | ||||
|                                           } | ||||
|                                           return null; | ||||
|                                         } | ||||
|                                       ]) | ||||
|                                 ] | ||||
|                               ], | ||||
|                                   onValueChanges: (values, valid, isBuilding) { | ||||
|                                     changeUserInput(values['appSourceURL']!, | ||||
|                                         valid, isBuilding); | ||||
|                                   }, | ||||
|                                   defaultValues: const {'appSourceURL': ''})), | ||||
|                                   })), | ||||
|                           const SizedBox( | ||||
|                             width: 16, | ||||
|                           ), | ||||
| @@ -211,7 +212,7 @@ class _AddAppPageState extends State<AddAppPage> { | ||||
|                                                   .isNotEmpty && | ||||
|                                               !sourceSpecificDataIsValid) || | ||||
|                                           (pickedSource! | ||||
|                                                   .additionalAppSpecificSourceAgnosticDefaults | ||||
|                                                   .additionalAppSpecificSourceAgnosticFormItems | ||||
|                                                   .isNotEmpty && | ||||
|                                               !otherAdditionalDataIsValid) | ||||
|                                       ? null | ||||
| @@ -250,9 +251,6 @@ class _AddAppPageState extends State<AddAppPage> { | ||||
|                                             values['searchSomeSources']!.trim(); | ||||
|                                       }); | ||||
|                                     } | ||||
|                                   }, | ||||
|                                   defaultValues: const { | ||||
|                                     'searchSomeSources': '' | ||||
|                                   }), | ||||
|                             ), | ||||
|                             const SizedBox( | ||||
| @@ -309,7 +307,7 @@ class _AddAppPageState extends State<AddAppPage> { | ||||
|                           ], | ||||
|                         ), | ||||
|                       if (pickedSource != null && | ||||
|                           (pickedSource!.additionalSourceAppSpecificDefaults | ||||
|                           (pickedSource!.additionalSourceAppSpecificFormItems | ||||
|                                   .isNotEmpty || | ||||
|                               pickedSource! | ||||
|                                   .additionalAppSpecificSourceAgnosticFormItems | ||||
| @@ -346,11 +344,9 @@ class _AddAppPageState extends State<AddAppPage> { | ||||
|                                         sourceSpecificDataIsValid = valid; | ||||
|                                       }); | ||||
|                                     } | ||||
|                                   }, | ||||
|                                   defaultValues: pickedSource! | ||||
|                                       .additionalSourceAppSpecificDefaults), | ||||
|                                   }), | ||||
|                             if (pickedSource! | ||||
|                                 .additionalAppSpecificSourceAgnosticDefaults | ||||
|                                 .additionalAppSpecificSourceAgnosticFormItems | ||||
|                                 .isNotEmpty) | ||||
|                               const SizedBox( | ||||
|                                 height: 8, | ||||
| @@ -370,9 +366,7 @@ class _AddAppPageState extends State<AddAppPage> { | ||||
|                                       otherAdditionalDataIsValid = valid; | ||||
|                                     }); | ||||
|                                   } | ||||
|                                 }, | ||||
|                                 defaultValues: pickedSource! | ||||
|                                     .additionalAppSpecificSourceAgnosticDefaults), | ||||
|                                 }), | ||||
|                           ], | ||||
|                         ) | ||||
|                       else | ||||
|   | ||||
| @@ -217,8 +217,9 @@ class _AppPageState extends State<AppPage> { | ||||
|                                                     .additionalSourceAppSpecificFormItems, | ||||
|                                                 defaultValues: app != null | ||||
|                                                     ? app.app.additionalData | ||||
|                                                     : source | ||||
|                                                         .additionalSourceAppSpecificDefaults); | ||||
|                                                     : getDefaultValuesFromFormItems( | ||||
|                                                         source | ||||
|                                                             .additionalSourceAppSpecificFormItems)); | ||||
|                                           }).then((values) { | ||||
|                                         if (app != null && values != null) { | ||||
|                                           var changedApp = app.app; | ||||
|   | ||||
| @@ -147,12 +147,7 @@ class _SettingsPageState extends State<SettingsPage> { | ||||
|                   settingsProvider.setSettingString(key, value); | ||||
|                 }); | ||||
|               } | ||||
|             }, | ||||
|             defaultValues: Map.fromEntries( | ||||
|                 e.additionalSourceSpecificSettingFormItems.map((e) { | ||||
|               return MapEntry( | ||||
|                   e.key, settingsProvider.getSettingString(e.key) ?? ''); | ||||
|             }))); | ||||
|             }); | ||||
|       } else { | ||||
|         return Container(); | ||||
|       } | ||||
|   | ||||
| @@ -83,9 +83,9 @@ class App { | ||||
|           : List<String>.from(jsonDecode(json['apkUrls'])), | ||||
|       json['preferredApkIndex'] == null ? 0 : json['preferredApkIndex'] as int, | ||||
|       json['additionalData'] == null | ||||
|           ? SourceProvider() | ||||
|           ? getDefaultValuesFromFormItems(SourceProvider() | ||||
|               .getSource(json['url']) | ||||
|               .additionalSourceAppSpecificDefaults | ||||
|               .additionalSourceAppSpecificFormItems) | ||||
|           : Map<String, String>.from(jsonDecode(json['additionalData'])), | ||||
|       json['lastUpdateCheck'] == null | ||||
|           ? null | ||||
| @@ -141,6 +141,12 @@ List<String> getLinksFromParsedHTML( | ||||
|         .map((e) => '$prependToLinks${e.attributes['href']!}') | ||||
|         .toList(); | ||||
|  | ||||
| getDefaultValuesFromFormItems(List<List<GeneratedFormItem>> items) { | ||||
|   Map.fromEntries(items | ||||
|       .map((row) => row.map((el) => MapEntry(el.key, el.defaultValue ?? ''))) | ||||
|       .reduce((value, element) => [...value, ...element])); | ||||
| } | ||||
|  | ||||
| class AppSource { | ||||
|   String? host; | ||||
|   late String name; | ||||
| @@ -162,7 +168,6 @@ class AppSource { | ||||
|  | ||||
|   // Different Sources may need different kinds of additional data for Apps | ||||
|   List<List<GeneratedFormItem>> additionalSourceAppSpecificFormItems = []; | ||||
|   Map<String, String> additionalSourceAppSpecificDefaults = {}; | ||||
|  | ||||
|   // Some additional data may be needed for Apps regardless of Source | ||||
|   final List<GeneratedFormItem> additionalAppSpecificSourceAgnosticFormItems = [ | ||||
| @@ -175,10 +180,6 @@ class AppSource { | ||||
|         label: 'Do not attempt version detection', // TODO | ||||
|         type: FormItemType.bool) | ||||
|   ]; | ||||
|   final Map<String, String> additionalAppSpecificSourceAgnosticDefaults = { | ||||
|     'trackOnlyFormItemKey': '', | ||||
|     'noVersionDetectionKey': '' | ||||
|   }; | ||||
|  | ||||
|   // Some Sources may have additional settings at the Source level (not specific to Apps) - these use SettingsProvider | ||||
|   List<GeneratedFormItem> additionalSourceSpecificSettingFormItems = []; | ||||
| @@ -332,7 +333,10 @@ class SourceProvider { | ||||
|       try { | ||||
|         var source = getSource(url); | ||||
|         apps.add(await getApp( | ||||
|             source, url, source.additionalSourceAppSpecificDefaults)); | ||||
|             source, | ||||
|             url, | ||||
|             getDefaultValuesFromFormItems( | ||||
|                 source.additionalSourceAppSpecificFormItems))); | ||||
|       } catch (e) { | ||||
|         errors.addAll(<String, dynamic>{url: e}); | ||||
|       } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user