From c0120f4e40c28f187535655817bf770b4f0d1464 Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Fri, 17 Mar 2023 16:48:06 -0400 Subject: [PATCH 1/4] Made download start more responsive (#361, #327) --- lib/providers/apps_provider.dart | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/lib/providers/apps_provider.dart b/lib/providers/apps_provider.dart index b436358..650068a 100644 --- a/lib/providers/apps_provider.dart +++ b/lib/providers/apps_provider.dart @@ -145,6 +145,10 @@ class AppsProvider with ChangeNotifier { } Future downloadApp(App app, BuildContext? context) async { + if (apps[app.id] != null) { + apps[app.id]!.downloadProgress = 0; + notifyListeners(); + } var fileName = '${app.id}-${app.latestVersion}-${app.preferredApkIndex}.apk'; String downloadUrl = await SourceProvider() From 0f3e029312a485531a2b686c100865704713b13a Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Fri, 17 Mar 2023 22:49:12 -0400 Subject: [PATCH 2/4] Bugfix for previous commit --- lib/providers/apps_provider.dart | 99 +++++++++++++++++--------------- 1 file changed, 53 insertions(+), 46 deletions(-) diff --git a/lib/providers/apps_provider.dart b/lib/providers/apps_provider.dart index 650068a..b79b89e 100644 --- a/lib/providers/apps_provider.dart +++ b/lib/providers/apps_provider.dart @@ -149,56 +149,63 @@ class AppsProvider with ChangeNotifier { apps[app.id]!.downloadProgress = 0; notifyListeners(); } - var fileName = - '${app.id}-${app.latestVersion}-${app.preferredApkIndex}.apk'; - String downloadUrl = await SourceProvider() - .getSource(app.url) - .apkUrlPrefetchModifier(app.apkUrls[app.preferredApkIndex]); - NotificationsProvider? notificationsProvider = - context?.read(); - var notif = DownloadNotification(app.name, 100); - notificationsProvider?.cancel(notif.id); - int? prevProg; - File downloadedFile = - await downloadFile(downloadUrl, fileName, (double? progress) { - int? prog = progress?.ceil(); + try { + var fileName = + '${app.id}-${app.latestVersion}-${app.preferredApkIndex}.apk'; + String downloadUrl = await SourceProvider() + .getSource(app.url) + .apkUrlPrefetchModifier(app.apkUrls[app.preferredApkIndex]); + NotificationsProvider? notificationsProvider = + context?.read(); + var notif = DownloadNotification(app.name, 100); + notificationsProvider?.cancel(notif.id); + int? prevProg; + File downloadedFile = + await downloadFile(downloadUrl, fileName, (double? progress) { + int? prog = progress?.ceil(); + if (apps[app.id] != null) { + apps[app.id]!.downloadProgress = progress; + notifyListeners(); + } + notif = DownloadNotification(app.name, prog ?? 100); + if (prog != null && prevProg != prog) { + notificationsProvider?.notify(notif); + } + prevProg = prog; + }); + notificationsProvider?.cancel(notif.id); + // Delete older versions of the APK if any + for (var file in downloadedFile.parent.listSync()) { + var fn = file.path.split('/').last; + if (fn.startsWith('${app.id}-') && + fn.endsWith('.apk') && + fn != fileName) { + file.delete(); + } + } + // If the APK package ID is different from the App ID, it is either new (using a placeholder ID) or the ID has changed + // The former case should be handled (give the App its real ID), the latter is a security issue + var newInfo = await PackageArchiveInfo.fromPath(downloadedFile.path); + if (app.id != newInfo.packageName) { + if (apps[app.id] != null && !SourceProvider().isTempId(app)) { + throw IDChangedError(); + } + var originalAppId = app.id; + app.id = newInfo.packageName; + downloadedFile = downloadedFile.renameSync( + '${downloadedFile.parent.path}/${app.id}-${app.latestVersion}-${app.preferredApkIndex}.apk'); + if (apps[originalAppId] != null) { + await removeApps([originalAppId]); + await saveApps([app]); + } + } + return DownloadedApk(app.id, downloadedFile); + } finally { if (apps[app.id] != null) { - apps[app.id]!.downloadProgress = progress; + apps[app.id]!.downloadProgress = null; notifyListeners(); } - notif = DownloadNotification(app.name, prog ?? 100); - if (prog != null && prevProg != prog) { - notificationsProvider?.notify(notif); - } - prevProg = prog; - }); - notificationsProvider?.cancel(notif.id); - // Delete older versions of the APK if any - for (var file in downloadedFile.parent.listSync()) { - var fn = file.path.split('/').last; - if (fn.startsWith('${app.id}-') && - fn.endsWith('.apk') && - fn != fileName) { - file.delete(); - } } - // If the APK package ID is different from the App ID, it is either new (using a placeholder ID) or the ID has changed - // The former case should be handled (give the App its real ID), the latter is a security issue - var newInfo = await PackageArchiveInfo.fromPath(downloadedFile.path); - if (app.id != newInfo.packageName) { - if (apps[app.id] != null && !SourceProvider().isTempId(app)) { - throw IDChangedError(); - } - var originalAppId = app.id; - app.id = newInfo.packageName; - downloadedFile = downloadedFile.renameSync( - '${downloadedFile.parent.path}/${app.id}-${app.latestVersion}-${app.preferredApkIndex}.apk'); - if (apps[originalAppId] != null) { - await removeApps([originalAppId]); - await saveApps([app]); - } - } - return DownloadedApk(app.id, downloadedFile); } bool areDownloadsRunning() => apps.values From 1143b6a5468fc252854b68a05a9b6f983baaa4c1 Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Fri, 17 Mar 2023 23:03:38 -0400 Subject: [PATCH 3/4] Better form UI spacing --- lib/components/generated_form.dart | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/components/generated_form.dart b/lib/components/generated_form.dart index c84b630..a9cdfc0 100644 --- a/lib/components/generated_form.dart +++ b/lib/components/generated_form.dart @@ -460,10 +460,9 @@ class _GeneratedFormState extends State { if (rowInputs.key > 0) { rows.add([ SizedBox( - height: widget.items[rowInputs.key][0] is GeneratedFormSwitch && - widget.items[rowInputs.key - 1][0] is! GeneratedFormSwitch - ? 25 - : 8, + height: widget.items[rowInputs.key - 1][0] is GeneratedFormSwitch + ? 8 + : 25, ) ]); } From 83390f648af454df1a36e05f2697e24eedae6adf Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Fri, 17 Mar 2023 23:10:18 -0400 Subject: [PATCH 4/4] Increment version, update packages --- lib/main.dart | 2 +- pubspec.lock | 84 +++++++++++++++++++++++++-------------------------- pubspec.yaml | 2 +- 3 files changed, 44 insertions(+), 44 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index d0ec925..3843c79 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.8'; +const String currentVersion = '0.11.9'; const String currentReleaseTag = 'v$currentVersion-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES diff --git a/pubspec.lock b/pubspec.lock index de8753a..9dea795 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -181,10 +181,10 @@ packages: dependency: "direct main" description: name: file_picker - sha256: d090ae03df98b0247b82e5928f44d1b959867049d18d73635e2e0bc3f49542b9 + sha256: d8e9ca7e5d1983365c277f12c21b4362df6cf659c99af146ad4d04eb33033013 url: "https://pub.dev" source: hosted - version: "5.2.5" + version: "5.2.6" flutter: dependency: "direct main" description: flutter @@ -401,26 +401,26 @@ packages: dependency: transitive description: name: path_provider_android - sha256: "7623b7d4be0f0f7d9a8b5ee6879fc13e4522d4c875ab86801dee4af32b54b83e" + sha256: "019f18c9c10ae370b08dce1f3e3b73bc9f58e7f087bb5e921f06529438ac0ae7" url: "https://pub.dev" source: hosted - version: "2.0.23" + version: "2.0.24" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: eec003594f19fe2456ea965ae36b3fc967bc5005f508890aafe31fa75e41d972 + sha256: "12eee51abdf4d34c590f043f45073adbb45514a108bd9db4491547a2fd891059" url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.2.0" path_provider_linux: dependency: transitive description: name: path_provider_linux - sha256: "525ad5e07622d19447ad740b1ed5070031f7a5437f44355ae915ff56e986429a" + sha256: "2ae08f2216225427e64ad224a24354221c2c7907e448e6e0e8b57b1eb9f10ad1" url: "https://pub.dev" source: hosted - version: "2.1.9" + version: "2.1.10" path_provider_platform_interface: dependency: transitive description: @@ -433,10 +433,10 @@ packages: dependency: transitive description: name: path_provider_windows - sha256: "642ddf65fde5404f83267e8459ddb4556316d3ee6d511ed193357e25caa3632d" + sha256: f53720498d5a543f9607db4b0e997c4b5438884de25b0f73098cc2671a51b130 url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.1.5" permission_handler: dependency: "direct main" description: @@ -545,26 +545,26 @@ packages: dependency: transitive description: name: shared_preferences_android - sha256: a51a4f9375097f94df1c6e0a49c0374440d31ab026b59d58a7e7660675879db4 + sha256: ad423a80fe7b4e48b50d6111b3ea1027af0e959e49d485712e134863d9c1c521 url: "https://pub.dev" source: hosted - version: "2.0.16" + version: "2.0.17" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "6b84fdf06b32bb336f972d373cd38b63734f3461ba56ac2ba01b56d052796259" + sha256: "1e755f8583229f185cfca61b1d80fb2344c9d660e1c69ede5450d8f478fa5310" url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.1.5" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: d7fb71e6e20cd3dfffcc823a28da3539b392e53ed5fc5c2b90b55fdaa8a7e8fa + sha256: "3a59ed10890a8409ad0faad7bb2957dab4b92b8fbe553257b05d30ed8af2c707" url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.1.5" shared_preferences_platform_interface: dependency: transitive description: @@ -577,18 +577,18 @@ packages: dependency: transitive description: name: shared_preferences_web - sha256: "6737b757e49ba93de2a233df229d0b6a87728cea1684da828cbc718b65dcf9d7" + sha256: "0dc2633f215a3d4aa3184c9b2c5766f4711e4e5a6b256e62aafee41f89f1bfb8" url: "https://pub.dev" source: hosted - version: "2.0.5" + version: "2.0.6" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: bd014168e8484837c39ef21065b78f305810ceabc1d4f90be6e3b392ce81b46d + sha256: "71bcd669bb9cdb6b39f22c4a7728b6d49e934f6cba73157ffa5a54f1eed67436" url: "https://pub.dev" source: hosted - version: "2.1.4" + version: "2.1.5" sky_engine: dependency: transitive description: flutter @@ -606,18 +606,18 @@ packages: dependency: "direct main" description: name: sqflite - sha256: "851d5040552cf911f4cabda08d003eca76b27da3ed0002978272e27c8fbf8ecc" + sha256: "500d6fec583d2c021f2d25a056d96654f910662c64f836cd2063167b8f1fa758" url: "https://pub.dev" source: hosted - version: "2.2.5" + version: "2.2.6" sqflite_common: dependency: transitive description: name: sqflite_common - sha256: bfd6973aaeeb93475bc0d875ac9aefddf7965ef22ce09790eb963992ffc5183f + sha256: "963dad8c4aa2f814ce7d2d5b1da2f36f31bd1a439d8f27e3dc189bb9d26bc684" url: "https://pub.dev" source: hosted - version: "2.4.2+2" + version: "2.4.3" stack_trace: dependency: transitive description: @@ -694,34 +694,34 @@ packages: dependency: transitive description: name: url_launcher_android - sha256: "1f4d9ebe86f333c15d318f81dcdc08b01d45da44af74552608455ebdc08d9732" + sha256: "845530e5e05db5500c1a4c1446785d60cbd8f9bd45e21e7dd643a3273bb4bbd1" url: "https://pub.dev" source: hosted - version: "6.0.24" + version: "6.0.25" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: c9cd648d2f7ab56968e049d4e9116f96a85517f1dd806b96a86ea1018a3a82e5 + sha256: "7ab1e5b646623d6a2537aa59d5d039f90eebef75a7c25e105f6f75de1f7750c3" url: "https://pub.dev" source: hosted - version: "6.1.1" + version: "6.1.2" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: e29039160ab3730e42f3d811dc2a6d5f2864b90a70fb765ea60144b03307f682 + sha256: "206fb8334a700ef7754d6a9ed119e7349bc830448098f21a69bf1b4ed038cabc" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.4" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: "2dddb3291a57b074dade66b5e07e64401dd2487caefd4e9e2f467138d8c7eb06" + sha256: "0ef2b4f97942a16523e51256b799e9aa1843da6c60c55eefbfa9dbc2dcb8331a" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.0.4" url_launcher_platform_interface: dependency: transitive description: @@ -734,18 +734,18 @@ packages: dependency: transitive description: name: url_launcher_web - sha256: "574cfbe2390666003c3a1d129bdc4574aaa6728f0c00a4829a81c316de69dd9b" + sha256: "81fe91b6c4f84f222d186a9d23c73157dc4c8e1c71489c4d08be1ad3b228f1aa" url: "https://pub.dev" source: hosted - version: "2.0.15" + version: "2.0.16" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: "97c9067950a0d09cbd93e2e3f0383d1403989362b97102fbf446473a48079a4b" + sha256: a83ba3607a507758669cfafb03f9de09bf6e6280c14d9b9cb18f013e406dcacd url: "https://pub.dev" source: hosted - version: "3.0.4" + version: "3.0.5" uuid: dependency: transitive description: @@ -774,26 +774,26 @@ packages: dependency: transitive description: name: webview_flutter_android - sha256: "5dd3f32b5c2d8f4bf9d05a349e4a65fa718eb137f396f336c3893d558a58fe84" + sha256: "34f83c2f0f64c75ad75c77a2ccfc8d2e531afbe8ad41af1fd787d6d33336aa90" url: "https://pub.dev" source: hosted - version: "3.3.2" + version: "3.4.3" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface - sha256: df6472164b3f4eaf3280422227f361dc8424b106726b7f21d79a8656ba53f71f + sha256: "1939c39e2150fb4d30fd3cc59a891a49fed9935db53007df633ed83581b6117b" url: "https://pub.dev" source: hosted - version: "2.0.2" + version: "2.1.0" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - sha256: "87b6353b40e04f04d5f895a484ad6d92d682d9cce4d2d5b32d2d8aca2448d46e" + sha256: ab12479f7a0cf112b9420c36aaf206a1ca47cd60cd42de74a4be2e97a697587b url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "3.2.1" win32: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 373ad10..6962da3 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.8+129 # When changing this, update the tag in main() accordingly +version: 0.11.9+130 # When changing this, update the tag in main() accordingly environment: sdk: '>=2.18.2 <3.0.0'