mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-10-25 03:43:46 +02:00 
			
		
		
		
	Compare commits
	
		
			12 Commits
		
	
	
		
			b9931e00e7
			...
			a56069e881
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | a56069e881 | ||
|  | a34e45363b | ||
|  | e1a89f5f67 | ||
|  | f7f6e0cde7 | ||
|  | 5a58522bf6 | ||
|  | 9347af2090 | ||
|  | b294e57367 | ||
|  | 4234e16432 | ||
|  | a64f2e1af7 | ||
|  | 926462407c | ||
|  | 1b499700fd | ||
|  | 930a4b411e | 
							
								
								
									
										2
									
								
								.flutter
									
									
									
									
									
								
							
							
								
								
								
								
								
							
						
						
									
										2
									
								
								.flutter
									
									
									
									
									
								
							 Submodule .flutter updated: 05db968908...a402d9a437
									
								
							| @@ -1,6 +1,7 @@ | |||||||
| import java.io.FileInputStream | import java.io.FileInputStream | ||||||
| import java.util.Properties | import java.util.Properties | ||||||
| import com.android.build.api.variant.FilterConfiguration.FilterType.* | import com.android.build.api.variant.FilterConfiguration.FilterType.* | ||||||
|  | import com.android.build.gradle.internal.api.ApkVariantOutputImpl | ||||||
|  |  | ||||||
| plugins { | plugins { | ||||||
|     id("com.android.application") |     id("com.android.application") | ||||||
| @@ -86,18 +87,17 @@ android { | |||||||
|  |  | ||||||
| val abiCodes = mapOf("x86_64" to 1, "armeabi-v7a" to 2, "arm64-v8a" to 3) | val abiCodes = mapOf("x86_64" to 1, "armeabi-v7a" to 2, "arm64-v8a" to 3) | ||||||
|  |  | ||||||
| androidComponents { | android.applicationVariants.configureEach { | ||||||
|     onVariants { variant -> |     val variant = this | ||||||
|     variant.outputs.forEach { output -> |     variant.outputs.forEach { output -> | ||||||
|             val name = output.filters.find { it.filterType == ABI }?.identifier |         val abiVersionCode = abiCodes[output.filters.find { it.filterType == "ABI" }?.identifier] | ||||||
|             val baseAbiCode = abiCodes[name] ?: 0 |         if (abiVersionCode != null) { | ||||||
|             if (baseAbiCode != null) { |             (output as ApkVariantOutputImpl).versionCodeOverride = variant.versionCode * 10 + abiVersionCode | ||||||
|                 output.versionCode.set(baseAbiCode + ((output.versionCode.get() ?: 0) * 10)) |  | ||||||
|             } |  | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  |  | ||||||
| dependencies { | dependencies { | ||||||
|     coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5") |     coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5") | ||||||
| } | } | ||||||
|   | |||||||
| @@ -335,7 +335,7 @@ | |||||||
|     "foregroundService": "Obtainium フォアグラウンドサービス", |     "foregroundService": "Obtainium フォアグラウンドサービス", | ||||||
|     "foregroundServiceExplanation": "アップデート確認にフォアグラウンドサービスを使用する(より信頼性が高いが、より電力を消費する)", |     "foregroundServiceExplanation": "アップデート確認にフォアグラウンドサービスを使用する(より信頼性が高いが、より電力を消費する)", | ||||||
|     "fgServiceNotice": "この通知は、バックグラウンドでアップデートを確認するために必要です(OSの設定で非表示にできます)。", |     "fgServiceNotice": "この通知は、バックグラウンドでアップデートを確認するために必要です(OSの設定で非表示にできます)。", | ||||||
|     "excludeSecrets": "秘密を除く", |     "excludeSecrets": "シークレットを除く", | ||||||
|     "removeAppQuestion": { |     "removeAppQuestion": { | ||||||
|         "one": "アプリを削除しますか?", |         "one": "アプリを削除しますか?", | ||||||
|         "other": "アプリを削除しますか?" |         "other": "アプリを削除しますか?" | ||||||
|   | |||||||
| @@ -253,8 +253,8 @@ | |||||||
|     "backgroundUpdateLimitsExplanation": "Успешность фоновой установки можно определить только после открытия Obtainium", |     "backgroundUpdateLimitsExplanation": "Успешность фоновой установки можно определить только после открытия Obtainium", | ||||||
|     "verifyLatestTag": "Проверять метку «latest»", |     "verifyLatestTag": "Проверять метку «latest»", | ||||||
|     "intermediateLinkRegex": "Фильтр для «промежуточной» ссылки для посещения", |     "intermediateLinkRegex": "Фильтр для «промежуточной» ссылки для посещения", | ||||||
|     "filterByLinkText": "Фильтрация ссылок по тексту ссылки", |     "filterByLinkText": "Фильтровать ссылки по тексту ссылки", | ||||||
|     "matchLinksOutsideATags": "Сопоставляйте ссылки вне тегов <a>", |     "matchLinksOutsideATags": "Сопоставлять ссылки вне тегов <a>", | ||||||
|     "intermediateLinkNotFound": "Промежуточная ссылка не найдена", |     "intermediateLinkNotFound": "Промежуточная ссылка не найдена", | ||||||
|     "intermediateLink": "Промежуточная ссылка", |     "intermediateLink": "Промежуточная ссылка", | ||||||
|     "exemptFromBackgroundUpdates": "Исключить из фоновых обновлений (если включено)", |     "exemptFromBackgroundUpdates": "Исключить из фоновых обновлений (если включено)", | ||||||
|   | |||||||
| @@ -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,38 +215,58 @@ 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? changeLog = foundApps[0].querySelector('changelog')?.innerHtml; | ||||||
|       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 |       String? appAuthorName = foundApps[0].querySelector('author')?.innerHtml; | ||||||
|  |       if (appAuthorName != null) { | ||||||
|  |         authorName = appAuthorName; | ||||||
|  |       } | ||||||
|  |       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, | ||||||
|  |         changeLog: changeLog, | ||||||
|       ); |       ); | ||||||
|     } else { |     } else { | ||||||
|       throw getObtainiumHttpError(res); |       throw getObtainiumHttpError(res); | ||||||
|   | |||||||
							
								
								
									
										22
									
								
								pubspec.lock
									
									
									
									
									
								
							
							
						
						
									
										22
									
								
								pubspec.lock
									
									
									
									
									
								
							| @@ -232,10 +232,10 @@ packages: | |||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
|       name: dynamic_color |       name: dynamic_color | ||||||
|       sha256: eae98052fa6e2826bdac3dd2e921c6ce2903be15c6b7f8b6d8a5d49b5086298d |       sha256: "43a5a6679649a7731ab860334a5812f2067c2d9ce6452cf069c5e0c25336c17c" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "1.7.0" |     version: "1.8.1" | ||||||
|   easy_localization: |   easy_localization: | ||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
| @@ -288,10 +288,10 @@ packages: | |||||||
|     dependency: "direct main" |     dependency: "direct main" | ||||||
|     description: |     description: | ||||||
|       name: file_picker |       name: file_picker | ||||||
|       sha256: e7e16c9d15c36330b94ca0e2ad8cb61f93cd5282d0158c09805aed13b5452f22 |       sha256: f2d9f173c2c14635cc0e9b14c143c49ef30b4934e8d1d274d6206fcb0086a06f | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "10.3.2" |     version: "10.3.3" | ||||||
|   fixnum: |   fixnum: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -572,10 +572,10 @@ packages: | |||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: leak_tracker |       name: leak_tracker | ||||||
|       sha256: "8dcda04c3fc16c14f48a7bb586d4be1f0d1572731b6d81d51772ef47c02081e0" |       sha256: "33e2e26bdd85a0112ec15400c8cbffea70d0f9c3407491f672a2fad47915e2de" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "11.0.1" |     version: "11.0.2" | ||||||
|   leak_tracker_flutter_testing: |   leak_tracker_flutter_testing: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -1059,10 +1059,10 @@ packages: | |||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: url_launcher_android |       name: url_launcher_android | ||||||
|       sha256: "69ee86740f2847b9a4ba6cffa74ed12ce500bbe2b07f3dc1e643439da60637b7" |       sha256: "07cffecb7d68cbc6437cd803d5f11a86fe06736735c3dfe46ff73bcb0f958eed" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "6.3.18" |     version: "6.3.21" | ||||||
|   url_launcher_ios: |   url_launcher_ios: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -1155,10 +1155,10 @@ packages: | |||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
|       name: webview_flutter_android |       name: webview_flutter_android | ||||||
|       sha256: "9a25f6b4313978ba1c2cda03a242eea17848174912cfb4d2d8ee84a556f248e3" |       sha256: "3c4eb4fcc252b40c2b5ce7be20d0481428b70f3ff589b0a8b8aaeb64c6bed701" | ||||||
|       url: "https://pub.dev" |       url: "https://pub.dev" | ||||||
|     source: hosted |     source: hosted | ||||||
|     version: "4.10.1" |     version: "4.10.2" | ||||||
|   webview_flutter_platform_interface: |   webview_flutter_platform_interface: | ||||||
|     dependency: transitive |     dependency: transitive | ||||||
|     description: |     description: | ||||||
| @@ -1209,4 +1209,4 @@ packages: | |||||||
|     version: "6.3.0" |     version: "6.3.0" | ||||||
| sdks: | sdks: | ||||||
|   dart: ">=3.9.0 <4.0.0" |   dart: ">=3.9.0 <4.0.0" | ||||||
|   flutter: ">=3.29.0" |   flutter: ">=3.35.0" | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user