Implemented an own check-in controller for regatta and training check-in

This commit is contained in:
Raimund Wege
2017-09-08 12:49:06 +02:00
parent 187f5cd2b8
commit 5df095375a
10 changed files with 99 additions and 39 deletions
@@ -10,6 +10,44 @@ import Foundation
import UIKit
import AVFoundation
protocol CheckInControllerDelegate: class {
func checkInController(
_ controller: CheckInController, postCompetitorCheckIn
checkInData: CheckInData,
success: @escaping (_ checkIn: CheckIn) -> Void,
failure: @escaping (_ error: Error) -> Void)
func checkInController(
_ controller: CheckInController, postMarkCheckIn
checkInData: CheckInData,
success: @escaping (_ checkIn: CheckIn) -> Void,
failure: @escaping (_ error: Error) -> Void)
}
extension CheckInControllerDelegate {
func checkInController(
_ controller: CheckInController, postCompetitorCheckIn
checkInData: CheckInData,
success: @escaping (_ checkIn: CheckIn) -> Void,
failure: @escaping (_ error: Error) -> Void)
{
controller.postCheckIn(checkInData: checkInData, success: success, failure: failure)
}
func checkInController(
_ controller: CheckInController, postMarkCheckIn
checkInData: CheckInData,
success: @escaping (_ checkIn: CheckIn) -> Void,
failure: @escaping (_ error: Error) -> Void)
{
controller.postCheckIn(checkInData: checkInData, success: success, failure: failure)
}
}
class CheckInController : NSObject {
enum CheckInControllerError: Error {
@@ -18,7 +56,8 @@ class CheckInController : NSObject {
fileprivate unowned let coreDataManager: CoreDataManager
fileprivate weak var viewController: UIViewController?
weak var viewController: UIViewController?
weak var delegate: CheckInControllerDelegate?
init(coreDataManager: CoreDataManager) {
self.coreDataManager = coreDataManager
@@ -62,28 +101,17 @@ class CheckInController : NSObject {
{
switch checkInData.type {
case .competitor:
let title = String(format: Translation.CheckInController.WelcomeAlert.Title.String, checkInData.competitorData.name)
let message = String(format: Translation.CheckInController.WelcomeAlert.Message.String, checkInData.competitorData.sailID)
let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
let okAction = UIAlertAction(title: Translation.Common.OK.String, style: .default) { [weak self] action in
self?.postCheckIn(checkInData: checkInData, success: success, failure: failure)
}
let cancelAction = UIAlertAction(title: Translation.CheckInController.WelcomeAlert.CancelAction.Title.String, style: .cancel) { [weak self] action in
self?.didCancelCheckIn(failure: failure)
}
alertController.addAction(okAction)
alertController.addAction(cancelAction)
viewController?.present(alertController, animated: true)
delegate?.checkInController(self, postCompetitorCheckIn: checkInData, success: success, failure: failure)
break
case .mark:
self.postCheckIn(checkInData: checkInData, success: success, failure: failure)
delegate?.checkInController(self, postMarkCheckIn: checkInData, success: success, failure: failure)
break
}
}
// MARK: - PostCheckIn
fileprivate func postCheckIn(
func postCheckIn(
checkInData: CheckInData,
success: @escaping (_ checkIn: CheckIn) -> Void,
failure: @escaping (_ error: Error) -> Void)
@@ -129,15 +157,15 @@ class CheckInController : NSObject {
// MARK: - Finish, Cancel, Fail
fileprivate func didFinishCheckIn(_ checkIn: CheckIn, success:(_ checkIn: CheckIn) -> Void) {
func didFinishCheckIn(_ checkIn: CheckIn, success:(_ checkIn: CheckIn) -> Void) {
success(checkIn)
}
fileprivate func didCancelCheckIn(failure:(_ error: Error) -> Void) {
func didCancelCheckIn(failure:(_ error: Error) -> Void) {
failure(CheckInControllerError.cancelled)
}
fileprivate func didFailCheckIn(withError error: Error, failure: @escaping (_ error: Error) -> Void) {
func didFailCheckIn(withError error: Error, failure: @escaping (_ error: Error) -> Void) {
let alertController = UIAlertController(title: Translation.Common.Error.String, message: error.localizedDescription, preferredStyle: .alert)
let okAction = UIAlertAction(title: Translation.Common.OK.String, style: .default) { action in
failure(error)
@@ -57,7 +57,7 @@ class CreateTrainingViewController: UIViewController {
}
fileprivate func createTrainingSuccess(checkInData: CheckInData) {
checkInController.checkInWithViewController(self, checkInData: checkInData, success: { checkIn in
trainingCheckInController.checkInWithViewController(self, checkInData: checkInData, success: { checkIn in
// TODO
}) { error in
self.createTrainingFailure(error: error)
@@ -70,9 +70,8 @@ class CreateTrainingViewController: UIViewController {
// MARK: - Propeties
fileprivate lazy var checkInController: CheckInController = {
let checkInController = CheckInController(coreDataManager: self.trainingCoreDataManager)
return checkInController
fileprivate lazy var trainingCheckInController: TrainingCheckInController = {
return TrainingCheckInController(coreDataManager: self.trainingCoreDataManager)
}()
}
@@ -10,4 +10,33 @@ import UIKit
class RegattaCheckInController: CheckInController {
override init(coreDataManager: CoreDataManager) {
super.init(coreDataManager: coreDataManager)
delegate = self
}
}
extension RegattaCheckInController: CheckInControllerDelegate {
func checkInController(
_ controller: CheckInController,
postCompetitorCheckIn checkInData: CheckInData,
success: @escaping (CheckIn) -> Void,
failure: @escaping (Error) -> Void)
{
let title = String(format: Translation.RegattaCheckInController.WelcomeAlert.Title.String, checkInData.competitorData.name)
let message = String(format: Translation.RegattaCheckInController.WelcomeAlert.Message.String, checkInData.competitorData.sailID)
let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
let okAction = UIAlertAction(title: Translation.Common.OK.String, style: .default) { (action) in
controller.postCheckIn(checkInData: checkInData, success: success, failure: failure)
}
let cancelAction = UIAlertAction(title: Translation.RegattaCheckInController.WelcomeAlert.CancelAction.Title.String, style: .cancel) { (action) in
controller.didCancelCheckIn(failure: failure)
}
alertController.addAction(okAction)
alertController.addAction(cancelAction)
viewController?.present(alertController, animated: true)
}
}
@@ -157,7 +157,7 @@ class RegattaCheckInTableViewController: CheckInTableViewController {
fileprivate func reviewNewCheckIn(completion: @escaping (_ checkIn: CheckIn?) -> Void) {
guard let urlString = Preferences.newCheckInURL else { completion(nil); return }
guard let checkInData = CheckInData(urlString: urlString) else { completion(nil); return }
checkInController.checkInWithViewController(self, checkInData: checkInData, success: { checkIn in
regattaCheckInController.checkInWithViewController(self, checkInData: checkInData, success: { (checkIn) in
Preferences.newCheckInURL = nil
completion(checkIn)
}) { (error) in
@@ -259,9 +259,8 @@ class RegattaCheckInTableViewController: CheckInTableViewController {
// MARK: - Properties
lazy var regattaCheckInController: CheckInController = {
let checkInController = CheckInController(coreDataManager: self.regattaCoreDataManager)
return checkInController
lazy var regattaCheckInController: RegattaCheckInController = {
return RegattaCheckInController(coreDataManager: self.regattaCoreDataManager)
}()
lazy var regattaCoreDataManager: RegattaCoreDataManager = {
@@ -143,9 +143,8 @@ class ScanViewController: UIViewController {
// MARK: - Properties
fileprivate lazy var checkInController: CheckInController = {
let checkInController = CheckInController(coreDataManager: self.coreDataManager)
return checkInController
fileprivate lazy var regattaCheckInController: RegattaCheckInController = {
return RegattaCheckInController(coreDataManager: self.coreDataManager)
}()
// MARK: - Helper
@@ -204,7 +203,7 @@ extension ScanViewController: AVCaptureMetadataOutputObjectsDelegate {
// MARK: - CheckIn
fileprivate func checkIn(withCheckInData checkInData: CheckInData) {
checkInController.checkInWithViewController(self, checkInData: checkInData, success: { [weak self] checkIn in
regattaCheckInController.checkInWithViewController(self, checkInData: checkInData, success: { [weak self] (checkIn) in
self?.checkInSuccess(checkIn: checkIn)
}) { [weak self] error in
self?.checkInFailure(error: error)
@@ -9,5 +9,14 @@
import UIKit
class TrainingCheckInController: CheckInController {
override init(coreDataManager: CoreDataManager) {
super.init(coreDataManager: coreDataManager)
delegate = self
}
}
extension TrainingCheckInController: CheckInControllerDelegate {
}
@@ -81,18 +81,15 @@ class TrainingTableViewController: CheckInTableViewController {
// MARK: - Properties
fileprivate lazy var trainingCheckInController: TrainingCheckInController = {
let trainingCheckInController = TrainingCheckInController(coreDataManager: self.trainingCoreDataManager)
return trainingCheckInController
return TrainingCheckInController(coreDataManager: self.trainingCoreDataManager)
}()
fileprivate lazy var trainingController: TrainingController = {
let trainingController = TrainingController(baseURLString: "https://ubilabstest.sapsailing.com")
return trainingController
return TrainingController(baseURLString: "https://ubilabstest.sapsailing.com")
}()
fileprivate lazy var trainingCoreDataManager: TrainingCoreDataManager = {
let trainingCoreDataManager = TrainingCoreDataManager(name: self.userName)
return trainingCoreDataManager
return TrainingCoreDataManager(name: self.userName)
}()
}
@@ -37,10 +37,10 @@ class Translation: NSObject {
}
}
// MARK: - CheckInController
// MARK: - RegattaCheckInController
struct CheckInController { static let Key = "\(CheckInController.self)"
struct WelcomeAlert { static let Key = "\(CheckInController.Key).\(WelcomeAlert.self)"
struct RegattaCheckInController { static let Key = "\(RegattaCheckInController.self)"
struct WelcomeAlert { static let Key = "\(RegattaCheckInController.Key).\(WelcomeAlert.self)"
struct Title { static let Key = "\(WelcomeAlert.Key).\(Title.self)"
static let String = NSLocalizedString(Key, comment: "")
}