Skip to content

Instantly share code, notes, and snippets.

@128keaton
Created October 30, 2017 18:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save 128keaton/d9664a0e6d2e0009dca2e0eb105af2d0 to your computer and use it in GitHub Desktop.
Save 128keaton/d9664a0e6d2e0009dca2e0eb105af2d0 to your computer and use it in GitHub Desktop.
//
// 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