Add pending and failed states for admin delete.

This commit is contained in:
Michelle Tang
2026-03-03 11:14:11 -05:00
committed by Greyson Parrelli
parent 3af8b6050c
commit 74d9e3248b
19 changed files with 247 additions and 46 deletions

View File

@@ -106,6 +106,7 @@ import org.thoughtcrime.securesms.database.model.StoryResult
import org.thoughtcrime.securesms.database.model.StoryType
import org.thoughtcrime.securesms.database.model.StoryType.Companion.fromCode
import org.thoughtcrime.securesms.database.model.StoryViewState
import org.thoughtcrime.securesms.database.model.databaseprotos.AdminDeleteStatus
import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList
import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context
import org.thoughtcrime.securesms.database.model.databaseprotos.GV2UpdateDescription
@@ -3788,6 +3789,45 @@ open class MessageTable(context: Context?, databaseHelper: SignalDatabase) : Dat
}
}
/**
* Sets admin delete status to pending
*/
fun markAsPendingAdminDelete(messageId: Long) {
val messageExtras = MessageExtras(adminDeleteStatus = AdminDeleteStatus(AdminDeleteStatus.Status.PENDING))
writableDatabase
.update(TABLE_NAME)
.values(MESSAGE_EXTRAS to messageExtras.encode())
.where("$ID = ?", messageId)
.run()
AppDependencies.databaseObserver.notifyMessageUpdateObservers(MessageId(messageId))
}
/**
* Sets admin delete status to failed
*/
fun markAsFailedAdminDelete(messageId: Long) {
val messageExtras = MessageExtras(adminDeleteStatus = AdminDeleteStatus(AdminDeleteStatus.Status.FAILED))
writableDatabase
.update(TABLE_NAME)
.values(MESSAGE_EXTRAS to messageExtras.encode())
.where("$ID = ?", messageId)
.run()
AppDependencies.databaseObserver.notifyMessageUpdateObservers(MessageId(messageId))
}
/**
* Sets admin delete status to complete.
*/
fun markAsSentAdminDelete(messageId: Long) {
val messageExtras = MessageExtras(adminDeleteStatus = AdminDeleteStatus(AdminDeleteStatus.Status.DONE))
writableDatabase
.update(TABLE_NAME)
.values(MESSAGE_EXTRAS to messageExtras.encode())
.where("$ID = ?", messageId)
.run()
AppDependencies.databaseObserver.notifyMessageUpdateObservers(MessageId(messageId))
}
/**
* When a message gets deleted, clear the pinned record and remove any references
*/

View File

@@ -46,6 +46,7 @@ import org.thoughtcrime.securesms.components.transfercontrols.TransferControlVie
import org.thoughtcrime.securesms.database.MessageTypes;
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
import org.thoughtcrime.securesms.database.documents.NetworkFailure;
import org.thoughtcrime.securesms.database.model.databaseprotos.AdminDeleteStatus;
import org.thoughtcrime.securesms.database.model.databaseprotos.BodyRangeList;
import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context;
import org.thoughtcrime.securesms.database.model.databaseprotos.GroupCallUpdateDetails;
@@ -173,6 +174,15 @@ public abstract class MessageRecord extends DisplayRecord {
return MessageTypes.isLegacyType(type);
}
@Override
public boolean isFailed() {
return super.isFailed() || isFailedAdminDelete();
}
@Override
public boolean isPending() {
return super.isPending() || isPendingAdminDelete();
}
@Override
@WorkerThread
@@ -789,6 +799,18 @@ public abstract class MessageRecord extends DisplayRecord {
return deletedBy;
}
public boolean isPendingAdminDelete() {
return messageExtras != null &&
messageExtras.adminDeleteStatus != null &&
messageExtras.adminDeleteStatus.status == AdminDeleteStatus.Status.PENDING;
}
public boolean isFailedAdminDelete() {
return messageExtras != null &&
messageExtras.adminDeleteStatus != null &&
messageExtras.adminDeleteStatus.status == AdminDeleteStatus.Status.FAILED;
}
public boolean isInMemoryMessageRecord() {
return false;
}