Created
October 30, 2017 18:50
-
-
Save 128keaton/d9664a0e6d2e0009dca2e0eb105af2d0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// SubmitHelper.swift | |
// Testà | |
// | |
// Created by Keaton Burleson on 10/30/17. | |
// Copyright © 2017 er2. All rights reserved. | |
// | |
import Foundation | |
import SystemServices | |
class SubmitHelper { | |
var testData: TestData? = nil | |
let systemServices = SystemServices() | |
init(testData: TestData) { | |
self.testData = testData | |
} | |
/* Generates a string containing helpful information */ | |
public func getTestingNotes() -> String { | |
var testingNotes: String = "" | |
testingNotes += "Grade \(calculateGrade())\n" | |
testingNotes += "Cellular: \(testData?.getCellularCapacity() ?? "No")\n" | |
testingNotes += "Device Capacity: \(self.roundTo(capacity: getDeviceSize()))GB \n" | |
testingNotes += "Device Name: \(getDeviceName())" | |
return testingNotes | |
} | |
public func getDeviceName() -> String{ | |
var name = "iPhone 4S" | |
let model = systemServices.systemDeviceTypeFormatted! | |
switch model { | |
case "iPhone5,1": | |
name = "iPhone 5" | |
case "iPhone5,2": | |
name = "iPhone 5" | |
case "iPhone5,3": | |
name = "iPhone 5C" | |
case "iPhone6,1": | |
name = "iPhone 5S" | |
case "iPhone6,2": | |
name = "iPhone 5S" | |
case "iPhone7,2": | |
name = "iPhone 6" | |
case "iPhone7,1": | |
name = "iPhone Plus" | |
case "iPhone8,1": | |
name = "iPhone 6S" | |
case "iPhone8,2": | |
name = "iPhone 6S Plus" | |
default: | |
return name | |
} | |
return name | |
} | |
public func getCarrierType() -> String? { | |
if systemServices.deviceModel == "A1160" || systemServices.deviceModel == "A1161" { | |
// iPhone 7/7+ Verizon/Sprint CDMA+GSM | |
return "Verizon/Sprint CDMA+GSM" | |
} else if systemServices.deviceModel == "A1778" || systemServices.deviceModel == "A1784" { | |
// iPhone 7/7+ AT&T/T-Mobile GSM Global | |
return "AT&T/T-Mobile GSM Global" | |
} else if systemServices.deviceModel == "A1688" || systemServices.deviceModel == "A1687" { | |
// iPhone 6s/6s+ GSM/CDMA | |
return "Sprint/T-Mobile/Verizon CDMA+GSM" | |
} else if systemServices.deviceModel == "A1634" || systemServices.deviceModel == "A1633" { | |
// iPhone 6s/6s+ GSM | |
return "AT&T GSM" | |
} else if systemServices.deviceModel == "A1662" { | |
// iPhone SE+ AT&T/T-Mobile/Verizon GSM+CDMA | |
return "AT&T/T-Mobile/Verizon CDMA+GSM" | |
} else if systemServices.deviceModel == "A1723" { | |
// iPhone SE+ Global/Sprint GSM/CDMA | |
return "Global/Sprint GSM+CDMA" | |
} else if systemServices.deviceModel == "A1549" || systemServices.deviceModel == "A1522" { | |
// iPhone 6/6+ (indeterminate) | |
// Requires order number verification. | |
return nil | |
} else if systemServices.deviceModel == "A1586" || systemServices.deviceModel == "A1524" { | |
// iPhone 6 Global/Sprint CDMA | |
return "Global/Sprint CDMA" | |
} else if systemServices.deviceModel == "A1533" { | |
// iPhone 6/6+ (indeterminate) | |
// Requires order number verification. | |
return nil | |
} else if systemServices.deviceModel == "A1428" { | |
// iPhone 5 | |
return "AT&T/T-Mobile GSM" | |
}else if systemServices.deviceModel == "A1532" { | |
// iPhone 5C (indeterminate) | |
// Requires order number verification. | |
return nil | |
}else if systemServices.deviceModel == "A1429" { | |
// iPhone 5 | |
return "Sprint/Verizon CDMA" | |
}else if systemServices.deviceModel == "A1387" { | |
// iPhone 4S Global | |
return "AT&T/T-Mobile/Verizon CDMA+GSM" | |
} | |
return "AT&T/T-Mobile GSM" | |
} | |
// Gets carrier and bands for the iPhone 6. | |
// made because model numbers are same for the CDMA/GSM models :eyeroll: | |
private func getCarrierTypeForiPhone6OrderNumber(orderNumber: String) -> String { | |
// Default Carrier | |
var carrierType = "AT&T GSM" | |
if orderNumber == "MG562LL/A" || orderNumber == "MG5D2LL/A" || orderNumber == "MG592LL/A" || orderNumber == "MG542LL/A" || orderNumber == "MG5A2LL/A" || orderNumber == "MG572LL/A" || orderNumber == "MG552LL/A" || orderNumber == "MMG582LL/A" { | |
// iPhone 6 (GSM) T-Mobile | |
carrierType = "T-Mobile GSM" | |
} else if orderNumber == "MG5Y2LL/A" || orderNumber == "MG652LL/A" || orderNumber == "MG622LL/A" || orderNumber == "MG5W2LL/A" || orderNumber == "MG632LL/A" || orderNumber == "MG602LL/A" || orderNumber == "MG5X2LL/A" || orderNumber == "MG642LL/A" || orderNumber == "MG612LL/A" { | |
// iPhone 6 (CDMA) Verizon Wireless | |
carrierType = "Verizon CDMA" | |
} | |
return carrierType | |
} | |
// Gets carrier and bands for the iPhone 6+. | |
// made because model numbers are same for the CDMA/GSM models :eyeroll: | |
private func getCarrierTypeForiPhone6PlusOrderNumber(orderNumber: String) -> String { | |
// Default Carrier | |
var carrierType = "AT&T GSM" | |
if orderNumber == "MGC12LL/A" || orderNumber == "MGC72LL/A" || orderNumber == "MGC42LL/A" || orderNumber == "MGAX2LL/A" || orderNumber == "MGC52LL/A" || orderNumber == "MGC22LL/A" || orderNumber == "MGC02LL/A" || orderNumber == "MGC62LL/A" { | |
// iPhone 6+ (GSM) T-Mobile | |
carrierType = "T-Mobile GSM" | |
} else if orderNumber == "MGCM2LL/A" || orderNumber == "MGCU2LL/A" || orderNumber == "MGCQ2LL/A" || orderNumber == "MGCK2LL/A" || orderNumber == "MGCR2LL/A" || orderNumber == "MGCN2LL/A" || orderNumber == "MGCL2LL/A" || orderNumber == "MGCT2LL/A" || orderNumber == "MGCP2LL/A" { | |
// iPhone 6+ (CDMA) Verizon Wireless | |
carrierType = "Verizon CDMA" | |
} | |
return carrierType | |
} | |
// Gets carrier and bands for the iPhone 5S. | |
// made because model numbers are same for the CDMA/GSM models :eyeroll: | |
private func getCarrierTypeForiPhone5SOrderNumber(orderNumber: String) -> String { | |
// Default Carrier | |
var carrierType = "AT&T/T-Mobile GSM" | |
if orderNumber == "ME341LL/A" || orderNumber == "ME344LL/A" || orderNumber == "ME347LL/A" || orderNumber == "ME343LL/A" || orderNumber == "ME346LL/A" || orderNumber == "ME349LL/A" || orderNumber == "ME342LL/A" || orderNumber == "ME345LL/A" || orderNumber == "ME348LL/A" { | |
// iPhone 5S (CDMA) Verizon Wireless | |
carrierType = "Verizon CDMA" | |
} | |
return carrierType | |
} | |
// Gets carrier and bands for the iPhone 5C. | |
// made because model numbers are same for the CDMA/GSM models :eyeroll: | |
private func getCarrierTypeForiPhone5COrderNumber(orderNumber: String) -> String { | |
// Default Carrier | |
var carrierType = "AT&T GSM" | |
if orderNumber == "ME553LL/A" || orderNumber == "MF154LL/A" || orderNumber == "ME557LL/A" || orderNumber == "MF158LL/A" || orderNumber == "ME554LL/A" || orderNumber == "MF155LL/A" || orderNumber == "ME555LL/A" || orderNumber == "MF156LL/A" || orderNumber == "ME556LL/A" || orderNumber == "MF157LL/A" || orderNumber == "MGFG2LL/A" || orderNumber == "MGFL2LL/A" || orderNumber == "MGFH2LL/A" || orderNumber == "MGFJ2LL/A" || orderNumber == "MGFK2LL/A" { | |
// iPhone 5C (CDMA) Verizon Wireless | |
carrierType = "Verizon CDMA" | |
}else if orderNumber == "ME553LL/A" || orderNumber == "MF154LL/A" || orderNumber == "ME557LL/A" || orderNumber == "MF158LL/A" || orderNumber == "ME554LL/A" || orderNumber == "MF155LL/A" || orderNumber == "ME555LL/A" || orderNumber == "MF156LL/A" || orderNumber == "ME556LL/A" || orderNumber == "MF157LL/A" || orderNumber == "MGFG2LL/A" || orderNumber == "MGFL2LL/A" || orderNumber == "MGFH2LL/A" || orderNumber == "MGFJ2LL/A" || orderNumber == "MGFK2LL/A"{ | |
// iPhone 5C (GSM) T-Mobile | |
carrierType = "T-Mobile GSM" | |
} | |
return carrierType | |
} | |
public func getCellularTypeForOrderNumber(orderNumber: String) -> String{ | |
let name = self.getDeviceName() | |
switch name { | |
case "iPhone 5C": | |
return getCarrierTypeForiPhone5COrderNumber(orderNumber: orderNumber) | |
case "iPhone 5c": | |
return getCarrierTypeForiPhone5COrderNumber(orderNumber: orderNumber) | |
case "iPhone 5S": | |
return getCarrierTypeForiPhone5SOrderNumber(orderNumber: orderNumber) | |
case "iPhone 5s": | |
return getCarrierTypeForiPhone5SOrderNumber(orderNumber: orderNumber) | |
case "iPhone 6": | |
return getCarrierTypeForiPhone6OrderNumber(orderNumber: orderNumber) | |
case "iPhone 6+": | |
return getCarrierTypeForiPhone6PlusOrderNumber(orderNumber: orderNumber) | |
case "iPhone 6 Plus": | |
return getCarrierTypeForiPhone6PlusOrderNumber(orderNumber: orderNumber) | |
default: | |
return "AT&T GSM" | |
} | |
} | |
/* Gets the device size and converts it to a decimal */ | |
public func getDeviceSize() -> Decimal { | |
guard let deviceSizeDecimal = Decimal(string: systemServices.diskSpace!) | |
else { | |
return Decimal() | |
} | |
return deviceSizeDecimal | |
} | |
/* Rounds capacity to nearest device size */ | |
public func roundTo(capacity: Decimal) -> Int { | |
if capacity > 16.0 && capacity < 32 { | |
return 32 | |
} else if capacity > 32 && capacity < 64 { | |
return 64 | |
} else if capacity > 64 && capacity < 128 { | |
return 128 | |
} else if capacity > 128 && capacity < 256 { | |
return 256 | |
} | |
return 16 | |
} | |
public func calculateGrade() -> String { | |
if initalTestsPassed() { | |
if self.testData?.screenCracked != true && self.testData?.screenGrade != .poor { | |
if self.testData?.screenGrade == .perfect { | |
// Perfect Screen | |
return "A" | |
} else if self.testData?.screenGrade == .fair { | |
// Fair Screen | |
return "B" | |
} | |
} | |
// Screen is either cracked or graded as poorly | |
return "C" | |
} | |
// We do not replace camera, lock button, volume buttons, home button, speakers, or headphone jacks. If one of these is bad, we fail. | |
return "D" | |
} | |
private func initalTestsPassed() -> Bool { | |
return ((self.testData?.cameraPass)! && (self.testData?.lockButtonPass)! && (self.testData?.volumeButtonPass)! && (self.testData?.headphonePass)! && (self.testData?.speakerPass)!) | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment