mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-10-21 02:03:44 +02:00
Implement suggested version code for third-party F-Droid repos (#2524)
Enable it by default for both official and third-party F-Droid sources. Reuse trySelectingSuggestedVersionCode label from official F-Droid repository source.
This commit is contained in:
committed by
Alexey Arutyunov
parent
b9931e00e7
commit
1b499700fd
@@ -32,6 +32,7 @@ class FDroid extends AppSource {
|
|||||||
GeneratedFormSwitch(
|
GeneratedFormSwitch(
|
||||||
'trySelectingSuggestedVersionCode',
|
'trySelectingSuggestedVersionCode',
|
||||||
label: tr('trySelectingSuggestedVersionCode'),
|
label: tr('trySelectingSuggestedVersionCode'),
|
||||||
|
defaultValue: true,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
|
@@ -29,6 +29,13 @@ class FDroidRepo extends AppSource {
|
|||||||
defaultValue: false,
|
defaultValue: false,
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
GeneratedFormSwitch(
|
||||||
|
'trySelectingSuggestedVersionCode',
|
||||||
|
label: tr('trySelectingSuggestedVersionCode'),
|
||||||
|
defaultValue: true,
|
||||||
|
),
|
||||||
|
],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -170,6 +177,7 @@ class FDroidRepo extends AppSource {
|
|||||||
}
|
}
|
||||||
standardUrl = removeQueryParamsFromUrl(standardUrl);
|
standardUrl = removeQueryParamsFromUrl(standardUrl);
|
||||||
bool pickHighestVersionCode = additionalSettings['pickHighestVersionCode'];
|
bool pickHighestVersionCode = additionalSettings['pickHighestVersionCode'];
|
||||||
|
bool trySelectingSuggestedVersionCode = additionalSettings['trySelectingSuggestedVersionCode'];
|
||||||
if (appIdOrName == null) {
|
if (appIdOrName == null) {
|
||||||
throw NoReleasesError();
|
throw NoReleasesError();
|
||||||
}
|
}
|
||||||
@@ -207,35 +215,49 @@ class FDroidRepo extends AppSource {
|
|||||||
foundApps[0].querySelector('name')?.innerHtml ?? appId;
|
foundApps[0].querySelector('name')?.innerHtml ?? appId;
|
||||||
var appName = foundApps[0].querySelector('name')?.innerHtml ?? appId;
|
var appName = foundApps[0].querySelector('name')?.innerHtml ?? appId;
|
||||||
var releases = foundApps[0].querySelectorAll('package');
|
var releases = foundApps[0].querySelectorAll('package');
|
||||||
|
if (releases.isEmpty) {
|
||||||
|
throw NoReleasesError();
|
||||||
|
}
|
||||||
String? latestVersion = releases[0].querySelector('version')?.innerHtml;
|
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) {
|
if (latestVersion == null) {
|
||||||
throw NoVersionError();
|
throw NoVersionError();
|
||||||
}
|
}
|
||||||
var latestVersionReleases = releases
|
String? marketvercodeStr = foundApps[0].querySelector('marketvercode')?.innerHtml;
|
||||||
.where(
|
int? marketvercode = int.tryParse(marketvercodeStr ?? '');
|
||||||
(element) =>
|
List selectedReleases = [];
|
||||||
element.querySelector('version')?.innerHtml == latestVersion &&
|
if (trySelectingSuggestedVersionCode && marketvercode != null) {
|
||||||
element.querySelector('apkname') != null,
|
selectedReleases = releases.where((e) =>
|
||||||
)
|
int.tryParse(e.querySelector('versioncode')?.innerHtml ?? '') == marketvercode &&
|
||||||
.toList();
|
e.querySelector('apkname') != null
|
||||||
if (latestVersionReleases.length > 1 && pickHighestVersionCode) {
|
).toList();
|
||||||
latestVersionReleases.sort((e1, e2) {
|
|
||||||
return int.parse(
|
|
||||||
e2.querySelector('versioncode')!.innerHtml,
|
|
||||||
).compareTo(int.parse(e1.querySelector('versioncode')!.innerHtml));
|
|
||||||
});
|
|
||||||
latestVersionReleases = [latestVersionReleases[0]];
|
|
||||||
}
|
}
|
||||||
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(
|
.map(
|
||||||
(e) =>
|
(e) =>
|
||||||
'${res.request!.url.toString().split('/').reversed.toList().sublist(1).reversed.join('/')}/${e.querySelector('apkname')!.innerHtml}',
|
'${res.request!.url.toString().split('/').reversed.toList().sublist(1).reversed.join('/')}/${e.querySelector('apkname')!.innerHtml}',
|
||||||
)
|
)
|
||||||
.toList();
|
.toList();
|
||||||
return APKDetails(
|
return APKDetails(
|
||||||
latestVersion,
|
selectedVersion,
|
||||||
getApkUrlsFromUrls(apkUrls),
|
getApkUrlsFromUrls(apkUrls),
|
||||||
AppNames(authorName, appName),
|
AppNames(authorName, appName),
|
||||||
releaseDate: releaseDate,
|
releaseDate: releaseDate,
|
||||||
|
Reference in New Issue
Block a user