mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-17 02:58:07 +00:00
Fix unread message and missed call counters
This commit is contained in:
parent
1ab630c0f5
commit
4bc9b2a783
6 changed files with 84 additions and 80 deletions
|
|
@ -250,12 +250,12 @@ struct ContentView: View {
|
|||
.frame(height: geometry.size.height/4)
|
||||
|
||||
ZStack {
|
||||
if let historyListVM = historyListViewModel, historyListVM.missedCallsCount > 0 {
|
||||
if SharedMainViewModel.shared.missedCallsCount > 0 {
|
||||
VStack {
|
||||
HStack {
|
||||
Text(
|
||||
historyListVM.missedCallsCount < 99
|
||||
? String(historyListVM.missedCallsCount)
|
||||
SharedMainViewModel.shared.missedCallsCount < 99
|
||||
? String(SharedMainViewModel.shared.missedCallsCount)
|
||||
: "99+"
|
||||
)
|
||||
.foregroundStyle(.white)
|
||||
|
|
@ -275,8 +275,8 @@ struct ContentView: View {
|
|||
sharedMainViewModel.displayedFriend = nil
|
||||
sharedMainViewModel.displayedConversation = nil
|
||||
sharedMainViewModel.displayedMeeting = nil
|
||||
if let historyListVM = historyListViewModel, historyListVM.missedCallsCount > 0 {
|
||||
historyListVM.resetMissedCallsCount()
|
||||
if SharedMainViewModel.shared.missedCallsCount > 0 {
|
||||
SharedMainViewModel.shared.resetMissedCallsCount()
|
||||
}
|
||||
}, label: {
|
||||
VStack {
|
||||
|
|
@ -300,12 +300,12 @@ struct ContentView: View {
|
|||
|
||||
if !CorePreferences.disableChatFeature {
|
||||
ZStack {
|
||||
if let contactsListVM = conversationsListViewModel, contactsListVM.unreadMessages > 0 {
|
||||
if SharedMainViewModel.shared.unreadMessages > 0 {
|
||||
VStack {
|
||||
HStack {
|
||||
Text(
|
||||
contactsListVM.unreadMessages < 99
|
||||
? String(contactsListVM.unreadMessages)
|
||||
SharedMainViewModel.shared.unreadMessages < 99
|
||||
? String(SharedMainViewModel.shared.unreadMessages)
|
||||
: "99+"
|
||||
)
|
||||
.foregroundStyle(.white)
|
||||
|
|
@ -797,12 +797,12 @@ struct ContentView: View {
|
|||
Spacer()
|
||||
|
||||
ZStack {
|
||||
if let historyListVM = historyListViewModel, historyListVM.missedCallsCount > 0 {
|
||||
if SharedMainViewModel.shared.missedCallsCount > 0 {
|
||||
VStack {
|
||||
HStack {
|
||||
Text(
|
||||
historyListVM.missedCallsCount < 99
|
||||
? String(historyListVM.missedCallsCount)
|
||||
SharedMainViewModel.shared.missedCallsCount < 99
|
||||
? String(SharedMainViewModel.shared.missedCallsCount)
|
||||
: "99+"
|
||||
)
|
||||
.foregroundStyle(.white)
|
||||
|
|
@ -822,8 +822,8 @@ struct ContentView: View {
|
|||
sharedMainViewModel.displayedFriend = nil
|
||||
sharedMainViewModel.displayedConversation = nil
|
||||
sharedMainViewModel.displayedMeeting = nil
|
||||
if let historyListVM = historyListViewModel, historyListVM.missedCallsCount > 0 {
|
||||
historyListVM.resetMissedCallsCount()
|
||||
if SharedMainViewModel.shared.missedCallsCount > 0 {
|
||||
SharedMainViewModel.shared.resetMissedCallsCount()
|
||||
}
|
||||
}, label: {
|
||||
VStack {
|
||||
|
|
@ -849,12 +849,12 @@ struct ContentView: View {
|
|||
Spacer()
|
||||
|
||||
ZStack {
|
||||
if let conversationsListVM = conversationsListViewModel, conversationsListVM.unreadMessages > 0 {
|
||||
if SharedMainViewModel.shared.unreadMessages > 0 {
|
||||
VStack {
|
||||
HStack {
|
||||
Text(
|
||||
conversationsListVM.unreadMessages < 99
|
||||
? String(conversationsListVM.unreadMessages)
|
||||
SharedMainViewModel.shared.unreadMessages < 99
|
||||
? String(SharedMainViewModel.shared.unreadMessages)
|
||||
: "99+"
|
||||
)
|
||||
.foregroundStyle(.white)
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ struct ConversationsListBottomSheet: View {
|
|||
if selectedConversation.unreadMessagesCount > 0 {
|
||||
Button {
|
||||
conversationsListViewModel.markAsReadSelectedConversation()
|
||||
conversationsListViewModel.updateUnreadMessagesCount()
|
||||
SharedMainViewModel.shared.updateUnreadMessagesCount()
|
||||
|
||||
if #available(iOS 16.0, *) {
|
||||
if idiom != .pad {
|
||||
|
|
|
|||
|
|
@ -35,8 +35,6 @@ class ConversationsListViewModel: ObservableObject {
|
|||
|
||||
@Published var conversationsList: [ConversationModel] = []
|
||||
|
||||
@Published var unreadMessages: Int = 0
|
||||
|
||||
var selectedConversation: ConversationModel?
|
||||
|
||||
var currentFilter: String = ""
|
||||
|
|
@ -60,7 +58,7 @@ class ConversationsListViewModel: ObservableObject {
|
|||
self.conversationsList = conversationsTmp
|
||||
}
|
||||
|
||||
self.updateUnreadMessagesCount()
|
||||
SharedMainViewModel.shared.updateUnreadMessagesCount()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -199,7 +197,7 @@ class ConversationsListViewModel: ObservableObject {
|
|||
}
|
||||
self.conversationsList.insert(model, at: 0)
|
||||
}
|
||||
self.updateUnreadMessagesCount()
|
||||
SharedMainViewModel.shared.updateUnreadMessagesCount()
|
||||
}
|
||||
}, onMessageSent: { (_: Core, chatRoom: ChatRoom, _: ChatMessage) in
|
||||
if let defaultAddress = core.defaultAccount?.contactAddress,
|
||||
|
|
@ -218,7 +216,7 @@ class ConversationsListViewModel: ObservableObject {
|
|||
}
|
||||
self.conversationsList.insert(model, at: 0)
|
||||
}
|
||||
self.updateUnreadMessagesCount()
|
||||
SharedMainViewModel.shared.updateUnreadMessagesCount()
|
||||
}
|
||||
}, onChatRoomRead: { (_: Core, chatRoom: ChatRoom) in
|
||||
if let defaultAddress = core.defaultAccount?.contactAddress,
|
||||
|
|
@ -236,7 +234,7 @@ class ConversationsListViewModel: ObservableObject {
|
|||
self.conversationsList.insert(model, at: 0)
|
||||
}
|
||||
}
|
||||
self.updateUnreadMessagesCount()
|
||||
SharedMainViewModel.shared.updateUnreadMessagesCount()
|
||||
}
|
||||
}, onChatRoomStateChanged: { (core: Core, chatroom: ChatRoom, state: ChatRoom.State) in
|
||||
// Log.info("[ConversationsListViewModel] Conversation [${LinphoneUtils.getChatRoomId(chatRoom)}] state changed [$state]")
|
||||
|
|
@ -333,26 +331,7 @@ class ConversationsListViewModel: ObservableObject {
|
|||
self.conversationsList = sortedList.sorted { $0.lastUpdateTime > $1.lastUpdateTime }
|
||||
}
|
||||
|
||||
updateUnreadMessagesCount()
|
||||
}
|
||||
|
||||
func updateUnreadMessagesCount() {
|
||||
coreContext.doOnCoreQueue { core in
|
||||
let account = core.defaultAccount
|
||||
if account != nil {
|
||||
let count = account?.unreadChatMessageCount != nil ? account!.unreadChatMessageCount : core.unreadChatMessageCount
|
||||
|
||||
DispatchQueue.main.async {
|
||||
self.unreadMessages = count
|
||||
UIApplication.shared.applicationIconBadgeNumber = count
|
||||
}
|
||||
} else {
|
||||
DispatchQueue.main.async {
|
||||
self.unreadMessages = 0
|
||||
UIApplication.shared.applicationIconBadgeNumber = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
SharedMainViewModel.shared.updateUnreadMessagesCount()
|
||||
}
|
||||
|
||||
func getContentTextMessage(message: ChatMessage, completion: @escaping (String) -> Void) {
|
||||
|
|
|
|||
|
|
@ -31,8 +31,6 @@ class HistoryListViewModel: ObservableObject {
|
|||
var callLogsAddressToDelete = ""
|
||||
var callLogCoreDelegate: CoreDelegate?
|
||||
|
||||
@Published var missedCallsCount: Int = 0
|
||||
|
||||
@Published var selectedCall: HistoryModel?
|
||||
|
||||
@Published var displayedConversation: ConversationModel?
|
||||
|
|
@ -41,7 +39,7 @@ class HistoryListViewModel: ObservableObject {
|
|||
|
||||
init() {
|
||||
computeCallLogsList()
|
||||
updateMissedCallsCount()
|
||||
SharedMainViewModel.shared.updateMissedCallsCount()
|
||||
}
|
||||
|
||||
func computeCallLogsList() {
|
||||
|
|
@ -87,45 +85,12 @@ class HistoryListViewModel: ObservableObject {
|
|||
self.callLogsTmp = callLogsTmpBis
|
||||
}
|
||||
|
||||
self.updateMissedCallsCount()
|
||||
SharedMainViewModel.shared.updateMissedCallsCount()
|
||||
})
|
||||
core.addDelegate(delegate: self.callLogCoreDelegate!)
|
||||
}
|
||||
}
|
||||
|
||||
func resetMissedCallsCount() {
|
||||
coreContext.doOnCoreQueue { core in
|
||||
let account = core.defaultAccount
|
||||
if account != nil {
|
||||
account?.resetMissedCallsCount()
|
||||
DispatchQueue.main.async {
|
||||
self.missedCallsCount = 0
|
||||
}
|
||||
} else {
|
||||
DispatchQueue.main.async {
|
||||
self.missedCallsCount = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func updateMissedCallsCount() {
|
||||
coreContext.doOnCoreQueue { core in
|
||||
let account = core.defaultAccount
|
||||
if account != nil {
|
||||
let count = account?.missedCallsCount != nil ? account!.missedCallsCount : core.missedCallsCount
|
||||
|
||||
DispatchQueue.main.async {
|
||||
self.missedCallsCount = count
|
||||
}
|
||||
} else {
|
||||
DispatchQueue.main.async {
|
||||
self.missedCallsCount = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func getCallIconResId(callStatus: Call.Status, isOutgoing: Bool) -> String {
|
||||
switch callStatus {
|
||||
case Call.Status.Missed:
|
||||
|
|
|
|||
|
|
@ -157,6 +157,8 @@ class AccountModel: ObservableObject {
|
|||
|
||||
private func computeNotificationsCount() {
|
||||
let count = account.unreadChatMessageCount + account.missedCallsCount
|
||||
SharedMainViewModel.shared.updateMissedCallsCount()
|
||||
SharedMainViewModel.shared.updateUnreadMessagesCount()
|
||||
DispatchQueue.main.async { [self] in
|
||||
notificationsCount = count
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,6 +42,9 @@ class SharedMainViewModel: ObservableObject {
|
|||
@Published var fileUrlsToShare: [String] = []
|
||||
|
||||
@Published var operationInProgress = false
|
||||
|
||||
@Published var unreadMessages: Int = 0
|
||||
@Published var missedCallsCount: Int = 0
|
||||
|
||||
let welcomeViewKey = "welcome_view"
|
||||
let generalTermsKey = "general_terms"
|
||||
|
|
@ -85,6 +88,9 @@ class SharedMainViewModel: ObservableObject {
|
|||
defaultAvatar = defaultAvatarTmp
|
||||
}
|
||||
}
|
||||
|
||||
updateMissedCallsCount()
|
||||
updateUnreadMessagesCount()
|
||||
}
|
||||
|
||||
func changeWelcomeView() {
|
||||
|
|
@ -153,4 +159,56 @@ class SharedMainViewModel: ObservableObject {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func resetMissedCallsCount() {
|
||||
CoreContext.shared.doOnCoreQueue { core in
|
||||
let account = core.defaultAccount
|
||||
if account != nil {
|
||||
account?.resetMissedCallsCount()
|
||||
DispatchQueue.main.async {
|
||||
self.missedCallsCount = 0
|
||||
}
|
||||
} else {
|
||||
DispatchQueue.main.async {
|
||||
self.missedCallsCount = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func updateMissedCallsCount() {
|
||||
CoreContext.shared.doOnCoreQueue { core in
|
||||
let account = core.defaultAccount
|
||||
if account != nil {
|
||||
let count = account?.missedCallsCount != nil ? account!.missedCallsCount : core.missedCallsCount
|
||||
|
||||
DispatchQueue.main.async {
|
||||
self.missedCallsCount = count
|
||||
}
|
||||
} else {
|
||||
DispatchQueue.main.async {
|
||||
self.missedCallsCount = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func updateUnreadMessagesCount() {
|
||||
CoreContext.shared.doOnCoreQueue { core in
|
||||
let account = core.defaultAccount
|
||||
if account != nil {
|
||||
let count = account?.unreadChatMessageCount != nil ? account!.unreadChatMessageCount : core.unreadChatMessageCount
|
||||
|
||||
DispatchQueue.main.async {
|
||||
self.unreadMessages = count
|
||||
UIApplication.shared.applicationIconBadgeNumber = count
|
||||
}
|
||||
} else {
|
||||
DispatchQueue.main.async {
|
||||
self.unreadMessages = 0
|
||||
UIApplication.shared.applicationIconBadgeNumber = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue