@ -245,12 +245,12 @@ class ConversationViewModel(
// hashes are required if wanting to delete messages from the 'storage server'
// They are not required for communities OR if all messages are outgoing
// also we can only delete deleted messages (marked as deleted) locally
// also we can only delete deleted messages and control messages (marked as deleted) locally
val canDeleteForEveryone = messages . all { ! it . isDeleted && ! it . isControlMessage } && (
messages . all { it . isOutgoing } ||
conversationType == MessageType . COMMUNITY ||
messages . all { lokiMessageDb . getMessageServerHash ( it . id , it . isMms ) != null
} )
messages . all { lokiMessageDb . getMessageServerHash ( it . id , it . isMms ) != null }
)
// There are three types of dialogs for deletion:
// 1- Delete on device only OR all devices - Used for Note to self
@ -260,11 +260,16 @@ class ConversationViewModel(
// the conversation is a note to self
conversationType == MessageType . NOTE _TO _SELF -> {
_dialogsState . update {
it . copy ( delete AllDevices = DeleteForEveryoneDialogData (
it . copy ( delete Everyone = DeleteForEveryoneDialogData (
messages = messages ,
defaultToEveryone = false ,
everyoneEnabled = true ,
messageType = conversationType
everyoneEnabled = canDeleteForEveryone ,
messageType = conversationType ,
deleteForEveryoneLabel = application . getString ( R . string . deleteMessageDevicesAll ) ,
warning = if ( canDeleteForEveryone ) null else
application . resources . getQuantityString (
R . plurals . deleteMessageNoteToSelfWarning , messages . count ( ) , messages . count ( )
)
)
)
}
@ -278,6 +283,7 @@ class ConversationViewModel(
messages = messages ,
defaultToEveryone = isAdmin . value ,
everyoneEnabled = true ,
deleteForEveryoneLabel = application . getString ( R . string . deleteMessageEveryone ) ,
messageType = conversationType
)
)
@ -293,6 +299,7 @@ class ConversationViewModel(
defaultToEveryone = false ,
everyoneEnabled = false , // disable 'delete for everyone' - can only delete locally in this case
messageType = conversationType ,
deleteForEveryoneLabel = application . getString ( R . string . deleteMessageEveryone ) ,
warning = application . resources . getQuantityString (
R . plurals . deleteMessageWarning , messages . count ( ) , messages . count ( )
)
@ -548,7 +555,7 @@ class ConversationViewModel(
) . show ( )
}
_dialogsState . update { it . copy ( delete AllDevices = data ) }
_dialogsState . update { it . copy ( delete Everyone = data ) }
}
// hide loading indicator
@ -565,11 +572,8 @@ class ConversationViewModel(
try {
repository . deleteCommunityMessagesRemotely ( threadId , data . messages )
// When this is done we simply need to remove the message locally
repository . markAsDeletedLocally (
messages = data . messages ,
displayedMessage = application . getString ( R . string . deleteMessageDeletedGlobally )
)
// When this is done we simply need to remove the message locally (leave nothing behind)
repository . deleteMessages ( messages = data . messages , threadId = threadId )
// show confirmation toast
withContext ( Dispatchers . Main ) {
@ -731,12 +735,6 @@ class ConversationViewModel(
}
}
is Commands . HideDeleteAllDevicesDialog -> {
_dialogsState . update {
it . copy ( deleteAllDevices = null )
}
}
is Commands . MarkAsDeletedLocally -> {
// hide dialog first
_dialogsState . update {
@ -818,8 +816,7 @@ class ConversationViewModel(
data class DialogsState (
val openLinkDialogUrl : String ? = null ,
val clearAllEmoji : ClearAllEmoji ? = null ,
val deleteEveryone : DeleteForEveryoneDialogData ? = null ,
val deleteAllDevices : DeleteForEveryoneDialogData ? = null ,
val deleteEveryone : DeleteForEveryoneDialogData ? = null
)
data class DeleteForEveryoneDialogData (
@ -827,6 +824,7 @@ class ConversationViewModel(
val messageType : MessageType ,
val defaultToEveryone : Boolean ,
val everyoneEnabled : Boolean ,
val deleteForEveryoneLabel : String ,
val warning : String ? = null
)
@ -841,7 +839,6 @@ class ConversationViewModel(
data class ClearEmoji ( val emoji : String , val messageId : MessageId ) : Commands ( )
data object HideDeleteEveryoneDialog : Commands ( )
data object HideDeleteAllDevicesDialog : Commands ( )
data object HideClearEmoji : Commands ( )
data class MarkAsDeletedLocally ( val messages : Set < MessageRecord > ) : Commands ( )