mirror of
https://github.com/ImranR98/Obtainium.git
synced 2025-08-10 17:10:15 +02:00
Adding from custom fdroid repos is easier (name based)
This commit is contained in:
@@ -181,7 +181,8 @@
|
|||||||
"removeAppQuestion": "Remove App?",
|
"removeAppQuestion": "Remove App?",
|
||||||
"yesMarkUpdated": "Yes, Mark as Updated",
|
"yesMarkUpdated": "Yes, Mark as Updated",
|
||||||
"fdroid": "F-Droid",
|
"fdroid": "F-Droid",
|
||||||
"appId": "App ID",
|
"appIdOrName": "App ID or Name",
|
||||||
|
"appWithIdOrNameNotFound": "No App was found with that ID or Name",
|
||||||
"reposHaveMultipleApps": "Repos may contain multiple Apps",
|
"reposHaveMultipleApps": "Repos may contain multiple Apps",
|
||||||
"fdroidThirdPartyRepo": "F-Droid Third-Party Repo",
|
"fdroidThirdPartyRepo": "F-Droid Third-Party Repo",
|
||||||
"tooManyRequestsTryAgainInMinutes": {
|
"tooManyRequestsTryAgainInMinutes": {
|
||||||
|
@@ -181,7 +181,8 @@
|
|||||||
"removeAppQuestion": "Rimuovere App?",
|
"removeAppQuestion": "Rimuovere App?",
|
||||||
"yesMarkUpdated": "Sì, contrassegna come aggiornato",
|
"yesMarkUpdated": "Sì, contrassegna come aggiornato",
|
||||||
"fdroid": "F-Droid",
|
"fdroid": "F-Droid",
|
||||||
"appId": "App ID",
|
"appIdOrName": "App ID or Name",
|
||||||
|
"appWithIdOrNameNotFound": "No App was found with that ID or Name",
|
||||||
"reposHaveMultipleApps": "Repos may contain multiple Apps",
|
"reposHaveMultipleApps": "Repos may contain multiple Apps",
|
||||||
"fdroidThirdPartyRepo": "F-Droid Third-Party Repo",
|
"fdroidThirdPartyRepo": "F-Droid Third-Party Repo",
|
||||||
"tooManyRequestsTryAgainInMinutes": {
|
"tooManyRequestsTryAgainInMinutes": {
|
||||||
|
@@ -181,7 +181,8 @@
|
|||||||
"removeAppQuestion": "Remove App?",
|
"removeAppQuestion": "Remove App?",
|
||||||
"yesMarkUpdated": "Yes, Mark as Updated",
|
"yesMarkUpdated": "Yes, Mark as Updated",
|
||||||
"fdroid": "F-Droid",
|
"fdroid": "F-Droid",
|
||||||
"appId": "App ID",
|
"appIdOrName": "App ID or Name",
|
||||||
|
"appWithIdOrNameNotFound": "No App was found with that ID or Name",
|
||||||
"reposHaveMultipleApps": "Repos may contain multiple Apps",
|
"reposHaveMultipleApps": "Repos may contain multiple Apps",
|
||||||
"fdroidThirdPartyRepo": "F-Droid Third-Party Repo",
|
"fdroidThirdPartyRepo": "F-Droid Third-Party Repo",
|
||||||
"tooManyRequestsTryAgainInMinutes": {
|
"tooManyRequestsTryAgainInMinutes": {
|
||||||
|
@@ -12,10 +12,10 @@ class FDroidRepo extends AppSource {
|
|||||||
additionalSourceAppSpecificFormItems = [
|
additionalSourceAppSpecificFormItems = [
|
||||||
[
|
[
|
||||||
GeneratedFormItem(
|
GeneratedFormItem(
|
||||||
label: tr('appId'),
|
label: tr('appIdOrName'),
|
||||||
hint: tr('reposHaveMultipleApps'),
|
hint: tr('reposHaveMultipleApps'),
|
||||||
required: true,
|
required: true,
|
||||||
key: 'appId')
|
key: 'appIdOrName')
|
||||||
]
|
]
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@@ -31,37 +31,46 @@ class FDroidRepo extends AppSource {
|
|||||||
return url.substring(0, match.end);
|
return url.substring(0, match.end);
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
|
||||||
String? tryInferringAppId(String standardUrl,
|
|
||||||
{List<String> additionalData = const []}) {
|
|
||||||
return findGeneratedFormValueByKey(
|
|
||||||
additionalSourceAppSpecificFormItems
|
|
||||||
.reduce((value, element) => [...value, ...element]),
|
|
||||||
additionalData,
|
|
||||||
'appId');
|
|
||||||
}
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Future<APKDetails> getLatestAPKDetails(
|
Future<APKDetails> getLatestAPKDetails(
|
||||||
String standardUrl, List<String> additionalData,
|
String standardUrl, List<String> additionalData,
|
||||||
{bool trackOnly = false}) async {
|
{bool trackOnly = false}) async {
|
||||||
String? appId =
|
String? appIdOrName = findGeneratedFormValueByKey(
|
||||||
tryInferringAppId(standardUrl, additionalData: additionalData);
|
additionalSourceAppSpecificFormItems
|
||||||
if (appId == null) {
|
.reduce((value, element) => [...value, ...element]),
|
||||||
|
additionalData,
|
||||||
|
'appIdOrName');
|
||||||
|
if (appIdOrName == null) {
|
||||||
throw NoReleasesError();
|
throw NoReleasesError();
|
||||||
}
|
}
|
||||||
var res = await get(Uri.parse('$standardUrl/index.xml'));
|
var res = await get(Uri.parse('$standardUrl/index.xml'));
|
||||||
if (res.statusCode == 200) {
|
if (res.statusCode == 200) {
|
||||||
var body = parse(res.body);
|
var body = parse(res.body);
|
||||||
var foundApps = body
|
var foundApps = body.querySelectorAll('application').where((element) {
|
||||||
.querySelectorAll('application')
|
return element.attributes['id'] == appIdOrName;
|
||||||
.where((element) => element.attributes['id'] == appId)
|
}).toList();
|
||||||
.toList();
|
|
||||||
if (foundApps.isEmpty) {
|
if (foundApps.isEmpty) {
|
||||||
throw NoReleasesError();
|
foundApps = body.querySelectorAll('application').where((element) {
|
||||||
|
return element.querySelector('name')?.innerHtml.toLowerCase() ==
|
||||||
|
appIdOrName.toLowerCase();
|
||||||
|
}).toList();
|
||||||
|
}
|
||||||
|
if (foundApps.isEmpty) {
|
||||||
|
foundApps = body.querySelectorAll('application').where((element) {
|
||||||
|
return element
|
||||||
|
.querySelector('name')
|
||||||
|
?.innerHtml
|
||||||
|
.toLowerCase()
|
||||||
|
.contains(appIdOrName.toLowerCase()) ??
|
||||||
|
false;
|
||||||
|
}).toList();
|
||||||
|
}
|
||||||
|
if (foundApps.isEmpty) {
|
||||||
|
throw ObtainiumError(tr('appWithIdOrNameNotFound'));
|
||||||
}
|
}
|
||||||
var authorName = body.querySelector('repo')?.attributes['name'] ?? name;
|
var authorName = body.querySelector('repo')?.attributes['name'] ?? name;
|
||||||
var appName = foundApps[0].querySelector('name')?.innerHtml ?? appId;
|
var appName =
|
||||||
|
foundApps[0].querySelector('name')?.innerHtml ?? appIdOrName;
|
||||||
var releases = foundApps[0].querySelectorAll('package');
|
var releases = foundApps[0].querySelectorAll('package');
|
||||||
String? latestVersion = releases[0].querySelector('version')?.innerHtml;
|
String? latestVersion = releases[0].querySelector('version')?.innerHtml;
|
||||||
if (latestVersion == null) {
|
if (latestVersion == null) {
|
||||||
|
Reference in New Issue
Block a user