Compare commits

...

2 Commits

Author SHA1 Message Date
9ef26b3a4a F-Droid bugfixes (#73, #74, #75) + UI tweak 2022-10-29 22:57:21 -04:00
27ee6b9e88 Bugfix: Mass install not working 2022-10-29 18:59:27 -04:00
6 changed files with 46 additions and 19 deletions

View File

@ -34,23 +34,39 @@ class FDroid implements AppSource {
String standardUrl, List<String> 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<String> 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;
}

View File

@ -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.0';
const String currentVersion = '0.6.2';
const String currentReleaseTag =
'v$currentVersion-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES

View File

@ -154,7 +154,8 @@ class _AddAppPageState extends State<AddAppPage> {
child: const Text('Add'))
],
),
if (pickedSource != null)
if (pickedSource != null &&
pickedSource!.additionalDataDefaults.isNotEmpty)
Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [

View File

@ -310,15 +310,20 @@ class AppsPageState extends State<AppsPage> {
message:
'${existingUpdateIdsAllOrSelected.length} update${existingUpdateIdsAllOrSelected.length == 1 ? '' : 's'} and ${newInstallIdsAllOrSelected.length} new install${newInstallIdsAllOrSelected.length == 1 ? '' : 's'}.',
items: formInputs,
defaultValues: const ['true'],
defaultValues: [
'true',
existingUpdateIdsAllOrSelected.isEmpty
? 'true'
: ''
],
initValid: true,
);
}).then((values) {
if (values != null) {
bool shouldInstallUpdates =
values.length < 2 || values[0] == 'true';
bool shouldInstallNew =
values.length >= 2 && values[1] == 'true';
values.isEmpty || values[0] == 'true';
bool shouldInstallNew = values.isEmpty ||
(values.length >= 2 && values[1] == 'true');
settingsProvider
.getInstallPermission()
.then((_) {

View File

@ -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;
}

View File

@ -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.0+44 # 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'