Browse Source

implemented viewModel

nayooti 5 years ago
parent
commit
e7c4160fe4

+ 2 - 0
deltachat-ios/Controller/ContactDetailViewController.swift

@@ -58,6 +58,8 @@ class ContactDetailViewController: UITableViewController {
         self.title = String.localized("tab_contact")
         if showStartChat {
             optionCells.append(startChatCell)
+        } else {
+            fatalError()
         }
     }
 

+ 13 - 4
deltachat-ios/Coordinator/AppCoordinator.swift

@@ -326,14 +326,16 @@ class NewChatCoordinator: Coordinator {
         navigationController.viewControllers.remove(at: 1)
     }
 
+
     func showContactDetail(contactId: Int) {
-        let viewModel = ContactDetailViewModel(contactId: contactId, context: dcContext)
+        let viewModel = ContactDetailViewModel(contactId: contactId, startChatOption: true, context: dcContext)
         let contactDetailController = ContactDetailViewController(viewModel: viewModel)
         let coordinator = ContactDetailCoordinator(dcContext: dcContext, navigationController: navigationController)
         childCoordinators.append(coordinator)
         contactDetailController.coordinator = coordinator
         navigationController.pushViewController(contactDetailController, animated: true)
     }
+    
 }
 
 class GroupChatDetailCoordinator: Coordinator {
@@ -377,7 +379,7 @@ class GroupChatDetailCoordinator: Coordinator {
     }
 
     func showContactDetail(of contactId: Int) {
-        let viewModel = ContactDetailViewModel(contactId: contactId, context: dcContext)
+        let viewModel = ContactDetailViewModel(contactId: contactId, startChatOption: true, context: dcContext)
         let contactDetailController = ContactDetailViewController(viewModel: viewModel)
         let coordinator = ContactDetailCoordinator(dcContext: dcContext, navigationController: navigationController)
         childCoordinators.append(coordinator)
@@ -412,7 +414,7 @@ class ChatViewCoordinator: NSObject, Coordinator {
         switch chat.chatType {
         case .SINGLE:
             if let contactId = chat.contactIds.first {
-                let viewModel = ContactDetailViewModel(contactId: contactId, context: dcContext)
+                let viewModel = ContactDetailViewModel(contactId: contactId, startChatOption: false, context: dcContext)
                 let contactDetailController = ContactDetailViewController(viewModel: viewModel)
                 contactDetailController.showStartChat = false
                 let coordinator = ContactDetailCoordinator(dcContext: dcContext, navigationController: navigationController)
@@ -430,7 +432,14 @@ class ChatViewCoordinator: NSObject, Coordinator {
     }
 
     func showContactDetail(of contactId: Int, in chatOfType: ChatType) {
-        let viewModel = ContactDetailViewModel(contactId: contactId, context: dcContext )
+        let startChatOption: Bool
+        switch chatOfType {
+        case .GROUP, .VERYFIEDGROUP:
+            startChatOption = true
+        case .SINGLE:
+            startChatOption = false
+        }
+        let viewModel = ContactDetailViewModel(contactId: contactId, startChatOption: startChatOption, context: dcContext )
         let contactDetailController = ContactDetailViewController(viewModel: viewModel)
         if chatOfType == .SINGLE {
             contactDetailController.showStartChat = false

+ 31 - 5
deltachat-ios/ViewModel/ContactDetailViewModel.swift

@@ -9,21 +9,45 @@ protocol ContactDetailViewModelProtocol {
 }
 
 class ContactDetailViewModel: ContactDetailViewModelProtocol {
+
+    private enum SectionType {
+        case START_CHAT
+        case SHARED_CHATS
+        case BLOCK_CONTACT
+    }
+
     var contactId: Int
 
     private let sharedChats: DcChatlist
+    private let startChatOption: Bool
+
+    private var sections: [SectionType] = []
 
-    init(contactId: Int, context: DcContext) {
+    init(contactId: Int, startChatOption: Bool, context: DcContext) {
         self.contactId = contactId
+        self.startChatOption = startChatOption
         self.sharedChats = context.getChatlist(flags: 0, queryString: nil, queryId: contactId)
+
+        if startChatOption {
+            sections.append(.START_CHAT)
+        }
+        if sharedChats.length > 0 {
+            sections.append(.SHARED_CHATS)
+        }
+        sections.append(.BLOCK_CONTACT)
+
     }
 
     var numberOfSections: Int {
-        return 0
+
+        return sections.count
     }
 
-    func numberOfRowsInSection(_: Int) -> Int {
-        return 0
+    func numberOfRowsInSection(_ section:  Int) -> Int {
+        switch sections[section] {
+        case .SHARED_CHATS: return sharedChats.length
+        case .BLOCK_CONTACT, .START_CHAT: return 1
+        }
     }
 
     func updateCellAt(indexPath: IndexPath) {
@@ -31,7 +55,9 @@ class ContactDetailViewModel: ContactDetailViewModelProtocol {
     }
 
     func getSharedChatIdAt(indexPath: IndexPath) -> Int {
-        return 0
+        let index = indexPath.row
+        assert(sections[indexPath.section] == .SHARED_CHATS)
+        return sharedChats.getChatId(index: index)
     }