Pārlūkot izejas kodu

trying to display thumbnail for video file in cell

Bastian van de Wetering 6 gadi atpakaļ
vecāks
revīzija
afbd332713

+ 2 - 1
Pods/MessageKit/Sources/Views/Cells/MediaMessageCell.swift

@@ -67,12 +67,13 @@ open class MediaMessageCell: MessageContentCell {
         guard let displayDelegate = messagesCollectionView.messagesDisplayDelegate else {
             fatalError(MessageKitError.nilMessagesDisplayDelegate)
         }
-
         switch message.kind {
         case .photo(let mediaItem):
             imageView.image = mediaItem.image ?? mediaItem.placeholderImage
             playButtonView.isHidden = true
         case .video(let mediaItem):
+			print(mediaItem.image == nil)
+			print(mediaItem.placeholderImage == nil)
 			let image = mediaItem.image ?? mediaItem.placeholderImage
 			imageView.image = image //mediaItem.image ?? mediaItem.placeholderImage
             playButtonView.isHidden = false

+ 1 - 1
deltachat-ios/Controller/ChatViewController.swift

@@ -809,7 +809,7 @@ extension ChatViewController: MessageCellDelegate {
 					next = Int(dc_get_next_media(mailboxPointer, UInt32(nextMessage.id), 1, Int32(nextMessage.type), 0, 0))
 				}
 
-				// these are the files user will be able to swip trough
+				// these are the files user will be able to swipe trough
 				let mediaUrls: [URL] = previousUrls + [url] + nextUrls
 				previewController = PreviewController(currentIndex: previousUrls.count, urls: mediaUrls)
 				present(previewController!.qlController, animated: true)

+ 1 - 1
deltachat-ios/Coordinator/AppCoordinator.swift

@@ -436,7 +436,7 @@ class ChatViewCoordinator: NSObject, Coordinator {
 	private func sendVideo(url: NSURL) {
 		let msg = dc_msg_new(mailboxPointer, DC_MSG_VIDEO)
 		if let path = url.relativePath?.cString(using: .utf8) { //absoluteString?.cString(using: .utf8) {
-			dc_msg_set_file(msg, path, nil)
+			dc_msg_set_file(msg, path, "video/mov")
 			dc_send_msg(mailboxPointer, UInt32(chatId), msg)
 			dc_msg_unref(msg)
 		}

+ 1 - 1
deltachat-ios/DC/Wrapper.swift

@@ -208,7 +208,7 @@ class MRMessage: MessageType {
     return nil
   }
 
-  lazy var image: UIImage? = { [unowned self] in
+  private lazy var image: UIImage? = { [unowned self] in
     let filetype = dc_msg_get_viewtype(messagePointer)
     if let path = fileURL, filetype == DC_MSG_IMAGE {
       if path.isFileURL {

+ 42 - 0
deltachat-ios/Helper/Extensions.swift

@@ -193,3 +193,45 @@ extension UIView {
 		self.layer.borderWidth = 2
 	}
 }
+
+
+extension UIColor {
+	convenience init(alpha: Int, red: Int, green: Int, blue: Int) {
+		assert(red >= 0 && red <= 255, "Invalid red component")
+		assert(green >= 0 && green <= 255, "Invalid green component")
+		assert(blue >= 0 && blue <= 255, "Invalid blue component")
+
+		self.init(red: CGFloat(red) / 255, green: CGFloat(green) / 255, blue: CGFloat(blue) / 255, alpha: CGFloat(alpha) / 255)
+	}
+
+	convenience init(netHex: Int) {
+		var alpha = (netHex >> 24) & 0xFF
+		if alpha == 0 {
+			alpha = 255
+		}
+
+		self.init(alpha: alpha, red: (netHex >> 16) & 0xFF, green: (netHex >> 8) & 0xFF, blue: netHex & 0xFF)
+	}
+
+	// see: https://stackoverflow.com/a/33397427
+	convenience init(hexString: String) {
+		let hex = hexString.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
+		var int = UInt32()
+		Scanner(string: hex).scanHexInt32(&int)
+		let a, r, g, b: UInt32
+		switch hex.count {
+		case 3: // RGB (12-bit)
+			(a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
+		case 6: // RGB (24-bit)
+			(a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
+		case 8: // ARGB (32-bit)
+			(a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
+		default:
+			(a, r, g, b) = (255, 0, 0, 0)
+		}
+		self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: CGFloat(a) / 255)
+	}
+
+
+}
+

+ 18 - 37
deltachat-ios/Helper/Utils.swift

@@ -8,6 +8,7 @@
 
 import Foundation
 import UIKit
+import AVFoundation
 
 struct Utils {
   static func getContactIds() -> [Int] {
@@ -137,44 +138,24 @@ struct Utils {
       return nil
     }
   }
-}
-
-extension UIColor {
-  convenience init(alpha: Int, red: Int, green: Int, blue: Int) {
-    assert(red >= 0 && red <= 255, "Invalid red component")
-    assert(green >= 0 && green <= 255, "Invalid green component")
-    assert(blue >= 0 && blue <= 255, "Invalid blue component")
-
-    self.init(red: CGFloat(red) / 255, green: CGFloat(green) / 255, blue: CGFloat(blue) / 255, alpha: CGFloat(alpha) / 255)
-  }
-
-  convenience init(netHex: Int) {
-    var alpha = (netHex >> 24) & 0xFF
-    if alpha == 0 {
-      alpha = 255
-    }
 
-    self.init(alpha: alpha, red: (netHex >> 16) & 0xFF, green: (netHex >> 8) & 0xFF, blue: netHex & 0xFF)
-  }
-
-  // see: https://stackoverflow.com/a/33397427
-  convenience init(hexString: String) {
-    let hex = hexString.trimmingCharacters(in: CharacterSet.alphanumerics.inverted)
-    var int = UInt32()
-    Scanner(string: hex).scanHexInt32(&int)
-    let a, r, g, b: UInt32
-    switch hex.count {
-    case 3: // RGB (12-bit)
-      (a, r, g, b) = (255, (int >> 8) * 17, (int >> 4 & 0xF) * 17, (int & 0xF) * 17)
-    case 6: // RGB (24-bit)
-      (a, r, g, b) = (255, int >> 16, int >> 8 & 0xFF, int & 0xFF)
-    case 8: // ARGB (32-bit)
-      (a, r, g, b) = (int >> 24, int >> 16 & 0xFF, int >> 8 & 0xFF, int & 0xFF)
-    default:
-      (a, r, g, b) = (255, 0, 0, 0)
-    }
-    self.init(red: CGFloat(r) / 255, green: CGFloat(g) / 255, blue: CGFloat(b) / 255, alpha: CGFloat(a) / 255)
-  }
+	static func generateThumbnailFromVideo(url: URL) -> UIImage? {
+		do {
+			let asset = AVURLAsset(url: url)
+			let imageGenerator = AVAssetImageGenerator(asset: asset)
+			imageGenerator.appliesPreferredTrackTransform = true
+			// Select the right one based on which version you are using
+			// Swift 4.2
+			//let cgImage = try imageGenerator.copyCGImage(at: .zero, actualTime: nil)
+			// Swift 4.0
+			let cgImage = try imageGenerator.copyCGImage(at: CMTime.zero, actualTime: nil)
+			return UIImage(cgImage: cgImage)
+		} catch {
+			print(error.localizedDescription)
+
+			return nil
+		}
+	}
 }
 
 class DateUtils {

+ 1 - 0
deltachat-ios/View/CustomMessageCell.swift

@@ -45,3 +45,4 @@ open class CustomMessageCell: UICollectionViewCell {
   }
 }
 
+