From 64f8e2a57b18d1d1b9a4382a63edc83ee52a0086 Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Sun, 18 Feb 2024 17:00:56 -0500 Subject: [PATCH] Improved URL handling for F-Droid third party repos (#1399) --- lib/app_sources/fdroidrepo.dart | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/lib/app_sources/fdroidrepo.dart b/lib/app_sources/fdroidrepo.dart index 7722d9f..43b656f 100644 --- a/lib/app_sources/fdroidrepo.dart +++ b/lib/app_sources/fdroidrepo.dart @@ -120,6 +120,22 @@ class FDroidRepo extends AppSource { var res = await sourceRequest( '$standardUrl${standardUrl.endsWith('/index.xml') ? '' : '/index.xml'}', additionalSettings); + if (res.statusCode != 200) { + var base = standardUrl.endsWith('/index.xml') + ? standardUrl + .split('/') + .reversed + .toList() + .sublist(1) + .reversed + .join('/') + : standardUrl; + res = await sourceRequest('$base/repo/index.xml', additionalSettings); + if (res.statusCode != 200) { + res = await sourceRequest( + '$base/fdroid/repo/index.xml', additionalSettings); + } + } if (res.statusCode == 200) { var body = parse(res.body); var foundApps = body.querySelectorAll('application').where((element) { @@ -168,7 +184,8 @@ class FDroidRepo extends AppSource { latestVersionReleases = [latestVersionReleases[0]]; } List apkUrls = latestVersionReleases - .map((e) => '$standardUrl/${e.querySelector('apkname')!.innerHtml}') + .map((e) => + '${res.request!.url.toString().split('/').reversed.toList().sublist(1).reversed.join('/')}/${e.querySelector('apkname')!.innerHtml}') .toList(); return APKDetails(latestVersion, getApkUrlsFromUrls(apkUrls), AppNames(authorName, appName),