mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-10-20 17:53:46 +02:00
Merge pull request #2530 from ar-lex/feature/3rd-party-fdroid-suggested-version
Implement suggested version code for third-party F-Droid repos (#2524)
This commit is contained in:
@@ -32,6 +32,7 @@ class FDroid extends AppSource {
|
||||
GeneratedFormSwitch(
|
||||
'trySelectingSuggestedVersionCode',
|
||||
label: tr('trySelectingSuggestedVersionCode'),
|
||||
defaultValue: true,
|
||||
),
|
||||
],
|
||||
[
|
||||
|
@@ -29,6 +29,13 @@ class FDroidRepo extends AppSource {
|
||||
defaultValue: false,
|
||||
),
|
||||
],
|
||||
[
|
||||
GeneratedFormSwitch(
|
||||
'trySelectingSuggestedVersionCode',
|
||||
label: tr('trySelectingSuggestedVersionCode'),
|
||||
defaultValue: true,
|
||||
),
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
@@ -170,6 +177,7 @@ class FDroidRepo extends AppSource {
|
||||
}
|
||||
standardUrl = removeQueryParamsFromUrl(standardUrl);
|
||||
bool pickHighestVersionCode = additionalSettings['pickHighestVersionCode'];
|
||||
bool trySelectingSuggestedVersionCode = additionalSettings['trySelectingSuggestedVersionCode'];
|
||||
if (appIdOrName == null) {
|
||||
throw NoReleasesError();
|
||||
}
|
||||
@@ -207,35 +215,49 @@ class FDroidRepo extends AppSource {
|
||||
foundApps[0].querySelector('name')?.innerHtml ?? appId;
|
||||
var appName = foundApps[0].querySelector('name')?.innerHtml ?? appId;
|
||||
var releases = foundApps[0].querySelectorAll('package');
|
||||
if (releases.isEmpty) {
|
||||
throw NoReleasesError();
|
||||
}
|
||||
String? latestVersion = releases[0].querySelector('version')?.innerHtml;
|
||||
String? added = releases[0].querySelector('added')?.innerHtml;
|
||||
DateTime? releaseDate = added != null ? DateTime.parse(added) : null;
|
||||
if (latestVersion == null) {
|
||||
throw NoVersionError();
|
||||
}
|
||||
var latestVersionReleases = releases
|
||||
.where(
|
||||
(element) =>
|
||||
element.querySelector('version')?.innerHtml == latestVersion &&
|
||||
element.querySelector('apkname') != null,
|
||||
)
|
||||
.toList();
|
||||
if (latestVersionReleases.length > 1 && pickHighestVersionCode) {
|
||||
latestVersionReleases.sort((e1, e2) {
|
||||
return int.parse(
|
||||
e2.querySelector('versioncode')!.innerHtml,
|
||||
).compareTo(int.parse(e1.querySelector('versioncode')!.innerHtml));
|
||||
});
|
||||
latestVersionReleases = [latestVersionReleases[0]];
|
||||
String? marketvercodeStr = foundApps[0].querySelector('marketvercode')?.innerHtml;
|
||||
int? marketvercode = int.tryParse(marketvercodeStr ?? '');
|
||||
List selectedReleases = [];
|
||||
if (trySelectingSuggestedVersionCode && marketvercode != null) {
|
||||
selectedReleases = releases.where((e) =>
|
||||
int.tryParse(e.querySelector('versioncode')?.innerHtml ?? '') == marketvercode &&
|
||||
e.querySelector('apkname') != null
|
||||
).toList();
|
||||
}
|
||||
List<String> apkUrls = latestVersionReleases
|
||||
if (selectedReleases.isEmpty) {
|
||||
selectedReleases = releases.where((e) =>
|
||||
e.querySelector('version')?.innerHtml == latestVersion &&
|
||||
e.querySelector('apkname') != null
|
||||
).toList();
|
||||
if (selectedReleases.length > 1 && pickHighestVersionCode) {
|
||||
selectedReleases.sort((e1, e2) {
|
||||
return int.parse(e2.querySelector('versioncode')!.innerHtml)
|
||||
.compareTo(int.parse(e1.querySelector('versioncode')!.innerHtml));
|
||||
});
|
||||
selectedReleases = [selectedReleases[0]];
|
||||
}
|
||||
}
|
||||
String? selectedVersion = selectedReleases[0].querySelector('version')?.innerHtml;
|
||||
if (selectedVersion == null) {
|
||||
throw NoVersionError();
|
||||
}
|
||||
String? added = selectedReleases[0].querySelector('added')?.innerHtml;
|
||||
DateTime? releaseDate = added != null ? DateTime.parse(added) : null;
|
||||
List<String> apkUrls = selectedReleases
|
||||
.map(
|
||||
(e) =>
|
||||
'${res.request!.url.toString().split('/').reversed.toList().sublist(1).reversed.join('/')}/${e.querySelector('apkname')!.innerHtml}',
|
||||
)
|
||||
.toList();
|
||||
return APKDetails(
|
||||
latestVersion,
|
||||
selectedVersion,
|
||||
getApkUrlsFromUrls(apkUrls),
|
||||
AppNames(authorName, appName),
|
||||
releaseDate: releaseDate,
|
||||
|
Reference in New Issue
Block a user