diff --git a/packages/smooth_app/lib/database/dao_product.dart b/packages/smooth_app/lib/database/dao_product.dart index 636bbdb85d7..f14eab03585 100644 --- a/packages/smooth_app/lib/database/dao_product.dart +++ b/packages/smooth_app/lib/database/dao_product.dart @@ -302,4 +302,15 @@ class DaoProduct extends AbstractSqlDao implements BulkDeletable { return result; } + + /// Sets the language of all products to null. + /// + /// This is useful to refresh the whole database, as products without language + /// are easy to detect. And therefore we can say "refresh all the products + /// with a language null or different from the current app language", and use + /// the same mechanism as "switch language and refresh products accordingly". + Future clearAllLanguages() async => localDatabase.database.update( + _TABLE_PRODUCT, + {_TABLE_PRODUCT_COLUMN_LANGUAGE: null}, + ); } diff --git a/packages/smooth_app/lib/pages/preferences/user_preferences_dev_mode.dart b/packages/smooth_app/lib/pages/preferences/user_preferences_dev_mode.dart index d97bdd2331d..dce7776ffcf 100644 --- a/packages/smooth_app/lib/pages/preferences/user_preferences_dev_mode.dart +++ b/packages/smooth_app/lib/pages/preferences/user_preferences_dev_mode.dart @@ -5,9 +5,11 @@ import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:openfoodfacts/openfoodfacts.dart'; import 'package:provider/provider.dart'; import 'package:smooth_app/background/background_task_badge.dart'; +import 'package:smooth_app/background/background_task_language_refresh.dart'; import 'package:smooth_app/data_models/continuous_scan_model.dart'; import 'package:smooth_app/data_models/preferences/user_preferences.dart'; import 'package:smooth_app/data_models/product_list.dart'; +import 'package:smooth_app/database/dao_product.dart'; import 'package:smooth_app/database/dao_product_list.dart'; import 'package:smooth_app/database/local_database.dart'; import 'package:smooth_app/generic_lib/dialogs/smooth_alert_dialog.dart'; @@ -291,6 +293,17 @@ class UserPreferencesDevMode extends AbstractUserPreferences { ProductQuery.setLanguage(context, userPreferences); }, ), + UserPreferencesItemTile( + title: 'Refresh all products from server (cf. Nutriscore v2)', + trailing: const Icon(Icons.refresh), + onTap: () async { + final LocalDatabase localDatabase = context.read(); + final DaoProduct daoProduct = DaoProduct(localDatabase); + await daoProduct.clearAllLanguages(); + await BackgroundTaskLanguageRefresh.addTask(localDatabase); + _showSuccessMessage(); + }, + ), UserPreferencesItemSwitch( title: 'Side by side comparison for 2 or 3 products', value: