diff --git a/lib/app_sources/fdroid.dart b/lib/app_sources/fdroid.dart index d578e16..f2e711a 100644 --- a/lib/app_sources/fdroid.dart +++ b/lib/app_sources/fdroid.dart @@ -34,23 +34,39 @@ class FDroid implements AppSource { String standardUrl, List additionalData) async { Response res = await get(Uri.parse(standardUrl)); if (res.statusCode == 200) { - var latestReleaseDiv = - parse(res.body).querySelector('#latest.package-version'); - var apkUrl = latestReleaseDiv - ?.querySelector('.package-version-download a') - ?.attributes['href']; - if (apkUrl == null) { - throw noAPKFound; + var releases = parse(res.body).querySelectorAll('.package-version'); + if (releases.isEmpty) { + throw couldNotFindReleases; } - var version = latestReleaseDiv - ?.querySelector('.package-version-header b') + String? latestVersion = releases[0] + .querySelector('.package-version-header b') ?.innerHtml .split(' ') - .last; - if (version == null) { + .sublist(1) + .join(' '); + if (latestVersion == null) { throw couldNotFindLatestVersion; } - return APKDetails(version, [apkUrl]); + List apkUrls = releases + .where((element) => + element + .querySelector('.package-version-header b') + ?.innerHtml + .split(' ') + .sublist(1) + .join(' ') == + latestVersion) + .map((e) => + e + .querySelector('.package-version-download a') + ?.attributes['href'] ?? + '') + .where((element) => element.isNotEmpty) + .toList(); + if (apkUrls.isEmpty) { + throw noAPKFound; + } + return APKDetails(latestVersion, apkUrls); } else { throw couldNotFindReleases; } diff --git a/lib/main.dart b/lib/main.dart index 65efceb..6f5c58f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -14,7 +14,7 @@ import 'package:workmanager/workmanager.dart'; import 'package:dynamic_color/dynamic_color.dart'; import 'package:device_info_plus/device_info_plus.dart'; -const String currentVersion = '0.6.1'; +const String currentVersion = '0.6.2'; const String currentReleaseTag = 'v$currentVersion-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES diff --git a/lib/pages/add_app.dart b/lib/pages/add_app.dart index 310701b..70193cf 100644 --- a/lib/pages/add_app.dart +++ b/lib/pages/add_app.dart @@ -154,7 +154,8 @@ class _AddAppPageState extends State { child: const Text('Add')) ], ), - if (pickedSource != null) + if (pickedSource != null && + pickedSource!.additionalDataDefaults.isNotEmpty) Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ diff --git a/lib/providers/source_provider.dart b/lib/providers/source_provider.dart index 4accdcf..5fffa34 100644 --- a/lib/providers/source_provider.dart +++ b/lib/providers/source_provider.dart @@ -104,6 +104,11 @@ preStandardizeUrl(String url) { if (url.toLowerCase().indexOf('https://www.') == 0) { url = 'https://${url.substring(12)}'; } + url = url + .split('/') + .where((e) => e.isNotEmpty) + .join('/') + .replaceFirst(':/', '://'); return url; } diff --git a/pubspec.yaml b/pubspec.yaml index a65115f..04ee010 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 0.6.1+45 # When changing this, update the tag in main() accordingly +version: 0.6.2+46 # When changing this, update the tag in main() accordingly environment: sdk: '>=2.18.2 <3.0.0'