mirror of
				https://github.com/ImranR98/Obtainium.git
				synced 2025-10-31 05:23:28 +01:00 
			
		
		
		
	BG task: notif, retry, log tweaks
This commit is contained in:
		| @@ -118,7 +118,7 @@ Future<void> bgUpdateCheck(int taskId, Map<String, dynamic>? params) async { | |||||||
|   var settingsProvider = SettingsProvider(); |   var settingsProvider = SettingsProvider(); | ||||||
|   await settingsProvider.initializeSettings(); |   await settingsProvider.initializeSettings(); | ||||||
|  |  | ||||||
|   int maxAttempts = 5; |   int maxAttempts = 4; | ||||||
|  |  | ||||||
|   params ??= {}; |   params ??= {}; | ||||||
|   if (params['toCheck'] == null) { |   if (params['toCheck'] == null) { | ||||||
| @@ -137,13 +137,14 @@ Future<void> bgUpdateCheck(int taskId, Map<String, dynamic>? params) async { | |||||||
|  |  | ||||||
|   if (!installMode) { |   if (!installMode) { | ||||||
|     var didCompleteChecking = false; |     var didCompleteChecking = false; | ||||||
|  |     CheckingUpdatesNotification? notif; | ||||||
|     for (int i = 0; i < toCheck.length; i++) { |     for (int i = 0; i < toCheck.length; i++) { | ||||||
|       var appId = toCheck[i]; |       var appId = toCheck[i]; | ||||||
|       AppInMemory? app = appsProvider.apps[appId]; |       AppInMemory? app = appsProvider.apps[appId]; | ||||||
|       if (app?.app.installedVersion != null) { |       if (app?.app.installedVersion != null) { | ||||||
|         try { |         try { | ||||||
|           logs.add('BG update task $taskId: Checking for updates for $appId.'); |           notificationsProvider.notify( | ||||||
|           notificationsProvider.notify(checkingUpdatesNotification, |               notif = CheckingUpdatesNotification(app?.name ?? appId), | ||||||
|               cancelExisting: true); |               cancelExisting: true); | ||||||
|           App? newApp = await appsProvider.checkUpdate(appId); |           App? newApp = await appsProvider.checkUpdate(appId); | ||||||
|           if (newApp != null) { |           if (newApp != null) { | ||||||
| @@ -166,7 +167,7 @@ Future<void> bgUpdateCheck(int taskId, Map<String, dynamic>? params) async { | |||||||
|                 ? (e.remainingMinutes * 60) |                 ? (e.remainingMinutes * 60) | ||||||
|                 : e is ClientException |                 : e is ClientException | ||||||
|                     ? (15 * 60) |                     ? (15 * 60) | ||||||
|                     : 1; |                     : (attemptCount ^ 2); | ||||||
|             logs.add( |             logs.add( | ||||||
|                 'BG update task $taskId: Will continue in $remainingSeconds seconds (with $appId moved to the end of the line).'); |                 'BG update task $taskId: Will continue in $remainingSeconds seconds (with $appId moved to the end of the line).'); | ||||||
|             var remainingToCheck = moveStrToEnd(toCheck.sublist(i), appId); |             var remainingToCheck = moveStrToEnd(toCheck.sublist(i), appId); | ||||||
| @@ -183,18 +184,23 @@ Future<void> bgUpdateCheck(int taskId, Map<String, dynamic>? params) async { | |||||||
|                 .notify(ErrorCheckingUpdatesNotification(e.toString())); |                 .notify(ErrorCheckingUpdatesNotification(e.toString())); | ||||||
|           } |           } | ||||||
|         } finally { |         } finally { | ||||||
|           notificationsProvider.cancel(checkingUpdatesNotification.id); |           if (notif != null) { | ||||||
|  |             notificationsProvider.cancel(notif.id); | ||||||
|  |           } | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|     } |     } | ||||||
|     if (didCompleteChecking && toInstall.isNotEmpty) { |     if (didCompleteChecking && toInstall.isNotEmpty) { | ||||||
|       logs.add( |       logs.add( | ||||||
|           'BG update task $taskId: Scheduling install task to run immediately.'); |           'BG update task $taskId: Done. Scheduling install task to run immediately.'); | ||||||
|       AndroidAlarmManager.oneShot( |       AndroidAlarmManager.oneShot( | ||||||
|           const Duration(minutes: 0), taskId + 1, bgUpdateCheck, |           const Duration(minutes: 0), taskId + 1, bgUpdateCheck, | ||||||
|           params: {'toCheck': [], 'toInstall': toInstall}); |           params: {'toCheck': [], 'toInstall': toInstall}); | ||||||
|  |     } else if (didCompleteChecking) { | ||||||
|  |       logs.add('BG install task $taskId: Done.'); | ||||||
|     } |     } | ||||||
|   } else { |   } else { | ||||||
|  |     var didCompleteInstalling = false; | ||||||
|     toInstall = moveStrToEnd(toInstall, obtainiumId); |     toInstall = moveStrToEnd(toInstall, obtainiumId); | ||||||
|     for (var i = 0; i < toInstall.length; i++) { |     for (var i = 0; i < toInstall.length; i++) { | ||||||
|       String appId = toInstall[i]; |       String appId = toInstall[i]; | ||||||
| @@ -207,11 +213,14 @@ Future<void> bgUpdateCheck(int taskId, Map<String, dynamic>? params) async { | |||||||
|         await Future.delayed(const Duration( |         await Future.delayed(const Duration( | ||||||
|             seconds: |             seconds: | ||||||
|                 5)); // Just in case task ending causes install fail (not clear) |                 5)); // Just in case task ending causes install fail (not clear) | ||||||
|  |         if (i == (toCheck.length - 1)) { | ||||||
|  |           didCompleteInstalling = true; | ||||||
|  |         } | ||||||
|       } catch (e) { |       } catch (e) { | ||||||
|         logs.add( |         logs.add( | ||||||
|             'BG install task $taskId: Got error on updating $appId \'${e.toString()}\'.'); |             'BG install task $taskId: Got error on updating $appId \'${e.toString()}\'.'); | ||||||
|         if (attemptCount < maxAttempts) { |         if (attemptCount < maxAttempts) { | ||||||
|           var remainingSeconds = 1; |           var remainingSeconds = attemptCount; | ||||||
|           logs.add( |           logs.add( | ||||||
|               'BG install task $taskId: Will continue in $remainingSeconds seconds (with $appId moved to the end of the line).'); |               'BG install task $taskId: Will continue in $remainingSeconds seconds (with $appId moved to the end of the line).'); | ||||||
|           var remainingToInstall = moveStrToEnd(toInstall.sublist(i), appId); |           var remainingToInstall = moveStrToEnd(toInstall.sublist(i), appId); | ||||||
| @@ -228,9 +237,11 @@ Future<void> bgUpdateCheck(int taskId, Map<String, dynamic>? params) async { | |||||||
|               .notify(ErrorCheckingUpdatesNotification(e.toString())); |               .notify(ErrorCheckingUpdatesNotification(e.toString())); | ||||||
|         } |         } | ||||||
|       } |       } | ||||||
|  |       if (didCompleteInstalling) { | ||||||
|  |         logs.add('BG install task $taskId: Done.'); | ||||||
|  |       } | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
|   logs.add('BG ${installMode ? 'install' : 'update'} task $taskId: Done.'); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| void main() async { | void main() async { | ||||||
|   | |||||||
| @@ -117,14 +117,17 @@ final completeInstallationNotification = ObtainiumNotification( | |||||||
|     tr('completeAppInstallationNotifDescription'), |     tr('completeAppInstallationNotifDescription'), | ||||||
|     Importance.max); |     Importance.max); | ||||||
|  |  | ||||||
| final checkingUpdatesNotification = ObtainiumNotification( | class CheckingUpdatesNotification extends ObtainiumNotification { | ||||||
|  |   CheckingUpdatesNotification(String appName) | ||||||
|  |       : super( | ||||||
|             4, |             4, | ||||||
|             tr('checkingForUpdates'), |             tr('checkingForUpdates'), | ||||||
|     '', |             appName, | ||||||
|             'BG_UPDATE_CHECK', |             'BG_UPDATE_CHECK', | ||||||
|             tr('checkingForUpdates'), |             tr('checkingForUpdates'), | ||||||
|             tr('checkingForUpdatesNotifDescription'), |             tr('checkingForUpdatesNotifDescription'), | ||||||
|             Importance.min); |             Importance.min); | ||||||
|  | } | ||||||
|  |  | ||||||
| class NotificationsProvider { | class NotificationsProvider { | ||||||
|   FlutterLocalNotificationsPlugin notifications = |   FlutterLocalNotificationsPlugin notifications = | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user