diff --git a/chat-iOS/Views/EditProfile/EditProfileBuilder.swift b/chat-iOS/Views/EditProfile/EditProfileBuilder.swift
index 2dd8264..ffa502f 100644
--- a/chat-iOS/Views/EditProfile/EditProfileBuilder.swift
+++ b/chat-iOS/Views/EditProfile/EditProfileBuilder.swift
@@ -9,12 +9,12 @@ import UIKit
struct EditProfileViewBuilder {
static func create() -> UIViewController {
- guard let EditProfileViewController = EditProfileViewController.loadFromStoryboard() as? EditProfileViewController else {
+ guard let editProfileViewController = EditProfileViewController.loadFromStoryboard() as? EditProfileViewController else {
fatalError("fatal: Failed to initialize the EditProfileViewController")
}
let model = EditProfileModel()
let presenter = EditProfileViewPresenter(model: model)
- EditProfileViewController.inject(with: presenter)
- return EditProfileViewController
+ editProfileViewController.inject(with: presenter)
+ return editProfileViewController
}
}
diff --git a/chat-iOS/Views/EditProfile/EditProfileModel.swift b/chat-iOS/Views/EditProfile/EditProfileModel.swift
index bde0ae2..d058862 100644
--- a/chat-iOS/Views/EditProfile/EditProfileModel.swift
+++ b/chat-iOS/Views/EditProfile/EditProfileModel.swift
@@ -4,6 +4,7 @@
//
// Created by 倉谷 明希 on 2020/07/03.
//
+import Firebase
protocol EditProfileModelProtocol {
var presenter: EditProfileModelOutput! { get set }
@@ -17,8 +18,27 @@ protocol EditProfileModelOutput {
final class EditProfileModel: EditProfileModelProtocol {
var presenter: EditProfileModelOutput!
+ //TODO:- セーブする処理を書くこと
+ //MARK:- ここでセーブする処理を書く
func saveProfile() {
-
+// let storage = Storage.storage().reference(forURL: "gs://mapapp6-bf5a1.appspot.com")
+// let imageRef = storage.child("profileImage").child("\(user.uid).jpeg")
+// var ProfileImageData: Data = Data()
+// if imageView.image != nil {
+//
+// //画像を圧縮
+// ProfileImageData = (imageView.image?.jpegData(compressionQuality: 0.01))!
+//
+// }
+// imageRef.putData(ProfileImageData, metadata: nil) { (metaData, error) in
+//
+// //エラーであれば
+// if error != nil {
+//
+// print(error.debugDescription)
+// return //これより下にはいかないreturn
+// }
+// }
}
}
diff --git a/chat-iOS/Views/EditProfile/EditProfilePresenter.swift b/chat-iOS/Views/EditProfile/EditProfilePresenter.swift
index b4651d9..6269fd0 100644
--- a/chat-iOS/Views/EditProfile/EditProfilePresenter.swift
+++ b/chat-iOS/Views/EditProfile/EditProfilePresenter.swift
@@ -30,7 +30,7 @@ final class EditProfileViewPresenter: EditProfileViewPresenterProtocol, EditProf
self.model = model
}
- func didTapStopEditProfileButton(){
+ func didTapStopEditProfileButton() {
view.dismissEditProfileViewController()
}
@@ -38,11 +38,11 @@ final class EditProfileViewPresenter: EditProfileViewPresenterProtocol, EditProf
self.model.saveProfile()
}
- func didTapChangePhotoButton(){
+ func didTapChangePhotoButton() {
view.showActionSheet()
}
- func didTapPickupPhotoAction(){
+ func didTapPickupPhotoAction() {
view.showImagePickerControllerAsPhotoLibrary()
}
diff --git a/chat-iOS/Views/EditProfile/EditProfileViewController.swift b/chat-iOS/Views/EditProfile/EditProfileViewController.swift
index da1be61..4f71575 100644
--- a/chat-iOS/Views/EditProfile/EditProfileViewController.swift
+++ b/chat-iOS/Views/EditProfile/EditProfileViewController.swift
@@ -6,6 +6,7 @@
//
import UIKit
+import Firebase
final class EditProfileViewController: UIViewController {
private var presenter: EditProfileViewPresenterProtocol!
@@ -14,6 +15,8 @@ final class EditProfileViewController: UIViewController {
@IBOutlet weak var changePhotoButton: UIButton!
@IBOutlet weak var nameTextField: UITextField!
+ var userName = ""
+ var profileImage = UIImage()
override func viewDidLoad() {
super.viewDidLoad()
@@ -24,11 +27,9 @@ final class EditProfileViewController: UIViewController {
}
-
func inject(with presenter: EditProfileViewPresenterProtocol) {
self.presenter = presenter
self.presenter.view = self
-
}
func setupNavigationItem() {
@@ -42,10 +43,12 @@ final class EditProfileViewController: UIViewController {
}
func setupNameTextField() {
+ self.nameTextField.text = self.userName
self.nameTextField.addBorderBottom(borderWidth: 1.0, color: .gray)
}
func setupImageView() {
+ self.imageView.image = self.profileImage
self.imageView.layer.cornerRadius = self.imageView.frame.width / 2
}
@@ -54,28 +57,23 @@ final class EditProfileViewController: UIViewController {
print("キャンセルボタンタップされた")
self.presenter.didTapStopEditProfileButton()
-
}
+
//TODO: ここでデータをセーブする処理を行う
@objc func tapSaveEditProfileButton() {
print("セーブボタンタップされた")
-
+
self.presenter.didTapSaveEditProfileButton()
-
}
@IBAction func tapChangePhotoButton(_ sender: Any) {
-
self.presenter.didTapChangePhotoButton()
}
-
-
}
extension EditProfileViewController: EditProfileViewPresenterOutput {
func dismissEditProfileViewController() {
self.dismiss(animated: true, completion: nil)
-
}
func showActionSheet() {
@@ -129,7 +127,6 @@ extension EditProfileViewController: EditProfileViewPresenterOutput {
self.present(photoPickerVC, animated: true, completion: nil)
}
}
-
}
extension EditProfileViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate {
@@ -145,6 +142,7 @@ extension EditProfileViewController: UIImagePickerControllerDelegate, UINavigati
self.imageView.image = pickerImage
picker.dismiss(animated: true)
}
-
}
+
+
diff --git a/chat-iOS/Views/Profile/UserProfileViewController.swift b/chat-iOS/Views/Profile/UserProfileViewController.swift
index e97bdf5..54abb5d 100644
--- a/chat-iOS/Views/Profile/UserProfileViewController.swift
+++ b/chat-iOS/Views/Profile/UserProfileViewController.swift
@@ -6,6 +6,7 @@
//
import UIKit
+import Nuke
final class UserProfileViewController: UIViewController {
private var presenter: UserProfileViewPresenterProtocol!
@@ -16,10 +17,21 @@ final class UserProfileViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
- editProfileButton.layer.cornerRadius = 10.0
+
+ self.setupEditProfileButton()
+ self.setupProfileImageView()
self.presenter.didLoadViewController()
}
+ func setupEditProfileButton() {
+ editProfileButton.isEnabled = false
+ editProfileButton.layer.cornerRadius = 10.0
+ }
+
+ func setupProfileImageView() {
+ profileImageView.layer.cornerRadius = profileImageView.frame.height / 2
+ }
+
@IBAction func tapEditProfileButton(_ sender: Any) {
self.presenter.didTapEditProfileButton()
}
@@ -32,12 +44,32 @@ final class UserProfileViewController: UIViewController {
extension UserProfileViewController: UserProfileViewPresenterOutput {
func presentEditProfileViewController() {
- let editProfileVC = EditProfileViewBuilder.create()
+ let editProfileVC = EditProfileViewBuilder.create() as! EditProfileViewController
+ editProfileVC.userName = self.profileNameLabel.text ?? ""
+ editProfileVC.profileImage = self.profileImageView.image!
+
let navigationController = UINavigationController(rootViewController: editProfileVC)
navigationController.modalPresentationStyle = .fullScreen
self.present(navigationController, animated: true, completion: nil)
}
- func setUser() {
+ func setUserName(userName: String) {
+ DispatchQueue.main.async {
+ self.profileNameLabel.text = userName
+ self.navigationItem.title = userName
+ }
+ }
+ func setUserProfileImage(imageURL: URL) {
+ //TODO:- URLの確認とか画像の用意とかすること
+ var defaultImage = UIImage()
+ if #available(iOS 13.0, *) {
+ defaultImage = UIImage(systemName: "person.circle.fill") ?? UIImage()
+ } else {
+ // Fallback on earlier versions
+ }
+ DispatchQueue.main.async {
+ self.editProfileButton.isEnabled = true
+ let options = ImageLoadingOptions(placeholder: defaultImage, failureImage: defaultImage)
+ loadImage(with: imageURL, options: options, into: self.profileImageView, progress: nil, completion: nil)
+ }
}
-
}
diff --git a/chat-iOS/Views/Profile/UserProfileViewModel.swift b/chat-iOS/Views/Profile/UserProfileViewModel.swift
index 9f9f2d3..08ac305 100644
--- a/chat-iOS/Views/Profile/UserProfileViewModel.swift
+++ b/chat-iOS/Views/Profile/UserProfileViewModel.swift
@@ -4,6 +4,7 @@
//
// Created by 倉谷 明希 on 2020/06/22.
//
+import Firebase
protocol UserProfileViewModelProtocol {
var presenter: UserProfileViewModelOutput! { get set }
@@ -11,13 +12,45 @@ protocol UserProfileViewModelProtocol {
}
protocol UserProfileViewModelOutput {
- func successFetchUser()
+ func successFetchUser(user: User)
}
final class UserProfileViewModel: UserProfileViewModelProtocol {
var presenter: UserProfileViewModelOutput!
+ var firestore: Firestore!
+ private var listner: ListenerRegistration?
+
+ init() {
+ self.firestore = Firestore.firestore()
+ let setting = FirestoreSettings()
+ self.firestore.settings = setting
+ }
+
+ deinit {
+ self.listner?.remove()
+ }
func fetchUser() {
- self.presenter.successFetchUser()
+ //TODO:- 認証が終わったらuidを後で変更すること
+ //guard let uid = Auth.auth().currentUser?.uid else { return }
+ let userReference = self.firestore.collection("message/v1/users").document("y783WJnXJqDfDED0nBvK")
+ self.listner = userReference.addSnapshotListener { (document, error) in
+ if let error = error {
+ print("Error: \(error.localizedDescription)")
+ return
+ }
+
+ guard let document = document, document.exists else {
+ print("The document doesn't exist.")
+ return
+ }
+
+ do {
+ let user = try Firestore.Decoder().decode(User.self, from: document.data()!)
+ self.presenter.successFetchUser(user: user)
+ } catch {
+ fatalError()
+ }
+ }
}
}
diff --git a/chat-iOS/Views/Profile/UserProfileViewPresenter.swift b/chat-iOS/Views/Profile/UserProfileViewPresenter.swift
index b6d4dd1..2265441 100644
--- a/chat-iOS/Views/Profile/UserProfileViewPresenter.swift
+++ b/chat-iOS/Views/Profile/UserProfileViewPresenter.swift
@@ -4,6 +4,7 @@
//
// Created by 倉谷 明希 on 2020/06/22.
//
+import Foundation
protocol UserProfileViewPresenterProtocol {
var view: UserProfileViewPresenterOutput! { get set }
@@ -12,7 +13,8 @@ protocol UserProfileViewPresenterProtocol {
}
protocol UserProfileViewPresenterOutput {
- func setUser()
+ func setUserName(userName: String)
+ func setUserProfileImage(imageURL: URL)
func presentEditProfileViewController()
}
@@ -29,8 +31,12 @@ final class UserProfileViewPresenter: UserProfileViewPresenterProtocol, UserProf
func didLoadViewController() {
self.model.fetchUser()
}
- func successFetchUser() {
- self.view.setUser()
+ func successFetchUser(user: User) {
+ self.view.setUserName(userName: user.displayName)
+ guard let URLStr = user.profileImageURL else { return }
+ guard let encodeURLStr = URLStr.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else { return }
+ guard let url = URL(string: encodeURLStr) else { return }
+ self.view.setUserProfileImage(imageURL: url)
}
func didTapEditProfileButton() {
self.view.presentEditProfileViewController()
diff --git a/chat-iOS/Views/Storyboards/UserProfile.storyboard b/chat-iOS/Views/Storyboards/UserProfile.storyboard
index 23db718..9bf8d3e 100644
--- a/chat-iOS/Views/Storyboards/UserProfile.storyboard
+++ b/chat-iOS/Views/Storyboards/UserProfile.storyboard
@@ -36,13 +36,13 @@
-