mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-27 10:45:20 +00:00
Remove dead code found by full Periphery audit; add scan config + advisory CI (#1410)
Periphery 3.7.4 audit of both schemes (macOS + iOS, intersected so platform-specific code is never touched), with test targets indexed and the share extension built. 277 dead declarations removed or demoted: dead forwarding wrappers (ChatViewModel+Nostr/+PrivateChat), removed- feature remnants (autocomplete command suggestions, back-swipe tuning, MediaSendError, GeohashParticipantTracker), unused Tor dormancy bindings, assign-only properties, unused parameters (renamed to _), and redundant public accessibility. 13 orphaned localization keys deleted across all 29 locales (old pre-#1392 location-notes UI, app_info warnings). Two real tests were flagged as unused because they never ran: Swift Testing methods missing @Test (NostrProtocolTests. testAckRoundTripNIP44V2_Delivered, NotificationStreamAssemblerTests. testAssemblesCompressedLargeFrame). Re-armed both; they pass. Deliberately kept, now recorded in .periphery.baseline.json: iOS-only code invisible to the CI macOS scan, C FFI signatures, keep-alive NWPathMonitor reference, InboundEventKey.eventID (dedup semantics), wifiBulk capability bit (reserved for Wi-Fi bulk work, used by BitFoundation package tests), and the String secureClear cluster (exercised by package tests). New: .periphery.yml config and an advisory Dead Code CI job (mirrors the SwiftLint precedent from #1361) that fails on findings not in the committed baseline. Verified: full macOS app suite, BitFoundation (119) and BitLogger (13) package tests green; periphery scan --strict exits clean. Co-authored-by: jack <jackjackbits@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
jack
Claude Fable 5
parent
d5cf64f99e
commit
ef848857b7
@@ -84,7 +84,6 @@ import SwiftUI
|
||||
import Combine
|
||||
import CommonCrypto
|
||||
import CoreBluetooth
|
||||
import Tor
|
||||
#if os(iOS)
|
||||
import UIKit
|
||||
#endif
|
||||
@@ -222,12 +221,6 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele
|
||||
conversations.unreadDirectRoutingPeerIDs()
|
||||
}
|
||||
|
||||
/// Check if there are any unread messages (including from temporary Nostr peer IDs)
|
||||
@MainActor
|
||||
var hasAnyUnreadMessages: Bool {
|
||||
!unreadPrivateMessages.isEmpty
|
||||
}
|
||||
|
||||
/// Open the most relevant private chat when tapping the toolbar unread icon.
|
||||
/// Prefers the most recently active unread conversation, otherwise the most recent PM.
|
||||
@MainActor
|
||||
@@ -245,20 +238,6 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele
|
||||
set { peerIdentityStore.setSelectedPrivateChatFingerprint(newValue) }
|
||||
}
|
||||
|
||||
// Resolve full Noise key for a peer's short ID (used by UI header rendering)
|
||||
@MainActor
|
||||
private func getNoiseKeyForShortID(_ shortPeerID: PeerID) -> PeerID? {
|
||||
if let mapped = peerIdentityStore.stablePeerID(forShortID: shortPeerID) { return mapped }
|
||||
// Fallback: derive from active Noise session if available
|
||||
if shortPeerID.id.count == 16,
|
||||
let key = meshService.noiseSessionPublicKeyData(for: shortPeerID) {
|
||||
let stable = PeerID(hexData: key)
|
||||
peerIdentityStore.setStablePeerID(stable, forShortID: shortPeerID)
|
||||
return stable
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Resolve short mesh ID (16-hex) from a full Noise public key hex (64-hex)
|
||||
@MainActor
|
||||
func getShortIDForNoiseKey(_ fullNoiseKeyHex: PeerID) -> PeerID {
|
||||
@@ -354,18 +333,11 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele
|
||||
|
||||
// MARK: - Social Features (Delegated to PeerStateManager)
|
||||
|
||||
@MainActor
|
||||
var favoritePeers: Set<String> { unifiedPeerService.favoritePeers }
|
||||
@MainActor
|
||||
var blockedUsers: Set<String> { unifiedPeerService.blockedUsers }
|
||||
|
||||
// MARK: - Encryption and Security
|
||||
|
||||
// Noise Protocol encryption status
|
||||
var peerEncryptionStatus: [PeerID: EncryptionStatus] {
|
||||
get { peerIdentityStore.encryptionStatuses }
|
||||
set { peerIdentityStore.replaceEncryptionStatuses(newValue) }
|
||||
}
|
||||
var verifiedFingerprints: Set<String> {
|
||||
get { peerIdentityStore.verifiedFingerprints }
|
||||
set { peerIdentityStore.setVerifiedFingerprints(newValue) }
|
||||
@@ -959,11 +931,6 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele
|
||||
|
||||
// MARK: - Public helpers
|
||||
|
||||
/// Published geohash people list for SwiftUI observation
|
||||
var geohashPeople: [GeoPerson] {
|
||||
participantTracker.visiblePeople
|
||||
}
|
||||
|
||||
/// Return the current, pruned, sorted people list for the active geohash without mutating state.
|
||||
@MainActor
|
||||
func visibleGeohashPeople() -> [GeoPerson] {
|
||||
@@ -1056,14 +1023,6 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele
|
||||
publicConversationCoordinator.displayNameForNostrPubkey(pubkeyHex)
|
||||
}
|
||||
|
||||
// MARK: - Media Transfers
|
||||
|
||||
private enum MediaSendError: Error {
|
||||
case encodingFailed
|
||||
case tooLarge
|
||||
case copyFailed
|
||||
}
|
||||
|
||||
func currentPublicSender() -> (name: String, peerID: PeerID) {
|
||||
publicConversationCoordinator.currentPublicSender()
|
||||
}
|
||||
@@ -1125,7 +1084,7 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele
|
||||
}
|
||||
|
||||
@MainActor
|
||||
@objc func handlePeerStatusUpdate(_ notification: Notification) {
|
||||
@objc func handlePeerStatusUpdate(_: Notification) {
|
||||
peerIdentityCoordinator.handlePeerStatusUpdate()
|
||||
}
|
||||
|
||||
@@ -1159,15 +1118,6 @@ final class ChatViewModel: ObservableObject, BitchatDelegate, TransportEventDele
|
||||
lifecycleCoordinator.markPrivateMessagesAsRead(from: peerID)
|
||||
}
|
||||
|
||||
func getMessages(for peerID: PeerID?) -> [BitchatMessage] {
|
||||
lifecycleCoordinator.getMessages(for: peerID)
|
||||
}
|
||||
|
||||
@MainActor
|
||||
func getPrivateChatMessages(for peerID: PeerID) -> [BitchatMessage] {
|
||||
lifecycleCoordinator.getPrivateChatMessages(for: peerID)
|
||||
}
|
||||
|
||||
@MainActor
|
||||
func getPeerIDForNickname(_ nickname: String) -> PeerID? {
|
||||
peerIdentityCoordinator.getPeerIDForNickname(nickname)
|
||||
|
||||
Reference in New Issue
Block a user