FetchLocation.swift 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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 Gasteizko Margolariak location updates.
  23. */
  24. class FetchLocation{
  25. /**
  26. Default constructor.
  27. */
  28. init(){
  29. fetch()
  30. }
  31. /**
  32. Fetches location reports form the server in the background.
  33. */
  34. func fetch(){
  35. NSLog(":LOCATION:LOG: Fetching location...")
  36. let url = URL(string: "https://margolariak.com/API/V1/location.php")
  37. let task = URLSession.shared.dataTask(with: url!) { data, response, error in
  38. if error != nil {
  39. NSLog(":LOCATION:ERROR: Unknown error getting location: \(error.debugDescription)")
  40. }
  41. let status = (response as! HTTPURLResponse).statusCode
  42. if status == 200{
  43. guard let data = data else {
  44. return
  45. }
  46. var strData = String(data: data, encoding: String.Encoding.utf8)
  47. // Get fields
  48. let lat: Double = Double(strData!.subStr(start : strData!.indexOf(target : "\"lat\":")! + 7, end : strData!.indexOf(target : ",\"")! - 2))!
  49. strData = strData?.subStr(start : (strData?.indexOf(target : ",\"")!)! + 1, end : (strData?.length)! - 1)
  50. let lon: Double = Double(strData!.subStr(start : strData!.indexOf(target : "\"lon\":")! + 7, end : strData!.indexOf(target : ",\"")! - 2))!
  51. strData = strData?.subStr(start : (strData?.indexOf(target : ",\"")!)! + 1, end : (strData?.length)! - 1)
  52. let dateFormatter = DateFormatter()
  53. dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
  54. let dtime = dateFormatter.date(from : (strData?.subStr(start : (strData?.indexOf(target : "\"dtime\":")!)! + 9, end : (strData?.length)! - 4))!)!
  55. let defaults = UserDefaults.standard
  56. defaults.set(lat, forKey: "GMLocLat")
  57. defaults.set(lon, forKey: "GMLocLon")
  58. defaults.set(dtime, forKey: "GMLocTime")
  59. NSLog(":LOCATION:LOG: Got location at \(lat), \(lon) at \(dtime)")
  60. }
  61. }
  62. task.resume()
  63. }
  64. }