Better partial APK hash as pseudo-version (related to #1101)

This commit is contained in:
Imran Remtulla
2024-01-18 20:45:06 -05:00
parent 595d5dc283
commit bb07000280
2 changed files with 20 additions and 3 deletions

View File

@@ -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')));
}

View File

@@ -167,8 +167,25 @@ String hashListOfLists(List<List<int>> data) {
return hash.hashCode.toString();
}
Future<String> checkDownloadHash(String url,
{int bytesToGrab = 1024, Map<String, String>? headers}) async {
Future<String> checkPartialDownloadHashDynamc(String url,
{int startingSize = 1024,
int lowerLimit = 128,
Map<String, String>? headers}) async {
for (int i = startingSize; i >= lowerLimit; i -= 256) {
List<String> 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<String> checkPartialDownloadHash(String url, int bytesToGrab,
{Map<String, String>? headers}) async {
var req = Request('GET', Uri.parse(url));
if (headers != null) {
req.headers.addAll(headers);