diff --git a/assets/translations/bs.json b/assets/translations/bs.json index 3745373..d03e918 100644 --- a/assets/translations/bs.json +++ b/assets/translations/bs.json @@ -261,6 +261,8 @@ "trySelectingSuggestedVersionCode": "Probajte izabrati preloženu (verziju) versionCode APK-a", "dontSortReleasesList": "Zadrži redosled izdanja iz API-a", "reverseSort": "Obrni redosled", + "takeFirstLink": "Take first link", + "skipSort": "Skip sorting", "debugMenu": "Meni za otkrivanje grešaka", "bgTaskStarted": "Rad u pozadini pokrenut - provjerite log-ove.", "runBgCheckNow": "Pokrenite pozadinsku provjeru ažuriranja sad", @@ -278,6 +280,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..2e44a68 100644 --- a/assets/translations/cs.json +++ b/assets/translations/cs.json @@ -261,6 +261,8 @@ "trySelectingSuggestedVersionCode": "Zkusit vybrat navrhovaný kód verze APK", "dontSortReleasesList": "Retain release order from API", "reverseSort": "Reverse sorting", + "takeFirstLink": "Take first link", + "skipSort": "Skip sorting", "debugMenu": "Debug Menu", "bgTaskStarted": "Background task started - check logs.", "runBgCheckNow": "Run Background Update Check Now", @@ -278,6 +280,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..fae8d4d 100644 --- a/assets/translations/de.json +++ b/assets/translations/de.json @@ -261,6 +261,8 @@ "trySelectingSuggestedVersionCode": "Versuchen, den vorgeschlagenen APK-Versionscode auszuwählen", "dontSortReleasesList": "Freigaberelease von der API ordern", "reverseSort": "Umgekehrtes Sortieren", + "takeFirstLink": "Take first link", + "skipSort": "Skip sorting", "debugMenu": "Debug-Menü", "bgTaskStarted": "Hintergrundaufgabe gestartet – Logs prüfen.", "runBgCheckNow": "Hintergrundaktualisierungsprüfung jetzt durchführen", @@ -278,6 +280,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..fef8f24 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -261,6 +261,8 @@ "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", "dontSortReleasesList": "Retain release order from API", "reverseSort": "Reverse sorting", + "takeFirstLink": "Take first link", + "skipSort": "Skip sorting", "debugMenu": "Debug Menu", "bgTaskStarted": "Background task started - check logs.", "runBgCheckNow": "Run Background Update Check Now", @@ -278,6 +280,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..f3a07c1 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -261,6 +261,8 @@ "trySelectingSuggestedVersionCode": "Prueba seleccionando la versionCode APK sugerida", "dontSortReleasesList": "Mantener el order de publicación desde API", "reverseSort": "Orden inverso", + "takeFirstLink": "Take first link", + "skipSort": "Skip sorting", "debugMenu": "Menu Depurar", "bgTaskStarted": "Iniciada tarea en segundo plano - revisa los logs.", "runBgCheckNow": "Ejecutar verficiación de actualizaciones en segundo plano", @@ -278,6 +280,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..9af4cf6 100644 --- a/assets/translations/fa.json +++ b/assets/translations/fa.json @@ -245,8 +245,8 @@ "enableBackgroundUpdates": "به روز رسانی پس زمینه را فعال کنید", "backgroundUpdateReqsExplanation": "به روز رسانی پس زمینه ممکن است برای همه برنامه ها امکان پذیر نباشد.", "backgroundUpdateLimitsExplanation": "موفقیت نصب پس‌زمینه تنها زمانی مشخص می‌شود که Obtainium باز شود.", - "verifyLatestTag": "برچسب "آخرین" را تأیید کنید", - "intermediateLinkRegex": "برای اولین بار بازدید از لینک "متوسط" را فیلتر کنید", + "verifyLatestTag": "برچسب \"آخرین\" را تأیید کنید", + "intermediateLinkRegex": "برای اولین بار بازدید از لینک \"متوسط\" را فیلتر کنید", "intermediateLinkNotFound": "لینک میانی پیدا نشد", "exemptFromBackgroundUpdates": "معاف از به‌روزرسانی‌های پس‌زمینه (در صورت فعال بودن)", "bgUpdatesOnWiFiOnly": "به‌روزرسانی‌های پس‌زمینه را در صورت عدم اتصال به WiFi غیرفعال کنید", @@ -261,6 +261,8 @@ "trySelectingSuggestedVersionCode": "نسخه پیشنهادی APK نسخه کد را انتخاب کنید", "dontSortReleasesList": "حفظ سفارش انتشار از API", "reverseSort": "مرتب سازی معکوس", + "takeFirstLink": "Take first link", + "skipSort": "Skip sorting", "debugMenu": "منوی اشکال زدایی", "bgTaskStarted": "کار پس زمینه شروع شد - لاگ های مربوط را بررسی کنید.", "runBgCheckNow": "اکنون به‌روزرسانی پس‌زمینه را بررسی کنید", @@ -278,6 +280,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..6322972 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -261,6 +261,8 @@ "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", "dontSortReleasesList": "Retain release order from API", "reverseSort": "Reverse sorting", + "takeFirstLink": "Take first link", + "skipSort": "Skip sorting", "debugMenu": "Debug Menu", "bgTaskStarted": "Background task started - check logs.", "runBgCheckNow": "Run Background Update Check Now", @@ -278,6 +280,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..8e23dd3 100644 --- a/assets/translations/hu.json +++ b/assets/translations/hu.json @@ -260,6 +260,8 @@ "trySelectingSuggestedVersionCode": "Próbálja ki a javasolt verziókódú APK-t", "dontSortReleasesList": "Az API-ból származó kiadási sorrend megőrzése", "reverseSort": "Fordított rendezés", + "takeFirstLink": "Take first link", + "skipSort": "Skip sorting", "debugMenu": "Hibakereső menü", "bgTaskStarted": "A háttérfeladat elindult – ellenőrizze a naplókat.", "enableBackgroundUpdates": "Frissítések a háttérben", @@ -278,6 +280,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..34a7ea2 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -261,6 +261,8 @@ "trySelectingSuggestedVersionCode": "Prova a selezionare APK con versionCode suggerito", "dontSortReleasesList": "Conserva l'ordine di release da API", "reverseSort": "Ordine inverso", + "takeFirstLink": "Take first link", + "skipSort": "Skip sorting", "debugMenu": "Menu di debug", "bgTaskStarted": "Attività in secondo piano iniziata - controllo log.", "runBgCheckNow": "Inizia aggiornamento in secondo piano ora", @@ -278,6 +280,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..3fd43f0 100644 --- a/assets/translations/ja.json +++ b/assets/translations/ja.json @@ -261,6 +261,8 @@ "trySelectingSuggestedVersionCode": "提案されたバージョンコードのAPKを選択する", "dontSortReleasesList": "APIからのリリース順を保持する", "reverseSort": "逆順ソート", + "takeFirstLink": "Take first link", + "skipSort": "Skip sorting", "debugMenu": "デバッグメニュー", "bgTaskStarted": "バックグラウンドタスクが開始されました - ログを確認してください。", "runBgCheckNow": "今すぐバックグラウンドでのアップデート確認を開始する", @@ -278,6 +280,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..678d21d 100644 --- a/assets/translations/nl.json +++ b/assets/translations/nl.json @@ -261,6 +261,8 @@ "trySelectingSuggestedVersionCode": "Probeer de voorgestelde versiecode APK te selecteren", "dontSortReleasesList": "Volgorde van releases behouden vanuit de API", "reverseSort": "Sortering omkeren", + "takeFirstLink": "Take first link", + "skipSort": "Skip sorting", "debugMenu": "Debug menu", "bgTaskStarted": "Achtergrondtaak gestart - controleer de logs.", "runBgCheckNow": "Voer nu een achtergrondupdatecontrole uit", @@ -278,6 +280,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..2c340e0 100644 --- a/assets/translations/pl.json +++ b/assets/translations/pl.json @@ -261,6 +261,8 @@ "trySelectingSuggestedVersionCode": "Spróbuj wybierać sugerowany kod wersji APK", "dontSortReleasesList": "Utrzymaj kolejność wydań z interfejsu API", "reverseSort": "Odwrotne sortowanie", + "takeFirstLink": "Take first link", + "skipSort": "Skip sorting", "debugMenu": "Menu debugowania", "bgTaskStarted": "Uruchomiono zadanie w tle - sprawdź logi.", "runBgCheckNow": "Wymuś sprawdzenie aktualizacji w tle", @@ -278,6 +280,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..eed4690 100644 --- a/assets/translations/pt.json +++ b/assets/translations/pt.json @@ -261,6 +261,8 @@ "trySelectingSuggestedVersionCode": "Tente selecionar a versão sugerida", "dontSortReleasesList": "Reter a ordem de lançamento da API", "reverseSort": "Ordenação reversa", + "takeFirstLink": "Take first link", + "skipSort": "Skip sorting", "debugMenu": "Menu Debug", "bgTaskStarted": "Tarefa em segundo plano iniciada - verifique os logs.", "runBgCheckNow": "Execute a verificação de atualização em segundo plano agora", @@ -278,6 +280,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..03a73e2 100644 --- a/assets/translations/ru.json +++ b/assets/translations/ru.json @@ -261,6 +261,8 @@ "trySelectingSuggestedVersionCode": "Попробуйте выбрать предложенный код версии APK", "dontSortReleasesList": "Сохранить порядок релизов от API", "reverseSort": "Обратная сортировка", + "takeFirstLink": "Take first link", + "skipSort": "Skip sorting", "debugMenu": "Меню отладки", "bgTaskStarted": "Фоновая задача начата — проверьте журналы", "runBgCheckNow": "Запустить проверку фонового обновления сейчас", @@ -278,6 +280,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..e0bf922 100644 --- a/assets/translations/sv.json +++ b/assets/translations/sv.json @@ -261,9 +261,12 @@ "trySelectingSuggestedVersionCode": "Try selecting suggested versionCode APK", "dontSortReleasesList": "Retain release order from API", "reverseSort": "Omvänd sortering", + "takeFirstLink": "Take first link", + "skipSort": "Skip sorting", "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..e78901a 100644 --- a/assets/translations/tr.json +++ b/assets/translations/tr.json @@ -261,6 +261,8 @@ "trySelectingSuggestedVersionCode": "Önerilen sürüm kodunu seçmeyi dene", "dontSortReleasesList": "API'den sıralama düzenini koru", "reverseSort": "Ters sıralama", + "takeFirstLink": "Take first link", + "skipSort": "Skip sorting", "debugMenu": "Hata Ayıklama Menüsü", "bgTaskStarted": "Arka plan görevi başladı - günlükleri kontrol et.", "runBgCheckNow": "Arka Plan Güncelleme Kontrolünü Şimdi Çalıştır", @@ -278,6 +280,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..a4201ce 100644 --- a/assets/translations/vi.json +++ b/assets/translations/vi.json @@ -261,6 +261,8 @@ "trySelectingSuggestedVersionCode": "Thử chọn APK Mã phiên bản được đề xuất", "dontSortReleasesList": "Giữ lại thứ tự phát hành từ API", "reverseSort": "Sắp xếp ngược", + "takeFirstLink": "Take first link", + "skipSort": "Skip sorting", "debugMenu": "Danh sách gỡ lỗi", "bgTaskStarted": "Tác vụ nền đã bắt đầu - kiểm tra nhật ký.", "runBgCheckNow": "Chạy kiểm tra cập nhật nền ngay bây giờ", @@ -278,6 +280,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..c7e25cb 100644 --- a/assets/translations/zh.json +++ b/assets/translations/zh.json @@ -261,6 +261,8 @@ "trySelectingSuggestedVersionCode": "尝试选择推荐版本的 APK 文件", "dontSortReleasesList": "保持来自 API 的发行顺序", "reverseSort": "反转排序", + "takeFirstLink": "Take first link", + "skipSort": "Skip sorting", "debugMenu": "调试选项", "bgTaskStarted": "后台任务已启动 - 详见日志", "runBgCheckNow": "立即进行后台更新检查", @@ -278,6 +280,7 @@ "onlyCheckInstalledOrTrackOnlyApps": "只对已安装和“仅追踪”的应用进行更新检查", "supportFixedAPKURL": "Support fixed APK URLs", "selectX": "Select {}", + "parallelDownloads": "Allow parallel downloads", "removeAppQuestion": { "one": "是否删除应用?", "other": "是否删除应用?" diff --git a/lib/app_sources/html.dart b/lib/app_sources/html.dart index 1d4e06f..81cb7ec 100644 --- a/lib/app_sources/html.dart +++ b/lib/app_sources/html.dart @@ -94,7 +94,8 @@ class HTML extends AppSource { GeneratedFormSwitch('sortByFileNamesNotLinks', label: tr('sortByFileNamesNotLinks')) ], - [GeneratedFormSwitch('reverseSort', label: tr('reverseSort'))], + [GeneratedFormSwitch('skipSort', label: tr('skipSort'))], + [GeneratedFormSwitch('reverseSort', label: tr('takeTopLink'))], [ GeneratedFormSwitch('supportFixedAPKURL', defaultValue: true, label: tr('supportFixedAPKURL')), @@ -185,12 +186,15 @@ class HTML extends AppSource { .toList(); } List links = []; + bool skipSort = additionalSettings['skipSort'] == true; if ((additionalSettings['intermediateLinkRegex'] as String?) ?.isNotEmpty == true) { var reg = RegExp(additionalSettings['intermediateLinkRegex']); links = allLinks.where((element) => reg.hasMatch(element)).toList(); - links.sort((a, b) => compareAlphaNumeric(a, b)); + if (!skipSort) { + links.sort((a, b) => compareAlphaNumeric(a, b)); + } if (links.isEmpty) { throw ObtainiumError(tr('intermediateLinkNotFound')); } @@ -211,10 +215,14 @@ class HTML extends AppSource { Uri.parse(element).path.toLowerCase().endsWith('.apk')) .toList(); } - links.sort((a, b) => additionalSettings['sortByFileNamesNotLinks'] == true - ? compareAlphaNumeric(a.split('/').where((e) => e.isNotEmpty).last, - b.split('/').where((e) => e.isNotEmpty).last) - : compareAlphaNumeric(a, b)); + if (!skipSort) { + links.sort((a, b) => + additionalSettings['sortByFileNamesNotLinks'] == true + ? compareAlphaNumeric( + a.split('/').where((e) => e.isNotEmpty).last, + b.split('/').where((e) => e.isNotEmpty).last) + : compareAlphaNumeric(a, b)); + } if (additionalSettings['reverseSort'] == true) { links = links.reversed.toList(); } diff --git a/lib/main.dart b/lib/main.dart index 620f4bd..9758cc6 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.38'; +const String currentVersion = '0.14.39'; const String currentReleaseTag = 'v$currentVersion-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES 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(); + } } diff --git a/pubspec.lock b/pubspec.lock index a84bba6..6bc1ea8 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -206,10 +206,10 @@ packages: dependency: "direct main" description: name: dynamic_color - sha256: "8b8bd1d798bd393e11eddeaa8ae95b12ff028bf7d5998fc5d003488cd5f4ce2f" + sha256: a866f1f8947bfdaf674d7928e769eac7230388a2e7a2542824fad4bb5b87be3b url: "https://pub.dev" source: hosted - version: "1.6.8" + version: "1.6.9" easy_localization: dependency: "direct main" description: @@ -267,10 +267,10 @@ packages: dependency: "direct main" description: name: flutter_archive - sha256: aec85d1da65e5b33a529db00a86df0b8e92bda78088a7cfaeeba5187701d0d85 + sha256: "004132780d382df5171589ab793e2efc9c3eef570fe72d78b4ccfbfbe52762ae" url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "6.0.0" flutter_fgbg: dependency: "direct main" description: @@ -919,26 +919,26 @@ packages: dependency: transitive description: name: webview_flutter_android - sha256: e313dcdf45d4c95bcb8960351ef2389b7f0687b90bc92483f7f7983ae5758456 + sha256: b54c89fe14a6d26a2a46e24880da0441cdd2bf1f6d01a5b3e1d39558feb1de0b url: "https://pub.dev" source: hosted - version: "3.13.0" + version: "3.13.1" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface - sha256: "68e86162aa8fc646ae859e1585995c096c95fc2476881fa0c4a8d10f56013a5a" + sha256: dbe745ee459a16b6fec296f7565a8ef430d0d681001d8ae521898b9361854943 url: "https://pub.dev" source: hosted - version: "2.8.0" + version: "2.9.0" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - sha256: accdaaa49a2aca2dc3c3230907988954cdd23fed0a19525d6c9789d380f4dc76 + sha256: eebfabfa8a115b535b52031b8b26f7a4b58ceceab378bc9db8762b0fb46f7b5d url: "https://pub.dev" source: hosted - version: "3.9.4" + version: "3.10.0" win32: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index f4b095a..eb550eb 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.38+232 # When changing this, update the tag in main() accordingly +version: 0.14.39+233 # When changing this, update the tag in main() accordingly environment: sdk: '>=3.0.0 <4.0.0' @@ -62,7 +62,7 @@ dependencies: easy_localization: ^3.0.1 android_intent_plus: ^4.0.0 flutter_markdown: ^0.6.14 - flutter_archive: ^5.0.0 + flutter_archive: ^6.0.0 hsluv: ^1.1.3 connectivity_plus: ^5.0.0 shared_storage: ^0.8.0