mirror of
https://github.com/oxen-io/session-android.git
synced 2025-10-26 09:59:28 +00:00
Transition the outbound pipeline to JobManager jobs.
This commit is contained in:
@@ -25,6 +25,7 @@ import android.util.Pair;
|
||||
import org.thoughtcrime.securesms.crypto.AsymmetricMasterCipher;
|
||||
import org.thoughtcrime.securesms.crypto.AsymmetricMasterSecret;
|
||||
import org.thoughtcrime.securesms.database.model.DisplayRecord;
|
||||
import org.thoughtcrime.securesms.database.model.SmsMessageRecord;
|
||||
import org.thoughtcrime.securesms.sms.IncomingTextMessage;
|
||||
import org.thoughtcrime.securesms.sms.OutgoingTextMessage;
|
||||
import org.thoughtcrime.securesms.util.LRUCache;
|
||||
@@ -58,8 +59,8 @@ public class EncryptingSmsDatabase extends SmsDatabase {
|
||||
return ciphertext;
|
||||
}
|
||||
|
||||
public List<Long> insertMessageOutbox(MasterSecret masterSecret, long threadId,
|
||||
OutgoingTextMessage message, boolean forceSms)
|
||||
public long insertMessageOutbox(MasterSecret masterSecret, long threadId,
|
||||
OutgoingTextMessage message, boolean forceSms)
|
||||
{
|
||||
long type = Types.BASE_OUTBOX_TYPE;
|
||||
message = message.withBody(getEncryptedBody(masterSecret, message.getMessageBody()));
|
||||
@@ -120,9 +121,15 @@ public class EncryptingSmsDatabase extends SmsDatabase {
|
||||
return new DecryptingReader(masterSecret, cursor);
|
||||
}
|
||||
|
||||
public Reader getMessage(MasterSecret masterSecret, long messageId) {
|
||||
Cursor cursor = super.getMessage(messageId);
|
||||
return new DecryptingReader(masterSecret, cursor);
|
||||
public SmsMessageRecord getMessage(MasterSecret masterSecret, long messageId) throws NoSuchMessageException {
|
||||
Cursor cursor = super.getMessage(messageId);
|
||||
DecryptingReader reader = new DecryptingReader(masterSecret, cursor);
|
||||
SmsMessageRecord record = reader.getNext();
|
||||
|
||||
reader.close();
|
||||
|
||||
if (record == null) throw new NoSuchMessageException("No message for ID: " + messageId);
|
||||
else return record;
|
||||
}
|
||||
|
||||
public Reader getDecryptInProgressMessages(MasterSecret masterSecret) {
|
||||
|
||||
@@ -456,39 +456,22 @@ public class MmsDatabase extends Database implements MmsSmsColumns {
|
||||
}
|
||||
}
|
||||
|
||||
public SendReq[] getOutgoingMessages(MasterSecret masterSecret, long messageId)
|
||||
throws MmsException
|
||||
public SendReq getOutgoingMessage(MasterSecret masterSecret, long messageId)
|
||||
throws MmsException, NoSuchMessageException
|
||||
{
|
||||
MmsAddressDatabase addr = DatabaseFactory.getMmsAddressDatabase(context);
|
||||
PartDatabase partDatabase = getPartDatabase(masterSecret);
|
||||
SQLiteDatabase database = databaseHelper.getReadableDatabase();
|
||||
MasterCipher masterCipher = masterSecret == null ? null : new MasterCipher(masterSecret);
|
||||
MasterCipher masterCipher = new MasterCipher(masterSecret);
|
||||
Cursor cursor = null;
|
||||
|
||||
|
||||
String selection;
|
||||
String[] selectionArgs;
|
||||
|
||||
if (messageId > 0) {
|
||||
selection = ID_WHERE;
|
||||
selectionArgs = new String[]{messageId + ""};
|
||||
} else {
|
||||
selection = MESSAGE_BOX + " & " + Types.BASE_TYPE_MASK + " = " + Types.BASE_OUTBOX_TYPE;
|
||||
selectionArgs = null;
|
||||
}
|
||||
String selection = ID_WHERE;
|
||||
String[] selectionArgs = new String[]{String.valueOf(messageId)};
|
||||
|
||||
try {
|
||||
cursor = database.query(TABLE_NAME, MMS_PROJECTION, selection, selectionArgs, null, null, null);
|
||||
|
||||
if (cursor == null || cursor.getCount() == 0)
|
||||
return new SendReq[0];
|
||||
|
||||
SendReq[] requests = new SendReq[cursor.getCount()];
|
||||
int i = 0;
|
||||
|
||||
while (cursor.moveToNext()) {
|
||||
messageId = cursor.getLong(cursor.getColumnIndexOrThrow(ID));
|
||||
|
||||
if (cursor != null && cursor.moveToNext()) {
|
||||
long outboxType = cursor.getLong(cursor.getColumnIndexOrThrow(MESSAGE_BOX));
|
||||
String messageText = cursor.getString(cursor.getColumnIndexOrThrow(BODY));
|
||||
long timestamp = cursor.getLong(cursor.getColumnIndexOrThrow(NORMALIZED_DATE_SENT));
|
||||
@@ -507,10 +490,10 @@ public class MmsDatabase extends Database implements MmsSmsColumns {
|
||||
Log.w("MmsDatabase", e);
|
||||
}
|
||||
|
||||
requests[i++] = new SendReq(headers, body, messageId, outboxType, timestamp);
|
||||
return new SendReq(headers, body, messageId, outboxType, timestamp);
|
||||
}
|
||||
|
||||
return requests;
|
||||
throw new NoSuchMessageException("No record found for id: " + messageId);
|
||||
} finally {
|
||||
if (cursor != null)
|
||||
cursor.close();
|
||||
@@ -527,17 +510,20 @@ public class MmsDatabase extends Database implements MmsSmsColumns {
|
||||
}
|
||||
|
||||
public long copyMessageInbox(MasterSecret masterSecret, long messageId) throws MmsException {
|
||||
SendReq[] request = getOutgoingMessages(masterSecret, messageId);
|
||||
try {
|
||||
SendReq request = getOutgoingMessage(masterSecret, messageId);
|
||||
ContentValues contentValues = getContentValuesFromHeader(request.getPduHeaders());
|
||||
|
||||
ContentValues contentValues = getContentValuesFromHeader(request[0].getPduHeaders());
|
||||
contentValues.put(MESSAGE_BOX, Types.BASE_INBOX_TYPE | Types.SECURE_MESSAGE_BIT | Types.ENCRYPTION_SYMMETRIC_BIT);
|
||||
contentValues.put(THREAD_ID, getThreadIdForMessage(messageId));
|
||||
contentValues.put(READ, 1);
|
||||
contentValues.put(DATE_RECEIVED, contentValues.getAsLong(DATE_SENT));
|
||||
|
||||
contentValues.put(MESSAGE_BOX, Types.BASE_INBOX_TYPE | Types.SECURE_MESSAGE_BIT | Types.ENCRYPTION_SYMMETRIC_BIT);
|
||||
contentValues.put(THREAD_ID, getThreadIdForMessage(messageId));
|
||||
contentValues.put(READ, 1);
|
||||
contentValues.put(DATE_RECEIVED, contentValues.getAsLong(DATE_SENT));
|
||||
|
||||
return insertMediaMessage(masterSecret, request[0].getPduHeaders(),
|
||||
request[0].getBody(), contentValues);
|
||||
return insertMediaMessage(masterSecret, request.getPduHeaders(),
|
||||
request.getBody(), contentValues);
|
||||
} catch (NoSuchMessageException e) {
|
||||
throw new MmsException(e);
|
||||
}
|
||||
}
|
||||
|
||||
private Pair<Long, Long> insertMessageInbox(MasterSecret masterSecret, IncomingMediaMessage retrieved,
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
package org.thoughtcrime.securesms.database;
|
||||
|
||||
public class NoSuchMessageException extends Exception {
|
||||
public NoSuchMessageException(String s) {super(s);}
|
||||
public NoSuchMessageException(Exception e) {super(e);}
|
||||
}
|
||||
@@ -108,10 +108,4 @@ public class PushDatabase extends Database {
|
||||
this.cursor.close();
|
||||
}
|
||||
}
|
||||
|
||||
public static class NoSuchMessageException extends Exception {
|
||||
public NoSuchMessageException(String s) {super(s);}
|
||||
public NoSuchMessageException(Exception e) {super(e);}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -428,36 +428,33 @@ public class SmsDatabase extends Database implements MmsSmsColumns {
|
||||
return insertMessageInbox(message, Types.BASE_INBOX_TYPE);
|
||||
}
|
||||
|
||||
protected List<Long> insertMessageOutbox(long threadId, OutgoingTextMessage message,
|
||||
long type, boolean forceSms)
|
||||
protected long insertMessageOutbox(long threadId, OutgoingTextMessage message,
|
||||
long type, boolean forceSms)
|
||||
{
|
||||
if (message.isKeyExchange()) type |= Types.KEY_EXCHANGE_BIT;
|
||||
else if (message.isSecureMessage()) type |= Types.SECURE_MESSAGE_BIT;
|
||||
else if (message.isEndSession()) type |= Types.END_SESSION_BIT;
|
||||
if (forceSms) type |= Types.MESSAGE_FORCE_SMS_BIT;
|
||||
|
||||
long date = System.currentTimeMillis();
|
||||
List<Long> messageIds = new LinkedList<Long>();
|
||||
long date = System.currentTimeMillis();
|
||||
|
||||
for (Recipient recipient : message.getRecipients().getRecipientsList()) {
|
||||
ContentValues contentValues = new ContentValues(6);
|
||||
contentValues.put(ADDRESS, PhoneNumberUtils.formatNumber(recipient.getNumber()));
|
||||
contentValues.put(THREAD_ID, threadId);
|
||||
contentValues.put(BODY, message.getMessageBody());
|
||||
contentValues.put(DATE_RECEIVED, date);
|
||||
contentValues.put(DATE_SENT, date);
|
||||
contentValues.put(READ, 1);
|
||||
contentValues.put(TYPE, type);
|
||||
ContentValues contentValues = new ContentValues(6);
|
||||
contentValues.put(ADDRESS, PhoneNumberUtils.formatNumber(message.getRecipients().getPrimaryRecipient().getNumber()));
|
||||
contentValues.put(THREAD_ID, threadId);
|
||||
contentValues.put(BODY, message.getMessageBody());
|
||||
contentValues.put(DATE_RECEIVED, date);
|
||||
contentValues.put(DATE_SENT, date);
|
||||
contentValues.put(READ, 1);
|
||||
contentValues.put(TYPE, type);
|
||||
|
||||
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
||||
messageIds.add(db.insert(TABLE_NAME, ADDRESS, contentValues));
|
||||
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
||||
long messageId = db.insert(TABLE_NAME, ADDRESS, contentValues);
|
||||
|
||||
DatabaseFactory.getThreadDatabase(context).update(threadId);
|
||||
notifyConversationListeners(threadId);
|
||||
Trimmer.trimThread(context, threadId);
|
||||
}
|
||||
DatabaseFactory.getThreadDatabase(context).update(threadId);
|
||||
notifyConversationListeners(threadId);
|
||||
Trimmer.trimThread(context, threadId);
|
||||
|
||||
return messageIds;
|
||||
return messageId;
|
||||
}
|
||||
|
||||
Cursor getMessages(int skip, int limit) {
|
||||
|
||||
Reference in New Issue
Block a user