mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-25 16:25:21 +00:00
Hide absolute paths in media messages
This commit is contained in:
@@ -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 = {
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user