mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-24 23:45:18 +00:00
Fix @Unknown entries in autocomplete by improving nickname resolution
- Added getBestAvailableNickname() method to resolve nicknames from multiple sources - Updated all PeerSession creations to use better nickname resolution - Changed fallback from 'Unknown' to 'anon[peerID]' format for distinguishability - Modified getPeerNicknames() to proactively update Unknown entries - This ensures autocomplete shows meaningful nicknames instead of @Unknown
This commit is contained in:
@@ -842,6 +842,7 @@
|
|||||||
CODE_SIGN_ALLOW_ENTITLEMENTS_MODIFICATION = YES;
|
CODE_SIGN_ALLOW_ENTITLEMENTS_MODIFICATION = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = bitchatShareExtension/bitchatShareExtension.entitlements;
|
CODE_SIGN_ENTITLEMENTS = bitchatShareExtension/bitchatShareExtension.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 2;
|
||||||
INFOPLIST_FILE = bitchatShareExtension/Info.plist;
|
INFOPLIST_FILE = bitchatShareExtension/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = bitchat;
|
INFOPLIST_KEY_CFBundleDisplayName = bitchat;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
||||||
@@ -850,7 +851,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.2.0;
|
MARKETING_VERSION = 1.2.1;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = chat.bitchat.ShareExtension;
|
PRODUCT_BUNDLE_IDENTIFIER = chat.bitchat.ShareExtension;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||||
@@ -872,7 +873,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = bitchat/bitchat.entitlements;
|
CODE_SIGN_ENTITLEMENTS = bitchat/bitchat.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 2;
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
INFOPLIST_FILE = bitchat/Info.plist;
|
INFOPLIST_FILE = bitchat/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = bitchat;
|
INFOPLIST_KEY_CFBundleDisplayName = bitchat;
|
||||||
@@ -882,7 +883,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.2.0;
|
MARKETING_VERSION = 1.2.1;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = chat.bitchat;
|
PRODUCT_BUNDLE_IDENTIFIER = chat.bitchat;
|
||||||
PRODUCT_NAME = bitchat;
|
PRODUCT_NAME = bitchat;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
@@ -928,7 +929,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = bitchat/bitchat.entitlements;
|
CODE_SIGN_ENTITLEMENTS = bitchat/bitchat.entitlements;
|
||||||
CODE_SIGN_IDENTITY = "iPhone Developer";
|
CODE_SIGN_IDENTITY = "iPhone Developer";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 2;
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
INFOPLIST_FILE = bitchat/Info.plist;
|
INFOPLIST_FILE = bitchat/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = bitchat;
|
INFOPLIST_KEY_CFBundleDisplayName = bitchat;
|
||||||
@@ -938,7 +939,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.2.0;
|
MARKETING_VERSION = 1.2.1;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = chat.bitchat;
|
PRODUCT_BUNDLE_IDENTIFIER = chat.bitchat;
|
||||||
PRODUCT_NAME = bitchat;
|
PRODUCT_NAME = bitchat;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
@@ -961,6 +962,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = "bitchat/bitchat-macOS.entitlements";
|
CODE_SIGN_ENTITLEMENTS = "bitchat/bitchat-macOS.entitlements";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = 2;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
INFOPLIST_FILE = bitchat/Info.plist;
|
INFOPLIST_FILE = bitchat/Info.plist;
|
||||||
@@ -971,7 +973,7 @@
|
|||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
||||||
MARKETING_VERSION = 1.2.0;
|
MARKETING_VERSION = 1.2.1;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = chat.bitchat;
|
PRODUCT_BUNDLE_IDENTIFIER = chat.bitchat;
|
||||||
PRODUCT_NAME = bitchat;
|
PRODUCT_NAME = bitchat;
|
||||||
REGISTER_APP_GROUPS = YES;
|
REGISTER_APP_GROUPS = YES;
|
||||||
@@ -1052,6 +1054,7 @@
|
|||||||
CODE_SIGN_ENTITLEMENTS = "bitchat/bitchat-macOS.entitlements";
|
CODE_SIGN_ENTITLEMENTS = "bitchat/bitchat-macOS.entitlements";
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
COMBINE_HIDPI_IMAGES = YES;
|
COMBINE_HIDPI_IMAGES = YES;
|
||||||
|
CURRENT_PROJECT_VERSION = 2;
|
||||||
DEAD_CODE_STRIPPING = YES;
|
DEAD_CODE_STRIPPING = YES;
|
||||||
ENABLE_PREVIEWS = YES;
|
ENABLE_PREVIEWS = YES;
|
||||||
INFOPLIST_FILE = bitchat/Info.plist;
|
INFOPLIST_FILE = bitchat/Info.plist;
|
||||||
@@ -1062,7 +1065,7 @@
|
|||||||
"@executable_path/../Frameworks",
|
"@executable_path/../Frameworks",
|
||||||
);
|
);
|
||||||
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
MACOSX_DEPLOYMENT_TARGET = 13.0;
|
||||||
MARKETING_VERSION = 1.2.0;
|
MARKETING_VERSION = 1.2.1;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = chat.bitchat;
|
PRODUCT_BUNDLE_IDENTIFIER = chat.bitchat;
|
||||||
PRODUCT_NAME = bitchat;
|
PRODUCT_NAME = bitchat;
|
||||||
REGISTER_APP_GROUPS = YES;
|
REGISTER_APP_GROUPS = YES;
|
||||||
@@ -1148,6 +1151,7 @@
|
|||||||
CODE_SIGN_ALLOW_ENTITLEMENTS_MODIFICATION = YES;
|
CODE_SIGN_ALLOW_ENTITLEMENTS_MODIFICATION = YES;
|
||||||
CODE_SIGN_ENTITLEMENTS = bitchatShareExtension/bitchatShareExtension.entitlements;
|
CODE_SIGN_ENTITLEMENTS = bitchatShareExtension/bitchatShareExtension.entitlements;
|
||||||
CODE_SIGN_STYLE = Automatic;
|
CODE_SIGN_STYLE = Automatic;
|
||||||
|
CURRENT_PROJECT_VERSION = 2;
|
||||||
INFOPLIST_FILE = bitchatShareExtension/Info.plist;
|
INFOPLIST_FILE = bitchatShareExtension/Info.plist;
|
||||||
INFOPLIST_KEY_CFBundleDisplayName = bitchat;
|
INFOPLIST_KEY_CFBundleDisplayName = bitchat;
|
||||||
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
IPHONEOS_DEPLOYMENT_TARGET = 16.0;
|
||||||
@@ -1156,7 +1160,7 @@
|
|||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
"@executable_path/../../Frameworks",
|
"@executable_path/../../Frameworks",
|
||||||
);
|
);
|
||||||
MARKETING_VERSION = 1.2.0;
|
MARKETING_VERSION = 1.2.1;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = chat.bitchat.ShareExtension;
|
PRODUCT_BUNDLE_IDENTIFIER = chat.bitchat.ShareExtension;
|
||||||
SDKROOT = iphoneos;
|
SDKROOT = iphoneos;
|
||||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||||
|
|||||||
@@ -167,8 +167,9 @@ class BluetoothMeshService: NSObject {
|
|||||||
if let session = peerSessions[peerID] {
|
if let session = peerSessions[peerID] {
|
||||||
session.updateBluetoothConnection(peripheral: peripheral, characteristic: characteristic)
|
session.updateBluetoothConnection(peripheral: peripheral, characteristic: characteristic)
|
||||||
} else if let peripheral = peripheral {
|
} else if let peripheral = peripheral {
|
||||||
// Create session if needed
|
// Create session if needed - try to get a better nickname
|
||||||
let session = PeerSession(peerID: peerID)
|
let nickname = getBestAvailableNickname(for: peerID)
|
||||||
|
let session = PeerSession(peerID: peerID, nickname: nickname)
|
||||||
session.updateBluetoothConnection(peripheral: peripheral, characteristic: characteristic)
|
session.updateBluetoothConnection(peripheral: peripheral, characteristic: characteristic)
|
||||||
peerSessions[peerID] = session
|
peerSessions[peerID] = session
|
||||||
}
|
}
|
||||||
@@ -188,8 +189,9 @@ class BluetoothMeshService: NSObject {
|
|||||||
if let session = peerSessions[peerID] {
|
if let session = peerSessions[peerID] {
|
||||||
session.updateBluetoothConnection(peripheral: peripheral, characteristic: characteristic)
|
session.updateBluetoothConnection(peripheral: peripheral, characteristic: characteristic)
|
||||||
} else if let peripheral = peripheral {
|
} else if let peripheral = peripheral {
|
||||||
// Create session if needed
|
// Create session if needed - try to get a better nickname
|
||||||
let session = PeerSession(peerID: peerID)
|
let nickname = getBestAvailableNickname(for: peerID)
|
||||||
|
let session = PeerSession(peerID: peerID, nickname: nickname)
|
||||||
session.updateBluetoothConnection(peripheral: peripheral, characteristic: characteristic)
|
session.updateBluetoothConnection(peripheral: peripheral, characteristic: characteristic)
|
||||||
peerSessions[peerID] = session
|
peerSessions[peerID] = session
|
||||||
}
|
}
|
||||||
@@ -741,7 +743,8 @@ class BluetoothMeshService: NSObject {
|
|||||||
if let session = peerSessions[peerID] {
|
if let session = peerSessions[peerID] {
|
||||||
session.updateBluetoothConnection(peripheral: mapping.peripheral, characteristic: nil)
|
session.updateBluetoothConnection(peripheral: mapping.peripheral, characteristic: nil)
|
||||||
} else {
|
} else {
|
||||||
let session = PeerSession(peerID: peerID)
|
let nickname = getBestAvailableNickname(for: peerID)
|
||||||
|
let session = PeerSession(peerID: peerID, nickname: nickname)
|
||||||
session.updateBluetoothConnection(peripheral: mapping.peripheral, characteristic: nil)
|
session.updateBluetoothConnection(peripheral: mapping.peripheral, characteristic: nil)
|
||||||
peerSessions[peerID] = session
|
peerSessions[peerID] = session
|
||||||
}
|
}
|
||||||
@@ -1019,7 +1022,9 @@ class BluetoothMeshService: NSObject {
|
|||||||
if let session = peerSessions[peerID] {
|
if let session = peerSessions[peerID] {
|
||||||
return session
|
return session
|
||||||
}
|
}
|
||||||
let newSession = PeerSession(peerID: peerID)
|
// Try to get a better nickname from various sources before defaulting to "Unknown"
|
||||||
|
let nickname = getBestAvailableNickname(for: peerID)
|
||||||
|
let newSession = PeerSession(peerID: peerID, nickname: nickname)
|
||||||
peerSessions[peerID] = newSession
|
peerSessions[peerID] = newSession
|
||||||
return newSession
|
return newSession
|
||||||
}
|
}
|
||||||
@@ -1044,6 +1049,22 @@ class BluetoothMeshService: NSObject {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Get the best available nickname for a peer ID from various sources
|
||||||
|
/// This method should be called from within collectionsQueue context
|
||||||
|
private func getBestAvailableNickname(for peerID: String) -> String {
|
||||||
|
// Check if ChatViewModel has peer information available
|
||||||
|
if let chatViewModel = delegate as? ChatViewModel {
|
||||||
|
let peers = chatViewModel.allPeers
|
||||||
|
if let peer = peers.first(where: { $0.id == peerID }), !peer.displayName.isEmpty && peer.displayName != "Unknown" {
|
||||||
|
return peer.displayName
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Generate a more user-friendly temporary nickname based on peer ID
|
||||||
|
// This is better than "Unknown" and helps users distinguish between different peers
|
||||||
|
return "anon\(peerID.prefix(4))"
|
||||||
|
}
|
||||||
|
|
||||||
/// Create a peer session only if we have a valid connection
|
/// Create a peer session only if we have a valid connection
|
||||||
/// This prevents ghost sessions from being created
|
/// This prevents ghost sessions from being created
|
||||||
private func createPeerSessionIfValid(_ peerID: String, peripheral: CBPeripheral? = nil, nickname: String = "Unknown") -> PeerSession? {
|
private func createPeerSessionIfValid(_ peerID: String, peripheral: CBPeripheral? = nil, nickname: String = "Unknown") -> PeerSession? {
|
||||||
@@ -1343,7 +1364,8 @@ class BluetoothMeshService: NSObject {
|
|||||||
if let session = self.peerSessions[peerID] {
|
if let session = self.peerSessions[peerID] {
|
||||||
session.updateAuthenticationState(authenticated: true, noiseSession: true)
|
session.updateAuthenticationState(authenticated: true, noiseSession: true)
|
||||||
} else {
|
} else {
|
||||||
let session = PeerSession(peerID: peerID)
|
let nickname = self.getBestAvailableNickname(for: peerID)
|
||||||
|
let session = PeerSession(peerID: peerID, nickname: nickname)
|
||||||
session.updateAuthenticationState(authenticated: true, noiseSession: true)
|
session.updateAuthenticationState(authenticated: true, noiseSession: true)
|
||||||
self.peerSessions[peerID] = session
|
self.peerSessions[peerID] = session
|
||||||
}
|
}
|
||||||
@@ -1640,7 +1662,8 @@ class BluetoothMeshService: NSObject {
|
|||||||
session.fingerprint = fingerprint
|
session.fingerprint = fingerprint
|
||||||
session.updateAuthenticationState(authenticated: true, noiseSession: true)
|
session.updateAuthenticationState(authenticated: true, noiseSession: true)
|
||||||
} else {
|
} else {
|
||||||
let session = PeerSession(peerID: peerID)
|
let nickname = self.getBestAvailableNickname(for: peerID)
|
||||||
|
let session = PeerSession(peerID: peerID, nickname: nickname)
|
||||||
session.fingerprint = fingerprint
|
session.fingerprint = fingerprint
|
||||||
session.updateAuthenticationState(authenticated: true, noiseSession: true)
|
session.updateAuthenticationState(authenticated: true, noiseSession: true)
|
||||||
self.peerSessions[peerID] = session
|
self.peerSessions[peerID] = session
|
||||||
@@ -2523,7 +2546,8 @@ class BluetoothMeshService: NSObject {
|
|||||||
session.hasAnnounced = true
|
session.hasAnnounced = true
|
||||||
} else {
|
} else {
|
||||||
// Create session if it doesn't exist
|
// Create session if it doesn't exist
|
||||||
let session = PeerSession(peerID: peerID)
|
let nickname = self.getBestAvailableNickname(for: peerID)
|
||||||
|
let session = PeerSession(peerID: peerID, nickname: nickname)
|
||||||
session.hasAnnounced = true
|
session.hasAnnounced = true
|
||||||
self.peerSessions[peerID] = session
|
self.peerSessions[peerID] = session
|
||||||
}
|
}
|
||||||
@@ -2587,6 +2611,16 @@ class BluetoothMeshService: NSObject {
|
|||||||
// Get nicknames from PeerSessions only (including disconnected ones)
|
// Get nicknames from PeerSessions only (including disconnected ones)
|
||||||
// This allows proper nickname resolution for reconnecting peers
|
// This allows proper nickname resolution for reconnecting peers
|
||||||
for (peerID, session) in self.peerSessions {
|
for (peerID, session) in self.peerSessions {
|
||||||
|
// If we have an "Unknown" nickname, try to resolve a better one before returning
|
||||||
|
if session.nickname == "Unknown" {
|
||||||
|
let betterNickname = getBestAvailableNickname(for: peerID)
|
||||||
|
if betterNickname != "Unknown" {
|
||||||
|
// Update the session with the better nickname
|
||||||
|
session.nickname = betterNickname
|
||||||
|
SecureLogger.log("Updated nickname for \(peerID) from 'Unknown' to '\(betterNickname)'",
|
||||||
|
category: SecureLogger.session, level: .info)
|
||||||
|
}
|
||||||
|
}
|
||||||
nicknames[peerID] = session.nickname
|
nicknames[peerID] = session.nickname
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6648,7 +6682,8 @@ extension BluetoothMeshService: CBPeripheralManagerDelegate {
|
|||||||
if let session = self.peerSessions[peerID] {
|
if let session = self.peerSessions[peerID] {
|
||||||
session.lastSuccessfulMessageTime = Date()
|
session.lastSuccessfulMessageTime = Date()
|
||||||
} else {
|
} else {
|
||||||
let session = PeerSession(peerID: peerID)
|
let nickname = self.getBestAvailableNickname(for: peerID)
|
||||||
|
let session = PeerSession(peerID: peerID, nickname: nickname)
|
||||||
session.lastSuccessfulMessageTime = Date()
|
session.lastSuccessfulMessageTime = Date()
|
||||||
self.peerSessions[peerID] = session
|
self.peerSessions[peerID] = session
|
||||||
}
|
}
|
||||||
@@ -6749,7 +6784,8 @@ extension BluetoothMeshService: CBPeripheralManagerDelegate {
|
|||||||
if let session = self.peerSessions[peerID] {
|
if let session = self.peerSessions[peerID] {
|
||||||
session.isActivePeer = true
|
session.isActivePeer = true
|
||||||
} else {
|
} else {
|
||||||
let session = PeerSession(peerID: peerID)
|
let nickname = self.getBestAvailableNickname(for: peerID)
|
||||||
|
let session = PeerSession(peerID: peerID, nickname: nickname)
|
||||||
session.isActivePeer = true
|
session.isActivePeer = true
|
||||||
self.peerSessions[peerID] = session
|
self.peerSessions[peerID] = session
|
||||||
}
|
}
|
||||||
@@ -6898,7 +6934,8 @@ extension BluetoothMeshService: CBPeripheralManagerDelegate {
|
|||||||
if let session = peerSessions[peerID] {
|
if let session = peerSessions[peerID] {
|
||||||
session.lastConnectionTime = Date()
|
session.lastConnectionTime = Date()
|
||||||
} else {
|
} else {
|
||||||
let session = PeerSession(peerID: peerID)
|
let nickname = getBestAvailableNickname(for: peerID)
|
||||||
|
let session = PeerSession(peerID: peerID, nickname: nickname)
|
||||||
session.lastConnectionTime = Date()
|
session.lastConnectionTime = Date()
|
||||||
peerSessions[peerID] = session
|
peerSessions[peerID] = session
|
||||||
}
|
}
|
||||||
@@ -7565,7 +7602,8 @@ extension BluetoothMeshService: CBPeripheralManagerDelegate {
|
|||||||
session.isAvailable = isAvailable
|
session.isAvailable = isAvailable
|
||||||
} else {
|
} else {
|
||||||
// Create session if needed
|
// Create session if needed
|
||||||
let session = PeerSession(peerID: peerID)
|
let nickname = self.getBestAvailableNickname(for: peerID)
|
||||||
|
let session = PeerSession(peerID: peerID, nickname: nickname)
|
||||||
session.isAvailable = isAvailable
|
session.isAvailable = isAvailable
|
||||||
peerSessions[peerID] = session
|
peerSessions[peerID] = session
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user