From 1bc2ec94610b46c4c82eb38b7b4226ff0dd59a9e Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Thu, 21 Dec 2023 15:44:38 -0500 Subject: [PATCH] Parallel download option (#1169) --- assets/translations/bs.json | 1 + assets/translations/cs.json | 1 + assets/translations/de.json | 1 + assets/translations/en.json | 1 + assets/translations/es.json | 1 + assets/translations/fa.json | 1 + assets/translations/fr.json | 1 + assets/translations/hu.json | 1 + assets/translations/it.json | 1 + assets/translations/ja.json | 1 + assets/translations/nl.json | 1 + assets/translations/pl.json | 1 + assets/translations/pt.json | 1 + assets/translations/ru.json | 1 + assets/translations/sv.json | 1 + assets/translations/tr.json | 1 + assets/translations/vi.json | 1 + assets/translations/zh.json | 1 + lib/pages/settings.dart | 13 +++++++++ lib/providers/apps_provider.dart | 42 ++++++++++++++++++---------- lib/providers/settings_provider.dart | 9 ++++++ 21 files changed, 68 insertions(+), 14 deletions(-) diff --git a/assets/translations/bs.json b/assets/translations/bs.json index 3745373..bce4d2f 100644 --- a/assets/translations/bs.json +++ b/assets/translations/bs.json @@ -278,6 +278,7 @@ "onlyCheckInstalledOrTrackOnlyApps": "Isključivo provjerite ažuriranje za instalirane i aplikacije 'samo za praćenje'", "supportFixedAPKURL": "Podržite fiksne APK URL-ove", "selectX": "Izaberite {}", + "parallelDownloads": "Allow parallel downloads", "removeAppQuestion": { "one": "Želite li ukloniti aplikaciju?", "other": "Želite li ukloniti aplikacije?" diff --git a/assets/translations/cs.json b/assets/translations/cs.json index d029e18..13d68b7 100644 --- a/assets/translations/cs.json +++ b/assets/translations/cs.json @@ -278,6 +278,7 @@ "onlyCheckInstalledOrTrackOnlyApps": "Only check installed and Track-Only apps for updates", "supportFixedAPKURL": "Support fixed APK URLs", "selectX": "Select {}", + "parallelDownloads": "Allow parallel downloads", "removeAppQuestion": { "one": "Odstranit Apku?", "other": "Odstranit Apky?" diff --git a/assets/translations/de.json b/assets/translations/de.json index 289e192..d0a21b4 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -278,6 +278,7 @@ "onlyCheckInstalledOrTrackOnlyApps": "Überprüfe nur installierte und mit „nur Nachverfolgen“ markierte Apps auf Aktualisierungen", "supportFixedAPKURL": "neuere Version anhand der ersten dreißig Zahlen der Checksumme der APK URL erraten, wenn anderweitig nicht unterstützt", "selectX": "Wähle {}", + "parallelDownloads": "Allow parallel downloads", "removeAppQuestion": { "one": "App entfernen?", "other": "Apps entfernen?" diff --git a/assets/translations/en.json b/assets/translations/en.json index cb061cf..7ca1199 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -278,6 +278,7 @@ "onlyCheckInstalledOrTrackOnlyApps": "Only check installed and Track-Only apps for updates", "supportFixedAPKURL": "Support fixed APK URLs", "selectX": "Select {}", + "parallelDownloads": "Allow parallel downloads", "removeAppQuestion": { "one": "Remove App?", "other": "Remove Apps?" diff --git a/assets/translations/es.json b/assets/translations/es.json index a99123b..f14c2d9 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -278,6 +278,7 @@ "onlyCheckInstalledOrTrackOnlyApps": "Only check installed and Track-Only apps for updates", "supportFixedAPKURL": "Soporte para URLs fijas de APK", "selectX": "Selecciona {}", + "parallelDownloads": "Allow parallel downloads", "removeAppQuestion": { "one": "¿Eliminar Aplicación?", "other": "¿Eliminar Aplicaciones?" diff --git a/assets/translations/fa.json b/assets/translations/fa.json index f9a31fe..24d7575 100644 --- a/assets/translations/fa.json +++ b/assets/translations/fa.json @@ -278,6 +278,7 @@ "onlyCheckInstalledOrTrackOnlyApps": "فقط برنامه های نصب شده و فقط ردیابی را برای به روز رسانی بررسی کنید", "supportFixedAPKURL": "پشتیبانی از URL های APK ثابت", "selectX": "انتخاب کنید {}", + "parallelDownloads": "Allow parallel downloads", "removeAppQuestion": { "one": "برنامه حذف شود؟", "other": "برنامه ها حذف شوند؟" diff --git a/assets/translations/fr.json b/assets/translations/fr.json index a7000c1..99fedc1 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -278,6 +278,7 @@ "onlyCheckInstalledOrTrackOnlyApps": "Only check installed and Track-Only apps for updates", "supportFixedAPKURL": "Support fixed APK URLs", "selectX": "Select {}", + "parallelDownloads": "Allow parallel downloads", "removeAppQuestion": { "one": "Supprimer l'application ?", "other": "Supprimer les applications ?" diff --git a/assets/translations/hu.json b/assets/translations/hu.json index ff1e0f2..51ec62a 100644 --- a/assets/translations/hu.json +++ b/assets/translations/hu.json @@ -278,6 +278,7 @@ "onlyCheckInstalledOrTrackOnlyApps": "Csak a telepített és a csak követhető appokat ellenőrizze frissítésekért", "supportFixedAPKURL": "Támogatja a rögzített APK URL-eket", "selectX": "Kiválaszt {}", + "parallelDownloads": "Allow parallel downloads", "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 3afdec3..84f6bec 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -278,6 +278,7 @@ "onlyCheckInstalledOrTrackOnlyApps": "Cerca aggiornamenti solo per app installate e app in Solo-Monitoraggio", "supportFixedAPKURL": "Support fixed APK URLs", "selectX": "Select {}", + "parallelDownloads": "Allow parallel downloads", "removeAppQuestion": { "one": "Rimuovere l'app?", "other": "Rimuovere le app?" diff --git a/assets/translations/ja.json b/assets/translations/ja.json index 88cbcea..56ef8da 100644 --- a/assets/translations/ja.json +++ b/assets/translations/ja.json @@ -278,6 +278,7 @@ "onlyCheckInstalledOrTrackOnlyApps": "インストール済みのアプリと「追跡のみ」のアプリのアップデートのみを確認する", "supportFixedAPKURL": "Support fixed APK URLs", "selectX": "Select {}", + "parallelDownloads": "Allow parallel downloads", "removeAppQuestion": { "one": "アプリを削除しますか?", "other": "アプリを削除しますか?" diff --git a/assets/translations/nl.json b/assets/translations/nl.json index a365bfa..e41109e 100644 --- a/assets/translations/nl.json +++ b/assets/translations/nl.json @@ -278,6 +278,7 @@ "onlyCheckInstalledOrTrackOnlyApps": "Alleen geïnstalleerde en Track-Only apps controleren op updates", "supportFixedAPKURL": "Support fixed APK URLs", "selectX": "Select {}", + "parallelDownloads": "Allow parallel downloads", "removeAppQuestion": { "one": "App verwijderen?", "other": "Apps verwijderen?" diff --git a/assets/translations/pl.json b/assets/translations/pl.json index 7c43fee..3aa8ff6 100644 --- a/assets/translations/pl.json +++ b/assets/translations/pl.json @@ -278,6 +278,7 @@ "onlyCheckInstalledOrTrackOnlyApps": "Sprawdzaj tylko zainstalowane i obserwowane aplikacje pod kątem aktualizacji", "supportFixedAPKURL": "Obsługuj stałe adresy URL APK", "selectX": "Wybierz {}", + "parallelDownloads": "Allow parallel downloads", "removeAppQuestion": { "one": "Usunąć aplikację?", "few": "Usunąć aplikacje?", diff --git a/assets/translations/pt.json b/assets/translations/pt.json index fa89746..682b979 100644 --- a/assets/translations/pt.json +++ b/assets/translations/pt.json @@ -278,6 +278,7 @@ "onlyCheckInstalledOrTrackOnlyApps": "Only check installed and Track-Only apps for updates", "supportFixedAPKURL": "Support fixed APK URLs", "selectX": "Select {}", + "parallelDownloads": "Allow parallel downloads", "removeAppQuestion": { "one": "Remover App?", "other": "Remover Apps?" diff --git a/assets/translations/ru.json b/assets/translations/ru.json index b0dfae8..4ed363d 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -278,6 +278,7 @@ "onlyCheckInstalledOrTrackOnlyApps": "Only check installed and Track-Only apps for updates", "supportFixedAPKURL": "Support fixed APK URLs", "selectX": "Select {}", + "parallelDownloads": "Allow parallel downloads", "removeAppQuestion": { "one": "Удалить приложение?", "other": "Удалить приложения?" diff --git a/assets/translations/sv.json b/assets/translations/sv.json index c4b0304..1c316f8 100644 --- a/assets/translations/sv.json +++ b/assets/translations/sv.json @@ -264,6 +264,7 @@ "debugMenu": "Felsökningsmeny", "bgTaskStarted": "Background task started - check logs.", "runBgCheckNow": "Kör Bakgrundsuppdateringskoll Nu", + "parallelDownloads": "Allow parallel downloads", "removeAppQuestion": { "one": "Ta Bort App?", "other": "Ta Bort Appar?" diff --git a/assets/translations/tr.json b/assets/translations/tr.json index d2c15f3..2d08175 100644 --- a/assets/translations/tr.json +++ b/assets/translations/tr.json @@ -278,6 +278,7 @@ "onlyCheckInstalledOrTrackOnlyApps": "Yalnızca yüklü ve Yalnızca İzleme Uygulamalarını güncelleme", "supportFixedAPKURL": "Support fixed APK URLs", "selectX": "Select {}", + "parallelDownloads": "Allow parallel downloads", "removeAppQuestion": { "one": "Uygulamayı Kaldır?", "other": "Uygulamaları Kaldır?" diff --git a/assets/translations/vi.json b/assets/translations/vi.json index e5cd308..5d8e6d3 100644 --- a/assets/translations/vi.json +++ b/assets/translations/vi.json @@ -278,6 +278,7 @@ "onlyCheckInstalledOrTrackOnlyApps": "Chỉ kiểm tra các ứng dụng đã cài đặt và Chỉ-Theo dõi để biết các bản cập nhật", "supportFixedAPKURL": "Support fixed APK URLs", "selectX": "Select {}", + "parallelDownloads": "Allow parallel downloads", "removeAppQuestion":{ "one": "Gỡ ứng dụng?", "other": "Gỡ ứng dụng?" diff --git a/assets/translations/zh.json b/assets/translations/zh.json index 46682d3..1c4640a 100644 --- a/assets/translations/zh.json +++ b/assets/translations/zh.json @@ -278,6 +278,7 @@ "onlyCheckInstalledOrTrackOnlyApps": "只对已安装和“仅追踪”的应用进行更新检查", "supportFixedAPKURL": "Support fixed APK URLs", "selectX": "Select {}", + "parallelDownloads": "Allow parallel downloads", "removeAppQuestion": { "one": "是否删除应用?", "other": "是否删除应用?" diff --git a/lib/pages/settings.dart b/lib/pages/settings.dart index c36c958..d0cd11b 100644 --- a/lib/pages/settings.dart +++ b/lib/pages/settings.dart @@ -327,6 +327,19 @@ class _SettingsPageState extends State { }) ], ), + height16, + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Flexible(child: Text(tr('parallelDownloads'))), + Switch( + value: settingsProvider.parallelDownloads, + onChanged: (value) { + settingsProvider.parallelDownloads = + value; + }) + ], + ), height32, Text( tr('sourceSpecific'), diff --git a/lib/providers/apps_provider.dart b/lib/providers/apps_provider.dart index 35fbfcc..f861442 100644 --- a/lib/providers/apps_provider.dart +++ b/lib/providers/apps_provider.dart @@ -657,7 +657,7 @@ class AppsProvider with ChangeNotifier { appsToInstall = moveStrToEnd(appsToInstall, obtainiumId, strB: obtainiumTempId); - for (var id in appsToInstall) { + Future updateFn(String id, {bool skipInstalls = false}) async { try { var downloadedArtifact = // ignore: use_build_context_synchronously @@ -682,24 +682,26 @@ class AppsProvider with ChangeNotifier { apps[id]?.downloadProgress = -1; notifyListeners(); try { - if (downloadedFile != null) { - if (willBeSilent && context == null) { - installApk(downloadedFile, needsBGWorkaround: true); + if (!skipInstalls) { + if (downloadedFile != null) { + if (willBeSilent && context == null) { + installApk(downloadedFile, needsBGWorkaround: true); + } else { + await installApk(downloadedFile); + } } else { - await installApk(downloadedFile); + if (willBeSilent && context == null) { + installXApkDir(downloadedDir!, needsBGWorkaround: true); + } else { + await installXApkDir(downloadedDir!); + } } - } else { if (willBeSilent && context == null) { - installXApkDir(downloadedDir!, needsBGWorkaround: true); - } else { - await installXApkDir(downloadedDir!); + notificationsProvider?.notify(SilentUpdateAttemptNotification( + [apps[appId]!.app], + id: appId.hashCode)); } } - if (willBeSilent && context == null) { - notificationsProvider?.notify(SilentUpdateAttemptNotification( - [apps[appId]!.app], - id: appId.hashCode)); - } } finally { apps[id]?.downloadProgress = null; notifyListeners(); @@ -710,6 +712,18 @@ class AppsProvider with ChangeNotifier { } } + if (!settingsProvider.parallelDownloads) { + for (var id in appsToInstall) { + await updateFn(id); + } + } else { + await Future.wait( + appsToInstall.map((id) => updateFn(id, skipInstalls: true))); + for (var id in appsToInstall) { + await updateFn(id); + } + } + if (errors.idsByErrorString.isNotEmpty) { throw errors; } diff --git a/lib/providers/settings_provider.dart b/lib/providers/settings_provider.dart index 25e9a3b..af7dd63 100644 --- a/lib/providers/settings_provider.dart +++ b/lib/providers/settings_provider.dart @@ -425,4 +425,13 @@ class SettingsProvider with ChangeNotifier { prefs?.setBool('exportSettings', val); notifyListeners(); } + + bool get parallelDownloads { + return prefs?.getBool('parallelDownloads') ?? false; + } + + set parallelDownloads(bool val) { + prefs?.setBool('parallelDownloads', val); + notifyListeners(); + } }