mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-10-31 21:43:29 +01:00 
			
		
		
		
	Merge pull request #625 from ImranR98/dev
Automatically fix incorrectly inferred App IDs (#103), Improve version text alignment on app page (#607)
This commit is contained in:
		| @@ -56,7 +56,7 @@ class InstallError extends ObtainiumError { | ||||
| } | ||||
|  | ||||
| class IDChangedError extends ObtainiumError { | ||||
|   IDChangedError() : super(tr('appIdMismatch')); | ||||
|   IDChangedError(String newId) : super('${tr('appIdMismatch')} - $newId'); | ||||
| } | ||||
|  | ||||
| class NotImplementedError extends ObtainiumError { | ||||
|   | ||||
| @@ -21,7 +21,7 @@ import 'package:easy_localization/src/easy_localization_controller.dart'; | ||||
| // ignore: implementation_imports | ||||
| import 'package:easy_localization/src/localization.dart'; | ||||
|  | ||||
| const String currentVersion = '0.13.8'; | ||||
| const String currentVersion = '0.13.9'; | ||||
| const String currentReleaseTag = | ||||
|     'v$currentVersion-beta'; // KEEP THIS IN SYNC WITH GITHUB RELEASES | ||||
|  | ||||
| @@ -38,6 +38,7 @@ List<MapEntry<Locale, String>> supportedLocales = const [ | ||||
|   MapEntry(Locale('fr'), 'Français'), | ||||
|   MapEntry(Locale('es'), 'Español'), | ||||
|   MapEntry(Locale('pl'), 'Polski'), | ||||
|   MapEntry(Locale('ru'), 'Русский язык'), | ||||
| ]; | ||||
| const fallbackLocale = Locale('en'); | ||||
| const localeDir = 'assets/translations'; | ||||
|   | ||||
| @@ -1,3 +1,5 @@ | ||||
| import 'dart:ui'; | ||||
|  | ||||
| import 'package:easy_localization/easy_localization.dart'; | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:flutter/services.dart'; | ||||
| @@ -82,20 +84,20 @@ class _AppPageState extends State<AppPage> { | ||||
|             const SizedBox( | ||||
|               height: 32, | ||||
|             ), | ||||
|             Column( | ||||
|               children: [ | ||||
|                 Text( | ||||
|               tr('latestVersionX', | ||||
|                   args: [app?.app.latestVersion ?? tr('unknown')]), | ||||
|               textAlign: TextAlign.center, | ||||
|               style: Theme.of(context).textTheme.bodyLarge, | ||||
|             ), | ||||
|             Text( | ||||
|               '${tr('installedVersionX', args: [ | ||||
|                   '${tr('latestVersionX', args: [ | ||||
|                         app?.app.latestVersion ?? tr('unknown') | ||||
|                       ])}\n${tr('installedVersionX', args: [ | ||||
|                         app?.app.installedVersion ?? tr('none') | ||||
|                       ])}${trackOnly ? ' ${tr('estimateInBrackets')}\n\n${tr('xIsTrackOnly', args: [ | ||||
|                           tr('app') | ||||
|                         ])}' : ''}', | ||||
|               textAlign: TextAlign.center, | ||||
|               style: Theme.of(context).textTheme.bodyLarge, | ||||
|                   textAlign: TextAlign.end, | ||||
|                   style: Theme.of(context).textTheme.bodyLarge!, | ||||
|                 ), | ||||
|               ], | ||||
|             ), | ||||
|             if (app?.app.installedVersion != null && | ||||
|                 !isVersionDetectionStandard) | ||||
| @@ -329,7 +331,8 @@ class _AppPageState extends State<AppPage> { | ||||
|                 try { | ||||
|                   HapticFeedback.heavyImpact(); | ||||
|                   var res = await appsProvider.downloadAndInstallLatestApps( | ||||
|                       [app!.app.id], globalNavigatorKey.currentContext); | ||||
|                       app?.app.id != null ? [app!.app.id] : [], | ||||
|                       globalNavigatorKey.currentContext); | ||||
|                   if (res.isNotEmpty && mounted) { | ||||
|                     Navigator.of(context).pop(); | ||||
|                   } | ||||
| @@ -426,8 +429,10 @@ class _AppPageState extends State<AppPage> { | ||||
|                         onPressed: app?.downloadProgress != null | ||||
|                             ? null | ||||
|                             : () { | ||||
|                                 appsProvider.removeAppsWithModal( | ||||
|                                     context, [app!.app]).then((value) { | ||||
|                                 appsProvider | ||||
|                                     .removeAppsWithModal( | ||||
|                                         context, app != null ? [app.app] : []) | ||||
|                                     .then((value) { | ||||
|                                   if (value == true) { | ||||
|                                     Navigator.of(context).pop(); | ||||
|                                   } | ||||
|   | ||||
| @@ -202,16 +202,18 @@ class AppsProvider with ChangeNotifier { | ||||
|     // The former case should be handled (give the App its real ID), the latter is a security issue | ||||
|     if (app.id != newInfo.packageName) { | ||||
|       var isTempId = SourceProvider().isTempId(app); | ||||
|       if (apps[app.id] != null && !isTempId) { | ||||
|         throw IDChangedError(); | ||||
|       if (apps[app.id] != null && !isTempId && !app.allowIdChange) { | ||||
|         throw IDChangedError(newInfo.packageName); | ||||
|       } | ||||
|       var idChangeWasAllowed = app.allowIdChange; | ||||
|       app.allowIdChange = false; | ||||
|       var originalAppId = app.id; | ||||
|       app.id = newInfo.packageName; | ||||
|       downloadedFile = downloadedFile.renameSync( | ||||
|           '${downloadedFile.parent.path}/${app.id}-${downloadUrl.hashCode}.${downloadedFile.path.split('.').last}'); | ||||
|       if (apps[originalAppId] != null) { | ||||
|         await removeApps([originalAppId]); | ||||
|         await saveApps([app], onlyIfExists: !isTempId); | ||||
|         await saveApps([app], onlyIfExists: !isTempId && !idChangeWasAllowed); | ||||
|       } | ||||
|     } | ||||
|     return downloadedFile; | ||||
|   | ||||
| @@ -163,6 +163,7 @@ class App { | ||||
|   late DateTime? releaseDate; | ||||
|   late String? changeLog; | ||||
|   late String? overrideSource; | ||||
|   bool allowIdChange = false; | ||||
|   App( | ||||
|       this.id, | ||||
|       this.url, | ||||
| @@ -178,7 +179,8 @@ class App { | ||||
|       {this.categories = const [], | ||||
|       this.releaseDate, | ||||
|       this.changeLog, | ||||
|       this.overrideSource}); | ||||
|       this.overrideSource, | ||||
|       this.allowIdChange = false}); | ||||
|  | ||||
|   @override | ||||
|   String toString() { | ||||
| @@ -209,7 +211,8 @@ class App { | ||||
|       categories: categories, | ||||
|       changeLog: changeLog, | ||||
|       releaseDate: releaseDate, | ||||
|       overrideSource: overrideSource); | ||||
|       overrideSource: overrideSource, | ||||
|       allowIdChange: allowIdChange); | ||||
|  | ||||
|   factory App.fromJson(Map<String, dynamic> json) { | ||||
|     json = appJSONCompatibilityModifiers(json); | ||||
| @@ -241,7 +244,8 @@ class App { | ||||
|             : DateTime.fromMicrosecondsSinceEpoch(json['releaseDate']), | ||||
|         changeLog: | ||||
|             json['changeLog'] == null ? null : json['changeLog'] as String, | ||||
|         overrideSource: json['overrideSource']); | ||||
|         overrideSource: json['overrideSource'], | ||||
|         allowIdChange: json['allowIdChange'] ?? false); | ||||
|   } | ||||
|  | ||||
|   Map<String, dynamic> toJson() => { | ||||
| @@ -259,7 +263,8 @@ class App { | ||||
|         'categories': categories, | ||||
|         'releaseDate': releaseDate?.microsecondsSinceEpoch, | ||||
|         'changeLog': changeLog, | ||||
|         'overrideSource': overrideSource | ||||
|         'overrideSource': overrideSource, | ||||
|         'allowIdChange': allowIdChange | ||||
|       }; | ||||
| } | ||||
|  | ||||
| @@ -613,7 +618,11 @@ class SourceProvider { | ||||
|         categories: currentApp?.categories ?? const [], | ||||
|         releaseDate: apk.releaseDate, | ||||
|         changeLog: apk.changeLog, | ||||
|         overrideSource: overrideSource ?? currentApp?.overrideSource); | ||||
|         overrideSource: overrideSource ?? currentApp?.overrideSource, | ||||
|         allowIdChange: currentApp?.allowIdChange ?? | ||||
|             source.appIdInferIsOptional && | ||||
|                 inferAppIdIfOptional // Optional ID inferring may be incorrect - allow correction on first install | ||||
|         ); | ||||
|   } | ||||
|  | ||||
|   // Returns errors in [results, errors] instead of throwing them | ||||
|   | ||||
							
								
								
									
										72
									
								
								pubspec.lock
									
									
									
									
									
								
							
							
						
						
									
										72
									
								
								pubspec.lock
									
									
									
									
									
								
							| @@ -46,10 +46,10 @@ packages: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: args | ||||
|       sha256: c372bb384f273f0c2a8aaaa226dad84dc27c8519a691b888725dec59518ad53a | ||||
|       sha256: eef6c46b622e0494a36c5a12d10d77fb4e855501a91c1b9ef9339326e58f0596 | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.4.1" | ||||
|     version: "2.4.2" | ||||
|   async: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -134,10 +134,10 @@ packages: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: csslib | ||||
|       sha256: "831883fb353c8bdc1d71979e5b342c7d88acfbc643113c14ae51e2442ea0f20f" | ||||
|       sha256: "706b5707578e0c1b4b7550f64078f0a0f19dec3f50a178ffae7006b0a9ca58fb" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "0.17.3" | ||||
|     version: "1.0.0" | ||||
|   cupertino_icons: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
| @@ -222,10 +222,10 @@ packages: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|       name: file_picker | ||||
|       sha256: "9d6e95ec73abbd31ec54d0e0df8a961017e165aba1395e462e5b31ea0c165daf" | ||||
|       sha256: b1729fc96627dd44012d0a901558177418818d6bd428df59dcfeb594e5f66432 | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "5.3.1" | ||||
|     version: "5.3.2" | ||||
|   flutter: | ||||
|     dependency: "direct main" | ||||
|     description: flutter | ||||
| @@ -322,10 +322,10 @@ packages: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|       name: html | ||||
|       sha256: "58e3491f7bf0b6a4ea5110c0c688877460d1a6366731155c4a4580e7ded773e8" | ||||
|       sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "0.15.3" | ||||
|     version: "0.15.4" | ||||
|   http: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
| @@ -506,42 +506,42 @@ packages: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: path_provider_windows | ||||
|       sha256: d3f80b32e83ec208ac95253e0cd4d298e104fbc63cb29c5c69edaed43b0c69d6 | ||||
|       sha256: "1cb68ba4cd3a795033de62ba1b7b4564dace301f952de6bfb3cd91b202b6ee96" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.1.6" | ||||
|     version: "2.1.7" | ||||
|   permission_handler: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|       name: permission_handler | ||||
|       sha256: "33c6a1253d1f95fd06fa74b65b7ba907ae9811f9d5c1d3150e51417d04b8d6a8" | ||||
|       sha256: "1b6b3e73f0bcbc856548bbdfb1c33084a401c4f143e220629a9055233d76c331" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "10.2.0" | ||||
|     version: "10.3.0" | ||||
|   permission_handler_android: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: permission_handler_android | ||||
|       sha256: d8cc6a62ded6d0f49c6eac337e080b066ee3bce4d405bd9439a61e1f1927bfe8 | ||||
|       sha256: "8f6a95ccbca13766882f95d32684d7c9bfe6c45650c32bedba948ef1c6a4ddf7" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "10.2.1" | ||||
|     version: "10.2.3" | ||||
|   permission_handler_apple: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: permission_handler_apple | ||||
|       sha256: ee96ac32f5a8e6f80756e25b25b9f8e535816c8e6665a96b6d70681f8c4f7e85 | ||||
|       sha256: "08dcb6ce628ac0b257e429944b4c652c2a4e6af725bdf12b498daa2c6b2b1edb" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "9.0.8" | ||||
|     version: "9.1.0" | ||||
|   permission_handler_platform_interface: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: permission_handler_platform_interface | ||||
|       sha256: "68abbc472002b5e6dfce47fe9898c6b7d8328d58b5d2524f75e277c07a97eb84" | ||||
|       sha256: de20a5c3269229c1ae2e5a6b822f6cb59578b23e8255c93fbeebfc82116e6b11 | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "3.9.0" | ||||
|     version: "3.10.0" | ||||
|   permission_handler_windows: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -618,10 +618,10 @@ packages: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|       name: shared_preferences | ||||
|       sha256: "16d3fb6b3692ad244a695c0183fca18cf81fd4b821664394a781de42386bf022" | ||||
|       sha256: "396f85b8afc6865182610c0a2fc470853d56499f75f7499e2a73a9f0539d23d0" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.1.1" | ||||
|     version: "2.1.2" | ||||
|   shared_preferences_android: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -695,10 +695,10 @@ packages: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: sqflite_common | ||||
|       sha256: e77abf6ff961d69dfef41daccbb66b51e9983cdd5cb35bf30733598057401555 | ||||
|       sha256: "8f7603f3f8f126740bc55c4ca2d1027aab4b74a1267a3e31ce51fe40e3b65b8f" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.4.5" | ||||
|     version: "2.4.5+1" | ||||
|   stack_trace: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -775,10 +775,10 @@ packages: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: url_launcher_android | ||||
|       sha256: eed4e6a1164aa9794409325c3b707ff424d4d1c2a785e7db67f8bbda00e36e51 | ||||
|       sha256: "15f5acbf0dce90146a0f5a2c4a002b1814a6303c4c5c075aa2623b2d16156f03" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "6.0.35" | ||||
|     version: "6.0.36" | ||||
|   url_launcher_ios: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -807,10 +807,10 @@ packages: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: url_launcher_platform_interface | ||||
|       sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370" | ||||
|       sha256: bfdfa402f1f3298637d71ca8ecfe840b4696698213d5346e9d12d4ab647ee2ea | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "2.1.2" | ||||
|     version: "2.1.3" | ||||
|   url_launcher_web: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -847,18 +847,18 @@ packages: | ||||
|     dependency: "direct main" | ||||
|     description: | ||||
|       name: webview_flutter | ||||
|       sha256: "5604dac1178680a34fbe4a08c7b69ec42cca6601dc300009ec9ff69bef284cc2" | ||||
|       sha256: "789d52bd789373cc1e100fb634af2127e86c99cf9abde09499743270c5de8d00" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "4.2.1" | ||||
|     version: "4.2.2" | ||||
|   webview_flutter_android: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: webview_flutter_android | ||||
|       sha256: "57a22c86065375c1598b57224f92d6008141be0c877c64100de8bfb6f71083d8" | ||||
|       sha256: "532135f6f6b8030cd039f30eab23f340d650350e29f38e9b37d2eaad028f1018" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "3.7.1" | ||||
|     version: "3.8.0" | ||||
|   webview_flutter_platform_interface: | ||||
|     dependency: transitive | ||||
|     description: | ||||
| @@ -871,26 +871,26 @@ packages: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: webview_flutter_wkwebview | ||||
|       sha256: "6bbc6ade302b842999b27cbaa7171241c273deea8a9c73f92ceb3d811c767de2" | ||||
|       sha256: ecc9e9ea15216afc5ba3b1f14aa19414ceba526e57b19cebd970bfa91a0f4058 | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "3.4.4" | ||||
|     version: "3.5.0" | ||||
|   win32: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: win32 | ||||
|       sha256: "5a751eddf9db89b3e5f9d50c20ab8612296e4e8db69009788d6c8b060a84191c" | ||||
|       sha256: "1414f27dd781737e51afa9711f2ac2ace6ab4498ee98e20863fa5505aa00c58c" | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "4.1.4" | ||||
|     version: "5.0.4" | ||||
|   win32_registry: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|       name: win32_registry | ||||
|       sha256: "1c52f994bdccb77103a6231ad4ea331a244dbcef5d1f37d8462f713143b0bfae" | ||||
|       sha256: e4506d60b7244251bc59df15656a3093501c37fb5af02105a944d73eb95be4c9 | ||||
|       url: "https://pub.dev" | ||||
|     source: hosted | ||||
|     version: "1.1.0" | ||||
|     version: "1.1.1" | ||||
|   xdg_directories: | ||||
|     dependency: transitive | ||||
|     description: | ||||
|   | ||||
| @@ -17,7 +17,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev | ||||
| # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html | ||||
| # In Windows, build-name is used as the major, minor, and patch parts | ||||
| # of the product and file versions while build-number is used as the build suffix. | ||||
| version: 0.13.8+172 # When changing this, update the tag in main() accordingly | ||||
| version: 0.13.9+173 # When changing this, update the tag in main() accordingly | ||||
|  | ||||
| environment: | ||||
|   sdk: '>=2.18.2 <3.0.0' | ||||
|   | ||||
		Reference in New Issue
	
	Block a user