Files
openclaw/apps/shared/OpenClawKit/Sources/OpenClawChatUI/ChatAttachmentPickerMetadata.swift
Peter Steinberger 0021e51f22 feat(apple): media renditions, Now Playing, video upload (#116051)
* feat(apple): complete media playback and uploads

* fix(apple): preserve movie picker metadata

* fix(apple): harden rendition and picker routing

* style(apple): fix macOS media formatting
2026-07-29 15:50:18 -04:00

38 lines
1.4 KiB
Swift

import Foundation
import UniformTypeIdentifiers
struct OpenClawChatPickerAttachmentMetadata: Equatable, Sendable {
static let allowedFileContentTypes: [UTType] = [
.image,
.movie,
.mpeg4Movie,
.quickTimeMovie,
]
let fileExtension: String
let mimeType: String
static func resolve(contentType: UTType, transferredFileURL: URL? = nil) -> Self {
let isVideo = contentType.conforms(to: .movie)
let transferredExtension = transferredFileURL?.pathExtension
.trimmingCharacters(in: .whitespacesAndNewlines)
.lowercased()
let transferredType = transferredExtension.flatMap { extensionName in
extensionName.isEmpty ? nil : UTType(filenameExtension: extensionName)
}
if isVideo {
return Self(
fileExtension: transferredType?.preferredFilenameExtension
?? transferredExtension.flatMap { $0.isEmpty ? nil : $0 }
?? contentType.preferredFilenameExtension
?? "mov",
mimeType: transferredType?.preferredMIMEType
?? contentType.preferredMIMEType
?? "video/quicktime")
}
return Self(
fileExtension: contentType.preferredFilenameExtension ?? "jpg",
mimeType: contentType.preferredMIMEType ?? "image/jpeg")
}
}