mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-10-22 18:33:45 +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
						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