Fix scheduled messages being sent out of order.
This commit is contained in:
parent
c37bad0f7a
commit
661fff7a0e
2 changed files with 12 additions and 5 deletions
|
@ -4589,10 +4589,13 @@ public class MessageTable extends DatabaseTable implements MessageTypes, Recipie
|
|||
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());
|
||||
|
@ -4604,10 +4607,13 @@ public class MessageTable extends DatabaseTable implements MessageTypes, Recipie
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 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());
|
||||
|
@ -4623,7 +4629,7 @@ public class MessageTable extends DatabaseTable implements MessageTypes, Recipie
|
|||
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)) {
|
||||
|
|
|
@ -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.")
|
||||
|
|
Loading…
Add table
Reference in a new issue