bsm-project/Friendvatars/FriendsViewController.swift
2018-11-19 23:41:12 +01:00

98 lines
2.8 KiB
Swift

import UIKit
import CryptoSwift
final class FriendsViewController: UITableViewController {
var friends: [User] = []
var imageCache = NSCache<NSString, UIImage>()
init() {
super.init(style: .grouped)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
title = "BSM ZADANIE"
let reuseIdentifier = String(describing: FriendCell.self)
tableView.register(
UINib(nibName: reuseIdentifier, bundle: nil),
forCellReuseIdentifier: reuseIdentifier
)
navigationItem.leftBarButtonItem = UIBarButtonItem(
title: "Wyloguj się",
style: .plain,
target: self,
action: #selector(signOut)
)
}
// MARK: - Actions
@objc private func signOut() {
try? AuthController.signOut()
}
override func numberOfSections(in tableView: UITableView) -> Int {
return friends.isEmpty ? 1 : 2
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return section == 0 ? 1 : friends.count
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 64
}
override func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return section == 0 ? "Me" : "Friends"
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: String(describing: FriendCell.self)) as? FriendCell else {
fatalError()
}
let user = indexPath.section == 0 ? Settings.currentUser! : friends[indexPath.row]
cell.nameLabel.text = user.name
if let image = imageCache.object(forKey: user.email as NSString) {
cell.avatarImageView.image = image
} else {
let emailHash = user.email.trimmingCharacters(in: .whitespacesAndNewlines)
.lowercased()
.sha1()
if let url = URL(string: "https://www.gravatar.com/avatar/" + emailHash) {
URLSession.shared.dataTask(with: url) { data, response, error in
guard let data = data, let image = UIImage(data: data) else {
return
}
self.imageCache.setObject(image, forKey: user.email as NSString)
DispatchQueue.main.async {
self.tableView.reloadRows(at: [indexPath], with: .automatic)
}
}.resume()
}
}
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: true)
}
}