Skip to content

Commit

Permalink
Merge pull request #1800 from ImranR98/dev
Browse files Browse the repository at this point in the history
- GitLab bugfix for some APK URLs (#1790)
- Fix Uptodown - was completely broken (#1796)
- Slight XAPK support improvement + BG install bugfix
  • Loading branch information
ImranR98 authored Aug 20, 2024
2 parents 4687119 + b22a82d commit b05a2ed
Show file tree
Hide file tree
Showing 6 changed files with 107 additions and 75 deletions.
2 changes: 1 addition & 1 deletion lib/app_sources/gitlab.dart
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ class GitLab extends AppSource {
}

finalResult.apkUrls = finalResult.apkUrls.map((apkUrl) {
if (RegExp('^$standardUrl/-/jobs/[0-9]+/artifacts/file/[^/]+\$')
if (RegExp('^$standardUrl/-/jobs/[0-9]+/artifacts/file/[^/]+')
.hasMatch(apkUrl.value)) {
return MapEntry(
apkUrl.key, apkUrl.value.replaceFirst('/file/', '/raw/'));
Expand Down
30 changes: 21 additions & 9 deletions lib/app_sources/uptodown.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ class Uptodown extends AppSource {
allowSubDomains = true;
naiveStandardVersionDetection = true;
showReleaseDateAsVersionToggle = true;
urlsAlwaysHaveExtension = true;
}

@override
Expand Down Expand Up @@ -39,20 +40,29 @@ class Uptodown extends AppSource {
}
var html = parse(res.body);
String? version = html.querySelector('div.version')?.innerHtml;
String? apkUrl =
'${standardUrl.split('/').reversed.toList().sublist(1).reversed.join('/')}/post-download';
String? name = html.querySelector('#detail-app-name')?.innerHtml.trim();
String? author = html.querySelector('#author-link')?.innerHtml.trim();
var detailElements = html.querySelectorAll('#technical-information td');
String? appId = (detailElements.elementAtOrNull(2))?.innerHtml.trim();
String? dateStr = (detailElements.elementAtOrNull(29))?.innerHtml.trim();
String? fileId =
html.querySelector('#detail-app-name')?.attributes['data-file-id'];
String? extension = html
.querySelectorAll('td')
.where((e) => e.text.toLowerCase().trim() == 'file type')
.firstOrNull
?.nextElementSibling
?.text
.toLowerCase()
.trim();
return Map.fromEntries([
MapEntry('version', version),
MapEntry('apkUrl', apkUrl),
MapEntry('appId', appId),
MapEntry('name', name),
MapEntry('author', author),
MapEntry('dateStr', dateStr)
MapEntry('dateStr', dateStr),
MapEntry('fileId', fileId),
MapEntry('extension', extension)
]);
}

Expand All @@ -64,14 +74,16 @@ class Uptodown extends AppSource {
var appDetails =
await getAppDetailsFromPage(standardUrl, additionalSettings);
var version = appDetails['version'];
var apkUrl = appDetails['apkUrl'];
var appId = appDetails['appId'];
var fileId = appDetails['fileId'];
var extension = appDetails['extension'];
if (version == null) {
throw NoVersionError();
}
if (apkUrl == null) {
if (fileId == null) {
throw NoAPKError();
}
var apkUrl = '$standardUrl/$fileId-x';
if (appId == null) {
throw NoReleasesError();
}
Expand All @@ -82,8 +94,8 @@ class Uptodown extends AppSource {
if (dateStr != null) {
relDate = parseDateTimeMMMddCommayyyy(dateStr);
}
return APKDetails(
version, getApkUrlsFromUrls([apkUrl]), AppNames(author, appName),
return APKDetails(version, [MapEntry('$appId.$extension', apkUrl)],
AppNames(author, appName),
releaseDate: relDate);
}

Expand All @@ -96,7 +108,7 @@ class Uptodown extends AppSource {
}
var html = parse(res.body);
var finalUrlKey =
html.querySelector('.post-download')?.attributes['data-url'];
html.querySelector('#detail-download-button')?.attributes['data-url'];
if (finalUrlKey == null) {
throw NoAPKError();
}
Expand Down
31 changes: 25 additions & 6 deletions lib/providers/apps_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,9 @@ Future<File> downloadFile(String url, String fileName, bool fileNameHasExt,
ext != 'apk') {
ext = 'apk';
}
fileName = fileName.split('/').last; // Ensure the fileName is a file name
fileName = fileNameHasExt
? fileName
: fileName.split('/').last; // Ensure the fileName is a file name
File downloadedFile = File('$destDir/$fileName.$ext');
if (fileNameHasExt) {
// If the user says the filename already has an ext, ignore whatever you inferred from above
Expand Down Expand Up @@ -447,11 +449,15 @@ class AppsProvider with ChangeNotifier {
notificationsProvider?.cancel(notif.id);
int? prevProg;
var fileNameNoExt = '${app.id}-${downloadUrl.hashCode}';
if (source.urlsAlwaysHaveExtension) {
fileNameNoExt =
'$fileNameNoExt.${app.apkUrls[app.preferredApkIndex].key.split('.').last}';
}
var headers = await source.getRequestHeaders(app.additionalSettings,
forAPKDownload: true);
var downloadedFile = await downloadFileWithRetry(
downloadUrl, fileNameNoExt, false, headers: headers,
(double? progress) {
downloadUrl, fileNameNoExt, source.urlsAlwaysHaveExtension,
headers: headers, (double? progress) {
int? prog = progress?.ceil();
if (apps[app.id] != null) {
apps[app.id]!.downloadProgress = progress;
Expand Down Expand Up @@ -485,8 +491,17 @@ class AppsProvider with ChangeNotifier {
.listSync()
.where((e) => e.path.toLowerCase().endsWith('.apk'))
.toList();
newInfo =
await pm.getPackageArchiveInfo(archiveFilePath: apks.first.path);
for (var i = 0; i < apks.length; i++) {
try {
newInfo = await pm.getPackageArchiveInfo(
archiveFilePath: apks.first.path);
break;
} catch (e) {
if (i == apks.length - 1) {
rethrow;
}
}
}
}
if (newInfo == null) {
downloadedFile.delete();
Expand Down Expand Up @@ -844,7 +859,11 @@ class AppsProvider with ChangeNotifier {
if (needBGWorkaround) {
// ignore: use_build_context_synchronously
installApk(downloadedFile, contextIfNewInstall,
needsBGWorkaround: true);
needsBGWorkaround: true,
shizukuPretendToBeGooglePlay: apps[id]!
.app
.additionalSettings['shizukuPretendToBeGooglePlay'] ==
true);
} else {
// ignore: use_build_context_synchronously
sayInstalled = await installApk(downloadedFile, contextIfNewInstall,
Expand Down
1 change: 1 addition & 0 deletions lib/providers/source_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,7 @@ abstract class AppSource {
bool showReleaseDateAsVersionToggle = false;
bool versionDetectionDisallowed = false;
List<String> excludeCommonSettingKeys = [];
bool urlsAlwaysHaveExtension = false;

AppSource() {
name = runtimeType.toString();
Expand Down
Loading

0 comments on commit b05a2ed

Please sign in to comment.