From 7981ca29c58e7b38bf21b8c4cd26e26183922a53 Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Fri, 31 Mar 2023 15:36:51 -0400 Subject: [PATCH] Bugfix #405 + general categories bugfixes --- lib/main.dart | 2 +- lib/pages/apps.dart | 3 ++- lib/pages/import_export.dart | 2 +- lib/pages/settings.dart | 7 +++++-- lib/providers/apps_provider.dart | 12 ++++++++++++ lib/providers/settings_provider.dart | 19 ++++++++++++++++++- pubspec.yaml | 2 +- 7 files changed, 40 insertions(+), 7 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 94f7d2e..5cfcf56 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -21,7 +21,7 @@ import 'package:easy_localization/src/easy_localization_controller.dart'; // ignore: implementation_imports import 'package:easy_localization/src/localization.dart'; -const String currentVersion = '0.11.18'; +const String currentVersion = '0.11.19'; const String currentReleaseTag = 'v$currentVersion-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES diff --git a/lib/pages/apps.dart b/lib/pages/apps.dart index 616b065..f8e04d5 100644 --- a/lib/pages/apps.dart +++ b/lib/pages/apps.dart @@ -448,7 +448,8 @@ class AppsPageState extends State { .app .categories .map((e) => - Color(settingsProvider.categories[e]!).withAlpha(255)) + Color(settingsProvider.categories[e] ?? transparent) + .withAlpha(255)) .toList(), Color(transparent) ])), diff --git a/lib/pages/import_export.dart b/lib/pages/import_export.dart index 9372f20..3234919 100644 --- a/lib/pages/import_export.dart +++ b/lib/pages/import_export.dart @@ -133,7 +133,7 @@ class _ImportExportPageState extends State { } } }); - settingsProvider.categories = cats; + appsProvider.addMissingCategories(settingsProvider); showError(tr('importedX', args: [plural('apps', value)]), context); }); } else { diff --git a/lib/pages/settings.dart b/lib/pages/settings.dart index 6888f7a..7fde4f6 100644 --- a/lib/pages/settings.dart +++ b/lib/pages/settings.dart @@ -6,6 +6,7 @@ import 'package:obtainium/components/custom_app_bar.dart'; import 'package:obtainium/components/generated_form.dart'; import 'package:obtainium/custom_errors.dart'; import 'package:obtainium/main.dart'; +import 'package:obtainium/providers/apps_provider.dart'; import 'package:obtainium/providers/logs_provider.dart'; import 'package:obtainium/providers/settings_provider.dart'; import 'package:obtainium/providers/source_provider.dart'; @@ -444,6 +445,7 @@ class _CategoryEditorSelectorState extends State { @override Widget build(BuildContext context) { var settingsProvider = context.watch(); + var appsProvider = context.watch(); storedValues = settingsProvider.categories.map((key, value) => MapEntry( key, MapEntry(value, @@ -467,8 +469,9 @@ class _CategoryEditorSelectorState extends State { if (!isBuilding) { storedValues = values['categories'] as Map>; - settingsProvider.categories = - storedValues.map((key, value) => MapEntry(key, value.key)); + settingsProvider.setCategories( + storedValues.map((key, value) => MapEntry(key, value.key)), + appsProvider: appsProvider); if (widget.onSelected != null) { widget.onSelected!(storedValues.keys .where((k) => storedValues[k]!.value) diff --git a/lib/providers/apps_provider.dart b/lib/providers/apps_provider.dart index 2afd95e..e901fd5 100644 --- a/lib/providers/apps_provider.dart +++ b/lib/providers/apps_provider.dart @@ -757,6 +757,18 @@ class AppsProvider with ChangeNotifier { await intent.launch(); } + addMissingCategories(SettingsProvider settingsProvider) { + var cats = settingsProvider.categories; + apps.forEach((key, value) { + for (var c in value.app.categories) { + if (!cats.containsKey(c)) { + cats[c] = generateRandomLightColor().value; + } + } + }); + settingsProvider.setCategories(cats, appsProvider: this); + } + Future checkUpdate(String appId) async { App? currentApp = apps[appId]!.app; SourceProvider sourceProvider = SourceProvider(); diff --git a/lib/providers/settings_provider.dart b/lib/providers/settings_provider.dart index 9f0d8f9..0373857 100644 --- a/lib/providers/settings_provider.dart +++ b/lib/providers/settings_provider.dart @@ -7,6 +7,8 @@ import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:obtainium/app_sources/github.dart'; import 'package:obtainium/main.dart'; +import 'package:obtainium/providers/apps_provider.dart'; +import 'package:obtainium/providers/source_provider.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -160,7 +162,22 @@ class SettingsProvider with ChangeNotifier { Map get categories => Map.from(jsonDecode(prefs?.getString('categories') ?? '{}')); - set categories(Map cats) { + void setCategories(Map cats, {AppsProvider? appsProvider}) { + if (appsProvider != null) { + List changedApps = appsProvider.apps.values + .map((a) { + var n1 = a.app.categories.length; + a.app.categories.removeWhere((c) => cats.keys.contains(c)); + return n1 > a.app.categories.length ? a.app : null; + }) + .where((element) => element != null) + .map((e) => e as App) + .toList(); + if (changedApps.isNotEmpty) { + appsProvider.saveApps(changedApps, + attemptToCorrectInstallStatus: false); + } + } prefs?.setString('categories', jsonEncode(cats)); notifyListeners(); } diff --git a/pubspec.yaml b/pubspec.yaml index 0f6c57f..0cd7b91 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 0.11.18+140 # When changing this, update the tag in main() accordingly +version: 0.11.19+141 # When changing this, update the tag in main() accordingly environment: sdk: '>=2.18.2 <3.0.0'