From bb07000280f1a7e4f868445320a342c85d4d045b Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Thu, 18 Jan 2024 20:45:06 -0500 Subject: [PATCH] Better partial APK hash as pseudo-version (related to #1101) --- lib/app_sources/html.dart | 2 +- lib/providers/apps_provider.dart | 21 +++++++++++++++++++-- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/lib/app_sources/html.dart b/lib/app_sources/html.dart index 106be54..7492051 100644 --- a/lib/app_sources/html.dart +++ b/lib/app_sources/html.dart @@ -310,7 +310,7 @@ class HTML extends AppSource { : rel); version ??= additionalSettings['supportFixedAPKURL'] != true ? rel.hashCode.toString() - : (await checkDownloadHash(rel)).toString(); + : (await checkPartialDownloadHashDynamc(rel)).toString(); return APKDetails(version, [rel].map((e) => MapEntry(e, e)).toList(), AppNames(uri.host, tr('app'))); } diff --git a/lib/providers/apps_provider.dart b/lib/providers/apps_provider.dart index 38f6417..035d5c1 100644 --- a/lib/providers/apps_provider.dart +++ b/lib/providers/apps_provider.dart @@ -167,8 +167,25 @@ String hashListOfLists(List> data) { return hash.hashCode.toString(); } -Future checkDownloadHash(String url, - {int bytesToGrab = 1024, Map? headers}) async { +Future checkPartialDownloadHashDynamc(String url, + {int startingSize = 1024, + int lowerLimit = 128, + Map? headers}) async { + for (int i = startingSize; i >= lowerLimit; i -= 256) { + List ab = await Future.wait([ + checkPartialDownloadHash(url, i, headers: headers), + checkPartialDownloadHash(url, i, headers: headers) + ]); + if (ab[0] == ab[1]) { + print(i); + return ab[0]; + } + } + throw NoVersionError(); +} + +Future checkPartialDownloadHash(String url, int bytesToGrab, + {Map? headers}) async { var req = Request('GET', Uri.parse(url)); if (headers != null) { req.headers.addAll(headers);