mirror of
https://github.com/oxen-io/session-android.git
synced 2025-06-26 15:08:28 +00:00
Fix incorrect mention association when messages are deleted.
This commit is contained in:
parent
3a4bae88ca
commit
cd995aca56
@ -125,6 +125,25 @@ public class MentionDatabase extends Database {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void deleteMentionsForMessage(long messageId) {
|
||||||
|
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
||||||
|
String where = MESSAGE_ID + " = ?";
|
||||||
|
|
||||||
|
db.delete(TABLE_NAME, where, SqlUtil.buildArgs(messageId));
|
||||||
|
}
|
||||||
|
|
||||||
|
void deleteAbandonedMentions() {
|
||||||
|
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
||||||
|
String where = MESSAGE_ID + " NOT IN (SELECT _id FROM " + MmsDatabase.TABLE_NAME + ")";
|
||||||
|
|
||||||
|
db.delete(TABLE_NAME, where, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
void deleteAllMentions() {
|
||||||
|
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
||||||
|
db.delete(TABLE_NAME, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
private @NonNull Map<Long, List<Mention>> readMentions(@Nullable Cursor cursor) {
|
private @NonNull Map<Long, List<Mention>> readMentions(@Nullable Cursor cursor) {
|
||||||
Map<Long, List<Mention>> mentions = new HashMap<>();
|
Map<Long, List<Mention>> mentions = new HashMap<>();
|
||||||
while (cursor != null && cursor.moveToNext()) {
|
while (cursor != null && cursor.moveToNext()) {
|
||||||
|
@ -704,6 +704,7 @@ public class MmsDatabase extends MessageDatabase {
|
|||||||
db.update(TABLE_NAME, values, ID_WHERE, new String[] { String.valueOf(messageId) });
|
db.update(TABLE_NAME, values, ID_WHERE, new String[] { String.valueOf(messageId) });
|
||||||
|
|
||||||
DatabaseFactory.getAttachmentDatabase(context).deleteAttachmentsForMessage(messageId);
|
DatabaseFactory.getAttachmentDatabase(context).deleteAttachmentsForMessage(messageId);
|
||||||
|
DatabaseFactory.getMentionDatabase(context).deleteMentionsForMessage(messageId);
|
||||||
|
|
||||||
long threadId = getThreadIdForMessage(messageId);
|
long threadId = getThreadIdForMessage(messageId);
|
||||||
DatabaseFactory.getThreadDatabase(context).update(threadId, false);
|
DatabaseFactory.getThreadDatabase(context).update(threadId, false);
|
||||||
@ -1467,6 +1468,9 @@ public class MmsDatabase extends MessageDatabase {
|
|||||||
GroupReceiptDatabase groupReceiptDatabase = DatabaseFactory.getGroupReceiptDatabase(context);
|
GroupReceiptDatabase groupReceiptDatabase = DatabaseFactory.getGroupReceiptDatabase(context);
|
||||||
groupReceiptDatabase.deleteRowsForMessage(messageId);
|
groupReceiptDatabase.deleteRowsForMessage(messageId);
|
||||||
|
|
||||||
|
MentionDatabase mentionDatabase = DatabaseFactory.getMentionDatabase(context);
|
||||||
|
mentionDatabase.deleteMentionsForMessage(messageId);
|
||||||
|
|
||||||
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
||||||
database.delete(TABLE_NAME, ID_WHERE, new String[] {messageId+""});
|
database.delete(TABLE_NAME, ID_WHERE, new String[] {messageId+""});
|
||||||
boolean threadDeleted = DatabaseFactory.getThreadDatabase(context).update(threadId, false);
|
boolean threadDeleted = DatabaseFactory.getThreadDatabase(context).update(threadId, false);
|
||||||
@ -1601,6 +1605,7 @@ public class MmsDatabase extends MessageDatabase {
|
|||||||
public void deleteAllThreads() {
|
public void deleteAllThreads() {
|
||||||
DatabaseFactory.getAttachmentDatabase(context).deleteAllAttachments();
|
DatabaseFactory.getAttachmentDatabase(context).deleteAllAttachments();
|
||||||
DatabaseFactory.getGroupReceiptDatabase(context).deleteAllRows();
|
DatabaseFactory.getGroupReceiptDatabase(context).deleteAllRows();
|
||||||
|
DatabaseFactory.getMentionDatabase(context).deleteAllMentions();
|
||||||
|
|
||||||
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
||||||
database.delete(TABLE_NAME, null, null);
|
database.delete(TABLE_NAME, null, null);
|
||||||
|
@ -270,6 +270,7 @@ public class ThreadDatabase extends Database {
|
|||||||
AttachmentDatabase attachmentDatabase = DatabaseFactory.getAttachmentDatabase(context);
|
AttachmentDatabase attachmentDatabase = DatabaseFactory.getAttachmentDatabase(context);
|
||||||
GroupReceiptDatabase groupReceiptDatabase = DatabaseFactory.getGroupReceiptDatabase(context);
|
GroupReceiptDatabase groupReceiptDatabase = DatabaseFactory.getGroupReceiptDatabase(context);
|
||||||
MmsSmsDatabase mmsSmsDatabase = DatabaseFactory.getMmsSmsDatabase(context);
|
MmsSmsDatabase mmsSmsDatabase = DatabaseFactory.getMmsSmsDatabase(context);
|
||||||
|
MentionDatabase mentionDatabase = DatabaseFactory.getMentionDatabase(context);
|
||||||
|
|
||||||
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, new String[] { ID }, null, null, null, null, null)) {
|
try (Cursor cursor = databaseHelper.getReadableDatabase().query(TABLE_NAME, new String[] { ID }, null, null, null, null, null)) {
|
||||||
while (cursor != null && cursor.moveToNext()) {
|
while (cursor != null && cursor.moveToNext()) {
|
||||||
@ -283,6 +284,7 @@ public class ThreadDatabase extends Database {
|
|||||||
mmsSmsDatabase.deleteAbandonedMessages();
|
mmsSmsDatabase.deleteAbandonedMessages();
|
||||||
attachmentDatabase.trimAllAbandonedAttachments();
|
attachmentDatabase.trimAllAbandonedAttachments();
|
||||||
groupReceiptDatabase.deleteAbandonedRows();
|
groupReceiptDatabase.deleteAbandonedRows();
|
||||||
|
mentionDatabase.deleteAbandonedMentions();
|
||||||
attachmentDatabase.deleteAbandonedAttachmentFiles();
|
attachmentDatabase.deleteAbandonedAttachmentFiles();
|
||||||
db.setTransactionSuccessful();
|
db.setTransactionSuccessful();
|
||||||
} finally {
|
} finally {
|
||||||
@ -304,6 +306,7 @@ public class ThreadDatabase extends Database {
|
|||||||
AttachmentDatabase attachmentDatabase = DatabaseFactory.getAttachmentDatabase(context);
|
AttachmentDatabase attachmentDatabase = DatabaseFactory.getAttachmentDatabase(context);
|
||||||
GroupReceiptDatabase groupReceiptDatabase = DatabaseFactory.getGroupReceiptDatabase(context);
|
GroupReceiptDatabase groupReceiptDatabase = DatabaseFactory.getGroupReceiptDatabase(context);
|
||||||
MmsSmsDatabase mmsSmsDatabase = DatabaseFactory.getMmsSmsDatabase(context);
|
MmsSmsDatabase mmsSmsDatabase = DatabaseFactory.getMmsSmsDatabase(context);
|
||||||
|
MentionDatabase mentionDatabase = DatabaseFactory.getMentionDatabase(context);
|
||||||
|
|
||||||
db.beginTransaction();
|
db.beginTransaction();
|
||||||
|
|
||||||
@ -312,6 +315,7 @@ public class ThreadDatabase extends Database {
|
|||||||
mmsSmsDatabase.deleteAbandonedMessages();
|
mmsSmsDatabase.deleteAbandonedMessages();
|
||||||
attachmentDatabase.trimAllAbandonedAttachments();
|
attachmentDatabase.trimAllAbandonedAttachments();
|
||||||
groupReceiptDatabase.deleteAbandonedRows();
|
groupReceiptDatabase.deleteAbandonedRows();
|
||||||
|
mentionDatabase.deleteAbandonedMentions();
|
||||||
attachmentDatabase.deleteAbandonedAttachmentFiles();
|
attachmentDatabase.deleteAbandonedAttachmentFiles();
|
||||||
db.setTransactionSuccessful();
|
db.setTransactionSuccessful();
|
||||||
} finally {
|
} finally {
|
||||||
|
@ -463,6 +463,7 @@ class MediaSendViewModel extends ViewModel {
|
|||||||
Runnable dialogRunnable = () -> event.postValue(Event.SHOW_RENDER_PROGRESS);
|
Runnable dialogRunnable = () -> event.postValue(Event.SHOW_RENDER_PROGRESS);
|
||||||
String trimmedBody = isViewOnce() ? "" : body.toString().trim();
|
String trimmedBody = isViewOnce() ? "" : body.toString().trim();
|
||||||
List<Media> initialMedia = getSelectedMediaOrDefault();
|
List<Media> initialMedia = getSelectedMediaOrDefault();
|
||||||
|
List<Mention> trimmedMentions = isViewOnce() ? Collections.emptyList() : mentions;
|
||||||
|
|
||||||
Preconditions.checkState(initialMedia.size() > 0, "No media to send!");
|
Preconditions.checkState(initialMedia.size() > 0, "No media to send!");
|
||||||
|
|
||||||
@ -477,7 +478,7 @@ class MediaSendViewModel extends ViewModel {
|
|||||||
|
|
||||||
if (isSms || MessageSender.isLocalSelfSend(application, recipient, isSms)) {
|
if (isSms || MessageSender.isLocalSelfSend(application, recipient, isSms)) {
|
||||||
Log.i(TAG, "SMS or local self-send. Skipping pre-upload.");
|
Log.i(TAG, "SMS or local self-send. Skipping pre-upload.");
|
||||||
result.postValue(MediaSendActivityResult.forTraditionalSend(updatedMedia, trimmedBody, transport, isViewOnce(), mentions));
|
result.postValue(MediaSendActivityResult.forTraditionalSend(updatedMedia, trimmedBody, transport, isViewOnce(), trimmedMentions));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -494,12 +495,12 @@ class MediaSendViewModel extends ViewModel {
|
|||||||
uploadRepository.updateDisplayOrder(updatedMedia);
|
uploadRepository.updateDisplayOrder(updatedMedia);
|
||||||
uploadRepository.getPreUploadResults(uploadResults -> {
|
uploadRepository.getPreUploadResults(uploadResults -> {
|
||||||
if (recipients.size() > 0) {
|
if (recipients.size() > 0) {
|
||||||
sendMessages(recipients, splitBody, uploadResults, mentions);
|
sendMessages(recipients, splitBody, uploadResults, trimmedMentions);
|
||||||
uploadRepository.deleteAbandonedAttachments();
|
uploadRepository.deleteAbandonedAttachments();
|
||||||
}
|
}
|
||||||
|
|
||||||
Util.cancelRunnableOnMain(dialogRunnable);
|
Util.cancelRunnableOnMain(dialogRunnable);
|
||||||
result.postValue(MediaSendActivityResult.forPreUpload(uploadResults, splitBody, transport, isViewOnce(), mentions));
|
result.postValue(MediaSendActivityResult.forPreUpload(uploadResults, splitBody, transport, isViewOnce(), trimmedMentions));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user