kopia lustrzana https://github.com/ryukoposting/Signal-Android
Fully delete remotely deleted stories after sending or on receive.
rodzic
0309f9ea89
commit
8eb3a1906e
|
@ -189,6 +189,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns,
|
|||
abstract void deleteThreads(@NonNull Set<Long> threadIds);
|
||||
abstract void deleteAllThreads();
|
||||
abstract void deleteAbandonedMessages();
|
||||
public abstract void deleteRemotelyDeletedStory(long messageId);
|
||||
|
||||
public abstract List<MessageRecord> getMessagesInThreadAfterInclusive(long threadId, long timestamp, long limit);
|
||||
|
||||
|
|
|
@ -2668,6 +2668,17 @@ public class MmsDatabase extends MessageDatabase {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteRemotelyDeletedStory(long messageId) {
|
||||
try (Cursor cursor = getMessageCursor(messageId)) {
|
||||
if (cursor.moveToFirst() && CursorUtil.requireBoolean(cursor, REMOTE_DELETED)) {
|
||||
deleteMessage(messageId);
|
||||
} else {
|
||||
Log.i(TAG, "Unable to delete remotely deleted story: " + messageId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MessageRecord> getMessagesInThreadAfterInclusive(long threadId, long timestamp, long limit) {
|
||||
String where = TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? AND " +
|
||||
|
|
|
@ -1647,6 +1647,11 @@ public class SmsDatabase extends MessageDatabase {
|
|||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteRemotelyDeletedStory(long messageId) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<MessageRecord> getMessagesInThreadAfterInclusive(long threadId, long timestamp, long limit) {
|
||||
String where = TABLE_NAME + "." + MmsSmsColumns.THREAD_ID + " = ? AND " +
|
||||
|
|
|
@ -357,7 +357,10 @@ class StorySendsDatabase(context: Context, databaseHelper: SignalDatabase) : Dat
|
|||
}
|
||||
|
||||
val messagesWithoutAnyReceivers = localRows.map { it.messageId }.distinct() - remoteRows.map { it.messageId }.distinct()
|
||||
messagesWithoutAnyReceivers.forEach { SignalDatabase.mms.markAsRemoteDelete(it) }
|
||||
messagesWithoutAnyReceivers.forEach {
|
||||
SignalDatabase.mms.markAsRemoteDelete(it)
|
||||
SignalDatabase.mms.deleteRemotelyDeletedStory(it)
|
||||
}
|
||||
|
||||
writableDatabase.setTransactionSuccessful()
|
||||
} finally {
|
||||
|
|
|
@ -15,7 +15,6 @@ import org.thoughtcrime.securesms.database.model.DistributionListId;
|
|||
import org.thoughtcrime.securesms.database.model.MessageId;
|
||||
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
||||
import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
|
||||
import org.thoughtcrime.securesms.database.model.StoryType;
|
||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||
import org.thoughtcrime.securesms.groups.GroupId;
|
||||
import org.thoughtcrime.securesms.jobmanager.Data;
|
||||
|
@ -28,12 +27,12 @@ import org.thoughtcrime.securesms.recipients.RecipientId;
|
|||
import org.thoughtcrime.securesms.recipients.RecipientUtil;
|
||||
import org.thoughtcrime.securesms.transport.RetryLaterException;
|
||||
import org.thoughtcrime.securesms.util.GroupUtil;
|
||||
import org.thoughtcrime.securesms.util.MessageRecordUtil;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
import org.whispersystems.signalservice.api.crypto.ContentHint;
|
||||
import org.whispersystems.signalservice.api.crypto.UntrustedIdentityException;
|
||||
import org.whispersystems.signalservice.api.messages.SendMessageResult;
|
||||
import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage;
|
||||
import org.whispersystems.signalservice.api.push.DistributionId;
|
||||
import org.whispersystems.signalservice.api.push.exceptions.ServerRejectedException;
|
||||
|
||||
import java.io.IOException;
|
||||
|
@ -190,6 +189,10 @@ public class RemoteDeleteSendJob extends BaseJob {
|
|||
|
||||
if (recipients.isEmpty()) {
|
||||
db.markAsSent(messageId, true);
|
||||
|
||||
if (MessageRecordUtil.isStory(message)) {
|
||||
db.deleteRemotelyDeletedStory(messageId);
|
||||
}
|
||||
} else {
|
||||
Log.w(TAG, "Still need to send to " + recipients.size() + " recipients. Retrying.");
|
||||
throw new RetryLaterException();
|
||||
|
|
|
@ -100,7 +100,6 @@ import org.thoughtcrime.securesms.jobs.SenderKeyDistributionSendJob;
|
|||
import org.thoughtcrime.securesms.jobs.StickerPackDownloadJob;
|
||||
import org.thoughtcrime.securesms.jobs.TrimThreadJob;
|
||||
import org.thoughtcrime.securesms.keyvalue.SignalStore;
|
||||
import org.thoughtcrime.securesms.keyvalue.StoryValues;
|
||||
import org.thoughtcrime.securesms.linkpreview.LinkPreview;
|
||||
import org.thoughtcrime.securesms.linkpreview.LinkPreviewUtil;
|
||||
import org.thoughtcrime.securesms.mms.IncomingMediaMessage;
|
||||
|
@ -136,6 +135,7 @@ import org.thoughtcrime.securesms.util.GroupUtil;
|
|||
import org.thoughtcrime.securesms.util.IdentityUtil;
|
||||
import org.thoughtcrime.securesms.util.LinkUtil;
|
||||
import org.thoughtcrime.securesms.util.MediaUtil;
|
||||
import org.thoughtcrime.securesms.util.MessageRecordUtil;
|
||||
import org.thoughtcrime.securesms.util.RemoteDeleteUtil;
|
||||
import org.thoughtcrime.securesms.util.TextSecurePreferences;
|
||||
import org.thoughtcrime.securesms.util.Util;
|
||||
|
@ -1010,6 +1010,9 @@ public final class MessageContentProcessor {
|
|||
if (targetMessage != null && RemoteDeleteUtil.isValidReceive(targetMessage, senderRecipient, content.getServerReceivedTimestamp())) {
|
||||
MessageDatabase db = targetMessage.isMms() ? SignalDatabase.mms() : SignalDatabase.sms();
|
||||
db.markAsRemoteDelete(targetMessage.getId());
|
||||
if (MessageRecordUtil.isStory(targetMessage)) {
|
||||
db.deleteRemotelyDeletedStory(targetMessage.getId());
|
||||
}
|
||||
ApplicationDependencies.getMessageNotifier().updateNotification(context, ConversationId.fromMessageRecord(targetMessage), false);
|
||||
return new MessageId(targetMessage.getId(), targetMessage.isMms());
|
||||
} else if (targetMessage == null) {
|
||||
|
|
|
@ -44,6 +44,9 @@ fun MessageRecord.hasThumbnail(): Boolean =
|
|||
fun MessageRecord.isStoryReaction(): Boolean =
|
||||
isMms && MmsSmsColumns.Types.isStoryReaction((this as MmsMessageRecord).type)
|
||||
|
||||
fun MessageRecord.isStory(): Boolean =
|
||||
isMms && (this as MmsMessageRecord).storyType.isStory
|
||||
|
||||
fun MessageRecord.isPaymentActivationRequest(): Boolean =
|
||||
isMms && MmsSmsColumns.Types.isRequestToActivatePayments((this as MmsMessageRecord).type)
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue