KMHeaderFooterManager.swift 4.5 KB

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