From d52b6d2dab6a46ff8eaffb9992d318b976c6ffc6 Mon Sep 17 00:00:00 2001 From: monsieurtanuki Date: Sun, 23 Jan 2022 18:06:46 +0100 Subject: [PATCH] feat: #370 - new source configuration for saveProduct New file: * `SourceConfiguration.dart`: Source Configuration for detection of apps (populates data sources on BE). Impacted file: * `openfoodfacts.dart`: added source configuration parameter to `saveProduct` --- lib/openfoodfacts.dart | 16 +++++++++++----- lib/utils/SourceConfiguration.dart | 26 ++++++++++++++++++++++++++ 2 files changed, 37 insertions(+), 5 deletions(-) create mode 100644 lib/utils/SourceConfiguration.dart diff --git a/lib/openfoodfacts.dart b/lib/openfoodfacts.dart index 0bdd59aff4..301c1a2fa2 100644 --- a/lib/openfoodfacts.dart +++ b/lib/openfoodfacts.dart @@ -27,6 +27,7 @@ import 'package:openfoodfacts/utils/PnnsGroups.dart'; import 'package:openfoodfacts/utils/ProductFields.dart'; import 'package:openfoodfacts/utils/ProductListQueryConfiguration.dart'; import 'package:openfoodfacts/utils/QueryType.dart'; +import 'package:openfoodfacts/utils/SourceConfiguration.dart'; import 'package:openfoodfacts/utils/TagType.dart'; import 'package:openfoodfacts/utils/TaxonomyQueryConfiguration.dart'; import 'package:openfoodfacts/utils/UriHelper.dart'; @@ -81,6 +82,7 @@ export 'utils/ProductFields.dart'; export 'utils/ProductHelper.dart'; export 'utils/ProductQueryConfigurations.dart'; export 'utils/ProductSearchQueryConfiguration.dart'; +export 'utils/SourceConfiguration.dart'; /// Client calls of the Open Food Facts API class OpenFoodAPIClient { @@ -92,15 +94,19 @@ class OpenFoodAPIClient { /// Please read the language mechanics explanation if you intend to display /// or update data in specific language: https://github.com/openfoodfacts/openfoodfacts-dart/blob/master/DOCUMENTATION.md#about-languages-mechanics static Future saveProduct( - User user, - Product product, { - QueryType? queryType, + final User user, + final Product product, { + final QueryType? queryType, + final SourceConfiguration? sourceConfiguration, }) async { - var parameterMap = {}; + final Map parameterMap = {}; parameterMap.addAll(user.toData()); parameterMap.addAll(product.toServerData()); + if (sourceConfiguration != null) { + parameterMap.addAll(sourceConfiguration.getParameters()); + } - var productUri = UriHelper.getUri( + final Uri productUri = UriHelper.getUri( path: '/cgi/product_jqm2.pl', queryType: queryType, ); diff --git a/lib/utils/SourceConfiguration.dart b/lib/utils/SourceConfiguration.dart new file mode 100644 index 0000000000..1f25b23f3a --- /dev/null +++ b/lib/utils/SourceConfiguration.dart @@ -0,0 +1,26 @@ +/// Source Configuration for detection of apps (populates data sources on BE). +class SourceConfiguration { + const SourceConfiguration({ + this.appName, + this.appVersion, + this.appUuid, + }); + + final String? appName; + final String? appVersion; + final String? appUuid; + + Map getParameters() { + final Map result = {}; + if (appName != null) { + result['app_name'] = appName!; + } + if (appVersion != null) { + result['app_version'] = appVersion!; + } + if (appUuid != null) { + result['app_uuid'] = appUuid!; + } + return result; + } +}