Exposing Documents directory in Files app requires us to support opening files in place (despite LSSupportsOpeningDocumentsInPlace set to NO in Info.plist), so we now coordinate access to any external file URL
88 lines
3.0 KiB
Swift
88 lines
3.0 KiB
Swift
//
|
|
// UIAlertController+Importing.swift
|
|
// Delta
|
|
//
|
|
// Created by Riley Testut on 1/13/17.
|
|
// Copyright © 2017 Riley Testut. All rights reserved.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
import Roxas
|
|
|
|
extension UIAlertController
|
|
{
|
|
enum ImportType
|
|
{
|
|
case games
|
|
case controllerSkins
|
|
}
|
|
|
|
class func alertController(for importType: ImportType, with errors: Set<DatabaseManager.ImportError>) -> UIAlertController
|
|
{
|
|
var urls = Set<URL>()
|
|
|
|
for error in errors
|
|
{
|
|
switch error
|
|
{
|
|
case .doesNotExist(let url): urls.insert(url)
|
|
case .invalid(let url): urls.insert(url)
|
|
case .unsupported(let url): urls.insert(url)
|
|
case .unknown(let url, _): urls.insert(url)
|
|
case .saveFailed(let errorURLs, _): urls.formUnion(errorURLs)
|
|
}
|
|
}
|
|
|
|
let title: String
|
|
let message: String
|
|
|
|
if let fileURL = urls.first, let error = errors.first, errors.count == 1
|
|
{
|
|
title = String(format: NSLocalizedString("Could not import “%@”.", comment: ""), fileURL.lastPathComponent)
|
|
message = error.localizedDescription
|
|
}
|
|
else
|
|
{
|
|
switch importType
|
|
{
|
|
case .games: title = NSLocalizedString("Error Importing Games", comment: "")
|
|
case .controllerSkins: title = NSLocalizedString("Error Importing Controller Skins", comment: "")
|
|
}
|
|
|
|
if urls.count > 0
|
|
{
|
|
var tempMessage: String
|
|
|
|
switch importType
|
|
{
|
|
case .games: tempMessage = NSLocalizedString("The following game files could not be imported:", comment: "") + "\n"
|
|
case .controllerSkins: tempMessage = NSLocalizedString("The following controller skin files could not be imported:", comment: "") + "\n"
|
|
}
|
|
|
|
let filenames = urls.map { $0.lastPathComponent }.sorted()
|
|
for filename in filenames
|
|
{
|
|
tempMessage += "\n" + filename
|
|
}
|
|
|
|
message = tempMessage
|
|
}
|
|
else
|
|
{
|
|
// This branch can be executed when there are no input URLs when importing, but there is an error saving the database anyway.
|
|
|
|
switch importType
|
|
{
|
|
case .games: message = NSLocalizedString("Delta was unable to import games. Please try again later.", comment: "")
|
|
case .controllerSkins: message = NSLocalizedString("Delta was unable to import controller skins. Please try again later.", comment: "")
|
|
}
|
|
}
|
|
}
|
|
|
|
let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
|
|
alertController.addAction(UIAlertAction(title: RSTSystemLocalizedString("OK"), style: .cancel, handler: nil))
|
|
return alertController
|
|
}
|
|
}
|