Sync.swift 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. // Copyright (C) 2016 Inigo Valentin
  2. //
  3. // This file is part of the Gasteizko Margolariak IOS app.
  4. //
  5. // The Gasteizko Margolariak IOS app is free software: you can
  6. // redistribute it and/or modify it under the terms of the
  7. // GNU General Public License as published by the Free Software
  8. // Foundation, either version 3 of the License, or (at your
  9. // option) any later version.
  10. //
  11. // The Gasteizko Margolariak IOS app is distributed in the
  12. // hope that it will be useful, but WITHOUT ANY WARRANTY;
  13. // without even the implied warranty of MERCHANTABILITY or
  14. // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
  15. // Public License for more details.
  16. //
  17. // You should have received a copy of the GNU General Public
  18. // License along with the Gasteizko Margolariak IOS app.
  19. // If not, see <http://www.gnu.org/licenses/>.
  20. import Foundation
  21. /**
  22. Class to handle server sync.
  23. */
  24. class Sync{
  25. /**
  26. Starts the sync process.
  27. */
  28. init(){
  29. let url = buildUrl();
  30. sync(url: url)
  31. }
  32. /**
  33. Builds the URL to perform the sync against.
  34. :returns: The URL.
  35. */
  36. func buildUrl() -> URL{
  37. let url = URL(string: "https://margolariak.com/API/v1/sync.php?client=com.margolariak.app")
  38. //TODO add parameters
  39. return url!
  40. }
  41. /**
  42. Performs an asynchronous sync.
  43. It fethes the info from the server and stores as Core Data
  44. :param: url The url to sync.
  45. */
  46. func sync(url: URL){
  47. //Synchronously get data
  48. let task = URLSession.shared.dataTask(with: url) { data, response, error in
  49. guard error == nil else {
  50. print("error")
  51. return
  52. }
  53. guard let data = data else {
  54. print("Data is empty")
  55. return
  56. }
  57. let json = try! JSONSerialization.jsonObject(with: data, options: []) as! [String:AnyObject]
  58. //print(json)
  59. print("Got the JSON")
  60. getTable(data: data AS String, table: "activities")
  61. //TODO: Do this for ech table
  62. /*
  63. let data = [
  64. (1, ["name": "United States of America", "short_name": "US"]),
  65. (2, ["name": "United Kingdom", "short_name": "UK"]),
  66. (3, ["name": "France"])]
  67. let companiesTable = db["companies"] // get the table from our SQLite Database
  68. db.transaction(.Deferred) { txn in
  69. for (index,company) in data {
  70. if companiesTable.insert(name <- company["name"]!, shortname <- company["short_name"]).statement.failed {
  71. return .Rollback
  72. }
  73. }
  74. return .Commit
  75. }
  76. */
  77. }
  78. task.resume()
  79. }
  80. func getTable(data: String, table: String){
  81. //let index2 = data.index(data.startIndex, offsetBy: 2) //will call succ 2 times
  82. //let lastChar: Character = data[index2] //now we can index!
  83. //let characterIndex2 = data.characters.index(data.characters.startIndex, offsetBy: 2)
  84. //let lastChar2 = data.characters[characterIndex2] //will do the same as above
  85. //let range: Range<String.Index> = data.range(of: table)!
  86. //let index: Int = data.distance(from: data.startIndex, to: range.lowerBound)
  87. //print(data)
  88. //if let index = find(data, table) { // Unwrap the optional
  89. // data.substringFromIndex(advance(index, 1)) // => "ABCDE"
  90. //}
  91. }
  92. }