mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Improve music sharing from iCloud Drive
This commit is contained in:
parent
814618bcf4
commit
80513512e4
@ -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)
|
||||
}
|
||||
|
@ -103,7 +103,7 @@ class ChatMessageFileBubbleContentNode: ChatMessageBubbleContentNode {
|
||||
|
||||
if case let .linear(_, bottom) = position {
|
||||
if case .Neighbour = bottom {
|
||||
bottomInset -= 20.0
|
||||
bottomInset -= 24.0
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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()
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user