aboutsummaryrefslogtreecommitdiff
path: root/foray/ForayTableViewController.swift
diff options
context:
space:
mode:
Diffstat (limited to 'foray/ForayTableViewController.swift')
-rw-r--r--foray/ForayTableViewController.swift83
1 files changed, 17 insertions, 66 deletions
diff --git a/foray/ForayTableViewController.swift b/foray/ForayTableViewController.swift
index a7581d2..2732fce 100644
--- a/foray/ForayTableViewController.swift
+++ b/foray/ForayTableViewController.swift
@@ -7,29 +7,6 @@
import UIKit
-enum ItemType: String, Decodable {
- case item
- case quest
-}
-
-struct PenguinItem: Decodable {
- var type: ItemType
- var releaseDate: Date
- var id: String
- var name: String
-}
-
-struct YearSection {
- var year: Date
- var items: [PenguinItem]
-}
-
-private func parseDate(_ str : String) -> Date {
- let dateFormat = DateFormatter()
- dateFormat.dateFormat = "yyyy-MM-dd"
- return dateFormat.date(from: str)!
-}
-
private func firstDayOfYear(date: Date) -> Date {
let calendar = Calendar.current
let components = calendar.dateComponents([.year], from: date)
@@ -75,50 +52,24 @@ class ForayTableViewController: UITableViewController {
}
func reloadApiData() {
- loadApiData(onComplete: { (apiItems) in
- var items = apiItems
- items.sort { (lhs, rhs) in lhs.releaseDate < rhs.releaseDate }
-
- let groups = Dictionary(grouping: apiItems) { (item) in
- return firstDayOfYear(date: item.releaseDate)
- }
- self.sections = groups.map { (key, values) in
- return YearSection(year: key, items: values)
- }
- // Sort the sections from oldest year to newest
- self.sections.sort { (lhs, rhs) in lhs.year < rhs.year }
-
- self.tableView.reloadData()
- self.refreshControl?.endRefreshing()
- })
- }
-
- func loadApiData(onComplete: @escaping ([PenguinItem]) -> ()) {
- var request = URLRequest(url: URL(string: "https://users.windblume.net/~nick/upload/dummy.json")!)
- request.cachePolicy = .reloadRevalidatingCacheData // Needed otherwise default caching policy seems not to check properly
-
- // Basic auth if required
- //let authData = ("ext:PASSWORD").data(using: .utf8)!.base64EncodedString()
- //request.addValue("Basic \(authData)", forHTTPHeaderField: "Authorization")
-
- URLSession.shared.dataTask(with: request, completionHandler: { data, response, error -> Void in
- print("finished getting data")
- print(response!)
-
- let jsonDecoder = JSONDecoder()
- jsonDecoder.dateDecodingStrategy = .custom({ (decoder) -> Date in
- let container = try decoder.singleValueContainer()
- let dateStr = try container.decode(String.self)
- return parseDate(dateStr)
+ ForayNetworkManager.shared.get(
+ url: "https://users.windblume.net/~nick/upload/dummy.json",
+ onComplete: { (apiItems: [PenguinItem]) in
+ var items = apiItems
+ items.sort { (lhs, rhs) in lhs.releaseDate < rhs.releaseDate }
+
+ let groups = Dictionary(grouping: apiItems) { (item) in
+ return firstDayOfYear(date: item.releaseDate)
+ }
+ self.sections = groups.map { (key, values) in
+ return YearSection(year: key, items: values)
+ }
+ // Sort the sections from oldest year to newest
+ self.sections.sort { (lhs, rhs) in lhs.year < rhs.year }
+
+ self.tableView.reloadData()
+ self.refreshControl?.endRefreshing()
})
- let items = try! jsonDecoder.decode([PenguinItem].self, from: data!)
- print("json decoded")
-
- // Passing back to UI, need to do it on the main thread (I think due to async?)
- DispatchQueue.main.async {
- onComplete(items)
- }
- }).resume()
}
// MARK: - Table view data source