messenger-android

Android graphical user interfaces for GNUnet Messenger
Log | Files | Refs | README | LICENSE

ChatOverviewViewModel.kt (2317B)


      1 /*
      2    This file is part of GNUnet.
      3    Copyright (C) 2021--2025 GNUnet e.V.
      4 
      5    GNUnet is free software: you can redistribute it and/or modify it
      6    under the terms of the GNU Affero General Public License as published
      7    by the Free Software Foundation, either version 3 of the License,
      8    or (at your option) any later version.
      9 
     10    GNUnet is distributed in the hope that it will be useful, but
     11    WITHOUT ANY WARRANTY; without even the implied warranty of
     12    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     13    Affero General Public License for more details.
     14 
     15    You should have received a copy of the GNU Affero General Public License
     16    along with this program.  If not, see <http://www.gnu.org/licenses/>.
     17 
     18    SPDX-License-Identifier: AGPL3.0-or-later
     19  */
     20 /*
     21  * @author t3sserakt
     22  * @file GNUnetMessenger/app/src/main/java/org/gnunet/gnunetmessenger/ui/viewmodel/ChatOverviewViewModel.kt
     23  */
     24 
     25 package org.gnunet.gnunetmessenger.viewmodel
     26 
     27 import androidx.lifecycle.MutableLiveData
     28 import androidx.lifecycle.ViewModel
     29 import org.gnunet.gnunetmessenger.model.ChatContext
     30 import org.gnunet.gnunetmessenger.model.ChatMessage
     31 import org.gnunet.gnunetmessenger.model.ChatSummary
     32 
     33 class ChatOverviewViewModel : ViewModel() {
     34 
     35     val chats = MutableLiveData<List<ChatSummary>>(emptyList())
     36 
     37 
     38     fun setChats(newChats: List<ChatSummary>) {
     39         chats.value = newChats
     40     }
     41 
     42     fun updateChatMessage(chatContext: ChatContext, chatMessage: ChatMessage) {
     43         val updated = chats.value.orEmpty().map {
     44             if (it.chatContext.userPointer == chatContext.userPointer)
     45                 it.copy(lastMessagePreview = chatMessage.text)
     46             else
     47                 it
     48         }
     49         chats.value = updated
     50     }
     51 
     52     fun addOrUpdateChat(chat: ChatSummary) {
     53         val current = chats.value.orEmpty().toMutableList()
     54         val index = current.indexOfFirst { it.chatContext.userPointer == chat.chatContext.userPointer }
     55         if (index >= 0) {
     56             current[index] = chat
     57         } else {
     58             current.add(chat)
     59         }
     60         chats.value = current
     61     }
     62 
     63     fun clearModel(){
     64         chats.value = emptyList()
     65     }
     66 
     67     fun removeChat(chat: ChatSummary) {
     68         chats.value = chats.value?.filter { it.chatContext.userPointer != chat.chatContext.userPointer }
     69     }
     70 }