FetchLocation.swift 2.6 KB

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