diff --git a/Telegram-iOS.xcworkspace/xcshareddata/xcschemes/Telegram-iOS-Hockeyapp-Internal.xcscheme b/Telegram-iOS.xcworkspace/xcshareddata/xcschemes/Telegram-iOS-Hockeyapp-Internal.xcscheme index 7152c964ab..61e39f8bfe 100644 --- a/Telegram-iOS.xcworkspace/xcshareddata/xcschemes/Telegram-iOS-Hockeyapp-Internal.xcscheme +++ b/Telegram-iOS.xcworkspace/xcshareddata/xcschemes/Telegram-iOS-Hockeyapp-Internal.xcscheme @@ -79,6 +79,7 @@ buildConfiguration = "DebugHockeyapp" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + enableAddressSanitizer = "YES" enableASanStackUseAfterReturn = "YES" launchStyle = "0" useCustomWorkingDirectory = "NO" diff --git a/submodules/ChatListSearchRecentPeersNode/Sources/ChatListSearchRecentPeersNode.swift b/submodules/ChatListSearchRecentPeersNode/Sources/ChatListSearchRecentPeersNode.swift index 7d918865fd..5048da2950 100644 --- a/submodules/ChatListSearchRecentPeersNode/Sources/ChatListSearchRecentPeersNode.swift +++ b/submodules/ChatListSearchRecentPeersNode/Sources/ChatListSearchRecentPeersNode.swift @@ -178,7 +178,7 @@ public final class ChatListSearchRecentPeersNode: ASDisplayNode { let unreadCount = values.count(for: .peer(peerView.peerId)) if let unreadCount = unreadCount, unreadCount > 0 { - unread[peerView.peerId] = UnreadSearchBadge(unreadCount: unreadCount, isMuted: isMuted) + unread[peerView.peerId] = isMuted ? .muted(unreadCount) : .unmuted(unreadCount) } if let presence = peerView.peerPresences[peer.id] { diff --git a/submodules/HorizontalPeerItem/Sources/HorizontalPeerItem.swift b/submodules/HorizontalPeerItem/Sources/HorizontalPeerItem.swift index 238f989186..4613e342fc 100644 --- a/submodules/HorizontalPeerItem/Sources/HorizontalPeerItem.swift +++ b/submodules/HorizontalPeerItem/Sources/HorizontalPeerItem.swift @@ -144,8 +144,16 @@ public final class HorizontalPeerItemNode: ListViewItemNode { let badgeAttributedString: NSAttributedString if let unreadBadge = item.unreadBadge { let badgeTextColor: UIColor - let unreadCount: Int32 = unreadBadge.unreadCount - let isMuted: Bool = unreadBadge.isMuted + let unreadCount: Int32 + let isMuted: Bool + switch unreadBadge { + case let .muted(_count): + unreadCount = _count + isMuted = true + case let .unmuted(_count): + unreadCount = _count + isMuted = false + } if isMuted { currentBadgeBackgroundImage = PresentationResourcesChatList.badgeBackgroundInactive(item.theme) badgeTextColor = item.theme.chatList.unreadBadgeInactiveTextColor diff --git a/submodules/TelegramUI/TelegramUI/ChatListSearchContainerNode.swift b/submodules/TelegramUI/TelegramUI/ChatListSearchContainerNode.swift index 59afcbb058..34f7e0f3f2 100644 --- a/submodules/TelegramUI/TelegramUI/ChatListSearchContainerNode.swift +++ b/submodules/TelegramUI/TelegramUI/ChatListSearchContainerNode.swift @@ -357,7 +357,7 @@ enum ChatListSearchEntry: Comparable, Identifiable { var badge: ContactsPeerItemBadge? if let unreadBadge = unreadBadge { - badge = ContactsPeerItemBadge(count: unreadBadge.unreadCount, type: unreadBadge.isMuted ? .inactive : .active) + badge = ContactsPeerItemBadge(count: unreadBadge.count, type: unreadBadge.isMuted ? .inactive : .active) } let header:ChatListSearchItemHeader? @@ -401,7 +401,7 @@ enum ChatListSearchEntry: Comparable, Identifiable { var badge: ContactsPeerItemBadge? if let unreadBadge = unreadBadge { - badge = ContactsPeerItemBadge(count: unreadBadge.unreadCount, type: unreadBadge.isMuted ? .inactive : .active) + badge = ContactsPeerItemBadge(count: unreadBadge.count, type: unreadBadge.isMuted ? .inactive : .active) } let header:ChatListSearchItemHeader? @@ -635,7 +635,7 @@ final class ChatListSearchContainerNode: SearchDisplayControllerContentNode { let unreadCount = values.count(for: .peer(peerView.peerId)) if let unreadCount = unreadCount, unreadCount > 0 { - unread[peerView.peerId] = UnreadSearchBadge(unreadCount: unreadCount, isMuted: isMuted) + unread[peerView.peerId] = isMuted ? .muted(unreadCount) : .unmuted(unreadCount) } } return (peers: viewsAndPeers.1, unread: unread) diff --git a/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj b/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj index ab44500ca3..fc15625414 100644 --- a/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj +++ b/submodules/TelegramUI/TelegramUI_Xcode.xcodeproj/project.pbxproj @@ -334,6 +334,7 @@ D0383EE4207D292800C45548 /* EmojisChatInputContextPanelNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0383EE3207D292800C45548 /* EmojisChatInputContextPanelNode.swift */; }; D0383EE6207D299600C45548 /* EmojisChatInputPanelItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D0383EE5207D299600C45548 /* EmojisChatInputPanelItem.swift */; }; D038AC5322F88A3600320981 /* ImageBlur.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D038AC5222F88A3600320981 /* ImageBlur.framework */; }; + D038ACD722F8BE9700320981 /* UnreadSearchBadge.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D038ACD622F8BE9700320981 /* UnreadSearchBadge.framework */; }; D039FB1921711B5D00BD1BAD /* PlatformVideoContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D039FB1821711B5D00BD1BAD /* PlatformVideoContent.swift */; }; D03AA4DF202DBF6F0056C405 /* ChatContextResultPeekContentNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03AA4DE202DBF6F0056C405 /* ChatContextResultPeekContentNode.swift */; }; D03AA4E5202DF8840056C405 /* StickerPreviewPeekContent.swift in Sources */ = {isa = PBXBuildFile; fileRef = D03AA4E4202DF8840056C405 /* StickerPreviewPeekContent.swift */; }; @@ -1556,6 +1557,7 @@ D0383EE3207D292800C45548 /* EmojisChatInputContextPanelNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojisChatInputContextPanelNode.swift; sourceTree = ""; }; D0383EE5207D299600C45548 /* EmojisChatInputPanelItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmojisChatInputPanelItem.swift; sourceTree = ""; }; D038AC5222F88A3600320981 /* ImageBlur.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = ImageBlur.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D038ACD622F8BE9700320981 /* UnreadSearchBadge.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; path = UnreadSearchBadge.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D039EB021DEAEFEE00886EBC /* ChatTextInputAudioRecordingOverlayButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatTextInputAudioRecordingOverlayButton.swift; sourceTree = ""; }; D039EB071DEC725600886EBC /* ChatTextInputAudioRecordingTimeNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatTextInputAudioRecordingTimeNode.swift; sourceTree = ""; }; D039EB091DEC7A8700886EBC /* ChatTextInputAudioRecordingCancelIndicator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ChatTextInputAudioRecordingCancelIndicator.swift; sourceTree = ""; }; @@ -2344,6 +2346,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + D038ACD722F8BE9700320981 /* UnreadSearchBadge.framework in Frameworks */, D038AC5322F88A3600320981 /* ImageBlur.framework in Frameworks */, D0879CCC22F876DD00C4D6B3 /* ChatListSearchRecentPeersNode.framework in Frameworks */, D0879C9622F875C000C4D6B3 /* PeerPresenceStatusManager.framework in Frameworks */, @@ -3427,6 +3430,7 @@ D08D45281D5E340200A7428A /* Frameworks */ = { isa = PBXGroup; children = ( + D038ACD622F8BE9700320981 /* UnreadSearchBadge.framework */, D038AC5222F88A3600320981 /* ImageBlur.framework */, D0879CCB22F876DD00C4D6B3 /* ChatListSearchRecentPeersNode.framework */, D0879C9522F875C000C4D6B3 /* PeerPresenceStatusManager.framework */, diff --git a/submodules/UnreadSearchBadge/Sources/UnreadSearchBadge.swift b/submodules/UnreadSearchBadge/Sources/UnreadSearchBadge.swift index 59064ad6af..a0afc92907 100644 --- a/submodules/UnreadSearchBadge/Sources/UnreadSearchBadge.swift +++ b/submodules/UnreadSearchBadge/Sources/UnreadSearchBadge.swift @@ -1,11 +1,22 @@ import Foundation -public struct UnreadSearchBadge: Equatable { - public var unreadCount: Int32 - public var isMuted: Bool +public enum UnreadSearchBadge: Equatable { + case muted(Int32) + case unmuted(Int32) - public init(unreadCount: Int32, isMuted: Bool) { - self.unreadCount = unreadCount - self.isMuted = isMuted + public var count: Int32 { + switch self { + case let .muted(count), let .unmuted(count): + return count + } + } + + public var isMuted: Bool { + switch self { + case .muted: + return true + case .unmuted: + return false + } } }