summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjack <jackjackbits@users.noreply.github.com>2025-08-12 09:41:12 +0200
committerjack <jackjackbits@users.noreply.github.com>2025-08-12 09:41:12 +0200
commit99c0f6523e271a2735a85686bb0284a26d57260d (patch)
tree0a1d90a8e2e04d788993f92bb17d301781f3bdf2
parent7a7c89e68993511510e693334313a027206c694a (diff)
refactor: remove dead code and consolidate system messages
- Delete 3 unused functions in ShareViewController (36 lines) - Extract addSystemMessage() helper to eliminate duplication (120+ lines) - Remove 22 'let _ =' wasteful computations across multiple files - Net reduction of 215 lines of dead/duplicate code - Improves maintainability and reduces technical debt
-rw-r--r--bitchat/Nostr/NostrProtocol.swift7
-rw-r--r--bitchat/Nostr/NostrRelayManager.swift7
-rw-r--r--bitchat/Services/BluetoothMeshService.swift12
-rw-r--r--bitchat/ViewModels/ChatViewModel.swift236
-rw-r--r--bitchat/Views/ContentView.swift1
-rw-r--r--bitchatShareExtension/ShareViewController.swift38
6 files changed, 43 insertions, 258 deletions
diff --git a/bitchat/Nostr/NostrProtocol.swift b/bitchat/Nostr/NostrProtocol.swift
index 068ce64..55880c5 100644
--- a/bitchat/Nostr/NostrProtocol.swift
+++ b/bitchat/Nostr/NostrProtocol.swift
@@ -37,7 +37,6 @@ struct NostrProtocol {
// 2. Create ephemeral key for this message
let ephemeralKey = try P256K.Schnorr.PrivateKey()
- let _ = Data(ephemeralKey.xonly.bytes).hexEncodedString()
// Created ephemeral key for seal
// 3. Seal the rumor (encrypt to recipient)
@@ -213,7 +212,6 @@ struct NostrProtocol {
throw NostrError.invalidPublicKey
}
- let _ = Data(senderKey.xonly.bytes).hexEncodedString()
// Encrypting message
// Derive shared secret
@@ -447,14 +445,11 @@ struct NostrProtocol {
// Log with explicit UTC and local time for debugging
let formatter = DateFormatter()
+ // Removed unnecessary date formatting operations
formatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
formatter.timeZone = TimeZone(abbreviation: "UTC")
- let _ = formatter.string(from: now)
- let _ = formatter.string(from: randomized)
formatter.timeZone = TimeZone.current
- let _ = formatter.string(from: now)
- let _ = formatter.string(from: randomized)
// Timestamp randomized for privacy
diff --git a/bitchat/Nostr/NostrRelayManager.swift b/bitchat/Nostr/NostrRelayManager.swift
index 351b95b..fa7c673 100644
--- a/bitchat/Nostr/NostrRelayManager.swift
+++ b/bitchat/Nostr/NostrRelayManager.swift
@@ -273,8 +273,7 @@ class NostrRelayManager: ObservableObject {
}
case "EOSE":
- if array.count >= 2,
- let _ = array[1] as? String {
+ if array.count >= 2 {
// End of stored events
}
@@ -290,8 +289,8 @@ class NostrRelayManager: ObservableObject {
}
case "NOTICE":
- if array.count >= 2,
- let _ = array[1] as? String {
+ if array.count >= 2 {
+ // Server notice received
}
default:
diff --git a/bitchat/Services/BluetoothMeshService.swift b/bitchat/Services/BluetoothMeshService.swift
index 409a16e..4a438df 100644
--- a/bitchat/Services/BluetoothMeshService.swift
+++ b/bitchat/Services/BluetoothMeshService.swift
@@ -705,7 +705,6 @@ class BluetoothMeshService: NSObject {
// Update PeerSession
if let session = peerSessions[peerID] {
- let _ = session.isConnected
session.updateBluetoothConnection(peripheral: mapping.peripheral, characteristic: nil)
} else {
// This is a truly new peer session
@@ -2804,7 +2803,6 @@ class BluetoothMeshService: NSObject {
// Check if we have a recent entry
if let entry = protocolMessageDedup[key], !isExpired(entry) {
- let _ = Date().timeIntervalSince(entry.sentAt)
return true
}
@@ -3466,7 +3464,6 @@ class BluetoothMeshService: NSObject {
// Bloom filter will be reset by timer, processedMessages is now bounded
- // let _ = packet.senderID.hexEncodedString()
// Note: We'll decode messages in the switch statement below, not here
@@ -4548,7 +4545,6 @@ class BluetoothMeshService: NSObject {
if !isPeerIDOurs(senderID) {
// Check our current handshake state
- let _ = handshakeCoordinator.getHandshakeState(for: senderID)
// Processing handshake response
// Process the response - this could be message 2 or message 3 in the XX pattern
@@ -4734,7 +4730,6 @@ class BluetoothMeshService: NSObject {
}
}
- let _ = Double(fragments.count - 1) * delayBetweenFragments
}
private func handleFragment(_ packet: BitchatPacket, from peerID: String) {
@@ -5093,8 +5088,6 @@ extension BluetoothMeshService: CBCentralManagerDelegate {
category: SecureLogger.session, level: .info)
// Log current peripheral mappings
- let _ = collectionsQueue.sync { peripheralMappings.count }
- let _ = connectionPool.count
peripheral.delegate = self
peripheral.discoverServices([BluetoothMeshService.serviceUUID])
@@ -5283,7 +5276,6 @@ extension BluetoothMeshService: CBCentralManagerDelegate {
// Time tracking removed - now in PeerSession
// Keep lastSuccessfulMessageTime to validate session on reconnect
let lastSuccess = self.peerSessions[peerID]?.lastSuccessfulMessageTime ?? Date.distantPast
- let _ = Date().timeIntervalSince(lastSuccess)
// Keeping Noise session on disconnect
}
@@ -5500,7 +5492,6 @@ extension BluetoothMeshService: CBPeripheralDelegate {
// Use the sender ID from the packet, not our local mapping which might still be a temp ID
- let _ = connectedPeripherals.first(where: { $0.value == peripheral })?.key ?? "unknown"
let packetSenderID = packet.senderID.hexEncodedString()
// Log the packet type we received
@@ -6611,8 +6602,6 @@ extension BluetoothMeshService: CBPeripheralManagerDelegate {
SecureLogger.logHandshake("processing \(isInitiation ? "init" : "response")", peerID: peerID, success: true)
// Get current handshake state before processing
- let _ = handshakeCoordinator.getHandshakeState(for: peerID)
- let _ = noiseService.hasEstablishedSession(with: peerID)
// Current handshake state check
// Check for duplicate handshake messages
@@ -7535,7 +7524,6 @@ extension BluetoothMeshService: CBPeripheralManagerDelegate {
self.pendingPrivateMessages[recipientPeerID] = []
}
self.pendingPrivateMessages[recipientPeerID]?.append((content, recipientNickname, messageID ?? UUID().uuidString))
- let _ = self.pendingPrivateMessages[recipientPeerID]?.count ?? 0
// Queued private message
}
diff --git a/bitchat/ViewModels/ChatViewModel.swift b/bitchat/ViewModels/ChatViewModel.swift
index b8312a2..eb6d812 100644
--- a/bitchat/ViewModels/ChatViewModel.swift
+++ b/bitchat/ViewModels/ChatViewModel.swift
@@ -737,13 +737,7 @@ class ChatViewModel: ObservableObject, BitchatDelegate {
// Check if the recipient is blocked
if isPeerBlocked(peerID) {
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "cannot send message to \(recipientNickname): user is blocked.",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("cannot send message to \(recipientNickname): user is blocked.")
return
}
@@ -803,13 +797,7 @@ class ChatViewModel: ObservableObject, BitchatDelegate {
category: SecureLogger.session, level: .warning)
// Add system message to inform user
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "Cannot send message to \(recipientNickname) - peer is not reachable via mesh or Nostr.",
- timestamp: Date(),
- isRelay: false
- )
- addMessage(systemMessage)
+ addSystemMessage("Cannot send message to \(recipientNickname) - peer is not reachable via mesh or Nostr.")
}
}
@@ -864,13 +852,7 @@ class ChatViewModel: ObservableObject, BitchatDelegate {
// Check if the peer is blocked
if isPeerBlocked(peerID) {
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "cannot start chat with \(peerNickname): user is blocked.",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("cannot start chat with \(peerNickname): user is blocked.")
return
}
@@ -878,13 +860,7 @@ class ChatViewModel: ObservableObject, BitchatDelegate {
// Only require mutual favorites for offline Nostr messaging
if let peer = peerIndex[peerID],
peer.isFavorite && !peer.theyFavoritedUs && !peer.isConnected && !peer.isRelayConnected {
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "cannot start chat with \(peerNickname): mutual favorite required for offline messaging.",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("cannot start chat with \(peerNickname): mutual favorite required for offline messaging.")
return
}
@@ -1038,7 +1014,6 @@ class ChatViewModel: ObservableObject, BitchatDelegate {
guard let messageId = notification.userInfo?["messageId"] as? String,
let senderNoiseKey = notification.userInfo?["senderNoiseKey"] as? Data else { return }
- let _ = senderNoiseKey.hexEncodedString()
// Update the delivery status for the message
@@ -2323,54 +2298,24 @@ class ChatViewModel: ObservableObject, BitchatDelegate {
let messageContent = parts[2...].joined(separator: " ")
sendPrivateMessage(messageContent, to: peerID)
} else {
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "started private chat with \(nickname)",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("started private chat with \(nickname)")
}
} else {
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "user '\(nickname)' not found. they may be offline or using a different nickname.",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("user '\(nickname)' not found. they may be offline or using a different nickname.")
}
} else {
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "usage: /m @nickname [message] or /m nickname [message]",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("usage: /m @nickname [message] or /m nickname [message]")
}
case "/w":
let peerNicknames = meshService.getPeerNicknames()
if connectedPeers.isEmpty {
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "no one else is online right now.",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("no one else is online right now.")
} else {
let onlineList = connectedPeers.compactMap { peerID in
peerNicknames[peerID]
}.sorted().joined(separator: ", ")
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "online users: \(onlineList)",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("online users: \(onlineList)")
}
case "/clear":
// Clear messages based on current context
@@ -2493,13 +2438,7 @@ class ChatViewModel: ObservableObject, BitchatDelegate {
if let fingerprintStr = meshService.getPeerFingerprint(peerID) {
if SecureIdentityStateManager.shared.isBlocked(fingerprint: fingerprintStr) {
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "\(nickname) is already blocked.",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("\(nickname) is already blocked.")
} else {
// Update or create social identity with blocked status
if var identity = SecureIdentityStateManager.shared.getSocialIdentity(for: fingerprintStr) {
@@ -2523,42 +2462,18 @@ class ChatViewModel: ObservableObject, BitchatDelegate {
blockedUsers.insert(fingerprintStr)
favoritePeers.remove(fingerprintStr)
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "blocked \(nickname). you will no longer receive messages from them.",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("blocked \(nickname). you will no longer receive messages from them.")
}
} else {
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "cannot block \(nickname): unable to verify identity.",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("cannot block \(nickname): unable to verify identity.")
}
} else {
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "cannot block \(nickname): user not found.",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("cannot block \(nickname): user not found.")
}
} else {
// List blocked users
if blockedUsers.isEmpty {
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "no blocked peers.",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("no blocked peers.")
} else {
// Find nicknames for blocked users
var blockedNicknames: [String] = []
@@ -2573,13 +2488,7 @@ class ChatViewModel: ObservableObject, BitchatDelegate {
}
let blockedList = blockedNicknames.isEmpty ? "blocked peers (not currently online)" : blockedNicknames.sorted().joined(separator: ", ")
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "blocked peers: \(blockedList)",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("blocked peers: \(blockedList)")
}
}
@@ -2601,48 +2510,18 @@ class ChatViewModel: ObservableObject, BitchatDelegate {
// Update local set for UI
blockedUsers.remove(fingerprintStr)
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "unblocked \(nickname).",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("unblocked \(nickname).")
} else {
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "\(nickname) is not blocked.",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("\(nickname) is not blocked.")
}
} else {
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "cannot unblock \(nickname): unable to verify identity.",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("cannot unblock \(nickname): unable to verify identity.")
}
} else {
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "cannot unblock \(nickname): user not found.",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("cannot unblock \(nickname): user not found.")
}
} else {
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "usage: /unblock <nickname>",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("usage: /unblock <nickname>")
}
case "/fav":
@@ -2671,31 +2550,13 @@ class ChatViewModel: ObservableObject, BitchatDelegate {
try? await self?.messageRouter?.sendFavoriteNotification(to: noisePublicKey, isFavorite: true)
}
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "added \(nickname) to favorites.",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("added \(nickname) to favorites.")
}
} else {
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "can't find peer: \(nickname)",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("can't find peer: \(nickname)")
}
} else {
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "usage: /fav <nickname>",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("usage: /fav <nickname>")
}
case "/unfav":
@@ -2718,41 +2579,17 @@ class ChatViewModel: ObservableObject, BitchatDelegate {
try? await self?.messageRouter?.sendFavoriteNotification(to: noisePublicKey, isFavorite: false)
}
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "removed \(nickname) from favorites.",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("removed \(nickname) from favorites.")
}
} else {
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "can't find peer: \(nickname)",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("can't find peer: \(nickname)")
}
} else {
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "usage: /unfav <nickname>",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("usage: /unfav <nickname>")
}
case "/testnostr":
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "testing nostr relay connectivity...",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("testing nostr relay connectivity...")
Task { @MainActor in
if let relayManager = self.nostrRelayManager {
@@ -2788,13 +2625,7 @@ class ChatViewModel: ObservableObject, BitchatDelegate {
default:
// Unknown command
- let systemMessage = BitchatMessage(
- sender: "system",
- content: "unknown command: \(cmd).",
- timestamp: Date(),
- isRelay: false
- )
- messages.append(systemMessage)
+ addSystemMessage("unknown command: \(cmd).")
}
}
@@ -3367,4 +3198,15 @@ class ChatViewModel: ObservableObject, BitchatDelegate {
}
+ // MARK: - Helper for System Messages
+ private func addSystemMessage(_ content: String, timestamp: Date = Date()) {
+ let systemMessage = BitchatMessage(
+ sender: "system",
+ content: content,
+ timestamp: timestamp,
+ isRelay: false
+ )
+ messages.append(systemMessage)
+ }
+
} // End of ChatViewModel class
diff --git a/bitchat/Views/ContentView.swift b/bitchat/Views/ContentView.swift
index f70090f..58ec850 100644
--- a/bitchat/Views/ContentView.swift
+++ b/bitchat/Views/ContentView.swift
@@ -271,7 +271,6 @@ struct ContentView: View {
ForEach(windowedMessages, id: \.id) { message in
VStack(alignment: .leading, spacing: 0) {
// Check if current user is mentioned
- let _ = message.mentions?.contains(viewModel.nickname) ?? false
if message.sender == "system" {
// System messages
diff --git a/bitchatShareExtension/ShareViewController.swift b/bitchatShareExtension/ShareViewController.swift
index 451f82c..65668cd 100644
--- a/bitchatShareExtension/ShareViewController.swift
+++ b/bitchatShareExtension/ShareViewController.swift
@@ -138,44 +138,6 @@ class ShareViewController: SLComposeServiceViewController {
// MARK: - Helper Methods
- private func handleSharedText(_ text: String) {
- // Save to shared user defaults to pass to main app
- saveToSharedDefaults(content: text, type: "text")
- openMainApp()
- }
-
- private func handleSharedURL(_ url: URL) {
- // Get the page title if available from the extension context
- var pageTitle: String? = nil
- if let item = extensionContext?.inputItems.first as? NSExtensionItem {
- pageTitle = item.attributedContentText?.string ?? item.attributedTitle?.string
- }
-
- // Create a structured format for URL sharing
- let urlData: [String: String] = [
- "url": url.absoluteString,
- "title": pageTitle ?? url.host ?? "Shared Link"
- ]
-
- // Convert to JSON string
- if let jsonData = try? JSONSerialization.data(withJSONObject: urlData),
- let jsonString = String(data: jsonData, encoding: .utf8) {
- saveToSharedDefaults(content: jsonString, type: "url")
- } else {
- // Fallback to simple URL
- saveToSharedDefaults(content: url.absoluteString, type: "url")
- }
-
- openMainApp()
- }
-
- private func handleSharedImage(_ image: UIImage) {
- // For now, we'll just notify that image sharing isn't supported
- // In the future, we could implement image sharing via the mesh
- saveToSharedDefaults(content: "Image sharing coming soon!", type: "image")
- openMainApp()
- }
-
private func saveToSharedDefaults(content: String, type: String) {
// Use app groups to share data between extension and main app
guard let userDefaults = UserDefaults(suiteName: "group.chat.bitchat") else {