diff --git a/assets/translations/br.json b/assets/translations/br.json index fa734f4..96e9e7d 100644 --- a/assets/translations/br.json +++ b/assets/translations/br.json @@ -255,7 +255,7 @@ "matchGroupToUse": "Match Group to Use", "highlightTouchTargets": "Highlight less obvious touch targets", "pickExportDir": "Pick Export Directory", - "autoExportOnUpdateCheckKeepNum": "Auto-export on update check (keep last N auto-exports)", + "autoExportOnChanges": "Auto-export on changes", "removeAppQuestion": { "one": "Remover App?", "other": "Remover Apps?" diff --git a/assets/translations/bs.json b/assets/translations/bs.json index a6ca2ab..01d0d2b 100644 --- a/assets/translations/bs.json +++ b/assets/translations/bs.json @@ -252,7 +252,7 @@ "matchGroupToUse": "Match Group to Use", "highlightTouchTargets": "Highlight less obvious touch targets", "pickExportDir": "Pick Export Directory", - "autoExportOnUpdateCheckKeepNum": "Auto-export on update check (keep last N auto-exports)", + "autoExportOnChanges": "Auto-export on changes", "removeAppQuestion": { "one": "Želite li ukloniti aplikaciju?", "other": "Želite li ukloniti aplikacije?" diff --git a/assets/translations/de.json b/assets/translations/de.json index d6a3a10..f6f9d0e 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -252,7 +252,7 @@ "matchGroupToUse": "Match Group to Use", "highlightTouchTargets": "Highlight less obvious touch targets", "pickExportDir": "Pick Export Directory", - "autoExportOnUpdateCheckKeepNum": "Auto-export on update check (keep last N auto-exports)", + "autoExportOnChanges": "Auto-export on changes", "removeAppQuestion": { "one": "App entfernen?", "other": "Apps entfernen?" diff --git a/assets/translations/en.json b/assets/translations/en.json index 185e1e9..4395c68 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -255,7 +255,7 @@ "matchGroupToUse": "Match Group to Use", "highlightTouchTargets": "Highlight less obvious touch targets", "pickExportDir": "Pick Export Directory", - "autoExportOnUpdateCheckKeepNum": "Auto-export on update check (keep last N auto-exports)", + "autoExportOnChanges": "Auto-export on changes", "removeAppQuestion": { "one": "Remove App?", "other": "Remove Apps?" diff --git a/assets/translations/es.json b/assets/translations/es.json index aaf5dcd..b662041 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -252,7 +252,7 @@ "matchGroupToUse": "Match Group to Use", "highlightTouchTargets": "Highlight less obvious touch targets", "pickExportDir": "Pick Export Directory", - "autoExportOnUpdateCheckKeepNum": "Auto-export on update check (keep last N auto-exports)", + "autoExportOnChanges": "Auto-export on changes", "removeAppQuestion": { "one": "¿Eliminar Aplicación?", "other": "¿Eliminar Aplicaciones?" diff --git a/assets/translations/fa.json b/assets/translations/fa.json index 44b363b..c3f5274 100644 --- a/assets/translations/fa.json +++ b/assets/translations/fa.json @@ -252,7 +252,7 @@ "matchGroupToUse": "Match Group to Use", "highlightTouchTargets": "Highlight less obvious touch targets", "pickExportDir": "Pick Export Directory", - "autoExportOnUpdateCheckKeepNum": "Auto-export on update check (keep last N auto-exports)", + "autoExportOnChanges": "Auto-export on changes", "removeAppQuestion": { "one": "برنامه حذف شود؟", "other": "برنامه ها حذف شوند؟" diff --git a/assets/translations/fr.json b/assets/translations/fr.json index 0081dbe..8576909 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -252,7 +252,7 @@ "matchGroupToUse": "Match Group to Use", "highlightTouchTargets": "Highlight less obvious touch targets", "pickExportDir": "Pick Export Directory", - "autoExportOnUpdateCheckKeepNum": "Auto-export on update check (keep last N auto-exports)", + "autoExportOnChanges": "Auto-export on changes", "removeAppQuestion": { "one": "Supprimer l'application ?", "other": "Supprimer les applications ?" diff --git a/assets/translations/hu.json b/assets/translations/hu.json index b694f45..845e313 100644 --- a/assets/translations/hu.json +++ b/assets/translations/hu.json @@ -251,7 +251,7 @@ "matchGroupToUse": "Match Group to Use", "highlightTouchTargets": "Highlight less obvious touch targets", "pickExportDir": "Pick Export Directory", - "autoExportOnUpdateCheckKeepNum": "Auto-export on update check (keep last N auto-exports)", + "autoExportOnChanges": "Auto-export on changes", "removeAppQuestion": { "one": "Eltávolítja az alkalmazást?", "other": "Eltávolítja az alkalmazást?" diff --git a/assets/translations/it.json b/assets/translations/it.json index 31e4f59..7fec3c8 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -252,7 +252,7 @@ "matchGroupToUse": "Match Group to Use", "highlightTouchTargets": "Highlight less obvious touch targets", "pickExportDir": "Pick Export Directory", - "autoExportOnUpdateCheckKeepNum": "Auto-export on update check (keep last N auto-exports)", + "autoExportOnChanges": "Auto-export on changes", "removeAppQuestion": { "one": "Rimuovere l'app?", "other": "Rimuovere le app?" diff --git a/assets/translations/ja.json b/assets/translations/ja.json index 33b3efa..541da17 100644 --- a/assets/translations/ja.json +++ b/assets/translations/ja.json @@ -253,7 +253,7 @@ "matchGroupToUse": "Match Group to Use", "highlightTouchTargets": "Highlight less obvious touch targets", "pickExportDir": "Pick Export Directory", - "autoExportOnUpdateCheckKeepNum": "Auto-export on update check (keep last N auto-exports)", + "autoExportOnChanges": "Auto-export on changes", "removeAppQuestion": { "one": "アプリを削除しますか?", "other": "アプリを削除しますか?" diff --git a/assets/translations/pl.json b/assets/translations/pl.json index 25151f4..04f8322 100644 --- a/assets/translations/pl.json +++ b/assets/translations/pl.json @@ -258,7 +258,7 @@ "matchGroupToUse": "Match Group to Use", "highlightTouchTargets": "Highlight less obvious touch targets", "pickExportDir": "Pick Export Directory", - "autoExportOnUpdateCheckKeepNum": "Auto-export on update check (keep last N auto-exports)", + "autoExportOnChanges": "Auto-export on changes", "removeAppQuestion": { "one": "Usunąć aplikację?", "few": "Usunąć aplikacje?", diff --git a/assets/translations/ru.json b/assets/translations/ru.json index 3635f30..690cd53 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -252,7 +252,7 @@ "matchGroupToUse": "Match Group to Use", "highlightTouchTargets": "Highlight less obvious touch targets", "pickExportDir": "Pick Export Directory", - "autoExportOnUpdateCheckKeepNum": "Auto-export on update check (keep last N auto-exports)", + "autoExportOnChanges": "Auto-export on changes", "removeAppQuestion": { "one": "Удалить приложение?", "other": "Удалить приложения?" diff --git a/assets/translations/zh.json b/assets/translations/zh.json index 519425c..66fc426 100644 --- a/assets/translations/zh.json +++ b/assets/translations/zh.json @@ -253,7 +253,7 @@ "matchGroupToUse": "Match Group to Use", "highlightTouchTargets": "Highlight less obvious touch targets", "pickExportDir": "Pick Export Directory", - "autoExportOnUpdateCheckKeepNum": "Auto-export on update check (keep last N auto-exports)", + "autoExportOnChanges": "Auto-export on changes", "removeAppQuestion": { "one": "是否删除应用?", "other": "是否删除应用?" diff --git a/lib/main.dart b/lib/main.dart index 1b9fe28..0b2338d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -19,7 +19,7 @@ import 'package:easy_localization/src/easy_localization_controller.dart'; // ignore: implementation_imports import 'package:easy_localization/src/localization.dart'; -const String currentVersion = '0.14.12'; +const String currentVersion = '0.14.13'; 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 9eb0ff5..3f4cc30 100644 --- a/lib/pages/apps.dart +++ b/lib/pages/apps.dart @@ -74,11 +74,6 @@ class AppsPageState extends State { setState(() { refreshingSince = null; }); - if (settingsProvider.autoExportOnUpdateCheckKeepNum > 0) { - appsProvider.exportApps(isAuto: true).then((value) { - appsProvider.trimAutoExports(); - }); - } }); } diff --git a/lib/pages/import_export.dart b/lib/pages/import_export.dart index 8bbb09c..c398532 100644 --- a/lib/pages/import_export.dart +++ b/lib/pages/import_export.dart @@ -337,36 +337,19 @@ class _ImportExportPageState extends State { GeneratedForm( items: [ [ - GeneratedFormTextField( - 'autoExportOnUpdateCheckKeepNum', - label: tr( - 'autoExportOnUpdateCheckKeepNum'), - required: false, - defaultValue: settingsProvider - .autoExportOnUpdateCheckKeepNum - .toString(), - textInputType: const TextInputType - .numberWithOptions(), - additionalValidators: [ - (value) { - value ??= settingsProvider - .autoExportOnUpdateCheckKeepNum - .toString(); - return intValidator(value, - positive: true); - } - ]) + GeneratedFormSwitch( + 'autoExportOnChanges', + label: tr('autoExportOnChanges'), + defaultValue: + settingsProvider.autoExportOnChanges, + ) ] ], onValueChanges: (value, valid, isBuilding) { if (valid && !isBuilding) { - if (value[ - 'autoExportOnUpdateCheckKeepNum'] != - null) { - settingsProvider - .autoExportOnUpdateCheckKeepNum = - int.parse(value[ - 'autoExportOnUpdateCheckKeepNum']); + if (value['autoExportOnChanges'] != null) { + settingsProvider.autoExportOnChanges = + value['autoExportOnChanges'] == true; } } }), diff --git a/lib/providers/apps_provider.dart b/lib/providers/apps_provider.dart index 4158fb9..fd10a09 100644 --- a/lib/providers/apps_provider.dart +++ b/lib/providers/apps_provider.dart @@ -16,7 +16,6 @@ import 'package:device_info_plus/device_info_plus.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; -import 'package:obtainium/app_sources/html.dart'; import 'package:obtainium/components/generated_form.dart'; import 'package:obtainium/components/generated_form_modal.dart'; import 'package:obtainium/custom_errors.dart'; @@ -917,6 +916,7 @@ class AppsProvider with ChangeNotifier { } } notifyListeners(); + await exportApps(isAuto: true); } Future removeApps(List appIds) async { @@ -938,6 +938,7 @@ class AppsProvider with ChangeNotifier { } if (appIds.isNotEmpty) { notifyListeners(); + await exportApps(isAuto: true); } } @@ -1097,6 +1098,17 @@ class AppsProvider with ChangeNotifier { Future exportApps({bool pickOnly = false, isAuto = false}) async { if (isAuto) { logs.add('Started auto-export.'); + var exportDir = settingsProvider.exportDir; + if (exportDir != null) { + var files = await saf.listFiles(exportDir, + columns: [saf.DocumentFileColumn.id]).toList(); + if (files.isNotEmpty) { + for (var f in files) { + saf.delete(f.uri); + } + logs.add('Previous auto-export deleted.'); + } + } } var exportDir = settingsProvider.exportDir; if (exportDir == null || pickOnly) { @@ -1122,32 +1134,6 @@ class AppsProvider with ChangeNotifier { return returnPath; } - Future trimAutoExports() async { - var exportDir = settingsProvider.exportDir; - if (exportDir != null) { - var files = await saf - .listFiles(exportDir, columns: [saf.DocumentFileColumn.id]).toList(); - var maxCount = settingsProvider.autoExportOnUpdateCheckKeepNum; - if (files.length > maxCount) { - files.sort((a, b) { - if (a.name == null) { - return -1; - } else if (b.name == null) { - return 1; - } else { - return compareAlphaNumeric(a.name!, b.name!); - } - }); - files = files.reversed.toList(); - logs.add( - 'Deleting auto-exports older than ${files[maxCount - 1].uri.pathSegments.last}.'); - files.sublist(maxCount).forEach((f) { - saf.delete(f.uri); - }); - } - } - } - Future importApps(String appsJSON) async { List importedApps = (jsonDecode(appsJSON) as List) .map((e) => App.fromJson(e)) @@ -1431,10 +1417,6 @@ Future bgUpdateCheck(int taskId, Map? params) async { if (toNotify.isNotEmpty) { notificationsProvider.notify(UpdateNotification(toNotify)); } - if (appsProvider.settingsProvider.autoExportOnUpdateCheckKeepNum > 0) { - await appsProvider.exportApps(isAuto: true); - await appsProvider.trimAutoExports(); - } } // If you're done checking and found some silently installable updates, schedule another task which will run in install mode if (didCompleteChecking && toInstall.isNotEmpty) { diff --git a/lib/providers/settings_provider.dart b/lib/providers/settings_provider.dart index 984d3d9..c1ee5f5 100644 --- a/lib/providers/settings_provider.dart +++ b/lib/providers/settings_provider.dart @@ -391,12 +391,12 @@ class SettingsProvider with ChangeNotifier { } } - int get autoExportOnUpdateCheckKeepNum { - return prefs?.getInt('autoExportOnUpdateCheckKeepNum') ?? 0; + bool get autoExportOnChanges { + return prefs?.getBool('autoExportOnChanges') ?? false; } - set autoExportOnUpdateCheckKeepNum(int val) { - prefs?.setInt('autoExportOnUpdateCheckKeepNum', val); + set autoExportOnChanges(bool val) { + prefs?.setBool('autoExportOnChanges', val); notifyListeners(); } } diff --git a/pubspec.yaml b/pubspec.yaml index 355bbd4..09d66b8 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.14.12+204 # When changing this, update the tag in main() accordingly +version: 0.14.13+205 # When changing this, update the tag in main() accordingly environment: sdk: '>=3.0.0 <4.0.0'