From 2059e4fd443e794f080b43bb830eee6cb3cdb259 Mon Sep 17 00:00:00 2001 From: Imran Remtulla Date: Thu, 17 Nov 2022 18:36:05 -0500 Subject: [PATCH] Switched to F-Droid API --- lib/app_sources/fdroid.dart | 30 +++++++++--------------------- 1 file changed, 9 insertions(+), 21 deletions(-) diff --git a/lib/app_sources/fdroid.dart b/lib/app_sources/fdroid.dart index b123cae..ecabc1c 100644 --- a/lib/app_sources/fdroid.dart +++ b/lib/app_sources/fdroid.dart @@ -1,3 +1,5 @@ +import 'dart:convert'; + import 'package:html/parser.dart'; import 'package:http/http.dart'; import 'package:obtainium/custom_errors.dart'; @@ -38,36 +40,22 @@ class FDroid extends AppSource { @override Future getLatestAPKDetails( String standardUrl, List additionalData) async { - Response res = await get(Uri.parse(standardUrl)); + String? appId = tryGettingAppIdFromURL(standardUrl); + Response res = + await get(Uri.parse('https://f-droid.org/api/v1/packages/$appId')); if (res.statusCode == 200) { - var releases = parse(res.body).querySelectorAll('.package-version'); + List releases = jsonDecode(res.body)['packages'] ?? []; if (releases.isEmpty) { throw NoReleasesError(); } - String? latestVersion = releases[0] - .querySelector('.package-version-header b') - ?.innerHtml - .split(' ') - .sublist(1) - .join(' '); + String? latestVersion = releases[0]['versionName']; if (latestVersion == null) { throw NoVersionError(); } List apkUrls = releases - .where((element) => - element - .querySelector('.package-version-header b') - ?.innerHtml - .split(' ') - .sublist(1) - .join(' ') == - latestVersion) + .where((element) => element['versionName'] == latestVersion) .map((e) => - e - .querySelector('.package-version-download a') - ?.attributes['href'] ?? - '') - .where((element) => element.isNotEmpty) + 'https://f-droid.org/repo/${appId}_${e['versionCode']}.apk') .toList(); if (apkUrls.isEmpty) { throw NoAPKError();