mirror of
https://github.com/oxen-io/session-android.git
synced 2025-04-28 20:20:45 +00:00
fix: open group poller queues trim thread job only if received messages
deleting quotes should now propagate to set quote missing flag in MMS and update the UI accordingly
This commit is contained in:
parent
50b02323a8
commit
d57903aa44
@ -136,8 +136,7 @@ class QuoteView : LinearLayout {
|
|||||||
accentLineLayoutParams.height = getIntrinsicContentHeight(maxContentWidth) // Match the intrinsic * content * height
|
accentLineLayoutParams.height = getIntrinsicContentHeight(maxContentWidth) // Match the intrinsic * content * height
|
||||||
quoteViewAccentLine.layoutParams = accentLineLayoutParams
|
quoteViewAccentLine.layoutParams = accentLineLayoutParams
|
||||||
quoteViewAccentLine.setBackgroundColor(getLineColor(isOutgoingMessage))
|
quoteViewAccentLine.setBackgroundColor(getLineColor(isOutgoingMessage))
|
||||||
} else {
|
} else if (attachments != null) {
|
||||||
attachments!!
|
|
||||||
quoteViewAttachmentPreviewImageView.imageTintList = ColorStateList.valueOf(ResourcesCompat.getColor(resources, R.color.white, context.theme))
|
quoteViewAttachmentPreviewImageView.imageTintList = ColorStateList.valueOf(ResourcesCompat.getColor(resources, R.color.white, context.theme))
|
||||||
val backgroundColorID = if (UiModeUtilities.isDayUiMode(context)) R.color.black else R.color.accent
|
val backgroundColorID = if (UiModeUtilities.isDayUiMode(context)) R.color.black else R.color.accent
|
||||||
val backgroundColor = ResourcesCompat.getColor(resources, backgroundColorID, context.theme)
|
val backgroundColor = ResourcesCompat.getColor(resources, backgroundColorID, context.theme)
|
||||||
|
@ -86,7 +86,12 @@ class VisibleMessageContentView : LinearLayout {
|
|||||||
// quote view content area's start margin. This unfortunately has to be calculated manually
|
// quote view content area's start margin. This unfortunately has to be calculated manually
|
||||||
// here to get the layout right.
|
// here to get the layout right.
|
||||||
val maxContentWidth = (maxWidth - 2 * resources.getDimension(R.dimen.medium_spacing) - toPx(16, resources)).roundToInt()
|
val maxContentWidth = (maxWidth - 2 * resources.getDimension(R.dimen.medium_spacing) - toPx(16, resources)).roundToInt()
|
||||||
quoteView.bind(quote.author.toString(), quote.text, quote.attachment, thread,
|
val quoteText = if (quote.isOriginalMissing) {
|
||||||
|
context.getString(R.string.QuoteView_original_missing)
|
||||||
|
} else {
|
||||||
|
quote.text
|
||||||
|
}
|
||||||
|
quoteView.bind(quote.author.toString(), quoteText, quote.attachment, thread,
|
||||||
message.isOutgoing, maxContentWidth, message.isOpenGroupInvitation, message.threadId, glide)
|
message.isOutgoing, maxContentWidth, message.isOpenGroupInvitation, message.threadId, glide)
|
||||||
mainContainer.addView(quoteView)
|
mainContainer.addView(quoteView)
|
||||||
val bodyTextView = VisibleMessageContentView.getBodyTextView(context, message, searchQuery)
|
val bodyTextView = VisibleMessageContentView.getBodyTextView(context, message, searchQuery)
|
||||||
|
@ -63,6 +63,7 @@ import org.thoughtcrime.securesms.attachments.MmsNotificationAttachment;
|
|||||||
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
|
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
|
||||||
import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord;
|
import org.thoughtcrime.securesms.database.model.MediaMmsMessageRecord;
|
||||||
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
||||||
|
import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
|
||||||
import org.thoughtcrime.securesms.database.model.NotificationMmsMessageRecord;
|
import org.thoughtcrime.securesms.database.model.NotificationMmsMessageRecord;
|
||||||
import org.thoughtcrime.securesms.database.model.Quote;
|
import org.thoughtcrime.securesms.database.model.Quote;
|
||||||
import org.thoughtcrime.securesms.mms.MmsException;
|
import org.thoughtcrime.securesms.mms.MmsException;
|
||||||
@ -881,6 +882,20 @@ public class MmsDatabase extends MessagingDatabase {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void deleteQuotedFromMessages(MessageRecord toDeleteRecord) {
|
||||||
|
String query = THREAD_ID + " = ?";
|
||||||
|
Cursor threadMmsCursor = rawQuery(query, new String[]{String.valueOf(toDeleteRecord.getThreadId())});
|
||||||
|
Reader reader = readerFor(threadMmsCursor);
|
||||||
|
MmsMessageRecord messageRecord;
|
||||||
|
|
||||||
|
while ((messageRecord = (MmsMessageRecord) reader.getNext()) != null) {
|
||||||
|
if (messageRecord.getQuote() != null && toDeleteRecord.getDateSent() == messageRecord.getQuote().getId()) {
|
||||||
|
setQuoteMissing(messageRecord.getId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
reader.close();
|
||||||
|
}
|
||||||
|
|
||||||
public boolean delete(long messageId) {
|
public boolean delete(long messageId) {
|
||||||
long threadId = getThreadIdForMessage(messageId);
|
long threadId = getThreadIdForMessage(messageId);
|
||||||
AttachmentDatabase attachmentDatabase = DatabaseFactory.getAttachmentDatabase(context);
|
AttachmentDatabase attachmentDatabase = DatabaseFactory.getAttachmentDatabase(context);
|
||||||
@ -889,6 +904,12 @@ public class MmsDatabase extends MessagingDatabase {
|
|||||||
GroupReceiptDatabase groupReceiptDatabase = DatabaseFactory.getGroupReceiptDatabase(context);
|
GroupReceiptDatabase groupReceiptDatabase = DatabaseFactory.getGroupReceiptDatabase(context);
|
||||||
groupReceiptDatabase.deleteRowsForMessage(messageId);
|
groupReceiptDatabase.deleteRowsForMessage(messageId);
|
||||||
|
|
||||||
|
MessageRecord toDelete;
|
||||||
|
try (Cursor messageCursor = getMessage(messageId)) {
|
||||||
|
toDelete = readerFor(messageCursor).getNext();
|
||||||
|
}
|
||||||
|
|
||||||
|
deleteQuotedFromMessages(toDelete);
|
||||||
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);
|
||||||
@ -1066,6 +1087,14 @@ public class MmsDatabase extends MessagingDatabase {
|
|||||||
return new OutgoingMessageReader(message, threadId);
|
return new OutgoingMessageReader(message, threadId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int setQuoteMissing(long messageId) {
|
||||||
|
ContentValues contentValues = new ContentValues();
|
||||||
|
contentValues.put(QUOTE_MISSING, 1);
|
||||||
|
SQLiteDatabase database = databaseHelper.getReadableDatabase();
|
||||||
|
int rows = database.update(TABLE_NAME, contentValues, ID + " = ?", new String[]{ String.valueOf(messageId) });
|
||||||
|
return rows;
|
||||||
|
}
|
||||||
|
|
||||||
public static class Status {
|
public static class Status {
|
||||||
public static final int DOWNLOAD_INITIALIZED = 1;
|
public static final int DOWNLOAD_INITIALIZED = 1;
|
||||||
public static final int DOWNLOAD_NO_CONNECTIVITY = 2;
|
public static final int DOWNLOAD_NO_CONNECTIVITY = 2;
|
||||||
|
@ -514,6 +514,12 @@ public class SmsDatabase extends MessagingDatabase {
|
|||||||
Log.i("MessageDatabase", "Deleting: " + messageId);
|
Log.i("MessageDatabase", "Deleting: " + messageId);
|
||||||
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
||||||
long threadId = getThreadIdForMessage(messageId);
|
long threadId = getThreadIdForMessage(messageId);
|
||||||
|
try {
|
||||||
|
SmsMessageRecord toDelete = getMessage(messageId);
|
||||||
|
DatabaseFactory.getMmsDatabase(context).deleteQuotedFromMessages(toDelete);
|
||||||
|
} catch (NoSuchMessageException e) {
|
||||||
|
Log.e(TAG, "Couldn't find message record for messageId "+messageId, e);
|
||||||
|
}
|
||||||
db.delete(TABLE_NAME, ID_WHERE, new String[] {messageId+""});
|
db.delete(TABLE_NAME, ID_WHERE, new String[] {messageId+""});
|
||||||
boolean threadDeleted = DatabaseFactory.getThreadDatabase(context).update(threadId, false);
|
boolean threadDeleted = DatabaseFactory.getThreadDatabase(context).update(threadId, false);
|
||||||
notifyConversationListeners(threadId);
|
notifyConversationListeners(threadId);
|
||||||
|
@ -94,8 +94,10 @@ class OpenGroupPollerV2(private val server: String, private val executorService:
|
|||||||
if (actualMax > 0) {
|
if (actualMax > 0) {
|
||||||
storage.setLastMessageServerID(room, server, actualMax)
|
storage.setLastMessageServerID(room, server, actualMax)
|
||||||
}
|
}
|
||||||
|
if (messages.isNotEmpty()) {
|
||||||
JobQueue.shared.add(TrimThreadJob(threadId))
|
JobQueue.shared.add(TrimThreadJob(threadId))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun handleDeletedMessages(room: String, openGroupID: String, deletions: List<OpenGroupAPIV2.MessageDeletion>) {
|
private fun handleDeletedMessages(room: String, openGroupID: String, deletions: List<OpenGroupAPIV2.MessageDeletion>) {
|
||||||
val storage = MessagingModuleConfiguration.shared.storage
|
val storage = MessagingModuleConfiguration.shared.storage
|
||||||
|
Loading…
x
Reference in New Issue
Block a user