KMHeaderFooterManager.swift 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import Foundation
  2. private let kHeaderFooterInfoSaveKey = "kHeaderFooterInfoSaveKey"
  3. class KMHeaderFooterManager: NSObject, NSCoding {
  4. var headFooterObjects: [KMHeaderFooterObject] = []
  5. override init() {
  6. super.init()
  7. }
  8. required init?(coder: NSCoder) {
  9. headFooterObjects = coder.decodeObject(forKey: "headFooterObjects") as? [KMHeaderFooterObject] ?? []
  10. }
  11. func encode(with coder: NSCoder) {
  12. coder.encode(headFooterObjects, forKey: "headFooterObjects")
  13. }
  14. static func defaultManager() -> KMHeaderFooterManager {
  15. let storedData = UserDefaults.standard.value(forKey: kHeaderFooterInfoSaveKey) as? Data
  16. if let storedData = storedData {
  17. if let manager = try? NSKeyedUnarchiver.unarchiveTopLevelObjectWithData(storedData) as? KMHeaderFooterManager {
  18. return manager
  19. }
  20. }
  21. let manager = KMHeaderFooterManager()
  22. if manager.headFooterObjects.isEmpty {
  23. manager.headFooterObjects = []
  24. }
  25. return manager
  26. }
  27. var onlyHeaderFooterObjects: [KMHeaderFooterObject] {
  28. return headFooterObjects.filter { !$0.isBates }
  29. }
  30. var onlyBatesObjects: [KMHeaderFooterObject] {
  31. var arr: [KMHeaderFooterObject] = []
  32. for obj in headFooterObjects {
  33. if KMDataVersionManager.updateBatesData() {
  34. KMDataVersionManager.refrshBatesData(bates: obj)
  35. store()
  36. }
  37. if obj.isBates {
  38. arr.append(obj)
  39. }
  40. }
  41. return arr
  42. }
  43. var dateFormatArray: [String] {
  44. return [
  45. "m/d",
  46. "m/d/yy",
  47. "m/d/yyyy",
  48. "mm/dd/yy",
  49. "mm/dd/yyyy",
  50. "d/m/yy",
  51. "d/m/yyyy",
  52. "dd/mm/yy",
  53. "dd/mm/yyyy",
  54. "mm/yy",
  55. "mm/yyyy",
  56. "m.d.yy",
  57. "m.d.yyyy",
  58. "mm.dd.yy",
  59. "mm.dd.yyyy",
  60. "mm.yy",
  61. "mm.yyyy",
  62. "d.m.yy",
  63. "d.m.yyyy",
  64. "dd.mm.yy",
  65. "dd.mm.yyyy",
  66. "yy-mm-dd",
  67. "yyyy-mm-dd"
  68. ]
  69. }
  70. func removeHeaderFooter(_ obj: KMHeaderFooterObject) -> Bool {
  71. headFooterObjects.removeAll { $0 === obj }
  72. store()
  73. return true
  74. }
  75. func removeAllHeaderFooter() -> Bool {
  76. headFooterObjects.removeAll()
  77. store()
  78. return true
  79. }
  80. func addHeaderFooter(_ obj: KMHeaderFooterObject) -> Bool {
  81. headFooterObjects.insert(obj, at: 0)
  82. store()
  83. return true
  84. }
  85. func store() {
  86. do {
  87. let encodedObject = try NSKeyedArchiver.archivedData(withRootObject: self, requiringSecureCoding: false)
  88. UserDefaults.standard.set(encodedObject, forKey: kHeaderFooterInfoSaveKey)
  89. UserDefaults.standard.synchronize()
  90. } catch {
  91. print("Error while encoding object: \(error)")
  92. }
  93. }
  94. func clearStored() {
  95. UserDefaults.standard.removeObject(forKey: kHeaderFooterInfoSaveKey)
  96. UserDefaults.standard.synchronize()
  97. }
  98. func fetchHeaderFooterAvailableName() -> String {
  99. var availableIndex = 0
  100. let nameArray = onlyHeaderFooterObjects.map { $0.id }
  101. for string in nameArray {
  102. if string.hasPrefix("HeaderFooter") {
  103. let index = Int(string.suffix(from: "HeaderFooter".endIndex)) ?? 0
  104. if index >= availableIndex {
  105. availableIndex = index + 1
  106. }
  107. }
  108. }
  109. return "HeaderFooter\(availableIndex)"
  110. }
  111. func fetchBatesAvailableName() -> String {
  112. var availableIndex = 0
  113. let nameArray = onlyBatesObjects.map { $0.id }
  114. for string in nameArray {
  115. if string.hasPrefix("Bates") {
  116. let index = Int(string.suffix(from: "Bates".endIndex)) ?? 0
  117. if index >= availableIndex {
  118. availableIndex = index + 1
  119. }
  120. }
  121. }
  122. return "Bates\(availableIndex)"
  123. }
  124. }