mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-10-31 13:33:28 +01: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