Преглед изворни кода

use 'All Media' controller for contact profiles

B. Petersen пре 2 година
родитељ
комит
bb94a5a5b6

+ 14 - 32
deltachat-ios/Controller/ContactDetailViewController.swift

@@ -27,6 +27,9 @@ class ContactDetailViewController: UITableViewController {
     private lazy var ephemeralMessagesCell: UITableViewCell = {
         let cell = UITableViewCell(style: .value1, reuseIdentifier: nil)
         cell.textLabel?.text = String.localized("ephemeral_messages")
+        if #available(iOS 13.0, *) {
+            cell.imageView?.image = UIImage(systemName: "timer") // added in ios13
+        }
         cell.accessoryType = .disclosureIndicator
         return cell
     }()
@@ -66,20 +69,12 @@ class ContactDetailViewController: UITableViewController {
         return cell
     }()
 
-    private lazy var galleryCell: UITableViewCell = {
+    private lazy var allMediaCell: UITableViewCell = {
         let cell = UITableViewCell(style: .value1, reuseIdentifier: nil)
-        cell.textLabel?.text = String.localized("images_and_videos")
-        cell.accessoryType = .disclosureIndicator
-        if viewModel.chatId == 0 {
-            cell.isUserInteractionEnabled = false
-            cell.textLabel?.isEnabled = false
+        cell.textLabel?.text = String.localized("menu_all_media")
+        if #available(iOS 13.0, *) {
+            cell.imageView?.image = UIImage(systemName: "photo.on.rectangle") // added in ios13
         }
-        return cell
-    }()
-
-    private lazy var documentsCell: UITableViewCell = {
-        let cell = UITableViewCell(style: .value1, reuseIdentifier: nil)
-        cell.textLabel?.text = String.localized(viewModel.hasWebxdc ? "files_and_webxdx_apps" : "files")
         cell.accessoryType = .disclosureIndicator
         if viewModel.chatId == 0 {
             cell.isUserInteractionEnabled = false
@@ -168,10 +163,8 @@ class ContactDetailViewController: UITableViewController {
         switch cellType {
         case .chatOptions:
             switch viewModel.chatOptionFor(row: row) {
-            case .documents:
-                return documentsCell
-            case .gallery:
-                return galleryCell
+            case .allMedia:
+                return allMediaCell
             case .ephemeralMessages:
                 return ephemeralMessagesCell
             case .startChat:
@@ -305,8 +298,7 @@ class ContactDetailViewController: UITableViewController {
 
     private func updateCellValues() {
         ephemeralMessagesCell.detailTextLabel?.text = String.localized(viewModel.chatIsEphemeral ? "on" : "off")
-        galleryCell.detailTextLabel?.text = String.numberOrNone(viewModel.galleryItemMessageIds.count)
-        documentsCell.detailTextLabel?.text = String.numberOrNone(viewModel.documentItemMessageIds.count)
+        allMediaCell.detailTextLabel?.text = viewModel.chatId == 0 ? String.localized("none") : viewModel.context.getAllMediaCount(chatId: viewModel.chatId)
         statusCell.setText(text: viewModel.contact.status)
     }
 
@@ -335,10 +327,8 @@ class ContactDetailViewController: UITableViewController {
     private func handleChatOption(indexPath: IndexPath) {
         let action = viewModel.chatOptionFor(row: indexPath.row)
         switch action {
-        case .documents:
-            showDocuments()
-        case .gallery:
-            showGallery()
+        case .allMedia:
+            showAllMedia()
         case .ephemeralMessages:
             showEphemeralMessagesController()
         case .startChat:
@@ -468,16 +458,8 @@ class ContactDetailViewController: UITableViewController {
         navigationController?.pushViewController(editContactController, animated: true)
     }
 
-    private func showDocuments() {
-        let title = String.localized(viewModel.hasWebxdc ? "files_and_webxdx_apps" : "files")
-        let fileGalleryController = FilesViewController(context: viewModel.context, chatId: viewModel.chatId, type1: DC_MSG_FILE, type2: DC_MSG_AUDIO, type3: DC_MSG_WEBXDC, title: title)
-        navigationController?.pushViewController(fileGalleryController, animated: true)
-    }
-
-    private func showGallery() {
-        let messageIds: [Int] = viewModel.galleryItemMessageIds.reversed()
-        let galleryController = GalleryViewController(context: viewModel.context, chatId: viewModel.chatId, mediaMessageIds: messageIds)
-        navigationController?.pushViewController(galleryController, animated: true)
+    private func showAllMedia() {
+        navigationController?.pushViewController(AllMediaViewController(dcContext: viewModel.context, chatId: viewModel.chatId), animated: true)
     }
 
     private func showSearch() {

+ 0 - 8
deltachat-ios/Extensions/String+Extension.swift

@@ -74,14 +74,6 @@ extension String {
         }
     }
 
-    static func numberOrNone(_ number: Int) -> String {
-        if number == 0 {
-            return String.localized("none")
-        } else {
-            return "\(number)"
-        }
-    }
-
     // required for jumbomoji logic
     // thanks to https://stackoverflow.com/a/39425959
     var containsOnlyEmoji: Bool {

+ 3 - 32
deltachat-ios/ViewModel/ContactDetailViewModel.swift

@@ -13,8 +13,7 @@ class ContactDetailViewModel {
     }
 
     enum ChatOption {
-        case gallery
-        case documents
+        case allMedia
         case ephemeralMessages
         case startChat
     }
@@ -72,7 +71,7 @@ class ContactDetailViewModel {
         sections.append(.chatActions)
 
         if chatId != 0 {
-            chatOptions = [.documents, .gallery]
+            chatOptions = [.allMedia]
             if !isDeviceTalk {
                 chatOptions.append(.ephemeralMessages)
             }
@@ -88,7 +87,7 @@ class ContactDetailViewModel {
             }
             chatActions.append(.deleteChat)
         } else {
-            chatOptions = [.documents, .gallery, .startChat]
+            chatOptions = [.allMedia, .startChat]
             chatActions = [.showEncrInfo, .copyToClipboard, .blockContact]
         }
     }
@@ -121,34 +120,6 @@ class ContactDetailViewModel {
         return chatId != 0 && context.getChatEphemeralTimer(chatId: chatId) > 0
     }
 
-    var galleryItemMessageIds: [Int] {
-        if chatId == 0 {
-            return []
-        }
-        return context.getChatMedia(
-            chatId: chatId,
-            messageType: DC_MSG_IMAGE,
-            messageType2: DC_MSG_GIF,
-            messageType3: DC_MSG_VIDEO
-        )
-    }
-
-    var documentItemMessageIds: [Int] {
-        if chatId == 0 {
-            return []
-        }
-        return context.getChatMedia(
-            chatId: chatId,
-            messageType: DC_MSG_FILE,
-            messageType2: DC_MSG_AUDIO,
-            messageType3: DC_MSG_WEBXDC
-        )
-    }
-
-    lazy var hasWebxdc: Bool = {
-        return context.hasWebxdc(chatId: chatId)
-    }()
-
     var numberOfSections: Int {
         return sections.count
     }