Improve music sharing from iCloud Drive

This commit is contained in:
Ilya Laktyushin 2020-10-06 23:45:05 +04:00
parent 814618bcf4
commit 80513512e4
3 changed files with 28 additions and 3 deletions

View File

@ -6991,7 +6991,13 @@ public final class ChatControllerImpl: TelegramBaseController, ChatController, G
if mimeType == "application/pdf" {
previewRepresentations.append(TelegramMediaImageRepresentation(dimensions: PixelDimensions(width: 320, height: 320), resource: ICloudFileResource(urlData: item.urlData, thumbnail: true), progressiveSizes: []))
}
let file = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: fileId), partialReference: nil, resource: ICloudFileResource(urlData: item.urlData, thumbnail: false), previewRepresentations: previewRepresentations, videoThumbnails: [], immediateThumbnailData: nil, mimeType: mimeType, size: item.fileSize, attributes: [.FileName(fileName: item.fileName)])
var attributes: [TelegramMediaFileAttribute] = []
attributes.append(.FileName(fileName: item.fileName))
if let audioMetadata = item.audioMetadata {
attributes.append(.Audio(isVoice: false, duration: audioMetadata.duration, title: audioMetadata.title, performer: audioMetadata.performer, waveform: nil))
}
let file = TelegramMediaFile(fileId: MediaId(namespace: Namespaces.Media.LocalFile, id: fileId), partialReference: nil, resource: ICloudFileResource(urlData: item.urlData, thumbnail: false), previewRepresentations: previewRepresentations, videoThumbnails: [], immediateThumbnailData: nil, mimeType: mimeType, size: item.fileSize, attributes: attributes)
let message: EnqueueMessage = .message(text: "", attributes: [], mediaReference: .standalone(media: file), replyToMessageId: replyMessageId, localGroupingKey: groupingKey)
messages.append(message)
}

View File

@ -103,7 +103,7 @@ class ChatMessageFileBubbleContentNode: ChatMessageBubbleContentNode {
if case let .linear(_, bottom) = position {
if case .Neighbour = bottom {
bottomInset -= 20.0
bottomInset -= 24.0
}
}

View File

@ -6,6 +6,7 @@ import SyncCore
import SwiftSignalKit
import Display
import Pdf
import AVFoundation
public struct ICloudFileResourceId: MediaResourceId {
public let urlData: String
@ -68,9 +69,16 @@ public class ICloudFileResource: TelegramMediaResource {
}
struct ICloudFileDescription {
struct AudioMetadata {
let title: String?
let performer: String?
let duration: Int
}
let urlData: String
let fileName: String
let fileSize: Int
let audioMetadata: AudioMetadata?
}
private func descriptionWithUrl(_ url: URL) -> ICloudFileDescription? {
@ -91,7 +99,18 @@ private func descriptionWithUrl(_ url: URL) -> ICloudFileDescription? {
return nil
}
let result = ICloudFileDescription(urlData: urlData.base64EncodedString(), fileName: fileName, fileSize: fileSize)
var audioMetadata: ICloudFileDescription.AudioMetadata?
if ["mp3", "m4a"].contains(url.pathExtension.lowercased()) {
let asset = AVURLAsset(url: url)
let title = AVMetadataItem.metadataItems(from: asset.commonMetadata, withKey: AVMetadataKey.commonKeyTitle, keySpace: AVMetadataKeySpace.common).first?.stringValue
let performer = AVMetadataItem.metadataItems(from: asset.commonMetadata, withKey: AVMetadataKey.commonKeyArtist, keySpace: AVMetadataKeySpace.common).first?.stringValue
let duration = CMTimeGetSeconds(asset.duration)
if duration > 0 {
audioMetadata = ICloudFileDescription.AudioMetadata(title: title, performer: performer, duration: Int(duration))
}
}
let result = ICloudFileDescription(urlData: urlData.base64EncodedString(), fileName: fileName, fileSize: fileSize, audioMetadata: audioMetadata)
url.stopAccessingSecurityScopedResource()