Bläddra i källkod

support for text + gifs and images

cyberta 4 år sedan
förälder
incheckning
3e21186da2

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

@@ -109,6 +109,7 @@
 		30B0ACFA24AB5B99004D5E29 /* SettingsEphemeralMessageController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B0ACF924AB5B99004D5E29 /* SettingsEphemeralMessageController.swift */; };
 		30B0ACFA24AB5B99004D5E29 /* SettingsEphemeralMessageController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30B0ACF924AB5B99004D5E29 /* SettingsEphemeralMessageController.swift */; };
 		30C0D49D237C4908008E2A0E /* CertificateCheckController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30C0D49C237C4908008E2A0E /* CertificateCheckController.swift */; };
 		30C0D49D237C4908008E2A0E /* CertificateCheckController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30C0D49C237C4908008E2A0E /* CertificateCheckController.swift */; };
 		30E348DF24F3F819005C93D1 /* ChatTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30E348DE24F3F819005C93D1 /* ChatTableView.swift */; };
 		30E348DF24F3F819005C93D1 /* ChatTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30E348DE24F3F819005C93D1 /* ChatTableView.swift */; };
+		30E348E124F53772005C93D1 /* NewImageTextCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30E348E024F53772005C93D1 /* NewImageTextCell.swift */; };
 		30E8F2132447285600CE2C90 /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30E8F2122447285600CE2C90 /* ShareViewController.swift */; };
 		30E8F2132447285600CE2C90 /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30E8F2122447285600CE2C90 /* ShareViewController.swift */; };
 		30E8F2162447285600CE2C90 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 30E8F2142447285600CE2C90 /* MainInterface.storyboard */; };
 		30E8F2162447285600CE2C90 /* MainInterface.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 30E8F2142447285600CE2C90 /* MainInterface.storyboard */; };
 		30E8F21A2447285600CE2C90 /* Delta Chat.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 30E8F2102447285600CE2C90 /* Delta Chat.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
 		30E8F21A2447285600CE2C90 /* Delta Chat.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 30E8F2102447285600CE2C90 /* Delta Chat.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
@@ -398,6 +399,7 @@
 		30B0ACF924AB5B99004D5E29 /* SettingsEphemeralMessageController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsEphemeralMessageController.swift; sourceTree = "<group>"; };
 		30B0ACF924AB5B99004D5E29 /* SettingsEphemeralMessageController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsEphemeralMessageController.swift; sourceTree = "<group>"; };
 		30C0D49C237C4908008E2A0E /* CertificateCheckController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CertificateCheckController.swift; sourceTree = "<group>"; };
 		30C0D49C237C4908008E2A0E /* CertificateCheckController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CertificateCheckController.swift; sourceTree = "<group>"; };
 		30E348DE24F3F819005C93D1 /* ChatTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatTableView.swift; sourceTree = "<group>"; };
 		30E348DE24F3F819005C93D1 /* ChatTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatTableView.swift; sourceTree = "<group>"; };
+		30E348E024F53772005C93D1 /* NewImageTextCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewImageTextCell.swift; sourceTree = "<group>"; };
 		30E8F2102447285600CE2C90 /* Delta Chat.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Delta Chat.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
 		30E8F2102447285600CE2C90 /* Delta Chat.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "Delta Chat.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
 		30E8F2122447285600CE2C90 /* ShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareViewController.swift; sourceTree = "<group>"; };
 		30E8F2122447285600CE2C90 /* ShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareViewController.swift; sourceTree = "<group>"; };
 		30E8F2152447285600CE2C90 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = "<group>"; };
 		30E8F2152447285600CE2C90 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/MainInterface.storyboard; sourceTree = "<group>"; };
@@ -801,6 +803,7 @@
 			children = (
 			children = (
 				30FDB71E24D8170E0066C48D /* NewTextMessageCell.swift */,
 				30FDB71E24D8170E0066C48D /* NewTextMessageCell.swift */,
 				30FDB72024D838240066C48D /* BaseMessageCell.swift */,
 				30FDB72024D838240066C48D /* BaseMessageCell.swift */,
+				30E348E024F53772005C93D1 /* NewImageTextCell.swift */,
 			);
 			);
 			path = Cells;
 			path = Cells;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
@@ -1493,6 +1496,7 @@
 				AEF53BD5248904BF00D309C1 /* GalleryTimeLabel.swift in Sources */,
 				AEF53BD5248904BF00D309C1 /* GalleryTimeLabel.swift in Sources */,
 				AEE6EC482283045D00EDC689 /* EditSettingsController.swift in Sources */,
 				AEE6EC482283045D00EDC689 /* EditSettingsController.swift in Sources */,
 				30E348DF24F3F819005C93D1 /* ChatTableView.swift in Sources */,
 				30E348DF24F3F819005C93D1 /* ChatTableView.swift in Sources */,
+				30E348E124F53772005C93D1 /* NewImageTextCell.swift in Sources */,
 				305961DF2346125100C80F33 /* MessageCellDelegate.swift in Sources */,
 				305961DF2346125100C80F33 /* MessageCellDelegate.swift in Sources */,
 				302B84CE2397F6CD001C261F /* URL+Extension.swift in Sources */,
 				302B84CE2397F6CD001C261F /* URL+Extension.swift in Sources */,
 				7A9FB1441FB061E2001FEA36 /* AppDelegate.swift in Sources */,
 				7A9FB1441FB061E2001FEA36 /* AppDelegate.swift in Sources */,

+ 8 - 1
deltachat-ios/Chat/ChatViewControllerNew.swift

@@ -115,6 +115,7 @@ class ChatViewControllerNew: UITableViewController {
 
 
     override func viewDidLoad() {
     override func viewDidLoad() {
         tableView.register(NewTextMessageCell.self, forCellReuseIdentifier: "text")
         tableView.register(NewTextMessageCell.self, forCellReuseIdentifier: "text")
+        tableView.register(NewImageTextCell.self, forCellReuseIdentifier: "image")
         tableView.rowHeight = UITableView.automaticDimension
         tableView.rowHeight = UITableView.automaticDimension
         tableView.separatorStyle = .none
         tableView.separatorStyle = .none
         tableView.allowsSelection = false
         tableView.allowsSelection = false
@@ -305,7 +306,13 @@ class ChatViewControllerNew: UITableViewController {
         let message = DcMsg(id: id)
         let message = DcMsg(id: id)
 
 
 
 
-        let cell = tableView.dequeueReusableCell(withIdentifier: "text", for: indexPath) as? NewTextMessageCell ?? NewTextMessageCell()
+        let cell: BaseMessageCell
+        if message.type == DC_MSG_IMAGE || message.type == DC_MSG_GIF {
+            cell = tableView.dequeueReusableCell(withIdentifier: "image", for: indexPath) as? NewImageTextCell ?? NewImageTextCell()
+        } else {
+            cell = tableView.dequeueReusableCell(withIdentifier: "text", for: indexPath) as? NewTextMessageCell ?? NewTextMessageCell()
+        }
+
         cell.update(msg: message,
         cell.update(msg: message,
                     messageStyle: configureMessageStyle(for: message, at: indexPath),
                     messageStyle: configureMessageStyle(for: message, at: indexPath),
                     isAvatarVisible: configureAvatarVisibility(for: message, at: indexPath))
                     isAvatarVisible: configureAvatarVisibility(for: message, at: indexPath))

+ 1 - 1
deltachat-ios/Chat/Views/Cells/BaseMessageCell.swift

@@ -40,7 +40,7 @@ public class BaseMessageCell: UITableViewCell {
     lazy var mainContentView: UIStackView = {
     lazy var mainContentView: UIStackView = {
         let view = UIStackView()
         let view = UIStackView()
         view.translatesAutoresizingMaskIntoConstraints = false
         view.translatesAutoresizingMaskIntoConstraints = false
-        view.axis = .horizontal
+        view.axis = .vertical
         return view
         return view
     }()
     }()
 
 

+ 54 - 8
deltachat-ios/Chat/Views/Cells/NewImageTextCell.swift

@@ -1,9 +1,55 @@
-//
-//  NewImageTextCell.swift
-//  deltachat-ios
-//
-//  Created by Macci on 25.08.20.
-//  Copyright © 2020 Jonas Reinsch. All rights reserved.
-//
-
 import Foundation
 import Foundation
+import UIKit
+import DcCore
+import SDWebImage
+
+class NewImageTextCell: BaseMessageCell {
+
+    var imageAspectRatioConstraint: NSLayoutConstraint?
+    lazy var messageLabel: UILabel = {
+        let label = UILabel()
+        label.translatesAutoresizingMaskIntoConstraints = false
+        label.numberOfLines = 0
+        label.lineBreakMode = .byWordWrapping
+        label.setContentHuggingPriority(.defaultLow, for: .vertical)
+        return label
+    }()
+
+
+    lazy var contentImageView: SDAnimatedImageView = {
+        let imageView = SDAnimatedImageView()
+        imageView.translatesAutoresizingMaskIntoConstraints = false
+        imageView.contentMode = .scaleAspectFit
+        imageView.setContentHuggingPriority(.defaultHigh, for: .vertical)
+        return imageView
+    }()
+
+    override func setupSubviews() {
+        super.setupSubviews()
+        mainContentView.addArrangedSubview(contentImageView)
+        mainContentView.addArrangedSubview(messageLabel)
+        contentImageView.widthAnchor.constraint(equalTo: mainContentView.widthAnchor).isActive = true
+    }
+
+    override func update(msg: DcMsg, messageStyle: UIRectCorner, isAvatarVisible: Bool) {
+        messageLabel.text = msg.text
+        if msg.type == DC_MSG_IMAGE || msg.type == DC_MSG_GIF, let url = msg.fileURL {
+            contentImageView.sd_setImage(with: url) { (image, _, _, _) in
+                if let image = image {
+                    self.imageAspectRatioConstraint?.isActive = false
+                    self.imageAspectRatioConstraint = self.contentImageView.heightAnchor.constraint(
+                        equalTo: self.contentImageView.widthAnchor,
+                        multiplier: image.size.height / image.size.width)
+                    self.imageAspectRatioConstraint?.isActive = true
+                }
+            }
+        }
+        super.update(msg: msg, messageStyle: messageStyle, isAvatarVisible: isAvatarVisible)
+    }
+
+    override func prepareForReuse() {
+        contentImageView.image = nil
+        messageLabel.text = nil
+        messageLabel.attributedText = nil
+    }
+}