Skip to content

Commit

Permalink
Fix scheduled messages being sent out of order.
Browse files Browse the repository at this point in the history
  • Loading branch information
cody-signal authored and greyson-signal committed Jan 27, 2023
1 parent c37bad0 commit 661fff7
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4588,11 +4588,14 @@ public Cursor getConversation(long threadId, long offset, long limit) {

return getReadableDatabase().query(TABLE_NAME, MMS_PROJECTION, selection, args, null, null, order, limitStr);
}


/**
* Returns messages ordered for display in a reverse list (newest first).
*/
public List<MessageRecord> getScheduledMessagesInThread(long threadId) {
String selection = THREAD_ID + " = ? AND " + STORY_TYPE + " = ? AND " + PARENT_STORY_ID + " <= ? AND " + SCHEDULED_DATE + " != ?";
String[] args = SqlUtil.buildArgs(threadId, 0, 0, -1);
String order = SCHEDULED_DATE + " DESC";
String order = SCHEDULED_DATE + " DESC, " + ID + " DESC";

try (MmsReader reader = mmsReaderFor(getReadableDatabase().query(TABLE_NAME + " INDEXED BY " + INDEX_THREAD_STORY_SCHEDULED_DATE, MMS_PROJECTION, selection, args, null, null, order))) {
List<MessageRecord> results = new ArrayList<>(reader.getCount());
Expand All @@ -4604,10 +4607,13 @@ public List<MessageRecord> getScheduledMessagesInThread(long threadId) {
}
}

/**
* Returns messages order for sending (oldest first).
*/
public List<MessageRecord> getScheduledMessagesBefore(long time) {
String selection = STORY_TYPE + " = ? AND " + PARENT_STORY_ID + " <= ? AND " + SCHEDULED_DATE + " != ? AND " + SCHEDULED_DATE + " <= ?";
String[] args = SqlUtil.buildArgs(0, 0, -1, time);
String order = SCHEDULED_DATE + " DESC";
String order = SCHEDULED_DATE + " ASC, " + ID + " ASC";

try (MmsReader reader = mmsReaderFor(getReadableDatabase().query(TABLE_NAME, MMS_PROJECTION, selection, args, null, null, order))) {
List<MessageRecord> results = new ArrayList<>(reader.getCount());
Expand All @@ -4623,7 +4629,7 @@ public List<MessageRecord> getScheduledMessagesBefore(long time) {
String[] columns = new String[] { SCHEDULED_DATE };
String selection = STORY_TYPE + " = ? AND " + PARENT_STORY_ID + " <= ? AND " + SCHEDULED_DATE + " != ?";
String[] args = SqlUtil.buildArgs(0, 0, -1);
String order = SCHEDULED_DATE + " ASC";
String order = SCHEDULED_DATE + " ASC, " + ID + " ASC";
String limit = "1";

try (Cursor cursor = getReadableDatabase().query(TABLE_NAME, columns, selection, args, null, null, order, limit)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,9 +28,10 @@ class ScheduledMessageManager(
scheduleIfNecessary()
}

@Suppress("UsePropertyAccessSyntax")
@WorkerThread
override fun getNextClosestEvent(): Event? {
val oldestTimestamp = messagesTable.oldestScheduledSendTimestamp ?: return null
val oldestTimestamp = messagesTable.getOldestScheduledSendTimestamp() ?: return null

val delay = (oldestTimestamp - System.currentTimeMillis()).coerceAtLeast(0)
Log.i(TAG, "The next scheduled message needs to be sent in $delay ms.")
Expand Down

0 comments on commit 661fff7

Please sign in to comment.