From f47711500367e04379514213782e9d99848372ad Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Tue, 23 Jan 2024 17:15:39 -0600 Subject: [PATCH] Always asks to add source when installing app if not yet added --- AltStore/App Detail/AppViewController.swift | 44 ++++++++++++--------- AltStore/Browse/BrowseViewController.swift | 27 +++++++------ AltStore/Managing Apps/AppManager.swift | 1 + AltStore/News/NewsViewController.swift | 25 ++++++------ 4 files changed, 56 insertions(+), 41 deletions(-) diff --git a/AltStore/App Detail/AppViewController.swift b/AltStore/App Detail/AppViewController.swift index dcd45739..019992e0 100644 --- a/AltStore/App Detail/AppViewController.swift +++ b/AltStore/App Detail/AppViewController.swift @@ -525,32 +525,40 @@ extension AppViewController { guard self.app.installedApp == nil else { return } - let group = AppManager.shared.install(self.app, presentingViewController: self) { (result) in - do - { - _ = try result.get() - } - catch OperationError.cancelled - { - // Ignore - } - catch - { + Task(priority: .userInitiated) { + let group = await AppManager.shared.installAsync(self.app, presentingViewController: self) { (result) in + do + { + _ = try result.get() + } + catch OperationError.cancelled + { + // Ignore + } + catch + { + DispatchQueue.main.async { + let toastView = ToastView(error: error) + toastView.opensErrorLog = true + toastView.show(in: self) + } + } + DispatchQueue.main.async { let toastView = ToastView(error: error, opensLog: true) toastView.show(in: self) + self.bannerView.button.progress = nil + self.navigationBarDownloadButton.progress = nil + self.update() } } - DispatchQueue.main.async { - self.bannerView.button.progress = nil - self.navigationBarDownloadButton.progress = nil - self.update() + if !group.progress.isCancelled + { + self.bannerView.button.progress = group.progress + self.navigationBarDownloadButton.progress = group.progress } } - - self.bannerView.button.progress = group.progress - self.navigationBarDownloadButton.progress = group.progress } func open(_ installedApp: InstalledApp) diff --git a/AltStore/Browse/BrowseViewController.swift b/AltStore/Browse/BrowseViewController.swift index 47a1295e..affc5f27 100644 --- a/AltStore/Browse/BrowseViewController.swift +++ b/AltStore/Browse/BrowseViewController.swift @@ -562,20 +562,23 @@ private extension BrowseViewController toastView.show(in: self) return } - - if let installedApp = app.installedApp, installedApp.isUpdateAvailable - { - AppManager.shared.update(installedApp, presentingViewController: self, completionHandler: finish(_:)) - } - else - { - AppManager.shared.install(app, presentingViewController: self, completionHandler: finish(_:)) - } - - UIView.performWithoutAnimation { - self.collectionView.reloadItems(at: [indexPath]) + + Task(priority: .userInitiated) { @MainActor in + if let installedApp = app.installedApp, installedApp.isUpdateAvailable + { + AppManager.shared.update(installedApp, presentingViewController: self, completionHandler: finish(_:)) + } + else + { + await AppManager.shared.installAsync(app, presentingViewController: self, completionHandler: finish(_:)) + } + + UIView.performWithoutAnimation { + self.collectionView.reloadItems(at: [indexPath]) + } } + @MainActor func finish(_ result: Result) { DispatchQueue.main.async { diff --git a/AltStore/Managing Apps/AppManager.swift b/AltStore/Managing Apps/AppManager.swift index 29a2fa44..f04fc60a 100644 --- a/AltStore/Managing Apps/AppManager.swift +++ b/AltStore/Managing Apps/AppManager.swift @@ -453,6 +453,7 @@ extension AppManager completionHandler(.failure(error)) let group = RefreshGroup(context: context) + group.progress.cancel() return group } diff --git a/AltStore/News/NewsViewController.swift b/AltStore/News/NewsViewController.swift index 791647ad..45a9a4bd 100644 --- a/AltStore/News/NewsViewController.swift +++ b/AltStore/News/NewsViewController.swift @@ -337,19 +337,22 @@ private extension NewsViewController return } - if let installedApp = storeApp.installedApp, installedApp.isUpdateAvailable - { - AppManager.shared.update(installedApp, presentingViewController: self, completionHandler: finish(_:)) - } - else - { - AppManager.shared.install(storeApp, presentingViewController: self, completionHandler: finish(_:)) - } - - UIView.performWithoutAnimation { - self.collectionView.reloadSections(IndexSet(integer: indexPath.section)) + Task(priority: .userInitiated) { @MainActor in + if let installedApp = storeApp.installedApp, installedApp.isUpdateAvailable + { + AppManager.shared.update(installedApp, presentingViewController: self, completionHandler: finish(_:)) + } + else + { + await AppManager.shared.installAsync(storeApp, presentingViewController: self, completionHandler: finish(_:)) + } + + UIView.performWithoutAnimation { + self.collectionView.reloadSections(IndexSet(integer: indexPath.section)) + } } + @MainActor func finish(_ result: Result) { DispatchQueue.main.async {