Hide absolute paths in media messages

This commit is contained in:
jack
2025-10-14 22:23:12 +02:00
parent eb37aa8046
commit 9c55a2e1fd
3 changed files with 16 additions and 18 deletions
+4 -3
View File
@@ -1649,13 +1649,14 @@ final class BLEService: NSObject {
} }
let marker: String let marker: String
let fileName = destination.lastPathComponent
switch category { switch category {
case .audio: case .audio:
marker = "[voice] \(destination.path)" marker = "[voice] \(fileName)"
case .image: case .image:
marker = "[image] \(destination.path)" marker = "[image] \(fileName)"
case .other: case .other:
marker = "[file] \(destination.path)" marker = "[file] \(fileName)"
} }
let isPrivateMessage: Bool = { let isPrivateMessage: Bool = {
+3 -3
View File
@@ -2402,7 +2402,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
@MainActor @MainActor
func sendVoiceNote(at url: URL) { func sendVoiceNote(at url: URL) {
let targetPeer = selectedPrivateChatPeer let targetPeer = selectedPrivateChatPeer
let message = enqueueMediaMessage(content: "[voice] \(url.path)", targetPeer: targetPeer) let message = enqueueMediaMessage(content: "[voice] \(url.lastPathComponent)", targetPeer: targetPeer)
let messageID = message.id let messageID = message.id
let transferId = makeTransferID(messageID: messageID) let transferId = makeTransferID(messageID: messageID)
@@ -2469,7 +2469,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
) )
guard let payload = packet.encode() else { throw MediaSendError.encodingFailed } guard let payload = packet.encode() else { throw MediaSendError.encodingFailed }
await MainActor.run { await MainActor.run {
let message = self.enqueueMediaMessage(content: "[image] \(outputURL.path)", targetPeer: targetPeer) let message = self.enqueueMediaMessage(content: "[image] \(outputURL.lastPathComponent)", targetPeer: targetPeer)
let messageID = message.id let messageID = message.id
let transferId = self.makeTransferID(messageID: messageID) let transferId = self.makeTransferID(messageID: messageID)
self.registerTransfer(transferId: transferId, messageID: messageID) self.registerTransfer(transferId: transferId, messageID: messageID)
@@ -2520,7 +2520,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate {
} }
await MainActor.run { await MainActor.run {
let message = self.enqueueMediaMessage(content: "[file] \(destination.path)", targetPeer: targetPeer) let message = self.enqueueMediaMessage(content: "[file] \(destination.lastPathComponent)", targetPeer: targetPeer)
let messageID = message.id let messageID = message.id
let transferId = self.makeTransferID(messageID: messageID) let transferId = self.makeTransferID(messageID: messageID)
self.registerTransfer(transferId: transferId, messageID: messageID) self.registerTransfer(transferId: transferId, messageID: messageID)
+9 -12
View File
@@ -1564,21 +1564,18 @@ private extension ContentView {
guard let baseDirectory = applicationFilesDirectory() else { return nil } guard let baseDirectory = applicationFilesDirectory() else { return nil }
let basePath = baseDirectory.standardizedFileURL.path let basePath = baseDirectory.standardizedFileURL.path
func url(from prefix: String) -> URL? { func url(from prefix: String, subdirectory: String) -> URL? {
guard message.content.hasPrefix(prefix) else { return nil } guard message.content.hasPrefix(prefix) else { return nil }
let rawPath = String(message.content.dropFirst(prefix.count)).trimmingCharacters(in: .whitespacesAndNewlines) let filename = String(message.content.dropFirst(prefix.count)).trimmingCharacters(in: .whitespacesAndNewlines)
guard !rawPath.isEmpty else { return nil } guard !filename.isEmpty else { return nil }
let url = URL(fileURLWithPath: rawPath) let directory = baseDirectory.appendingPathComponent(subdirectory, isDirectory: true)
guard url.isFileURL else { return nil } let candidate = directory.appendingPathComponent(filename)
let standardized = url.standardizedFileURL return FileManager.default.fileExists(atPath: candidate.path) ? candidate : nil
let path = standardized.path
guard path == basePath || path.hasPrefix(basePath + "/") else { return nil }
return standardized
} }
if let url = url(from: "[voice] ") { return .voice(url) } if let url = url(from: "[voice] ", subdirectory: "voicenotes") { return .voice(url) }
if let url = url(from: "[image] ") { return .image(url) } if let url = url(from: "[image] ", subdirectory: "images") { return .image(url) }
if let url = url(from: "[file] ") { return .file(url) } if let url = url(from: "[file] ", subdirectory: "files") { return .file(url) }
return nil return nil
} }