mirror of
https://github.com/meshtastic/Meshtastic-Apple.git
synced 2026-04-20 22:13:56 +00:00
Improved channel saving logic
This commit is contained in:
parent
3e512de3b2
commit
03fd74f2cd
3 changed files with 22 additions and 28 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue