mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-25 19:05:20 +00:00
Resolve image/voice path handling
This commit is contained in:
@@ -2424,7 +2424,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
mimeType: "audio/mp4",
|
mimeType: "audio/mp4",
|
||||||
content: data
|
content: data
|
||||||
)
|
)
|
||||||
guard let payload = packet.encode() else { throw MediaSendError.encodingFailed }
|
guard packet.encode() != nil else { throw MediaSendError.encodingFailed }
|
||||||
await MainActor.run {
|
await MainActor.run {
|
||||||
self.registerTransfer(transferId: transferId, messageID: messageID)
|
self.registerTransfer(transferId: transferId, messageID: messageID)
|
||||||
if let peerID = targetPeer {
|
if let peerID = targetPeer {
|
||||||
@@ -2467,7 +2467,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
mimeType: "image/jpeg",
|
mimeType: "image/jpeg",
|
||||||
content: data
|
content: data
|
||||||
)
|
)
|
||||||
guard let payload = packet.encode() else { throw MediaSendError.encodingFailed }
|
guard packet.encode() != nil else { throw MediaSendError.encodingFailed }
|
||||||
await MainActor.run {
|
await MainActor.run {
|
||||||
let message = self.enqueueMediaMessage(content: "[image] \(outputURL.lastPathComponent)", targetPeer: targetPeer)
|
let message = self.enqueueMediaMessage(content: "[image] \(outputURL.lastPathComponent)", targetPeer: targetPeer)
|
||||||
let messageID = message.id
|
let messageID = message.id
|
||||||
@@ -2514,7 +2514,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
|
|||||||
mimeType: self.mimeType(for: destination),
|
mimeType: self.mimeType(for: destination),
|
||||||
content: data
|
content: data
|
||||||
)
|
)
|
||||||
guard let payload = packet.encode() else {
|
guard packet.encode() != nil else {
|
||||||
try? FileManager.default.removeItem(at: destination)
|
try? FileManager.default.removeItem(at: destination)
|
||||||
throw MediaSendError.encodingFailed
|
throw MediaSendError.encodingFailed
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1562,20 +1562,31 @@ private enum MessageMedia {
|
|||||||
private extension ContentView {
|
private extension ContentView {
|
||||||
func mediaAttachment(for message: BitchatMessage) -> MessageMedia? {
|
func mediaAttachment(for message: BitchatMessage) -> MessageMedia? {
|
||||||
guard let baseDirectory = applicationFilesDirectory() else { return nil }
|
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 }
|
guard message.content.hasPrefix(prefix) else { return nil }
|
||||||
let filename = String(message.content.dropFirst(prefix.count)).trimmingCharacters(in: .whitespacesAndNewlines)
|
let filename = String(message.content.dropFirst(prefix.count)).trimmingCharacters(in: .whitespacesAndNewlines)
|
||||||
guard !filename.isEmpty else { return nil }
|
guard !filename.isEmpty else { return nil }
|
||||||
let directory = baseDirectory.appendingPathComponent(subdirectory, isDirectory: true)
|
let fm = FileManager.default
|
||||||
|
for sub in subdirectories {
|
||||||
|
let directory = baseDirectory.appendingPathComponent(sub, isDirectory: true)
|
||||||
let candidate = directory.appendingPathComponent(filename)
|
let candidate = directory.appendingPathComponent(filename)
|
||||||
return FileManager.default.fileExists(atPath: candidate.path) ? candidate : nil
|
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: "[voice] ", in: ["voicenotes/outgoing", "voicenotes/incoming"]) {
|
||||||
if let url = url(from: "[image] ", subdirectory: "images") { return .image(url) }
|
return .voice(url)
|
||||||
if let url = url(from: "[file] ", subdirectory: "files") { return .file(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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user