FetchLocation.swift 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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. NSLog(":LOCATION:DEBUG: No data received.")
  43. return
  44. }
  45. var strData = String(data: data, encoding: String.Encoding.utf8)
  46. // Get fields
  47. let lat: Double = Double(strData!.subStr(start : strData!.indexOf(target : "\"lat\":")! + 7, end : strData!.indexOf(target : ",\"")! - 2))!
  48. strData = strData?.subStr(start : (strData?.indexOf(target : ",\"")!)! + 1, end : (strData?.length)! - 1)
  49. let lon: Double = Double(strData!.subStr(start : strData!.indexOf(target : "\"lon\":")! + 7, end : strData!.indexOf(target : ",\"")! - 2))!
  50. strData = strData?.subStr(start : (strData?.indexOf(target : ",\"")!)! + 1, end : (strData?.length)! - 1)
  51. let dateFormatter = DateFormatter()
  52. dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
  53. let dtime = dateFormatter.date(from : (strData?.subStr(start : (strData?.indexOf(target : "\"dtime\":")!)! + 9, end : (strData?.length)! - 4))!)!
  54. let defaults = UserDefaults.standard
  55. defaults.set(lat, forKey: "GMLocLat")
  56. defaults.set(lon, forKey: "GMLocLon")
  57. defaults.set(dtime, forKey: "GMLocTime")
  58. NSLog(":LOCATION:LOG: Got location at \(lat), \(lon) at \(dtime)")
  59. }
  60. }
  61. task.resume()
  62. }
  63. }