[AltStore] Update apps from UpdatesViewController

This commit is contained in:
Riley Testut
2019-06-17 14:49:23 -07:00
parent 9538d05f9f
commit d65cef8817
10 changed files with 231 additions and 30 deletions

View File

@@ -14,6 +14,11 @@ import AltKit
import Roxas
extension AppManager
{
static let didFetchAppsNotification = Notification.Name("com.altstore.AppManager.didFetchApps")
}
class AppManager
{
static let shared = AppManager()
@@ -75,6 +80,26 @@ extension AppManager
}
}
extension AppManager
{
func fetchApps(completionHandler: @escaping (Result<[App], Error>) -> Void)
{
let fetchAppsOperation = FetchAppsOperation()
fetchAppsOperation.resultHandler = { (result) in
switch result
{
case .failure(let error):
completionHandler(.failure(error))
case .success(let apps):
completionHandler(.success(apps))
NotificationCenter.default.post(name: AppManager.didFetchAppsNotification, object: self)
}
}
self.operationQueue.addOperation(fetchAppsOperation)
}
}
extension AppManager
{
func install(_ app: App, presentingViewController: UIViewController, completionHandler: @escaping (Result<InstalledApp, Error>) -> Void) -> Progress

View File

@@ -11,13 +11,7 @@ import Roxas
class AppsViewController: UITableViewController
{
private lazy var dataSource = self.makeDataSource()
private lazy var dateFormatter: DateFormatter = {
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
return dateFormatter
}()
private lazy var dataSource = self.makeDataSource()
override func viewDidLoad()
{
@@ -82,23 +76,19 @@ private extension AppsViewController
func fetchApps()
{
DatabaseManager.shared.persistentContainer.performBackgroundTask { (context) in
let appsFileURL = Bundle.main.url(forResource: "Apps", withExtension: "json")!
AppManager.shared.fetchApps { (result) in
do
{
let data = try Data(contentsOf: appsFileURL)
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .formatted(self.dateFormatter)
decoder.managedObjectContext = context
_ = try decoder.decode([App].self, from: data)
try context.save()
let apps = try result.get()
try apps.first?.managedObjectContext?.save()
}
catch
{
fatalError("Failed to save fetched apps. \(error)")
DispatchQueue.main.async {
let toastView = RSTToastView(text: NSLocalizedString("Failed to fetch apps", comment: ""), detailText: error.localizedDescription)
toastView.tintColor = .altPurple
toastView.show(in: self.navigationController?.view ?? self.view, duration: 2.0)
}
}
}
}