Browse Source

added ViewModel (under construction)

nayooti 5 years ago
parent
commit
7f13e280c0

+ 4 - 0
deltachat-ios.xcodeproj/project.pbxproj

@@ -148,6 +148,7 @@
 		AEACE2E31FB32B5C00DCDD78 /* Constants.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEACE2E21FB32B5C00DCDD78 /* Constants.swift */; };
 		AEACE2E51FB32E1900DCDD78 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEACE2E41FB32E1900DCDD78 /* Utils.swift */; };
 		AEC67A1C241CE9E4007DDBE1 /* TabBarRestorer.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEC67A1B241CE9E4007DDBE1 /* TabBarRestorer.swift */; };
+		AEC67A1E241FCFE0007DDBE1 /* ChatListViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEC67A1D241FCFE0007DDBE1 /* ChatListViewModel.swift */; };
 		AEE56D762253431E007DC082 /* AccountSetupController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEE56D752253431E007DC082 /* AccountSetupController.swift */; };
 		AEE56D7D2253ADB4007DC082 /* HudHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEE56D7C2253ADB4007DC082 /* HudHandler.swift */; };
 		AEE56D80225504DB007DC082 /* Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = AEE56D7F225504DB007DC082 /* Extensions.swift */; };
@@ -381,6 +382,7 @@
 		AEACE2E21FB32B5C00DCDD78 /* Constants.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Constants.swift; sourceTree = "<group>"; };
 		AEACE2E41FB32E1900DCDD78 /* Utils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utils.swift; sourceTree = "<group>"; };
 		AEC67A1B241CE9E4007DDBE1 /* TabBarRestorer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TabBarRestorer.swift; sourceTree = "<group>"; };
+		AEC67A1D241FCFE0007DDBE1 /* ChatListViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatListViewModel.swift; sourceTree = "<group>"; };
 		AEE56D752253431E007DC082 /* AccountSetupController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountSetupController.swift; sourceTree = "<group>"; tabWidth = 4; };
 		AEE56D7C2253ADB4007DC082 /* HudHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HudHandler.swift; sourceTree = "<group>"; };
 		AEE56D7F225504DB007DC082 /* Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Extensions.swift; sourceTree = "<group>"; };
@@ -712,6 +714,7 @@
 			children = (
 				AE77838C23E32ED20093EABD /* ContactDetailViewModel.swift */,
 				AE77838E23E4276D0093EABD /* ContactCellViewModel.swift */,
+				AEC67A1D241FCFE0007DDBE1 /* ChatListViewModel.swift */,
 			);
 			path = ViewModel;
 			sourceTree = "<group>";
@@ -1207,6 +1210,7 @@
 				302B84C72396770B001C261F /* RelayHelper.swift in Sources */,
 				305961CF2346125100C80F33 /* UIColor+Extensions.swift in Sources */,
 				AEACE2E51FB32E1900DCDD78 /* Utils.swift in Sources */,
+				AEC67A1E241FCFE0007DDBE1 /* ChatListViewModel.swift in Sources */,
 				300C509D234B551900F8AE22 /* TextMediaMessageCell.swift in Sources */,
 				305961E92346125100C80F33 /* MessageKind.swift in Sources */,
 				305962022346125100C80F33 /* BubbleCircle.swift in Sources */,

+ 114 - 9
deltachat-ios/ViewModel/ChatListViewModel.swift

@@ -1,9 +1,114 @@
-//
-//  ChatListViewModel.swift
-//  deltachat-ios
-//
-//  Created by Bastian van de Wetering on 16.03.20.
-//  Copyright © 2020 Jonas Reinsch. All rights reserved.
-//
-
-import Foundation
+import UIKit
+
+protocol ChatListViewModelProtocol: class, UISearchResultsUpdating {
+
+    var onChatListUpdate: VoidFunction? { get set }
+
+    var isArchive: Bool { get }
+
+    var numberOfSections: Int { get }
+    func numberOfRowsIn(section: Int) -> Int
+    func cellDataFor(section: Int, row: Int) -> AvatarCellViewModel
+
+    // search related
+    var searchActive: Bool { get }
+    func beginFiltering()
+    func endFiltering()
+
+    func deleteChat(chatId: Int)
+    func archiveChat(chatId: Int)
+    func refreshData()
+
+    var numberOfArchivedChats: Int { get }
+}
+
+class ChatListViewModel: NSObject, ChatListViewModelProtocol {
+
+    var onChatListUpdate: VoidFunction?
+
+    var isArchive: Bool
+    private let dcContext: DcContext
+
+    var searchActive: Bool = false
+
+    private var chatList: DcChatlist!
+
+    init(dcContext: DcContext, isArchive: Bool) {
+        self.isArchive = isArchive
+        self.dcContext = dcContext
+        super.init()
+        updateChatList()
+    }
+
+    private func updateChatList() {
+        var gclFlags: Int32 = 0
+        if isArchive {
+            gclFlags |= DC_GCL_ARCHIVED_ONLY
+        }
+        self.chatList = dcContext.getChatlist(flags: gclFlags, queryString: nil, queryId: 0)
+        onChatListUpdate?()
+    }
+
+    var numberOfSections: Int {
+        return 1
+    }
+
+    func numberOfRowsIn(section: Int) -> Int {
+        return chatList.length
+    }
+
+    func cellDataFor(section: Int, row: Int) -> AvatarCellViewModel {
+        let chatId = chatList.getChatId(index: row)
+        let summary = chatList.getSummary(index: row)
+        let unreadMessages = dcContext.getUnreadMessages(chatId: chatId)
+        let viewModel = ChatCellViewModel(
+            chatData: ChatCellData(
+                chatId: chatId,
+                summary: summary,
+                unreadMessages: unreadMessages
+            )
+        )
+        return viewModel
+    }
+
+    func refreshData() {
+        updateChatList()
+    }
+
+    func beginFiltering() {
+
+    }
+
+    func endFiltering() {
+
+    }
+
+    func deleteChat(chatId: Int) {
+
+    }
+
+    func archiveChat(chatId: Int) {
+
+    }
+
+    var numberOfArchivedChats: Int {
+        return 0
+    }
+
+}
+
+// MARK: UISearchResultUpdating
+extension ChatListViewModel: UISearchResultsUpdating {
+    func updateSearchResults(for searchController: UISearchController) {
+        if let searchText = searchController.searchBar.text {
+            filterContentForSearchText(searchText)
+        }
+    }
+
+    private func filterContentForSearchText(_ text: String) {
+
+    }
+
+
+}
+