From 3eb9c48d43112cd25e94f2a38f024e56fcd91e78 Mon Sep 17 00:00:00 2001 From: Max Radermacher Date: Fri, 8 Dec 2023 12:39:52 -0600 Subject: [PATCH] Ignore muted, marked unread threads in badge count --- .../Chat List/ThreadSwipeHandler.swift | 2 +- .../Database/Records/InteractionFinder.swift | 30 ++++++++----------- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/Signal/src/ViewControllers/HomeView/Chat List/ThreadSwipeHandler.swift b/Signal/src/ViewControllers/HomeView/Chat List/ThreadSwipeHandler.swift index 4fc361caca..4a3bd9f4c2 100644 --- a/Signal/src/ViewControllers/HomeView/Chat List/ThreadSwipeHandler.swift +++ b/Signal/src/ViewControllers/HomeView/Chat List/ThreadSwipeHandler.swift @@ -218,7 +218,7 @@ extension ThreadSwipeHandler where Self: UIViewController { AssertIsOnMainThread() databaseStorage.write { transaction in - threadViewModel.associatedData.updateWith(mutedUntilTimestamp: Date.ows_millisecondTimestamp(), updateStorageService: true, transaction: transaction) + threadViewModel.associatedData.updateWith(mutedUntilTimestamp: 0, updateStorageService: true, transaction: transaction) } } diff --git a/SignalServiceKit/src/Storage/Database/Records/InteractionFinder.swift b/SignalServiceKit/src/Storage/Database/Records/InteractionFinder.swift index 4beeefbf54..f8b938ab3a 100644 --- a/SignalServiceKit/src/Storage/Database/Records/InteractionFinder.swift +++ b/SignalServiceKit/src/Storage/Database/Records/InteractionFinder.swift @@ -188,6 +188,8 @@ public class InteractionFinder: NSObject { public class func unreadCountInAllThreads(transaction: SDSAnyReadTransaction) -> UInt { do { + let includeMutedThreads = SSKPreferences.includeMutedThreadsInBadgeCount(transaction: transaction) + var unreadInteractionQuery = """ SELECT COUNT(interaction.\(interactionColumn: .id)) FROM \(InteractionRecord.databaseTableName) AS interaction @@ -196,21 +198,16 @@ public class InteractionFinder: NSObject { WHERE associatedData.isArchived = "0" """ - if !SSKPreferences.includeMutedThreadsInBadgeCount(transaction: transaction) { + if !includeMutedThreads { unreadInteractionQuery += " \(sqlClauseForIgnoringInteractionsWithMutedThread(threadAssociatedDataAlias: "associatedData")) " } unreadInteractionQuery += " AND \(sqlClauseForUnreadInteractionCounts(interactionsAlias: "interaction")) " - guard let unreadInteractionCount = try UInt.fetchOne( - transaction.unwrapGrdbRead.database, - sql: unreadInteractionQuery - ) else { - owsFailDebug("unreadInteractionCount was unexpectedly nil") - return 0 - } + let unreadInteractionCount = try UInt.fetchOne(transaction.unwrapGrdbRead.database, sql: unreadInteractionQuery) + owsAssertDebug(unreadInteractionCount != nil, "unreadInteractionCount was unexpectedly nil") - let markedUnreadThreadQuery = """ + var markedUnreadThreadQuery = """ SELECT COUNT(*) FROM \(ThreadRecord.databaseTableName) INNER JOIN \(ThreadAssociatedData.databaseTableName) AS associatedData @@ -220,17 +217,16 @@ public class InteractionFinder: NSObject { AND \(threadColumn: .shouldThreadBeVisible) = 1 """ - guard let markedUnreadCount = try UInt.fetchOne( - transaction.unwrapGrdbRead.database, - sql: markedUnreadThreadQuery - ) else { - owsFailDebug("markedUnreadCount was unexpectedly nil") - return unreadInteractionCount + if !includeMutedThreads { + markedUnreadThreadQuery += " \(sqlClauseForIgnoringInteractionsWithMutedThread(threadAssociatedDataAlias: "associatedData")) " } - return unreadInteractionCount + markedUnreadCount + let markedUnreadCount = try UInt.fetchOne(transaction.unwrapGrdbRead.database, sql: markedUnreadThreadQuery) + owsAssertDebug(markedUnreadCount != nil, "markedUnreadCount was unexpectedly nil") + + return (unreadInteractionCount ?? 0) + (markedUnreadCount ?? 0) } catch { - owsFailDebug("error: \(error)") + owsFailDebug("error: \(error.grdbErrorForLogging)") return 0 } }