NCManageDatabase.swift 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  1. //
  2. // NCManageDatabase.swift
  3. // Nextcloud
  4. //
  5. // Created by Marino Faggiana on 06/05/17.
  6. // Copyright © 2017 TWS. All rights reserved.
  7. //
  8. import RealmSwift
  9. class NCManageDatabase: NSObject {
  10. static let sharedInstance: NCManageDatabase = {
  11. let instance = NCManageDatabase()
  12. return instance
  13. }()
  14. override init() {
  15. let dirGroup = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: k_capabilitiesGroups)
  16. var config = Realm.Configuration()
  17. config.fileURL = dirGroup?.appendingPathComponent("\(appDatabaseNextcloud)/\(k_databaseDefault)")
  18. Realm.Configuration.defaultConfiguration = config
  19. }
  20. //MARK: -
  21. //MARK: Utility Database
  22. func clearTable(_ table : Object.Type, account: String?) {
  23. let results : Results<Object>
  24. let realm = try! Realm()
  25. if (account != nil) {
  26. results = realm.objects(table).filter("account = '\(account!)'")
  27. } else {
  28. results = realm.objects(table)
  29. }
  30. try! realm.write {
  31. realm.delete(results)
  32. }
  33. }
  34. func removeDB() {
  35. let realmURL = Realm.Configuration.defaultConfiguration.fileURL!
  36. let realmURLs = [
  37. realmURL,
  38. realmURL.appendingPathExtension("lock"),
  39. realmURL.appendingPathExtension("note"),
  40. realmURL.appendingPathExtension("management")
  41. ]
  42. for URL in realmURLs {
  43. do {
  44. try FileManager.default.removeItem(at: URL)
  45. } catch {
  46. // handle error
  47. }
  48. }
  49. }
  50. //MARK: -
  51. //MARK: Table Activity
  52. func addActivityServer(_ listOfActivity: [OCActivity], account: String) {
  53. let realm = try! Realm()
  54. try! realm.write {
  55. for activity in listOfActivity {
  56. // Verify
  57. let results = realm.objects(tableActivity.self).filter("idActivity = \(activity.idActivity)")
  58. if (results.count > 0) {
  59. continue
  60. }
  61. // Add new Activity
  62. let addActivity = tableActivity()
  63. addActivity.account = account
  64. addActivity.date = activity.date
  65. addActivity.idActivity = Double(activity.idActivity)
  66. addActivity.link = activity.link
  67. addActivity.note = activity.subject
  68. addActivity.type = k_activityTypeInfo
  69. realm.add(addActivity)
  70. }
  71. }
  72. }
  73. func addActivityClient(_ file: String, fileID: String, action: String, selector: String, note: String, type: String, verbose: Bool, account: String?, activeUrl: String?) {
  74. var noteReplacing : String = ""
  75. if (activeUrl != nil) {
  76. noteReplacing = note.replacingOccurrences(of: "\(activeUrl!)\(webDAV)", with: "")
  77. }
  78. noteReplacing = note.replacingOccurrences(of: "\(k_domain_session_queue).", with: "")
  79. let realm = try! Realm()
  80. try! realm.write {
  81. // Add new Activity
  82. let addActivity = tableActivity()
  83. if (account != nil) {
  84. addActivity.account = account!
  85. }
  86. addActivity.action = action
  87. addActivity.file = file
  88. addActivity.fileID = fileID
  89. addActivity.note = noteReplacing
  90. addActivity.selector = selector
  91. addActivity.type = type
  92. addActivity.verbose = verbose
  93. realm.add(addActivity)
  94. }
  95. }
  96. func getAllTableActivityWithPredicate(_ predicate: NSPredicate) -> [tableActivity] {
  97. let realm = try! Realm()
  98. let results = realm.objects(tableActivity.self).filter(predicate).sorted(byKeyPath: "date", ascending: false)
  99. return Array(results)
  100. }
  101. //MARK: -
  102. //MARK: Table Capabilities
  103. func addCapabilities(_ capabilities: OCCapabilities, account: String) {
  104. let realm = try! Realm()
  105. let results = realm.objects(tableCapabilities.self).filter("account = '\(account)'")
  106. try! realm.write {
  107. var resultCapabilities = tableCapabilities()
  108. if (results.count > 0) {
  109. resultCapabilities = results[0]
  110. }
  111. resultCapabilities.account = account
  112. resultCapabilities.themingBackground = capabilities.themingBackground
  113. resultCapabilities.themingColor = capabilities.themingColor
  114. resultCapabilities.themingLogo = capabilities.themingLogo
  115. resultCapabilities.themingName = capabilities.themingName
  116. resultCapabilities.themingSlogan = capabilities.themingSlogan
  117. resultCapabilities.themingUrl = capabilities.themingUrl
  118. resultCapabilities.versionMajor = capabilities.versionMajor
  119. resultCapabilities.versionMinor = capabilities.versionMinor
  120. resultCapabilities.versionMicro = capabilities.versionMicro
  121. resultCapabilities.versionString = capabilities.versionString
  122. if (results.count == 0) {
  123. realm.add(resultCapabilities)
  124. }
  125. }
  126. }
  127. func getCapabilitesForAccount(_ account: String) -> tableCapabilities? {
  128. let realm = try! Realm()
  129. let results = realm.objects(tableCapabilities.self).filter("account = '\(account)'")
  130. if (results.count > 0) {
  131. return results[0]
  132. } else {
  133. return nil
  134. }
  135. }
  136. func getServerVersionAccount(_ account: String) -> Int {
  137. let realm = try! Realm()
  138. let results = realm.objects(tableCapabilities.self).filter("account = '\(account)'")
  139. if (results.count > 0) {
  140. return results[0].versionMajor
  141. } else {
  142. return 0
  143. }
  144. }
  145. //MARK: -
  146. //MARK: Table Certificates
  147. func addCertificates(_ certificateLocation: String) {
  148. let realm = try! Realm()
  149. try! realm.write {
  150. let addCertificates = tableCertificates()
  151. addCertificates.certificateLocation = certificateLocation
  152. realm.add(addCertificates)
  153. }
  154. }
  155. func getAllCertificatesLocation(_ localCertificatesFolder: String) -> [String] {
  156. let realm = try! Realm()
  157. let results = realm.objects(tableCertificates.self)
  158. var arraycertificatePath = [String]()
  159. for result in results {
  160. arraycertificatePath.append("\(localCertificatesFolder)\(result.certificateLocation)")
  161. }
  162. return arraycertificatePath
  163. }
  164. //MARK: -
  165. //MARK: Table GPS
  166. func addGeocoderLocation(_ location: String, placemarkAdministrativeArea: String, placemarkCountry: String, placemarkLocality: String, placemarkPostalCode: String, placemarkThoroughfare: String, latitude: String, longitude: String) {
  167. let realm = try! Realm()
  168. // Verify if exists
  169. let results = realm.objects(tableGPS.self).filter("latitude = '\(latitude)' AND longitude = '\(longitude)'")
  170. if (results.count > 0) {
  171. return
  172. }
  173. try! realm.write {
  174. // Add new GPS
  175. let addGPS = tableGPS()
  176. addGPS.location = location
  177. addGPS.placemarkAdministrativeArea = placemarkAdministrativeArea
  178. addGPS.placemarkCountry = placemarkCountry
  179. addGPS.placemarkLocality = placemarkLocality
  180. addGPS.placemarkPostalCode = placemarkPostalCode
  181. addGPS.placemarkThoroughfare = placemarkThoroughfare
  182. addGPS.latitude = latitude
  183. addGPS.longitude = longitude
  184. realm.add(addGPS)
  185. }
  186. }
  187. func getLocationFromGeoLatitude(_ latitude: String, longitude: String) -> String? {
  188. let realm = try! Realm()
  189. let results = realm.objects(tableGPS.self).filter("latitude = '\(latitude)' AND longitude = '\(longitude)'")
  190. if (results.count == 0) {
  191. return nil
  192. } else {
  193. return results[0].location
  194. }
  195. }
  196. //MARK: -
  197. }