mirror of
https://github.com/permissionlesstech/bitchat.git
synced 2026-07-25 12:25:19 +00:00
Fix notification dot size and improve peer announcements
- Make notification dot smaller (5x5) for better appearance - Remove all delays from announcement sending - Send announcements immediately on connection - Add debug logging for join/leave messages - Ensure join/leave messages are properly displayed
This commit is contained in:
@@ -117,10 +117,9 @@ class BluetoothMeshService: NSObject {
|
|||||||
startAdvertising()
|
startAdvertising()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Schedule initial announcement after services are ready
|
// Send initial announcement immediately if we have peers
|
||||||
announcementTimer?.invalidate()
|
if !connectedPeripherals.isEmpty || !subscribedCentrals.isEmpty {
|
||||||
announcementTimer = Timer.scheduledTimer(withTimeInterval: 1.0, repeats: false) { [weak self] _ in
|
sendInitialAnnouncement()
|
||||||
self?.sendInitialAnnouncement()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -623,7 +622,7 @@ extension BluetoothMeshService: CBPeripheralDelegate {
|
|||||||
peripheral.setNotifyValue(true, for: characteristic)
|
peripheral.setNotifyValue(true, for: characteristic)
|
||||||
peripheralCharacteristics[peripheral] = characteristic
|
peripheralCharacteristics[peripheral] = characteristic
|
||||||
|
|
||||||
// Send key exchange immediately
|
// Send key exchange and announce immediately
|
||||||
DispatchQueue.main.async { [weak self] in
|
DispatchQueue.main.async { [weak self] in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
|
|
||||||
@@ -644,7 +643,7 @@ extension BluetoothMeshService: CBPeripheralDelegate {
|
|||||||
|
|
||||||
// Send announce packet immediately after key exchange
|
// Send announce packet immediately after key exchange
|
||||||
if let vm = self.delegate as? ChatViewModel {
|
if let vm = self.delegate as? ChatViewModel {
|
||||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [weak self] in
|
DispatchQueue.main.async { [weak self] in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
let announcePacket = BitchatPacket(
|
let announcePacket = BitchatPacket(
|
||||||
type: MessageType.announce.rawValue,
|
type: MessageType.announce.rawValue,
|
||||||
@@ -751,7 +750,7 @@ extension BluetoothMeshService: CBPeripheralManagerDelegate {
|
|||||||
|
|
||||||
// Send announce immediately after key exchange
|
// Send announce immediately after key exchange
|
||||||
if let vm = self.delegate as? ChatViewModel {
|
if let vm = self.delegate as? ChatViewModel {
|
||||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [weak self] in
|
DispatchQueue.main.async { [weak self] in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
print("[DEBUG] Sending announce packet to central after key exchange")
|
print("[DEBUG] Sending announce packet to central after key exchange")
|
||||||
let announcePacket = BitchatPacket(
|
let announcePacket = BitchatPacket(
|
||||||
@@ -805,7 +804,7 @@ extension BluetoothMeshService: CBPeripheralManagerDelegate {
|
|||||||
|
|
||||||
// Send announce immediately after key exchange
|
// Send announce immediately after key exchange
|
||||||
if let vm = delegate as? ChatViewModel {
|
if let vm = delegate as? ChatViewModel {
|
||||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { [weak self] in
|
DispatchQueue.main.async { [weak self] in
|
||||||
guard let self = self else { return }
|
guard let self = self else { return }
|
||||||
let announcePacket = BitchatPacket(
|
let announcePacket = BitchatPacket(
|
||||||
type: MessageType.announce.rawValue,
|
type: MessageType.announce.rawValue,
|
||||||
|
|||||||
@@ -241,6 +241,7 @@ extension ChatViewModel: BitchatDelegate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func didConnectToPeer(_ peerID: String) {
|
func didConnectToPeer(_ peerID: String) {
|
||||||
|
print("[DEBUG] didConnectToPeer called with: \(peerID)")
|
||||||
isConnected = true
|
isConnected = true
|
||||||
let systemMessage = BitchatMessage(
|
let systemMessage = BitchatMessage(
|
||||||
sender: "system",
|
sender: "system",
|
||||||
@@ -250,9 +251,11 @@ extension ChatViewModel: BitchatDelegate {
|
|||||||
originalSender: nil
|
originalSender: nil
|
||||||
)
|
)
|
||||||
messages.append(systemMessage)
|
messages.append(systemMessage)
|
||||||
|
print("[DEBUG] Added join message, total messages: \(messages.count)")
|
||||||
}
|
}
|
||||||
|
|
||||||
func didDisconnectFromPeer(_ peerID: String) {
|
func didDisconnectFromPeer(_ peerID: String) {
|
||||||
|
print("[DEBUG] didDisconnectFromPeer called with: \(peerID)")
|
||||||
let systemMessage = BitchatMessage(
|
let systemMessage = BitchatMessage(
|
||||||
sender: "system",
|
sender: "system",
|
||||||
content: "\(peerID) has left the channel",
|
content: "\(peerID) has left the channel",
|
||||||
@@ -261,6 +264,7 @@ extension ChatViewModel: BitchatDelegate {
|
|||||||
originalSender: nil
|
originalSender: nil
|
||||||
)
|
)
|
||||||
messages.append(systemMessage)
|
messages.append(systemMessage)
|
||||||
|
print("[DEBUG] Added leave message, total messages: \(messages.count)")
|
||||||
}
|
}
|
||||||
|
|
||||||
func didUpdatePeerList(_ peers: [String]) {
|
func didUpdatePeerList(_ peers: [String]) {
|
||||||
|
|||||||
@@ -175,27 +175,20 @@ struct ContentView: View {
|
|||||||
}
|
}
|
||||||
} label: {
|
} label: {
|
||||||
HStack(spacing: 4) {
|
HStack(spacing: 4) {
|
||||||
// Notification indicator for unread messages (on the left)
|
|
||||||
if !viewModel.unreadPrivateMessages.isEmpty {
|
|
||||||
Circle()
|
|
||||||
.fill(Color.orange)
|
|
||||||
.frame(width: 8, height: 8)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Text
|
// Text
|
||||||
Text(viewModel.isConnected ? "\(viewModel.connectedPeers.count) \(viewModel.connectedPeers.count == 1 ? "person" : "people")" : "scanning")
|
Text(viewModel.isConnected ? "\(viewModel.connectedPeers.count) \(viewModel.connectedPeers.count == 1 ? "person" : "people")" : "scanning")
|
||||||
.font(.system(size: 14, design: .monospaced))
|
.font(.system(size: 14, design: .monospaced))
|
||||||
.foregroundColor(viewModel.isConnected ? textColor : Color.red)
|
.foregroundColor(viewModel.isConnected ? textColor : Color.red)
|
||||||
|
|
||||||
// Chevron (on the right)
|
// Notification indicator (on the right after default chevron)
|
||||||
Image(systemName: "chevron.down")
|
if !viewModel.unreadPrivateMessages.isEmpty {
|
||||||
.font(.system(size: 10))
|
Circle()
|
||||||
.foregroundColor(secondaryTextColor)
|
.fill(Color.orange)
|
||||||
|
.frame(width: 5, height: 5)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.menuStyle(.borderlessButton)
|
.menuStyle(.borderlessButton)
|
||||||
.menuIndicator(.hidden)
|
|
||||||
.fixedSize()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private var messagesView: some View {
|
private var messagesView: some View {
|
||||||
|
|||||||
Reference in New Issue
Block a user