Improved channel saving logic

This commit is contained in:
Garth Vander Houwen 2022-10-29 07:31:50 -07:00
parent 3e512de3b2
commit 03fd74f2cd
3 changed files with 22 additions and 28 deletions

View file

@ -1066,7 +1066,6 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
let mutableChannels = fetchedMyInfo[0].channels!.mutableCopy() as! NSMutableOrderedSet
mutableChannels.removeAllObjects()
fetchedMyInfo[0].channels = mutableChannels
fetchedMyInfo[0].objectWillChange.send()
do {
try context!.save()
@ -1083,19 +1082,19 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
let decodedString = base64UrlString.base64urlToBase64()
if let decodedData = Data(base64Encoded: decodedString) {
do {
var channelSet: ChannelSet = try ChannelSet(serializedData: decodedData)
let channelSet: ChannelSet = try ChannelSet(serializedData: decodedData)
print(channelSet)
var i:Int32 = 0
for cs in channelSet.settings {
var chan = Channel()
i += 1
chan.settings = cs
chan.index = i
if i == 1 {
if i == 0 {
chan.role = Channel.Role.primary
} else {
} else {
chan.role = Channel.Role.secondary
}
chan.settings = cs
chan.index = i
i += 1
var adminPacket = AdminMessage()
adminPacket.setChannel = chan
var meshPacket: MeshPacket = MeshPacket()
@ -1103,8 +1102,8 @@ class BLEManager: NSObject, ObservableObject, CBCentralManagerDelegate, CBPeriph
meshPacket.from = 0 //UInt32(connectedPeripheral.num)
meshPacket.id = UInt32.random(in: UInt32(UInt8.max)..<UInt32.max)
meshPacket.priority = MeshPacket.Priority.reliable
meshPacket.wantAck = false
meshPacket.hopLimit = 0
meshPacket.wantAck = true
meshPacket.channel = 0
var dataMessage = DataMessage()
dataMessage.payload = try! adminPacket.serializedData()
dataMessage.portnum = PortNum.adminApp

View file

@ -770,22 +770,19 @@ func channelPacket (channel: Channel, fromNum: Int64, context: NSManagedObjectCo
newChannel.name = channel.settings.name
newChannel.role = Int32(channel.role.rawValue)
newChannel.psk = channel.settings.psk
let mutableChannels = fetchedMyInfo[0].channels!.mutableCopy() as! NSMutableOrderedSet
if newChannel.index == 0 {
mutableChannels.removeAllObjects()
}
mutableChannels.add(newChannel)
fetchedMyInfo[0].channels = mutableChannels.copy() as? NSOrderedSet
fetchedMyInfo[0].objectWillChange.send()
//fetchedMyInfo[0].objectWillChange.send()
do {
try context.save()
} catch {
print("Failed to save channel")
}
MeshLogger.log("💾 Updated MyInfo channel \(channel.index) from Channel App Packet For: \(fetchedMyInfo[0].myNodeNum)")
} else if channel.role.rawValue > 0 {
print("💥 Trying to save a channel to a MyInfo that does not exist: \(fromNum)")
}
@ -1103,7 +1100,7 @@ func positionPacket (packet: MeshPacket, context: NSManagedObjectContext) {
} else {
print("💥 Empty POSITION_APP Packet")
print(try! packet.jsonString())
if let dataMessage = try? DataMessage(serializedData: packet.decoded.payload) {
print(dataMessage)
@ -1269,6 +1266,7 @@ func textMessageAppPacket(packet: MeshPacket, connectedNode: Int64, context: NSM
newMessage.messageTimestamp = Int32(bitPattern: packet.rxTime)
newMessage.receivedACK = false
newMessage.isEmoji = packet.decoded.emoji == 1
newMessage.channel = Int32(packet.channel)
if packet.decoded.replyID > 0 {
newMessage.replyID = Int64(packet.decoded.replyID)

View file

@ -35,13 +35,13 @@ struct ShareChannels: View {
@EnvironmentObject var bleManager: BLEManager
@State var channelSet: ChannelSet = ChannelSet()
@State var includeChannel0 = true
@State var includeChannel1 = false
@State var includeChannel2 = false
@State var includeChannel3 = false
@State var includeChannel4 = false
@State var includeChannel5 = false
@State var includeChannel6 = false
@State var includeChannel7 = false
@State var includeChannel1 = true
@State var includeChannel2 = true
@State var includeChannel3 = true
@State var includeChannel4 = true
@State var includeChannel5 = true
@State var includeChannel6 = true
@State var includeChannel7 = true
@State var isPresentingHelp = false
var node: NodeInfoEntity?
@State private var channelsUrl = "https://www.meshtastic.org/e/#"
@ -238,10 +238,7 @@ struct ShareChannels: View {
.font(.callout)
.padding([.leading,.trailing,.bottom])
Text("Private Channels").font(.title2)
Text("The other six channels can be used for private group converations. Each of these groups has its own encryption key.")
.font(.callout)
.padding([.leading,.trailing,.bottom])
Text("From this view your primary channel and mesh settings are always shared in the generated QR code and you can toggle to include your admin channel and any private groups you want the person you are sharing with to have access to.")
Text("The other channels can be used for private group converations. Each of these groups has its own encryption key.")
.font(.callout)
.padding([.leading,.trailing,.bottom])
Divider()