Implement proper group story reply deletion for remotely deleted group stories.

fork-5.53.8
Alex Hart 2022-05-11 10:03:09 -03:00
rodzic 9afeb206fc
commit 33d60ebe14
4 zmienionych plików z 28 dodań i 1 usunięć

Wyświetl plik

@ -202,6 +202,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
public abstract int deleteStoriesOlderThan(long timestamp); public abstract int deleteStoriesOlderThan(long timestamp);
public abstract @NonNull MessageDatabase.Reader getUnreadStories(@NonNull RecipientId recipientId, int limit); public abstract @NonNull MessageDatabase.Reader getUnreadStories(@NonNull RecipientId recipientId, int limit);
public abstract @Nullable ParentStoryId.GroupReply getParentStoryIdForGroupReply(long messageId); public abstract @Nullable ParentStoryId.GroupReply getParentStoryIdForGroupReply(long messageId);
public abstract void deleteGroupStoryReplies(long parentStoryId);
public abstract @NonNull StoryViewState getStoryViewState(@NonNull RecipientId recipientId); public abstract @NonNull StoryViewState getStoryViewState(@NonNull RecipientId recipientId);
public abstract void updateViewedStories(@NonNull Set<SyncMessageId> syncMessageIds); public abstract void updateViewedStories(@NonNull Set<SyncMessageId> syncMessageIds);

Wyświetl plik

@ -837,6 +837,14 @@ public class MmsDatabase extends MessageDatabase {
} }
} }
@Override
public void deleteGroupStoryReplies(long parentStoryId) {
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
String[] args = SqlUtil.buildArgs(parentStoryId);
db.delete(TABLE_NAME, PARENT_STORY_ID + " = ?", args);
}
@Override @Override
public int deleteStoriesOlderThan(long timestamp) { public int deleteStoriesOlderThan(long timestamp) {
SQLiteDatabase db = databaseHelper.getSignalWritableDatabase(); SQLiteDatabase db = databaseHelper.getSignalWritableDatabase();
@ -1256,6 +1264,7 @@ public class MmsDatabase extends MessageDatabase {
SignalDatabase.mentions().deleteMentionsForMessage(messageId); SignalDatabase.mentions().deleteMentionsForMessage(messageId);
SignalDatabase.messageLog().deleteAllRelatedToMessage(messageId, true); SignalDatabase.messageLog().deleteAllRelatedToMessage(messageId, true);
SignalDatabase.reactions().deleteReactions(new MessageId(messageId, true)); SignalDatabase.reactions().deleteReactions(new MessageId(messageId, true));
deleteGroupStoryReplies(messageId);
threadId = getThreadIdForMessage(messageId); threadId = getThreadIdForMessage(messageId);
SignalDatabase.threads().update(threadId, false); SignalDatabase.threads().update(threadId, false);

Wyświetl plik

@ -1477,6 +1477,11 @@ public class SmsDatabase extends MessageDatabase {
throw new UnsupportedOperationException(); throw new UnsupportedOperationException();
} }
@Override
public void deleteGroupStoryReplies(long parentStoryId) {
throw new UnsupportedOperationException();
}
@Override @Override
public MessageRecord getMessageRecord(long messageId) throws NoSuchMessageException { public MessageRecord getMessageRecord(long messageId) throws NoSuchMessageException {
return getSmsMessage(messageId); return getSmsMessage(messageId);

Wyświetl plik

@ -198,8 +198,9 @@ object SignalDatabaseMigrations {
private const val QUOTE_TYPE = 142 private const val QUOTE_TYPE = 142
private const val STORY_SYNCS = 143 private const val STORY_SYNCS = 143
private const val GROUP_STORY_NOTIFICATIONS = 144 private const val GROUP_STORY_NOTIFICATIONS = 144
private const val GROUP_STORY_REPLY_CLEANUP = 145
const val DATABASE_VERSION = 144 const val DATABASE_VERSION = 145
@JvmStatic @JvmStatic
fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) { fun migrate(context: Application, db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
@ -2572,6 +2573,17 @@ object SignalDatabaseMigrations {
if (oldVersion < GROUP_STORY_NOTIFICATIONS) { if (oldVersion < GROUP_STORY_NOTIFICATIONS) {
db.execSQL("UPDATE mms SET read = 1 WHERE parent_story_id > 0") db.execSQL("UPDATE mms SET read = 1 WHERE parent_story_id > 0")
} }
if (oldVersion < GROUP_STORY_REPLY_CLEANUP) {
db.execSQL(
"""
DELETE FROM mms
WHERE
parent_story_id > 0 AND
parent_story_id NOT IN (SELECT _id FROM mms WHERE remote_deleted = 0)
""".trimIndent()
)
}
} }
@JvmStatic @JvmStatic