From 782d055bc3c6411f2798c3bacddabf256e03b044 Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Tue, 4 Apr 2023 20:21:24 -0400 Subject: [PATCH] Added cloudflare.f-droid.org support --- lib/app_sources/fdroid.dart | 13 ++++++++----- lib/providers/source_provider.dart | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/app_sources/fdroid.dart b/lib/app_sources/fdroid.dart index 3c2bba8..f0279fe 100644 --- a/lib/app_sources/fdroid.dart +++ b/lib/app_sources/fdroid.dart @@ -14,12 +14,14 @@ class FDroid extends AppSource { @override String standardizeURL(String url) { RegExp standardUrlRegExB = - RegExp('^https?://$host/+[^/]+/+packages/+[^/]+'); + RegExp('^https?://(cloudflare\\.)?$host/+[^/]+/+packages/+[^/]+'); RegExpMatch? match = standardUrlRegExB.firstMatch(url.toLowerCase()); if (match != null) { - url = 'https://$host/packages/${Uri.parse(url).pathSegments.last}'; + url = + 'https://${Uri.parse(url.substring(0, match.end)).host}/packages/${Uri.parse(url).pathSegments.last}'; } - RegExp standardUrlRegExA = RegExp('^https?://$host/+packages/+[^/]+'); + RegExp standardUrlRegExA = + RegExp('^https?://(cloudflare\\.)?$host/+packages/+[^/]+'); match = standardUrlRegExA.firstMatch(url.toLowerCase()); if (match == null) { throw InvalidURLError(name); @@ -61,9 +63,10 @@ class FDroid extends AppSource { Map additionalSettings, ) async { String? appId = tryInferringAppId(standardUrl); + String host = Uri.parse(standardUrl).host; return getAPKUrlsFromFDroidPackagesAPIResponse( - await get(Uri.parse('https://f-droid.org/api/v1/packages/$appId')), - 'https://f-droid.org/repo/$appId', + await get(Uri.parse('https://$host/api/v1/packages/$appId')), + 'https://$host/repo/$appId', standardUrl); } } diff --git a/lib/providers/source_provider.dart b/lib/providers/source_provider.dart index 1239eef..be09d43 100644 --- a/lib/providers/source_provider.dart +++ b/lib/providers/source_provider.dart @@ -363,7 +363,7 @@ class SourceProvider { url = preStandardizeUrl(url); AppSource? source; for (var s in sources.where((element) => element.host != null)) { - if (url.contains('://${s.host}')) { + if (RegExp('://(.+\\.)?${s.host}').hasMatch(url)) { source = s; break; }