git.iko.soy/dashared/GDproject
on master help sign in
user profile is set.
commit4bdbd67aeff6e9dd6da48609b84ca66933a892c6 authorDarya Rednikina <rednikina.com@yandex.ru> dateTue 26 Feb 2019, 01:22 (8 years ago) parentfce9ad4
8 files changed+69−38
GDproject/Controller/ News and channels/FullPostController.swift−2 GDproject/Controller/ News and channels/NewsController.swift+13−18 GDproject/Controller/Coordinator tab bar?/TabbarCoordinator.swift+13−1 GDproject/Controller/Log In/LogInCoordinator.swift+3−1 GDproject/Controller/Log In/LogInViewController.swift+2−1 GDproject/Controller/Profile/ProfileViewController.swift+26−11 GDproject/DataStorage.swift+8−1 GDproject/Simple model/Model.swift+4−3
GDproject/Controller/ News and channels/FullPostController.swift−2
@@ -20,8 +20,6 @@ class FullPostController: UITableViewController {
2020
2121 setUpNavigationBar()
2222 tableView.separatorStyle = .none
23−
24−
2523 }
2624
2725 func setUpNavigationBar(){
GDproject/Controller/ News and channels/NewsController.swift+13−18
@@ -16,7 +16,9 @@ protocol UpdateableWithChannel: class {
1616protocol NewPostDelegate {
1717 func addPost(post: Post)
1818}
19−
19+protocol UpdateableWithUser: class {
20+ var user: Model.Users? { get set }
21+}
2022// MARK:- Controller with posts and channels availiable.
2123// Search is availiable within every table (posts and channels). Has button-functionality for boths post and chnnels
2224class NewsController: UITableViewController, UISearchControllerDelegate, NewPostDelegate, UpdateableWithChannel, DataDelegate
@@ -49,7 +51,7 @@ class NewsController: UITableViewController, UISearchControllerDelegate, NewPost
4951 navigationItem.title = channel?.title ?? ""
5052 Model.getUsers(for: hh ?? []) { [weak self] (dict) in
5153 self?.dictionary = dict
52− self?.refreshContr?.endRefreshing()
54+ self?.refreshContr.endRefreshing()
5355 }
5456 }
5557 }
@@ -65,11 +67,7 @@ class NewsController: UITableViewController, UISearchControllerDelegate, NewPost
6567
6668 var news = NewsVC()
6769
68− var refreshContr: UIRefreshControl? = {
69− let rc = UIRefreshControl()
70− rc.addTarget(self, action: #selector(refreshPostsData(_:)), for: .valueChanged)
71− return rc
72− }()
70+ var refreshContr = UIRefreshControl()
7371
7472 override func viewDidLoad()
7573 {
@@ -77,11 +75,8 @@ class NewsController: UITableViewController, UISearchControllerDelegate, NewPost
7775 navigationItem.title = "Loading ..."
7876 tableView.refreshControl = refreshContr
7977 // Configure Refresh Control
80−
81− Model.getLast { [weak self] (channel) in
82− self?.channel = channel
83− }
84−
78+ refreshContr.addTarget(self, action: #selector(refreshPostsData(_:)), for: .valueChanged)
79+
8580 tableView.register(PostViewCell.self, forCellReuseIdentifier: postCellId)
8681 tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cell")
8782
@@ -104,11 +99,9 @@ class NewsController: UITableViewController, UISearchControllerDelegate, NewPost
10499 }
105100
106101 @objc func refreshPostsData( _ ff: UIRefreshControl){
107− if ff.isRefreshing {
108− Model.getLast { [weak self] (channel) in
109− self?.channel = channel
110− self?.refreshContr?.endRefreshing()
111− }
102+ Model.getLast { [weak self] (channel) in
103+ self?.channel = channel
104+ self?.refreshContr.endRefreshing()
112105 }
113106 }
114107
@@ -131,7 +124,9 @@ class NewsController: UITableViewController, UISearchControllerDelegate, NewPost
131124 searchController.isActive = false
132125 // TODO:- display something if no posts are availiable
133126
134− refreshContr?.beginRefreshing()
127+ Model.getLast { [weak self] (channel) in
128+ self?.channel = channel
129+ }
135130
136131 // tableView.reloadData()
137132 }
GDproject/Controller/Coordinator tab bar?/TabbarCoordinator.swift+13−1
@@ -2,12 +2,24 @@ import UIKit
22
33class TabbarCoordinator{
44 var window: UIWindow!
5+ static let tabBar: UITabBarController = UIStoryboard.tabBarController()
6+
7+ // MARK: - Properties
8+ //private var user: Model.Users { didSet { updateInterfaces() } }
59
610 func start(){
7− window.rootViewController = UIStoryboard.tabBarController()
11+ window.rootViewController = TabbarCoordinator.tabBar
12+ TabbarCoordinator.tabBar.selectedIndex = 0
813 }
914
1015 init(window: UIWindow) {
1116 self.window = window
1217 }
18+
19+// // MARK:- update only viewControllers which are depandable on chosen channel
20+// private func updateInterfaces() {
21+// TabbarCoordinator.tabBar.viewControllers?.forEach({
22+// ($0 as? UpdateableWithUser)?.user = user
23+// })
24+// }
1325}
GDproject/Controller/Log In/LogInCoordinator.swift+3−1
@@ -33,7 +33,9 @@ class LogInCoordinator{
3333 controller.onLogIn = {
3434 (id) in
3535 Model.authenticate(with: id) {
36− (res) in controller.authenticateSucceeded = res
36+ (res) in
37+ if (res) { DataStorage.standard.setUserKey(with: id) }
38+ controller.authenticateSucceeded = res
3739 }
3840 }
3941
GDproject/Controller/Log In/LogInViewController.swift+2−1
@@ -21,9 +21,10 @@ class LogInViewController: UIViewController {
2121 if !authenticateSucceeded! {
2222 indicatorView.stopAnimating()
2323 indicatorView.isHidden = true
24− }
24+ }
2525 }
2626 }
27+
2728 static let titleColor = UIColor(red: 0, green: 137/255, blue: 249/255, alpha: 0.5)
2829
2930 var bottomConstraint: NSLayoutConstraint?
GDproject/Controller/Profile/ProfileViewController.swift+26−11
@@ -31,15 +31,19 @@ class ProfileViewController: UIViewController
3131 @IBOutlet weak var newMessageButton: UIButton!
3232
3333
34− func fill(with user: User){
35− self.facultyLabel.text = user.faculty ?? ""
36− self.nameLabel.text = "\(user.initials.name) \(user.initials.optional ?? "")"
37− self.surnameLabel.text = user.initials.surname
34+ func fill(with user: Model.Users){
35+ self.facultyLabel.text = "Студент: Факультет Компьютерных Наук"
36+ self.nameLabel.text = "\(user.firstName)"
37+ self.surnameLabel.text = "\(user.secondName)"
3838 self.profileImageView.image = #imageLiteral(resourceName: "kitten").roundedImage
39− self.placeLabel.text = user.placeOfWork
39+ self.placeLabel.text = "Москва"
4040 }
4141
42− var user: User = User(surname: "Богомазова", name: "Вероника", optional: "Львовна", emailName: "vbogomazova", id: 2, place: "📍Москва, Кочновский пр. 3", faculty: "Методист: Факультет Компьютерных наук")
42+ var user: Model.Users? {
43+ didSet {
44+ self.fill(with: user!)
45+ }
46+ }
4347
4448 var basicInfo = BasicInfoController()
4549 var posts = NewsVC()
@@ -55,9 +59,7 @@ class ProfileViewController: UIViewController
5559 {
5660 super.viewDidLoad()
5761
58− Model.getPostsForUser(with: 42) { [weak self] (posts) in
59− self?.dataSourse = posts
60− }
62+
6163
6264 posts.viewController = self
6365 posts.type = .NONE
@@ -72,19 +74,32 @@ class ProfileViewController: UIViewController
7274
7375 posts.viewController = self
7476
75− fill(with: user)
7677 tableView.delegate = posts
7778 tableView.dataSource = posts
7879 tableView.reloadData()
7980 }
8081
8182 override func viewWillAppear(_ animated: Bool) {
83+ if let id = DataStorage.standard.getUserId() {
84+ if let user = Model.idUser[id] {
85+ self.user = user
86+ } else {
87+ Model.getUsers(for: [id]) { [weak self] (dic) in
88+ self?.user = dic[id]
89+ }
90+ }
91+
92+ Model.getPostsForUser(with: id) { [weak self] (posts) in
93+ self?.dataSourse = posts
94+ }
95+ }
96+
8297 setUpNavigarionBar()
8398 }
8499
85100 func setUpNavigarionBar(){
86101 navigationController?.navigationBar.prefersLargeTitles = true
87− navigationItem.title = user.login
102+ navigationItem.title = "\(DataStorage.standard.getUserId() ?? 0)"
88103 let uibarbutton = UIBarButtonItem(title: "More", style: .plain, target: self, action: #selector(showInformation))
89104 navigationItem.rightBarButtonItems = [uibarbutton]
90105 navigationItem.largeTitleDisplayMode = .always
GDproject/DataStorage.swift+8−1
@@ -28,6 +28,13 @@ class DataStorage{
2828 isLoggedIn = UserDefaults.standard.bool(forKey: UserDefaultsKeys.loggedIn.rawValue)
2929 }
3030
31+ func setUserKey(with id: Int){
32+ UserDefaults.standard.set(id, forKey: UserDefaultsKeys.id.rawValue)
33+ }
34+
35+ func getUserId() -> Int?{
36+ return UserDefaults.standard.integer(forKey: UserDefaultsKeys.id.rawValue)
37+ }
3138 /**
3239 Function to determine is user logged in already or not
3340 */
@@ -47,5 +54,5 @@ class DataStorage{
4754 */
4855enum UserDefaultsKeys: String{
4956 case loggedIn
50− case cookie
57+ case id
5158}
GDproject/Simple model/Model.swift+4−3
@@ -235,6 +235,8 @@ class Model{
235235 }
236236 }
237237
238+ static var idUser: [Int:Users] = [:]
239+
238240 static func getUsers(for ids: [Int], completion: @escaping (([Int:Users])->())){
239241 let json = "\(Set(ids))"
240242 print(json)
@@ -258,12 +260,11 @@ class Model{
258260
259261 guard let users = try? decoder.decode([Users].self, from: json) else { return }
260262
261− var dict: [Int:Users] = [:]
262263 users.forEach({ (user) in
263− dict[user.id] = user
264+ Model.idUser[user.id] = user
264265 })
265266
266− completion(dict)
267+ completion(Model.idUser)
267268 }
268269 }
269270}