mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-10-31 05:23:28 +01:00 
			
		
		
		
	Fix Uptodown - was completely broken (#1796)
This commit is contained in:
		| @@ -10,6 +10,7 @@ class Uptodown extends AppSource { | |||||||
|     allowSubDomains = true; |     allowSubDomains = true; | ||||||
|     naiveStandardVersionDetection = true; |     naiveStandardVersionDetection = true; | ||||||
|     showReleaseDateAsVersionToggle = true; |     showReleaseDateAsVersionToggle = true; | ||||||
|  |     urlsAlwaysHaveExtension = true; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
| @@ -39,20 +40,29 @@ class Uptodown extends AppSource { | |||||||
|     } |     } | ||||||
|     var html = parse(res.body); |     var html = parse(res.body); | ||||||
|     String? version = html.querySelector('div.version')?.innerHtml; |     String? version = html.querySelector('div.version')?.innerHtml; | ||||||
|     String? apkUrl = |  | ||||||
|         '${standardUrl.split('/').reversed.toList().sublist(1).reversed.join('/')}/post-download'; |  | ||||||
|     String? name = html.querySelector('#detail-app-name')?.innerHtml.trim(); |     String? name = html.querySelector('#detail-app-name')?.innerHtml.trim(); | ||||||
|     String? author = html.querySelector('#author-link')?.innerHtml.trim(); |     String? author = html.querySelector('#author-link')?.innerHtml.trim(); | ||||||
|     var detailElements = html.querySelectorAll('#technical-information td'); |     var detailElements = html.querySelectorAll('#technical-information td'); | ||||||
|     String? appId = (detailElements.elementAtOrNull(2))?.innerHtml.trim(); |     String? appId = (detailElements.elementAtOrNull(2))?.innerHtml.trim(); | ||||||
|     String? dateStr = (detailElements.elementAtOrNull(29))?.innerHtml.trim(); |     String? dateStr = (detailElements.elementAtOrNull(29))?.innerHtml.trim(); | ||||||
|  |     String? fileId = | ||||||
|  |         html.querySelector('#detail-app-name')?.attributes['data-file-id']; | ||||||
|  |     String? extension = html | ||||||
|  |         .querySelectorAll('td') | ||||||
|  |         .where((e) => e.text.toLowerCase().trim() == 'file type') | ||||||
|  |         .firstOrNull | ||||||
|  |         ?.nextElementSibling | ||||||
|  |         ?.text | ||||||
|  |         .toLowerCase() | ||||||
|  |         .trim(); | ||||||
|     return Map.fromEntries([ |     return Map.fromEntries([ | ||||||
|       MapEntry('version', version), |       MapEntry('version', version), | ||||||
|       MapEntry('apkUrl', apkUrl), |  | ||||||
|       MapEntry('appId', appId), |       MapEntry('appId', appId), | ||||||
|       MapEntry('name', name), |       MapEntry('name', name), | ||||||
|       MapEntry('author', author), |       MapEntry('author', author), | ||||||
|       MapEntry('dateStr', dateStr) |       MapEntry('dateStr', dateStr), | ||||||
|  |       MapEntry('fileId', fileId), | ||||||
|  |       MapEntry('extension', extension) | ||||||
|     ]); |     ]); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -64,14 +74,16 @@ class Uptodown extends AppSource { | |||||||
|     var appDetails = |     var appDetails = | ||||||
|         await getAppDetailsFromPage(standardUrl, additionalSettings); |         await getAppDetailsFromPage(standardUrl, additionalSettings); | ||||||
|     var version = appDetails['version']; |     var version = appDetails['version']; | ||||||
|     var apkUrl = appDetails['apkUrl']; |  | ||||||
|     var appId = appDetails['appId']; |     var appId = appDetails['appId']; | ||||||
|  |     var fileId = appDetails['fileId']; | ||||||
|  |     var extension = appDetails['extension']; | ||||||
|     if (version == null) { |     if (version == null) { | ||||||
|       throw NoVersionError(); |       throw NoVersionError(); | ||||||
|     } |     } | ||||||
|     if (apkUrl == null) { |     if (fileId == null) { | ||||||
|       throw NoAPKError(); |       throw NoAPKError(); | ||||||
|     } |     } | ||||||
|  |     var apkUrl = '$standardUrl/$fileId-x'; | ||||||
|     if (appId == null) { |     if (appId == null) { | ||||||
|       throw NoReleasesError(); |       throw NoReleasesError(); | ||||||
|     } |     } | ||||||
| @@ -82,8 +94,8 @@ class Uptodown extends AppSource { | |||||||
|     if (dateStr != null) { |     if (dateStr != null) { | ||||||
|       relDate = parseDateTimeMMMddCommayyyy(dateStr); |       relDate = parseDateTimeMMMddCommayyyy(dateStr); | ||||||
|     } |     } | ||||||
|     return APKDetails( |     return APKDetails(version, [MapEntry('$appId.$extension', apkUrl)], | ||||||
|         version, getApkUrlsFromUrls([apkUrl]), AppNames(author, appName), |         AppNames(author, appName), | ||||||
|         releaseDate: relDate); |         releaseDate: relDate); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| @@ -96,7 +108,7 @@ class Uptodown extends AppSource { | |||||||
|     } |     } | ||||||
|     var html = parse(res.body); |     var html = parse(res.body); | ||||||
|     var finalUrlKey = |     var finalUrlKey = | ||||||
|         html.querySelector('.post-download')?.attributes['data-url']; |         html.querySelector('#detail-download-button')?.attributes['data-url']; | ||||||
|     if (finalUrlKey == null) { |     if (finalUrlKey == null) { | ||||||
|       throw NoAPKError(); |       throw NoAPKError(); | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -225,7 +225,9 @@ Future<File> downloadFile(String url, String fileName, bool fileNameHasExt, | |||||||
|       ext != 'apk') { |       ext != 'apk') { | ||||||
|     ext = 'apk'; |     ext = 'apk'; | ||||||
|   } |   } | ||||||
|   fileName = fileName.split('/').last; // Ensure the fileName is a file name |   fileName = fileNameHasExt | ||||||
|  |       ? fileName | ||||||
|  |       : fileName.split('/').last; // Ensure the fileName is a file name | ||||||
|   File downloadedFile = File('$destDir/$fileName.$ext'); |   File downloadedFile = File('$destDir/$fileName.$ext'); | ||||||
|   if (fileNameHasExt) { |   if (fileNameHasExt) { | ||||||
|     // If the user says the filename already has an ext, ignore whatever you inferred from above |     // If the user says the filename already has an ext, ignore whatever you inferred from above | ||||||
| @@ -447,11 +449,15 @@ class AppsProvider with ChangeNotifier { | |||||||
|       notificationsProvider?.cancel(notif.id); |       notificationsProvider?.cancel(notif.id); | ||||||
|       int? prevProg; |       int? prevProg; | ||||||
|       var fileNameNoExt = '${app.id}-${downloadUrl.hashCode}'; |       var fileNameNoExt = '${app.id}-${downloadUrl.hashCode}'; | ||||||
|  |       if (source.urlsAlwaysHaveExtension) { | ||||||
|  |         fileNameNoExt = | ||||||
|  |             '$fileNameNoExt.${app.apkUrls[app.preferredApkIndex].key.split('.').last}'; | ||||||
|  |       } | ||||||
|       var headers = await source.getRequestHeaders(app.additionalSettings, |       var headers = await source.getRequestHeaders(app.additionalSettings, | ||||||
|           forAPKDownload: true); |           forAPKDownload: true); | ||||||
|       var downloadedFile = await downloadFileWithRetry( |       var downloadedFile = await downloadFileWithRetry( | ||||||
|           downloadUrl, fileNameNoExt, false, headers: headers, |           downloadUrl, fileNameNoExt, source.urlsAlwaysHaveExtension, | ||||||
|           (double? progress) { |           headers: headers, (double? progress) { | ||||||
|         int? prog = progress?.ceil(); |         int? prog = progress?.ceil(); | ||||||
|         if (apps[app.id] != null) { |         if (apps[app.id] != null) { | ||||||
|           apps[app.id]!.downloadProgress = progress; |           apps[app.id]!.downloadProgress = progress; | ||||||
|   | |||||||
| @@ -412,6 +412,7 @@ abstract class AppSource { | |||||||
|   bool showReleaseDateAsVersionToggle = false; |   bool showReleaseDateAsVersionToggle = false; | ||||||
|   bool versionDetectionDisallowed = false; |   bool versionDetectionDisallowed = false; | ||||||
|   List<String> excludeCommonSettingKeys = []; |   List<String> excludeCommonSettingKeys = []; | ||||||
|  |   bool urlsAlwaysHaveExtension = false; | ||||||
|  |  | ||||||
|   AppSource() { |   AppSource() { | ||||||
|     name = runtimeType.toString(); |     name = runtimeType.toString(); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user