mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-19 20:25:31 +00:00
Implemented an own check-in controller for regatta and training check-in
This commit is contained in:
Binary file not shown.
@@ -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: "")
|
||||
}
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user