Resolve image/voice path handling

This commit is contained in:
jack
2025-10-15 17:37:19 +01:00
committed by islam
parent 4dde063027
commit 7593053137
2 changed files with 22 additions and 11 deletions
+3 -3
View File
@@ -2406,7 +2406,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
mimeType: "audio/mp4",
content: data
)
guard let payload = packet.encode() else { throw MediaSendError.encodingFailed }
guard packet.encode() != nil else { throw MediaSendError.encodingFailed }
await MainActor.run {
self.registerTransfer(transferId: transferId, messageID: messageID)
if let peerID = targetPeer {
@@ -2449,7 +2449,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
mimeType: "image/jpeg",
content: data
)
guard let payload = packet.encode() else { throw MediaSendError.encodingFailed }
guard packet.encode() != nil else { throw MediaSendError.encodingFailed }
await MainActor.run {
let message = self.enqueueMediaMessage(content: "[image] \(outputURL.lastPathComponent)", targetPeer: targetPeer)
let messageID = message.id
@@ -2496,7 +2496,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
mimeType: self.mimeType(for: destination),
content: data
)
guard let payload = packet.encode() else {
guard packet.encode() != nil else {
try? FileManager.default.removeItem(at: destination)
throw MediaSendError.encodingFailed
}
+19 -8
View File
@@ -1619,20 +1619,31 @@ private enum MessageMedia {
private extension ContentView {
func mediaAttachment(for message: BitchatMessage) -> MessageMedia? {
guard let baseDirectory = applicationFilesDirectory() else { return nil }
let basePath = baseDirectory.standardizedFileURL.path
func url(from prefix: String, subdirectory: String) -> URL? {
func url(from prefix: String, in subdirectories: [String]) -> URL? {
guard message.content.hasPrefix(prefix) else { return nil }
let filename = String(message.content.dropFirst(prefix.count)).trimmingCharacters(in: .whitespacesAndNewlines)
guard !filename.isEmpty else { return nil }
let directory = baseDirectory.appendingPathComponent(subdirectory, isDirectory: true)
let candidate = directory.appendingPathComponent(filename)
return FileManager.default.fileExists(atPath: candidate.path) ? candidate : nil
let fm = FileManager.default
for sub in subdirectories {
let directory = baseDirectory.appendingPathComponent(sub, isDirectory: true)
let candidate = directory.appendingPathComponent(filename)
if fm.fileExists(atPath: candidate.path) {
return candidate
}
}
return nil
}
if let url = url(from: "[voice] ", subdirectory: "voicenotes") { return .voice(url) }
if let url = url(from: "[image] ", subdirectory: "images") { return .image(url) }
if let url = url(from: "[file] ", subdirectory: "files") { return .file(url) }
if let url = url(from: "[voice] ", in: ["voicenotes/outgoing", "voicenotes/incoming"]) {
return .voice(url)
}
if let url = url(from: "[image] ", in: ["images/outgoing", "images/incoming"]) {
return .image(url)
}
if let url = url(from: "[file] ", in: ["files/outgoing", "files/incoming"]) {
return .file(url)
}
return nil
}