From 339ecb3aceb6741bd6b36d1ede79e07492daa31b Mon Sep 17 00:00:00 2001 From: Benjamin Faershtein <119711889+RCGV1@users.noreply.github.com> Date: Sat, 7 Jun 2025 14:58:06 -0700 Subject: [PATCH] Actually save isClientMuted to the node and switch channelList to a fetch request --- .../CoreData/ChannelEntityExtension.swift | 1 + Meshtastic/Views/Messages/ChannelList.swift | 13 +++++++++++-- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/Meshtastic/Extensions/CoreData/ChannelEntityExtension.swift b/Meshtastic/Extensions/CoreData/ChannelEntityExtension.swift index 57babf4a..c85eef4a 100644 --- a/Meshtastic/Extensions/CoreData/ChannelEntityExtension.swift +++ b/Meshtastic/Extensions/CoreData/ChannelEntityExtension.swift @@ -32,6 +32,7 @@ extension ChannelEntity { channel.settings.psk = self.psk ?? Data() channel.role = Channel.Role(rawValue: Int(self.role)) ?? Channel.Role.secondary channel.settings.moduleSettings.positionPrecision = UInt32(self.positionPrecision) + channel.settings.moduleSettings.isClientMuted = self.mute return channel } } diff --git a/Meshtastic/Views/Messages/ChannelList.swift b/Meshtastic/Views/Messages/ChannelList.swift index 1123c4ab..61f4fe00 100644 --- a/Meshtastic/Views/Messages/ChannelList.swift +++ b/Meshtastic/Views/Messages/ChannelList.swift @@ -26,6 +26,12 @@ struct ChannelList: View { var restrictedChannels = ["gpio", "mqtt", "serial", "admin"] + @FetchRequest( + sortDescriptors: [NSSortDescriptor(keyPath: \ChannelEntity.index, ascending: true)], + predicate: nil, + animation: .default + ) private var channels: FetchedResults + @ViewBuilder private func makeChannelRow( myInfo: MyInfoEntity, @@ -87,6 +93,9 @@ struct ChannelList: View { .foregroundColor(.secondary) } } + if channel.mute { + Image(systemName: "bell.slash") + } } if channel.allPrivateMessages.count > 0 { @@ -103,7 +112,7 @@ struct ChannelList: View { var body: some View { VStack { // Display Contacts for the rest of the non admin channels - if let node, let myInfo = node.myInfo, let channels = myInfo.channels?.array as? [ChannelEntity] { + if let node, let myInfo = node.myInfo { List(selection: $channelSelection) { ForEach(channels) { (channel: ChannelEntity) in if !restrictedChannels.contains(channel.name?.lowercased() ?? "") { @@ -119,7 +128,7 @@ struct ChannelList: View { } } Button { - channel.mute = !channel.mute + channel.mute.toggle() do { let adminMessageId = bleManager.saveChannel(channel: channel.protoBuf, fromUser: node.user!, toUser: node.user!) if adminMessageId > 0 {