Have DatabaseFactory.getMmsDatabase() return MessageDatabase.
parent
ecfe218840
commit
f29f25822b
|
@ -905,7 +905,7 @@ public class ConversationFragment extends LoggingFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
public long stageOutgoingMessage(OutgoingMediaMessage message) {
|
public long stageOutgoingMessage(OutgoingMediaMessage message) {
|
||||||
MessageRecord messageRecord = DatabaseFactory.getMmsDatabase(getContext()).readerFor(message, threadId).getCurrent();
|
MessageRecord messageRecord = MmsDatabase.readerFor(message, threadId).getCurrent();
|
||||||
|
|
||||||
if (getListAdapter() != null) {
|
if (getListAdapter() != null) {
|
||||||
clearHeaderIfNotTyping(getListAdapter());
|
clearHeaderIfNotTyping(getListAdapter());
|
||||||
|
@ -1081,7 +1081,7 @@ public class ConversationFragment extends LoggingFragment {
|
||||||
|
|
||||||
private void scrollToNextMention() {
|
private void scrollToNextMention() {
|
||||||
SimpleTask.run(getViewLifecycleOwner().getLifecycle(), () -> {
|
SimpleTask.run(getViewLifecycleOwner().getLifecycle(), () -> {
|
||||||
MmsDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(ApplicationDependencies.getApplication());
|
MessageDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(ApplicationDependencies.getApplication());
|
||||||
return mmsDatabase.getOldestUnreadMentionDetails(threadId);
|
return mmsDatabase.getOldestUnreadMentionDetails(threadId);
|
||||||
}, (pair) -> {
|
}, (pair) -> {
|
||||||
if (pair != null) {
|
if (pair != null) {
|
||||||
|
|
|
@ -13,6 +13,7 @@ import androidx.lifecycle.ViewModelProvider;
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.database.DatabaseContentProviders;
|
import org.thoughtcrime.securesms.database.DatabaseContentProviders;
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||||
|
import org.thoughtcrime.securesms.database.MessageDatabase;
|
||||||
import org.thoughtcrime.securesms.database.MmsDatabase;
|
import org.thoughtcrime.securesms.database.MmsDatabase;
|
||||||
import org.thoughtcrime.securesms.database.MmsSmsDatabase;
|
import org.thoughtcrime.securesms.database.MmsSmsDatabase;
|
||||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||||
|
@ -78,10 +79,10 @@ public class MessageCountsViewModel extends ViewModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Pair<Integer, Integer> getCounts(@NonNull Context context, long threadId) {
|
private Pair<Integer, Integer> getCounts(@NonNull Context context, long threadId) {
|
||||||
MmsSmsDatabase mmsSmsDatabase = DatabaseFactory.getMmsSmsDatabase(context);
|
MmsSmsDatabase mmsSmsDatabase = DatabaseFactory.getMmsSmsDatabase(context);
|
||||||
MmsDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
||||||
int unreadCount = mmsSmsDatabase.getUnreadCount(threadId);
|
int unreadCount = mmsSmsDatabase.getUnreadCount(threadId);
|
||||||
int unreadMentionCount = mmsDatabase.getUnreadMentionCount(threadId);
|
int unreadMentionCount = mmsDatabase.getUnreadMentionCount(threadId);
|
||||||
|
|
||||||
return new Pair<>(unreadCount, unreadMentionCount);
|
return new Pair<>(unreadCount, unreadMentionCount);
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,7 +86,7 @@ public class DatabaseFactory {
|
||||||
return getInstance(context).sms;
|
return getInstance(context).sms;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static MmsDatabase getMmsDatabase(Context context) {
|
public static MessageDatabase getMmsDatabase(Context context) {
|
||||||
return getInstance(context).mms;
|
return getInstance(context).mms;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@ import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import com.annimon.stream.Stream;
|
import com.annimon.stream.Stream;
|
||||||
|
import com.google.android.mms.pdu_alt.NotificationInd;
|
||||||
import com.google.protobuf.InvalidProtocolBufferException;
|
import com.google.protobuf.InvalidProtocolBufferException;
|
||||||
|
|
||||||
import net.sqlcipher.database.SQLiteDatabase;
|
import net.sqlcipher.database.SQLiteDatabase;
|
||||||
|
@ -17,6 +18,7 @@ import net.sqlcipher.database.SQLiteStatement;
|
||||||
import org.thoughtcrime.securesms.database.documents.Document;
|
import org.thoughtcrime.securesms.database.documents.Document;
|
||||||
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
|
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
|
||||||
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatchList;
|
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatchList;
|
||||||
|
import org.thoughtcrime.securesms.database.documents.NetworkFailure;
|
||||||
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
|
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
|
||||||
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
||||||
import org.thoughtcrime.securesms.database.model.SmsMessageRecord;
|
import org.thoughtcrime.securesms.database.model.SmsMessageRecord;
|
||||||
|
@ -24,8 +26,12 @@ import org.thoughtcrime.securesms.database.model.databaseprotos.ReactionList;
|
||||||
import org.thoughtcrime.securesms.database.model.ReactionRecord;
|
import org.thoughtcrime.securesms.database.model.ReactionRecord;
|
||||||
import org.thoughtcrime.securesms.insights.InsightsConstants;
|
import org.thoughtcrime.securesms.insights.InsightsConstants;
|
||||||
import org.thoughtcrime.securesms.logging.Log;
|
import org.thoughtcrime.securesms.logging.Log;
|
||||||
|
import org.thoughtcrime.securesms.mms.IncomingMediaMessage;
|
||||||
|
import org.thoughtcrime.securesms.mms.MmsException;
|
||||||
|
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||||
|
import org.thoughtcrime.securesms.revealable.ViewOnceExpirationInfo;
|
||||||
import org.thoughtcrime.securesms.sms.IncomingTextMessage;
|
import org.thoughtcrime.securesms.sms.IncomingTextMessage;
|
||||||
import org.thoughtcrime.securesms.sms.OutgoingTextMessage;
|
import org.thoughtcrime.securesms.sms.OutgoingTextMessage;
|
||||||
import org.thoughtcrime.securesms.util.JsonUtils;
|
import org.thoughtcrime.securesms.util.JsonUtils;
|
||||||
|
@ -33,6 +39,7 @@ import org.whispersystems.libsignal.IdentityKey;
|
||||||
import org.whispersystems.libsignal.util.Pair;
|
import org.whispersystems.libsignal.util.Pair;
|
||||||
import org.whispersystems.libsignal.util.guava.Optional;
|
import org.whispersystems.libsignal.util.guava.Optional;
|
||||||
|
|
||||||
|
import java.io.Closeable;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
@ -56,17 +63,26 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
|
||||||
protected abstract String getDateReceivedColumnName();
|
protected abstract String getDateReceivedColumnName();
|
||||||
|
|
||||||
public abstract @Nullable RecipientId getOldestGroupUpdateSender(long threadId, long minimumDateReceived);
|
public abstract @Nullable RecipientId getOldestGroupUpdateSender(long threadId, long minimumDateReceived);
|
||||||
|
public abstract long getLatestGroupQuitTimestamp(long threadId, long quitTimeBarrier);
|
||||||
|
public abstract boolean isGroupQuitMessage(long messageId);
|
||||||
|
public abstract @Nullable Pair<RecipientId, Long> getOldestUnreadMentionDetails(long threadId);
|
||||||
|
public abstract int getUnreadMentionCount(long threadId);
|
||||||
public abstract long getThreadIdForMessage(long id);
|
public abstract long getThreadIdForMessage(long id);
|
||||||
public abstract int getMessageCountForThread(long threadId);
|
public abstract int getMessageCountForThread(long threadId);
|
||||||
public abstract int getMessageCountForThread(long threadId, long beforeTime);
|
public abstract int getMessageCountForThread(long threadId, long beforeTime);
|
||||||
abstract int getMessageCountForThreadSummary(long threadId);
|
abstract int getMessageCountForThreadSummary(long threadId);
|
||||||
|
public abstract Optional<MmsNotificationInfo> getNotification(long messageId);
|
||||||
|
|
||||||
public abstract Cursor getExpirationStartedMessages();
|
public abstract Cursor getExpirationStartedMessages();
|
||||||
public abstract SmsMessageRecord getSmsMessage(long messageId) throws NoSuchMessageException;
|
public abstract SmsMessageRecord getSmsMessage(long messageId) throws NoSuchMessageException;
|
||||||
|
public abstract Reader getMessages(Collection<Long> messageIds);
|
||||||
public abstract Cursor getMessageCursor(long messageId);
|
public abstract Cursor getMessageCursor(long messageId);
|
||||||
|
public abstract OutgoingMediaMessage getOutgoingMessage(long messageId) throws MmsException, NoSuchMessageException;
|
||||||
public abstract MessageRecord getMessageRecord(long messageId) throws NoSuchMessageException;
|
public abstract MessageRecord getMessageRecord(long messageId) throws NoSuchMessageException;
|
||||||
public abstract Cursor getVerboseMessageCursor(long messageId);
|
public abstract Cursor getVerboseMessageCursor(long messageId);
|
||||||
public abstract boolean hasReceivedAnyCallsSince(long threadId, long timestamp);
|
public abstract boolean hasReceivedAnyCallsSince(long threadId, long timestamp);
|
||||||
|
public abstract @Nullable ViewOnceExpirationInfo getNearestExpiringViewOnceMessage();
|
||||||
|
public abstract boolean isSent(long messageId);
|
||||||
|
|
||||||
public abstract void markExpireStarted(long messageId);
|
public abstract void markExpireStarted(long messageId);
|
||||||
public abstract void markExpireStarted(long messageId, long startTime);
|
public abstract void markExpireStarted(long messageId, long startTime);
|
||||||
|
@ -95,14 +111,18 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
|
||||||
public abstract void markAsMissedCall(long id);
|
public abstract void markAsMissedCall(long id);
|
||||||
public abstract void markAsNotified(long id);
|
public abstract void markAsNotified(long id);
|
||||||
public abstract void markSmsStatus(long id, int status);
|
public abstract void markSmsStatus(long id, int status);
|
||||||
|
public abstract void markDownloadState(long messageId, long state);
|
||||||
|
public abstract void markIncomingNotificationReceived(long threadId);
|
||||||
|
|
||||||
public abstract boolean incrementSmsReceiptCount(SyncMessageId messageId, boolean deliveryReceipt);
|
public abstract boolean incrementReceiptCount(SyncMessageId messageId, long timestamp, boolean deliveryReceipt);
|
||||||
public abstract List<Pair<Long, Long>> setTimestampRead(SyncMessageId messageId, long proposedExpireStarted);
|
public abstract List<Pair<Long, Long>> setTimestampRead(SyncMessageId messageId, long proposedExpireStarted);
|
||||||
public abstract List<MarkedMessageInfo> setEntireThreadRead(long threadId);
|
public abstract List<MarkedMessageInfo> setEntireThreadRead(long threadId);
|
||||||
public abstract List<MarkedMessageInfo> setMessagesReadSince(long threadId, long timestamp);
|
public abstract List<MarkedMessageInfo> setMessagesReadSince(long threadId, long timestamp);
|
||||||
public abstract List<MarkedMessageInfo> setAllMessagesRead();
|
public abstract List<MarkedMessageInfo> setAllMessagesRead();
|
||||||
public abstract Pair<Long, Long> updateBundleMessageBody(long messageId, String body);
|
public abstract Pair<Long, Long> updateBundleMessageBody(long messageId, String body);
|
||||||
|
|
||||||
|
public abstract void addFailures(long messageId, List<NetworkFailure> failure);
|
||||||
|
public abstract void removeFailure(long messageId, NetworkFailure failure);
|
||||||
|
|
||||||
public abstract @NonNull Pair<Long, Long> insertReceivedCall(@NonNull RecipientId address);
|
public abstract @NonNull Pair<Long, Long> insertReceivedCall(@NonNull RecipientId address);
|
||||||
public abstract @NonNull Pair<Long, Long> insertOutgoingCall(@NonNull RecipientId address);
|
public abstract @NonNull Pair<Long, Long> insertOutgoingCall(@NonNull RecipientId address);
|
||||||
|
@ -110,7 +130,12 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
|
||||||
|
|
||||||
public abstract Optional<InsertResult> insertMessageInbox(IncomingTextMessage message, long type);
|
public abstract Optional<InsertResult> insertMessageInbox(IncomingTextMessage message, long type);
|
||||||
public abstract Optional<InsertResult> insertMessageInbox(IncomingTextMessage message);
|
public abstract Optional<InsertResult> insertMessageInbox(IncomingTextMessage message);
|
||||||
|
public abstract Optional<InsertResult> insertMessageInbox(IncomingMediaMessage retrieved, String contentLocation, long threadId) throws MmsException;
|
||||||
|
public abstract Pair<Long, Long> insertMessageInbox(@NonNull NotificationInd notification, int subscriptionId);
|
||||||
|
public abstract Optional<InsertResult> insertSecureDecryptedMessageInbox(IncomingMediaMessage retrieved, long threadId) throws MmsException;
|
||||||
public abstract long insertMessageOutbox(long threadId, OutgoingTextMessage message, boolean forceSms, long date, InsertListener insertListener);
|
public abstract long insertMessageOutbox(long threadId, OutgoingTextMessage message, boolean forceSms, long date, InsertListener insertListener);
|
||||||
|
public abstract long insertMessageOutbox(@NonNull OutgoingMediaMessage message, long threadId, boolean forceSms, @Nullable SmsDatabase.InsertListener insertListener) throws MmsException;
|
||||||
|
public abstract long insertMessageOutbox(@NonNull OutgoingMediaMessage message, long threadId, boolean forceSms, int defaultReceiptStatus, @Nullable SmsDatabase.InsertListener insertListener) throws MmsException;
|
||||||
public abstract void insertProfileNameChangeMessages(@NonNull Recipient recipient, @NonNull String newProfileName, @NonNull String previousProfileName);
|
public abstract void insertProfileNameChangeMessages(@NonNull Recipient recipient, @NonNull String newProfileName, @NonNull String previousProfileName);
|
||||||
|
|
||||||
public abstract boolean deleteMessage(long messageId);
|
public abstract boolean deleteMessage(long messageId);
|
||||||
|
@ -119,9 +144,11 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
|
||||||
abstract void deleteThreads(@NonNull Set<Long> threadIds);
|
abstract void deleteThreads(@NonNull Set<Long> threadIds);
|
||||||
abstract void deleteAllThreads();
|
abstract void deleteAllThreads();
|
||||||
|
|
||||||
abstract SQLiteDatabase beginTransaction();
|
public abstract SQLiteDatabase beginTransaction();
|
||||||
abstract void endTransaction(SQLiteDatabase database);
|
public abstract void endTransaction(SQLiteDatabase database);
|
||||||
abstract SQLiteStatement createInsertStatement(SQLiteDatabase database);
|
public abstract void setTransactionSuccessful();
|
||||||
|
public abstract void endTransaction();
|
||||||
|
public abstract SQLiteStatement createInsertStatement(SQLiteDatabase database);
|
||||||
|
|
||||||
public abstract void ensureMigration();
|
public abstract void ensureMigration();
|
||||||
|
|
||||||
|
@ -594,7 +621,43 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class MmsNotificationInfo {
|
||||||
|
private final RecipientId from;
|
||||||
|
private final String contentLocation;
|
||||||
|
private final String transactionId;
|
||||||
|
private final int subscriptionId;
|
||||||
|
|
||||||
|
MmsNotificationInfo(@NonNull RecipientId from, String contentLocation, String transactionId, int subscriptionId) {
|
||||||
|
this.from = from;
|
||||||
|
this.contentLocation = contentLocation;
|
||||||
|
this.transactionId = transactionId;
|
||||||
|
this.subscriptionId = subscriptionId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getContentLocation() {
|
||||||
|
return contentLocation;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTransactionId() {
|
||||||
|
return transactionId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSubscriptionId() {
|
||||||
|
return subscriptionId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public @NonNull RecipientId getFrom() {
|
||||||
|
return from;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public interface InsertListener {
|
public interface InsertListener {
|
||||||
void onComplete();
|
void onComplete();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public interface Reader extends Closeable {
|
||||||
|
MessageRecord getNext();
|
||||||
|
MessageRecord getCurrent();
|
||||||
|
void close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -377,11 +377,6 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean incrementSmsReceiptCount(SyncMessageId messageId, boolean deliveryReceipt) {
|
|
||||||
throw new UnsupportedOperationException();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Pair<Long, Long> updateBundleMessageBody(long messageId, String body) {
|
public Pair<Long, Long> updateBundleMessageBody(long messageId, String body) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
|
@ -423,12 +418,12 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void endTransaction(SQLiteDatabase database) {
|
public void endTransaction(SQLiteDatabase database) {
|
||||||
|
database.endTransaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
SQLiteStatement createInsertStatement(SQLiteDatabase database) {
|
public SQLiteStatement createInsertStatement(SQLiteDatabase database) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -437,6 +432,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
databaseHelper.getWritableDatabase();
|
databaseHelper.getWritableDatabase();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isGroupQuitMessage(long messageId) {
|
public boolean isGroupQuitMessage(long messageId) {
|
||||||
SQLiteDatabase db = databaseHelper.getReadableDatabase();
|
SQLiteDatabase db = databaseHelper.getReadableDatabase();
|
||||||
|
|
||||||
|
@ -454,6 +450,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public long getLatestGroupQuitTimestamp(long threadId, long quitTimeBarrier) {
|
public long getLatestGroupQuitTimestamp(long threadId, long quitTimeBarrier) {
|
||||||
SQLiteDatabase db = databaseHelper.getReadableDatabase();
|
SQLiteDatabase db = databaseHelper.getReadableDatabase();
|
||||||
|
|
||||||
|
@ -473,6 +470,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int getMessageCountForThread(long threadId) {
|
public int getMessageCountForThread(long threadId) {
|
||||||
SQLiteDatabase db = databaseHelper.getReadableDatabase();
|
SQLiteDatabase db = databaseHelper.getReadableDatabase();
|
||||||
|
|
||||||
|
@ -489,6 +487,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int getMessageCountForThread(long threadId, long beforeTime) {
|
public int getMessageCountForThread(long threadId, long beforeTime) {
|
||||||
SQLiteDatabase db = databaseHelper.getReadableDatabase();
|
SQLiteDatabase db = databaseHelper.getReadableDatabase();
|
||||||
|
|
||||||
|
@ -505,6 +504,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void addFailures(long messageId, List<NetworkFailure> failure) {
|
public void addFailures(long messageId, List<NetworkFailure> failure) {
|
||||||
try {
|
try {
|
||||||
addToDocument(messageId, NETWORK_FAILURE, failure, NetworkFailureList.class);
|
addToDocument(messageId, NETWORK_FAILURE, failure, NetworkFailureList.class);
|
||||||
|
@ -513,6 +513,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void removeFailure(long messageId, NetworkFailure failure) {
|
public void removeFailure(long messageId, NetworkFailure failure) {
|
||||||
try {
|
try {
|
||||||
removeFromDocument(messageId, NETWORK_FAILURE, failure, NetworkFailureList.class);
|
removeFromDocument(messageId, NETWORK_FAILURE, failure, NetworkFailureList.class);
|
||||||
|
@ -521,6 +522,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean incrementReceiptCount(SyncMessageId messageId, long timestamp, boolean deliveryReceipt) {
|
public boolean incrementReceiptCount(SyncMessageId messageId, long timestamp, boolean deliveryReceipt) {
|
||||||
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
||||||
boolean found = false;
|
boolean found = false;
|
||||||
|
@ -567,6 +569,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public long getThreadIdForMessage(long id) {
|
public long getThreadIdForMessage(long id) {
|
||||||
String sql = "SELECT " + THREAD_ID + " FROM " + TABLE_NAME + " WHERE " + ID + " = ?";
|
String sql = "SELECT " + THREAD_ID + " FROM " + TABLE_NAME + " WHERE " + ID + " = ?";
|
||||||
String[] sqlArgs = new String[] {id+""};
|
String[] sqlArgs = new String[] {id+""};
|
||||||
|
@ -630,6 +633,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Reader getMessages(Collection<Long> messageIds) {
|
public Reader getMessages(Collection<Long> messageIds) {
|
||||||
String ids = TextUtils.join(",", messageIds);
|
String ids = TextUtils.join(",", messageIds);
|
||||||
return readerFor(rawQuery(MmsDatabase.TABLE_NAME + "." + MmsDatabase.ID + " IN (" + ids + ")", null));
|
return readerFor(rawQuery(MmsDatabase.TABLE_NAME + "." + MmsDatabase.ID + " IN (" + ids + ")", null));
|
||||||
|
@ -646,17 +650,20 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void markAsOutbox(long messageId) {
|
public void markAsOutbox(long messageId) {
|
||||||
long threadId = getThreadIdForMessage(messageId);
|
long threadId = getThreadIdForMessage(messageId);
|
||||||
updateMailboxBitmask(messageId, Types.BASE_TYPE_MASK, Types.BASE_OUTBOX_TYPE, Optional.of(threadId));
|
updateMailboxBitmask(messageId, Types.BASE_TYPE_MASK, Types.BASE_OUTBOX_TYPE, Optional.of(threadId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void markAsForcedSms(long messageId) {
|
public void markAsForcedSms(long messageId) {
|
||||||
long threadId = getThreadIdForMessage(messageId);
|
long threadId = getThreadIdForMessage(messageId);
|
||||||
updateMailboxBitmask(messageId, Types.PUSH_MESSAGE_BIT, Types.MESSAGE_FORCE_SMS_BIT, Optional.of(threadId));
|
updateMailboxBitmask(messageId, Types.PUSH_MESSAGE_BIT, Types.MESSAGE_FORCE_SMS_BIT, Optional.of(threadId));
|
||||||
notifyConversationListeners(threadId);
|
notifyConversationListeners(threadId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void markAsPendingInsecureSmsFallback(long messageId) {
|
public void markAsPendingInsecureSmsFallback(long messageId) {
|
||||||
long threadId = getThreadIdForMessage(messageId);
|
long threadId = getThreadIdForMessage(messageId);
|
||||||
updateMailboxBitmask(messageId, Types.BASE_TYPE_MASK, Types.BASE_PENDING_INSECURE_SMS_FALLBACK, Optional.of(threadId));
|
updateMailboxBitmask(messageId, Types.BASE_TYPE_MASK, Types.BASE_PENDING_INSECURE_SMS_FALLBACK, Optional.of(threadId));
|
||||||
|
@ -670,6 +677,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
notifyConversationListeners(threadId);
|
notifyConversationListeners(threadId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void markAsSentFailed(long messageId) {
|
public void markAsSentFailed(long messageId) {
|
||||||
long threadId = getThreadIdForMessage(messageId);
|
long threadId = getThreadIdForMessage(messageId);
|
||||||
updateMailboxBitmask(messageId, Types.BASE_TYPE_MASK, Types.BASE_SENT_FAILED_TYPE, Optional.of(threadId));
|
updateMailboxBitmask(messageId, Types.BASE_TYPE_MASK, Types.BASE_SENT_FAILED_TYPE, Optional.of(threadId));
|
||||||
|
@ -706,6 +714,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
notifyConversationListeners(threadId);
|
notifyConversationListeners(threadId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void markDownloadState(long messageId, long state) {
|
public void markDownloadState(long messageId, long state) {
|
||||||
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
||||||
ContentValues contentValues = new ContentValues();
|
ContentValues contentValues = new ContentValues();
|
||||||
|
@ -715,24 +724,11 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
notifyConversationListeners(getThreadIdForMessage(messageId));
|
notifyConversationListeners(getThreadIdForMessage(messageId));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void markAsNoSession(long messageId, long threadId) {
|
|
||||||
updateMailboxBitmask(messageId, Types.ENCRYPTION_MASK, Types.ENCRYPTION_REMOTE_NO_SESSION_BIT, Optional.of(threadId));
|
|
||||||
notifyConversationListeners(threadId);
|
|
||||||
}
|
|
||||||
|
|
||||||
// public void markAsSecure(long messageId) {
|
|
||||||
// updateMailboxBitmask(messageId, 0, Types.SECURE_MESSAGE_BIT, Optional.<Long>absent());
|
|
||||||
// }
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void markAsInsecure(long messageId) {
|
public void markAsInsecure(long messageId) {
|
||||||
updateMailboxBitmask(messageId, Types.SECURE_MESSAGE_BIT, 0, Optional.<Long>absent());
|
updateMailboxBitmask(messageId, Types.SECURE_MESSAGE_BIT, 0, Optional.<Long>absent());
|
||||||
}
|
}
|
||||||
|
|
||||||
// public void markAsPush(long messageId) {
|
|
||||||
// updateMailboxBitmask(messageId, 0, Types.PUSH_MESSAGE_BIT, Optional.<Long>absent());
|
|
||||||
// }
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void markUnidentified(long messageId, boolean unidentified) {
|
public void markUnidentified(long messageId, boolean unidentified) {
|
||||||
ContentValues contentValues = new ContentValues();
|
ContentValues contentValues = new ContentValues();
|
||||||
|
@ -781,6 +777,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
notifyConversationListeners(threadId);
|
notifyConversationListeners(threadId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void markAsNotified(long id) {
|
public void markAsNotified(long id) {
|
||||||
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
||||||
ContentValues contentValues = new ContentValues();
|
ContentValues contentValues = new ContentValues();
|
||||||
|
@ -799,10 +796,12 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public List<MarkedMessageInfo> setEntireThreadRead(long threadId) {
|
public List<MarkedMessageInfo> setEntireThreadRead(long threadId) {
|
||||||
return setMessagesRead(THREAD_ID + " = ?", new String[] {String.valueOf(threadId)});
|
return setMessagesRead(THREAD_ID + " = ?", new String[] {String.valueOf(threadId)});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public List<MarkedMessageInfo> setAllMessagesRead() {
|
public List<MarkedMessageInfo> setAllMessagesRead() {
|
||||||
return setMessagesRead(READ + " = 0", null);
|
return setMessagesRead(READ + " = 0", null);
|
||||||
}
|
}
|
||||||
|
@ -845,6 +844,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public List<Pair<Long, Long>> setTimestampRead(SyncMessageId messageId, long proposedExpireStarted) {
|
public List<Pair<Long, Long>> setTimestampRead(SyncMessageId messageId, long proposedExpireStarted) {
|
||||||
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
||||||
List<Pair<Long, Long>> expiring = new LinkedList<>();
|
List<Pair<Long, Long>> expiring = new LinkedList<>();
|
||||||
|
@ -888,6 +888,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
return expiring;
|
return expiring;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public @Nullable Pair<RecipientId, Long> getOldestUnreadMentionDetails(long threadId) {
|
public @Nullable Pair<RecipientId, Long> getOldestUnreadMentionDetails(long threadId) {
|
||||||
SQLiteDatabase database = databaseHelper.getReadableDatabase();
|
SQLiteDatabase database = databaseHelper.getReadableDatabase();
|
||||||
String[] projection = new String[]{RECIPIENT_ID,DATE_RECEIVED};
|
String[] projection = new String[]{RECIPIENT_ID,DATE_RECEIVED};
|
||||||
|
@ -903,6 +904,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int getUnreadMentionCount(long threadId) {
|
public int getUnreadMentionCount(long threadId) {
|
||||||
SQLiteDatabase database = databaseHelper.getReadableDatabase();
|
SQLiteDatabase database = databaseHelper.getReadableDatabase();
|
||||||
String[] projection = new String[]{"COUNT(*)"};
|
String[] projection = new String[]{"COUNT(*)"};
|
||||||
|
@ -918,12 +920,6 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateMessageBody(long messageId, String body) {
|
|
||||||
long type = 0;
|
|
||||||
|
|
||||||
updateMessageBodyAndType(messageId, body, Types.ENCRYPTION_MASK, type);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Trims data related to expired messages. Only intended to be run after a backup restore.
|
* Trims data related to expired messages. Only intended to be run after a backup restore.
|
||||||
*/
|
*/
|
||||||
|
@ -949,22 +945,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Pair<Long, Long> updateMessageBodyAndType(long messageId, String body, long maskOff, long maskOn) {
|
@Override
|
||||||
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
|
||||||
db.execSQL("UPDATE " + TABLE_NAME + " SET " + BODY + " = ?, " +
|
|
||||||
MESSAGE_BOX + " = (" + MESSAGE_BOX + " & " + (Types.TOTAL_MASK - maskOff) + " | " + maskOn + ") " +
|
|
||||||
"WHERE " + ID + " = ?",
|
|
||||||
new String[] {body, messageId + ""});
|
|
||||||
|
|
||||||
long threadId = getThreadIdForMessage(messageId);
|
|
||||||
|
|
||||||
DatabaseFactory.getThreadDatabase(context).update(threadId, true);
|
|
||||||
notifyConversationListeners(threadId);
|
|
||||||
notifyConversationListListeners();
|
|
||||||
|
|
||||||
return new Pair<>(messageId, threadId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Optional<MmsNotificationInfo> getNotification(long messageId) {
|
public Optional<MmsNotificationInfo> getNotification(long messageId) {
|
||||||
Cursor cursor = null;
|
Cursor cursor = null;
|
||||||
|
|
||||||
|
@ -985,6 +966,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public OutgoingMediaMessage getOutgoingMessage(long messageId)
|
public OutgoingMediaMessage getOutgoingMessage(long messageId)
|
||||||
throws MmsException, NoSuchMessageException
|
throws MmsException, NoSuchMessageException
|
||||||
{
|
{
|
||||||
|
@ -1217,6 +1199,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
return Optional.of(new InsertResult(messageId, threadId));
|
return Optional.of(new InsertResult(messageId, threadId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Optional<InsertResult> insertMessageInbox(IncomingMediaMessage retrieved,
|
public Optional<InsertResult> insertMessageInbox(IncomingMediaMessage retrieved,
|
||||||
String contentLocation, long threadId)
|
String contentLocation, long threadId)
|
||||||
throws MmsException
|
throws MmsException
|
||||||
|
@ -1234,6 +1217,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
return insertMessageInbox(retrieved, contentLocation, threadId, type);
|
return insertMessageInbox(retrieved, contentLocation, threadId, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Optional<InsertResult> insertSecureDecryptedMessageInbox(IncomingMediaMessage retrieved, long threadId)
|
public Optional<InsertResult> insertSecureDecryptedMessageInbox(IncomingMediaMessage retrieved, long threadId)
|
||||||
throws MmsException
|
throws MmsException
|
||||||
{
|
{
|
||||||
|
@ -1287,6 +1271,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
return new Pair<>(messageId, threadId);
|
return new Pair<>(messageId, threadId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void markIncomingNotificationReceived(long threadId) {
|
public void markIncomingNotificationReceived(long threadId) {
|
||||||
notifyConversationListeners(threadId);
|
notifyConversationListeners(threadId);
|
||||||
DatabaseFactory.getThreadDatabase(context).update(threadId, true);
|
DatabaseFactory.getThreadDatabase(context).update(threadId, true);
|
||||||
|
@ -1298,14 +1283,17 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId));
|
ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public long insertMessageOutbox(@NonNull OutgoingMediaMessage message,
|
public long insertMessageOutbox(@NonNull OutgoingMediaMessage message,
|
||||||
long threadId, boolean forceSms,
|
long threadId,
|
||||||
|
boolean forceSms,
|
||||||
@Nullable SmsDatabase.InsertListener insertListener)
|
@Nullable SmsDatabase.InsertListener insertListener)
|
||||||
throws MmsException
|
throws MmsException
|
||||||
{
|
{
|
||||||
return insertMessageOutbox(message, threadId, forceSms, GroupReceiptDatabase.STATUS_UNDELIVERED, insertListener);
|
return insertMessageOutbox(message, threadId, forceSms, GroupReceiptDatabase.STATUS_UNDELIVERED, insertListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public long insertMessageOutbox(@NonNull OutgoingMediaMessage message,
|
public long insertMessageOutbox(@NonNull OutgoingMediaMessage message,
|
||||||
long threadId, boolean forceSms, int defaultReceiptStatus,
|
long threadId, boolean forceSms, int defaultReceiptStatus,
|
||||||
@Nullable SmsDatabase.InsertListener insertListener)
|
@Nullable SmsDatabase.InsertListener insertListener)
|
||||||
|
@ -1492,6 +1480,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
return threadDeleted;
|
return threadDeleted;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void deleteThread(long threadId) {
|
public void deleteThread(long threadId) {
|
||||||
Set<Long> singleThreadSet = new HashSet<>();
|
Set<Long> singleThreadSet = new HashSet<>();
|
||||||
singleThreadSet.add(threadId);
|
singleThreadSet.add(threadId);
|
||||||
|
@ -1559,6 +1548,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isSent(long messageId) {
|
public boolean isSent(long messageId) {
|
||||||
SQLiteDatabase database = databaseHelper.getReadableDatabase();
|
SQLiteDatabase database = databaseHelper.getReadableDatabase();
|
||||||
try (Cursor cursor = database.query(TABLE_NAME, new String[] { MESSAGE_BOX }, ID + " = ?", new String[] { String.valueOf(messageId)}, null, null, null)) {
|
try (Cursor cursor = database.query(TABLE_NAME, new String[] { MESSAGE_BOX }, ID + " = ?", new String[] { String.valueOf(messageId)}, null, null, null)) {
|
||||||
|
@ -1571,7 +1561,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void deleteThreads(Set<Long> threadIds) {
|
void deleteThreads(@NonNull Set<Long> threadIds) {
|
||||||
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
||||||
String where = "";
|
String where = "";
|
||||||
Cursor cursor = null;
|
Cursor cursor = null;
|
||||||
|
@ -1631,6 +1621,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
database.delete(TABLE_NAME, null, null);
|
database.delete(TABLE_NAME, null, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public @Nullable ViewOnceExpirationInfo getNearestExpiringViewOnceMessage() {
|
public @Nullable ViewOnceExpirationInfo getNearestExpiringViewOnceMessage() {
|
||||||
SQLiteDatabase db = databaseHelper.getReadableDatabase();
|
SQLiteDatabase db = databaseHelper.getReadableDatabase();
|
||||||
ViewOnceExpirationInfo info = null;
|
ViewOnceExpirationInfo info = null;
|
||||||
|
@ -1663,21 +1654,6 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Cursor getCarrierMmsInformation(String apn) {
|
|
||||||
Uri uri = Uri.withAppendedPath(Uri.parse("content://telephony/carriers"), "current");
|
|
||||||
String selection = TextUtils.isEmpty(apn) ? null : "apn = ?";
|
|
||||||
String[] selectionArgs = TextUtils.isEmpty(apn) ? null : new String[] {apn.trim()};
|
|
||||||
|
|
||||||
try {
|
|
||||||
return context.getContentResolver().query(uri, null, selection, selectionArgs, null);
|
|
||||||
} catch (NullPointerException npe) {
|
|
||||||
// NOTE - This is dumb, but on some devices there's an NPE in the Android framework
|
|
||||||
// for the provider of this call, which gets rethrown back to here through a binder
|
|
||||||
// call.
|
|
||||||
throw new IllegalArgumentException(npe);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static @NonNull List<Mention> parseQuoteMentions(@NonNull Context context, Cursor cursor) {
|
private static @NonNull List<Mention> parseQuoteMentions(@NonNull Context context, Cursor cursor) {
|
||||||
byte[] raw = cursor.getBlob(cursor.getColumnIndexOrThrow(QUOTE_MENTIONS));
|
byte[] raw = cursor.getBlob(cursor.getColumnIndexOrThrow(QUOTE_MENTIONS));
|
||||||
|
|
||||||
|
@ -1690,10 +1666,12 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
return databaseHelper.getWritableDatabase();
|
return databaseHelper.getWritableDatabase();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void setTransactionSuccessful() {
|
public void setTransactionSuccessful() {
|
||||||
databaseHelper.getWritableDatabase().setTransactionSuccessful();
|
databaseHelper.getWritableDatabase().setTransactionSuccessful();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void endTransaction() {
|
public void endTransaction() {
|
||||||
databaseHelper.getWritableDatabase().endTransaction();
|
databaseHelper.getWritableDatabase().endTransaction();
|
||||||
}
|
}
|
||||||
|
@ -1702,7 +1680,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
return new Reader(cursor);
|
return new Reader(cursor);
|
||||||
}
|
}
|
||||||
|
|
||||||
public OutgoingMessageReader readerFor(OutgoingMediaMessage message, long threadId) {
|
public static OutgoingMessageReader readerFor(OutgoingMediaMessage message, long threadId) {
|
||||||
return new OutgoingMessageReader(message, threadId);
|
return new OutgoingMessageReader(message, threadId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1715,43 +1693,15 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
public static final int DOWNLOAD_APN_UNAVAILABLE = 6;
|
public static final int DOWNLOAD_APN_UNAVAILABLE = 6;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class MmsNotificationInfo {
|
public static class OutgoingMessageReader {
|
||||||
private final RecipientId from;
|
|
||||||
private final String contentLocation;
|
|
||||||
private final String transactionId;
|
|
||||||
private final int subscriptionId;
|
|
||||||
|
|
||||||
MmsNotificationInfo(@NonNull RecipientId from, String contentLocation, String transactionId, int subscriptionId) {
|
|
||||||
this.from = from;
|
|
||||||
this.contentLocation = contentLocation;
|
|
||||||
this.transactionId = transactionId;
|
|
||||||
this.subscriptionId = subscriptionId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getContentLocation() {
|
|
||||||
return contentLocation;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getTransactionId() {
|
|
||||||
return transactionId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getSubscriptionId() {
|
|
||||||
return subscriptionId;
|
|
||||||
}
|
|
||||||
|
|
||||||
public @NonNull RecipientId getFrom() {
|
|
||||||
return from;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public class OutgoingMessageReader {
|
|
||||||
|
|
||||||
|
private final Context context;
|
||||||
private final OutgoingMediaMessage message;
|
private final OutgoingMediaMessage message;
|
||||||
private final long id;
|
private final long id;
|
||||||
private final long threadId;
|
private final long threadId;
|
||||||
|
|
||||||
public OutgoingMessageReader(OutgoingMediaMessage message, long threadId) {
|
public OutgoingMessageReader(OutgoingMediaMessage message, long threadId) {
|
||||||
|
this.context = ApplicationDependencies.getApplication();
|
||||||
this.message = message;
|
this.message = message;
|
||||||
this.id = new SecureRandom().nextLong();
|
this.id = new SecureRandom().nextLong();
|
||||||
this.threadId = threadId;
|
this.threadId = threadId;
|
||||||
|
@ -1806,7 +1756,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Reader implements Closeable {
|
public static class Reader implements MessageDatabase.Reader {
|
||||||
|
|
||||||
private final Cursor cursor;
|
private final Cursor cursor;
|
||||||
private final Context context;
|
private final Context context;
|
||||||
|
@ -1816,6 +1766,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
this.context = ApplicationDependencies.getApplication();
|
this.context = ApplicationDependencies.getApplication();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public MessageRecord getNext() {
|
public MessageRecord getNext() {
|
||||||
if (cursor == null || !cursor.moveToNext())
|
if (cursor == null || !cursor.moveToNext())
|
||||||
return null;
|
return null;
|
||||||
|
@ -1823,6 +1774,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||||
return getCurrent();
|
return getCurrent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public MessageRecord getCurrent() {
|
public MessageRecord getCurrent() {
|
||||||
long mmsType = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.MESSAGE_TYPE));
|
long mmsType = cursor.getLong(cursor.getColumnIndexOrThrow(MmsDatabase.MESSAGE_TYPE));
|
||||||
|
|
||||||
|
|
|
@ -118,7 +118,7 @@ public class MmsSmsDatabase extends Database {
|
||||||
}
|
}
|
||||||
|
|
||||||
private @NonNull Pair<RecipientId, Long> getGroupAddedBy(long threadId, long lastQuitChecked) {
|
private @NonNull Pair<RecipientId, Long> getGroupAddedBy(long threadId, long lastQuitChecked) {
|
||||||
MmsDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
||||||
MessageDatabase smsDatabase = DatabaseFactory.getSmsDatabase(context);
|
MessageDatabase smsDatabase = DatabaseFactory.getSmsDatabase(context);
|
||||||
long latestQuit = mmsDatabase.getLatestGroupQuitTimestamp(threadId, lastQuitChecked);
|
long latestQuit = mmsDatabase.getLatestGroupQuitTimestamp(threadId, lastQuitChecked);
|
||||||
RecipientId id = smsDatabase.getOldestGroupUpdateSender(threadId, latestQuit);
|
RecipientId id = smsDatabase.getOldestGroupUpdateSender(threadId, latestQuit);
|
||||||
|
@ -287,14 +287,14 @@ public class MmsSmsDatabase extends Database {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void incrementDeliveryReceiptCount(SyncMessageId syncMessageId, long timestamp) {
|
public void incrementDeliveryReceiptCount(SyncMessageId syncMessageId, long timestamp) {
|
||||||
DatabaseFactory.getSmsDatabase(context).incrementSmsReceiptCount(syncMessageId, true);
|
DatabaseFactory.getSmsDatabase(context).incrementReceiptCount(syncMessageId, timestamp, true);
|
||||||
DatabaseFactory.getMmsDatabase(context).incrementReceiptCount(syncMessageId, timestamp, true);
|
DatabaseFactory.getMmsDatabase(context).incrementReceiptCount(syncMessageId, timestamp, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean incrementReadReceiptCount(SyncMessageId syncMessageId, long timestamp) {
|
public boolean incrementReadReceiptCount(SyncMessageId syncMessageId, long timestamp) {
|
||||||
boolean handled = false;
|
boolean handled = false;
|
||||||
|
|
||||||
handled |= DatabaseFactory.getSmsDatabase(context).incrementSmsReceiptCount(syncMessageId, false);
|
handled |= DatabaseFactory.getSmsDatabase(context).incrementReceiptCount(syncMessageId, timestamp, false);
|
||||||
handled |= DatabaseFactory.getMmsDatabase(context).incrementReceiptCount(syncMessageId, timestamp, false);
|
handled |= DatabaseFactory.getMmsDatabase(context).incrementReceiptCount(syncMessageId, timestamp, false);
|
||||||
|
|
||||||
return handled;
|
return handled;
|
||||||
|
@ -581,7 +581,7 @@ public class MmsSmsDatabase extends Database {
|
||||||
|
|
||||||
private MmsDatabase.Reader getMmsReader() {
|
private MmsDatabase.Reader getMmsReader() {
|
||||||
if (mmsReader == null) {
|
if (mmsReader == null) {
|
||||||
mmsReader = DatabaseFactory.getMmsDatabase(context).readerFor(cursor);
|
mmsReader = MmsDatabase.readerFor(cursor);
|
||||||
}
|
}
|
||||||
|
|
||||||
return mmsReader;
|
return mmsReader;
|
||||||
|
|
|
@ -26,12 +26,14 @@ import androidx.annotation.NonNull;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import com.annimon.stream.Stream;
|
import com.annimon.stream.Stream;
|
||||||
|
import com.google.android.mms.pdu_alt.NotificationInd;
|
||||||
|
|
||||||
import net.sqlcipher.database.SQLiteDatabase;
|
import net.sqlcipher.database.SQLiteDatabase;
|
||||||
import net.sqlcipher.database.SQLiteStatement;
|
import net.sqlcipher.database.SQLiteStatement;
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
|
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
|
||||||
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatchList;
|
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatchList;
|
||||||
|
import org.thoughtcrime.securesms.database.documents.NetworkFailure;
|
||||||
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
|
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper;
|
||||||
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
import org.thoughtcrime.securesms.database.model.MessageRecord;
|
||||||
import org.thoughtcrime.securesms.database.model.ReactionRecord;
|
import org.thoughtcrime.securesms.database.model.ReactionRecord;
|
||||||
|
@ -40,8 +42,12 @@ import org.thoughtcrime.securesms.database.model.databaseprotos.ProfileChangeDet
|
||||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||||
import org.thoughtcrime.securesms.jobs.TrimThreadJob;
|
import org.thoughtcrime.securesms.jobs.TrimThreadJob;
|
||||||
import org.thoughtcrime.securesms.logging.Log;
|
import org.thoughtcrime.securesms.logging.Log;
|
||||||
|
import org.thoughtcrime.securesms.mms.IncomingMediaMessage;
|
||||||
|
import org.thoughtcrime.securesms.mms.MmsException;
|
||||||
|
import org.thoughtcrime.securesms.mms.OutgoingMediaMessage;
|
||||||
import org.thoughtcrime.securesms.recipients.Recipient;
|
import org.thoughtcrime.securesms.recipients.Recipient;
|
||||||
import org.thoughtcrime.securesms.recipients.RecipientId;
|
import org.thoughtcrime.securesms.recipients.RecipientId;
|
||||||
|
import org.thoughtcrime.securesms.revealable.ViewOnceExpirationInfo;
|
||||||
import org.thoughtcrime.securesms.sms.IncomingGroupUpdateMessage;
|
import org.thoughtcrime.securesms.sms.IncomingGroupUpdateMessage;
|
||||||
import org.thoughtcrime.securesms.sms.IncomingTextMessage;
|
import org.thoughtcrime.securesms.sms.IncomingTextMessage;
|
||||||
import org.thoughtcrime.securesms.sms.OutgoingTextMessage;
|
import org.thoughtcrime.securesms.sms.OutgoingTextMessage;
|
||||||
|
@ -453,7 +459,7 @@ public class SmsDatabase extends MessageDatabase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean incrementSmsReceiptCount(SyncMessageId messageId, boolean deliveryReceipt) {
|
public boolean incrementReceiptCount(SyncMessageId messageId, long timestamp, boolean deliveryReceipt) {
|
||||||
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
||||||
boolean foundMessage = false;
|
boolean foundMessage = false;
|
||||||
|
|
||||||
|
@ -995,20 +1001,30 @@ public class SmsDatabase extends MessageDatabase {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
SQLiteDatabase beginTransaction() {
|
public SQLiteDatabase beginTransaction() {
|
||||||
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
SQLiteDatabase database = databaseHelper.getWritableDatabase();
|
||||||
database.beginTransaction();
|
database.beginTransaction();
|
||||||
return database;
|
return database;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
void endTransaction(SQLiteDatabase database) {
|
public void setTransactionSuccessful() {
|
||||||
|
databaseHelper.getWritableDatabase().setTransactionSuccessful();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void endTransaction(SQLiteDatabase database) {
|
||||||
database.setTransactionSuccessful();
|
database.setTransactionSuccessful();
|
||||||
database.endTransaction();
|
database.endTransaction();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
SQLiteStatement createInsertStatement(SQLiteDatabase database) {
|
public void endTransaction() {
|
||||||
|
databaseHelper.getWritableDatabase().endTransaction();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public SQLiteStatement createInsertStatement(SQLiteDatabase database) {
|
||||||
return database.compileStatement("INSERT INTO " + TABLE_NAME + " (" + RECIPIENT_ID + ", " +
|
return database.compileStatement("INSERT INTO " + TABLE_NAME + " (" + RECIPIENT_ID + ", " +
|
||||||
PERSON + ", " +
|
PERSON + ", " +
|
||||||
DATE_SENT + ", " +
|
DATE_SENT + ", " +
|
||||||
|
@ -1025,6 +1041,96 @@ public class SmsDatabase extends MessageDatabase {
|
||||||
" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
|
" VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable ViewOnceExpirationInfo getNearestExpiringViewOnceMessage() {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isSent(long messageId) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long getLatestGroupQuitTimestamp(long threadId, long quitTimeBarrier) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isGroupQuitMessage(long messageId) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable Pair<RecipientId, Long> getOldestUnreadMentionDetails(long threadId) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getUnreadMentionCount(long threadId) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addFailures(long messageId, List<NetworkFailure> failure) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void removeFailure(long messageId, NetworkFailure failure) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void markDownloadState(long messageId, long state) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<MmsNotificationInfo> getNotification(long messageId) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OutgoingMediaMessage getOutgoingMessage(long messageId) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<InsertResult> insertMessageInbox(IncomingMediaMessage retrieved, String contentLocation, long threadId) throws MmsException {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Pair<Long, Long> insertMessageInbox(@NonNull NotificationInd notification, int subscriptionId) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Optional<InsertResult> insertSecureDecryptedMessageInbox(IncomingMediaMessage retrieved, long threadId) throws MmsException {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long insertMessageOutbox(@NonNull OutgoingMediaMessage message, long threadId, boolean forceSms, @Nullable InsertListener insertListener) throws MmsException {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public long insertMessageOutbox(@NonNull OutgoingMediaMessage message, long threadId, boolean forceSms, int defaultReceiptStatus, @Nullable InsertListener insertListener) throws MmsException {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void markIncomingNotificationReceived(long threadId) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MessageDatabase.Reader getMessages(Collection<Long> messageIds) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
public static class Status {
|
public static class Status {
|
||||||
public static final int STATUS_NONE = -1;
|
public static final int STATUS_NONE = -1;
|
||||||
public static final int STATUS_COMPLETE = 0;
|
public static final int STATUS_COMPLETE = 0;
|
||||||
|
|
|
@ -239,7 +239,7 @@ public final class GroupV1MessageProcessor {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (outgoing) {
|
if (outgoing) {
|
||||||
MmsDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
||||||
RecipientId recipientId = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(GroupId.v1orThrow(group.getGroupId()));
|
RecipientId recipientId = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(GroupId.v1orThrow(group.getGroupId()));
|
||||||
Recipient recipient = Recipient.resolved(recipientId);
|
Recipient recipient = Recipient.resolved(recipientId);
|
||||||
OutgoingGroupUpdateMessage outgoingMessage = new OutgoingGroupUpdateMessage(recipient, storage, null, content.getTimestamp(), 0, false, null, Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
|
OutgoingGroupUpdateMessage outgoingMessage = new OutgoingGroupUpdateMessage(recipient, storage, null, content.getTimestamp(), 0, false, null, Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
|
||||||
|
|
|
@ -237,9 +237,9 @@ public final class GroupsV2StateProcessor {
|
||||||
Collections.emptyList());
|
Collections.emptyList());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
MmsDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
||||||
long threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(groupRecipient);
|
long threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(groupRecipient);
|
||||||
long id = mmsDatabase.insertMessageOutbox(leaveMessage, threadId, false, null);
|
long id = mmsDatabase.insertMessageOutbox(leaveMessage, threadId, false, null);
|
||||||
mmsDatabase.markAsSent(id, true);
|
mmsDatabase.markAsSent(id, true);
|
||||||
} catch (MmsException e) {
|
} catch (MmsException e) {
|
||||||
Log.w(TAG, "Failed to insert leave message.", e);
|
Log.w(TAG, "Failed to insert leave message.", e);
|
||||||
|
@ -396,7 +396,7 @@ public final class GroupsV2StateProcessor {
|
||||||
|
|
||||||
if (outgoing) {
|
if (outgoing) {
|
||||||
try {
|
try {
|
||||||
MmsDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
||||||
RecipientId recipientId = recipientDatabase.getOrInsertFromGroupId(groupId);
|
RecipientId recipientId = recipientDatabase.getOrInsertFromGroupId(groupId);
|
||||||
Recipient recipient = Recipient.resolved(recipientId);
|
Recipient recipient = Recipient.resolved(recipientId);
|
||||||
OutgoingGroupUpdateMessage outgoingMessage = new OutgoingGroupUpdateMessage(recipient, decryptedGroupV2Context, null, timestamp, 0, false, null, Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
|
OutgoingGroupUpdateMessage outgoingMessage = new OutgoingGroupUpdateMessage(recipient, decryptedGroupV2Context, null, timestamp, 0, false, null, Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
|
||||||
|
|
|
@ -15,6 +15,7 @@ import org.thoughtcrime.securesms.attachments.Attachment;
|
||||||
import org.thoughtcrime.securesms.attachments.UriAttachment;
|
import org.thoughtcrime.securesms.attachments.UriAttachment;
|
||||||
import org.thoughtcrime.securesms.database.AttachmentDatabase;
|
import org.thoughtcrime.securesms.database.AttachmentDatabase;
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||||
|
import org.thoughtcrime.securesms.database.MessageDatabase;
|
||||||
import org.thoughtcrime.securesms.database.MessageDatabase.InsertResult;
|
import org.thoughtcrime.securesms.database.MessageDatabase.InsertResult;
|
||||||
import org.thoughtcrime.securesms.database.MmsDatabase;
|
import org.thoughtcrime.securesms.database.MmsDatabase;
|
||||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||||
|
@ -104,7 +105,7 @@ public class MmsDownloadJob extends BaseJob {
|
||||||
throw new NotReadyException();
|
throw new NotReadyException();
|
||||||
}
|
}
|
||||||
|
|
||||||
MmsDatabase database = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase database = DatabaseFactory.getMmsDatabase(context);
|
||||||
Optional<MmsDatabase.MmsNotificationInfo> notification = database.getNotification(messageId);
|
Optional<MmsDatabase.MmsNotificationInfo> notification = database.getNotification(messageId);
|
||||||
|
|
||||||
if (!notification.isPresent()) {
|
if (!notification.isPresent()) {
|
||||||
|
@ -164,7 +165,7 @@ public class MmsDownloadJob extends BaseJob {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onFailure() {
|
public void onFailure() {
|
||||||
MmsDatabase database = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase database = DatabaseFactory.getMmsDatabase(context);
|
||||||
database.markDownloadState(messageId, MmsDatabase.Status.DOWNLOAD_SOFT_FAILURE);
|
database.markDownloadState(messageId, MmsDatabase.Status.DOWNLOAD_SOFT_FAILURE);
|
||||||
|
|
||||||
if (automatic) {
|
if (automatic) {
|
||||||
|
@ -183,7 +184,7 @@ public class MmsDownloadJob extends BaseJob {
|
||||||
int subscriptionId, @Nullable RecipientId notificationFrom)
|
int subscriptionId, @Nullable RecipientId notificationFrom)
|
||||||
throws MmsException
|
throws MmsException
|
||||||
{
|
{
|
||||||
MmsDatabase database = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase database = DatabaseFactory.getMmsDatabase(context);
|
||||||
Optional<GroupId> group = Optional.absent();
|
Optional<GroupId> group = Optional.absent();
|
||||||
Set<RecipientId> members = new HashSet<>();
|
Set<RecipientId> members = new HashSet<>();
|
||||||
String body = null;
|
String body = null;
|
||||||
|
@ -250,7 +251,7 @@ public class MmsDownloadJob extends BaseJob {
|
||||||
|
|
||||||
private void handleDownloadError(long messageId, long threadId, int downloadStatus, boolean automatic)
|
private void handleDownloadError(long messageId, long threadId, int downloadStatus, boolean automatic)
|
||||||
{
|
{
|
||||||
MmsDatabase db = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase db = DatabaseFactory.getMmsDatabase(context);
|
||||||
|
|
||||||
db.markDownloadState(messageId, downloadStatus);
|
db.markDownloadState(messageId, downloadStatus);
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
package org.thoughtcrime.securesms.jobs;
|
package org.thoughtcrime.securesms.jobs;
|
||||||
|
|
||||||
|
import org.thoughtcrime.securesms.database.MessageDatabase;
|
||||||
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
import org.thoughtcrime.securesms.dependencies.ApplicationDependencies;
|
||||||
import org.thoughtcrime.securesms.jobmanager.Data;
|
import org.thoughtcrime.securesms.jobmanager.Data;
|
||||||
import org.thoughtcrime.securesms.jobmanager.Job;
|
import org.thoughtcrime.securesms.jobmanager.Job;
|
||||||
|
@ -73,7 +74,7 @@ public class MmsReceiveJob extends BaseJob {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isNotification(pdu) && !isBlocked(pdu)) {
|
if (isNotification(pdu) && !isBlocked(pdu)) {
|
||||||
MmsDatabase database = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase database = DatabaseFactory.getMmsDatabase(context);
|
||||||
Pair<Long, Long> messageAndThreadId = database.insertMessageInbox((NotificationInd)pdu, subscriptionId);
|
Pair<Long, Long> messageAndThreadId = database.insertMessageInbox((NotificationInd)pdu, subscriptionId);
|
||||||
|
|
||||||
Log.i(TAG, "Inserted received MMS notification...");
|
Log.i(TAG, "Inserted received MMS notification...");
|
||||||
|
|
|
@ -26,6 +26,7 @@ import org.thoughtcrime.securesms.attachments.Attachment;
|
||||||
import org.thoughtcrime.securesms.attachments.DatabaseAttachment;
|
import org.thoughtcrime.securesms.attachments.DatabaseAttachment;
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||||
import org.thoughtcrime.securesms.database.GroupDatabase;
|
import org.thoughtcrime.securesms.database.GroupDatabase;
|
||||||
|
import org.thoughtcrime.securesms.database.MessageDatabase;
|
||||||
import org.thoughtcrime.securesms.database.MmsDatabase;
|
import org.thoughtcrime.securesms.database.MmsDatabase;
|
||||||
import org.thoughtcrime.securesms.database.NoSuchMessageException;
|
import org.thoughtcrime.securesms.database.NoSuchMessageException;
|
||||||
import org.thoughtcrime.securesms.database.ThreadDatabase;
|
import org.thoughtcrime.securesms.database.ThreadDatabase;
|
||||||
|
@ -78,7 +79,7 @@ public final class MmsSendJob extends SendJob {
|
||||||
/** Enqueues compression jobs for attachments and finally the MMS send job. */
|
/** Enqueues compression jobs for attachments and finally the MMS send job. */
|
||||||
@WorkerThread
|
@WorkerThread
|
||||||
public static void enqueue(@NonNull Context context, @NonNull JobManager jobManager, long messageId) {
|
public static void enqueue(@NonNull Context context, @NonNull JobManager jobManager, long messageId) {
|
||||||
MmsDatabase database = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase database = DatabaseFactory.getMmsDatabase(context);
|
||||||
OutgoingMediaMessage message;
|
OutgoingMediaMessage message;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -120,7 +121,7 @@ public final class MmsSendJob extends SendJob {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSend() throws MmsException, NoSuchMessageException, IOException {
|
public void onSend() throws MmsException, NoSuchMessageException, IOException {
|
||||||
MmsDatabase database = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase database = DatabaseFactory.getMmsDatabase(context);
|
||||||
OutgoingMediaMessage message = database.getOutgoingMessage(messageId);
|
OutgoingMediaMessage message = database.getOutgoingMessage(messageId);
|
||||||
|
|
||||||
if (database.isSent(messageId)) {
|
if (database.isSent(messageId)) {
|
||||||
|
|
|
@ -16,6 +16,7 @@ import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil;
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||||
import org.thoughtcrime.securesms.database.GroupDatabase;
|
import org.thoughtcrime.securesms.database.GroupDatabase;
|
||||||
import org.thoughtcrime.securesms.database.GroupReceiptDatabase.GroupReceiptInfo;
|
import org.thoughtcrime.securesms.database.GroupReceiptDatabase.GroupReceiptInfo;
|
||||||
|
import org.thoughtcrime.securesms.database.MessageDatabase;
|
||||||
import org.thoughtcrime.securesms.database.MmsDatabase;
|
import org.thoughtcrime.securesms.database.MmsDatabase;
|
||||||
import org.thoughtcrime.securesms.database.NoSuchMessageException;
|
import org.thoughtcrime.securesms.database.NoSuchMessageException;
|
||||||
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
|
import org.thoughtcrime.securesms.database.documents.IdentityKeyMismatch;
|
||||||
|
@ -108,7 +109,7 @@ public final class PushGroupSendJob extends PushSendJob {
|
||||||
throw new AssertionError("Not a group!");
|
throw new AssertionError("Not a group!");
|
||||||
}
|
}
|
||||||
|
|
||||||
MmsDatabase database = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase database = DatabaseFactory.getMmsDatabase(context);
|
||||||
OutgoingMediaMessage message = database.getOutgoingMessage(messageId);
|
OutgoingMediaMessage message = database.getOutgoingMessage(messageId);
|
||||||
Set<String> attachmentUploadIds = enqueueCompressingAndUploadAttachmentsChains(jobManager, message);
|
Set<String> attachmentUploadIds = enqueueCompressingAndUploadAttachmentsChains(jobManager, message);
|
||||||
|
|
||||||
|
@ -150,7 +151,7 @@ public final class PushGroupSendJob extends PushSendJob {
|
||||||
public void onPushSend()
|
public void onPushSend()
|
||||||
throws IOException, MmsException, NoSuchMessageException, RetryLaterException
|
throws IOException, MmsException, NoSuchMessageException, RetryLaterException
|
||||||
{
|
{
|
||||||
MmsDatabase database = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase database = DatabaseFactory.getMmsDatabase(context);
|
||||||
OutgoingMediaMessage message = database.getOutgoingMessage(messageId);
|
OutgoingMediaMessage message = database.getOutgoingMessage(messageId);
|
||||||
List<NetworkFailure> existingNetworkFailures = message.getNetworkFailures();
|
List<NetworkFailure> existingNetworkFailures = message.getNetworkFailures();
|
||||||
List<IdentityKeyMismatch> existingIdentityMismatches = message.getIdentityKeyMismatches();
|
List<IdentityKeyMismatch> existingIdentityMismatches = message.getIdentityKeyMismatches();
|
||||||
|
|
|
@ -11,6 +11,7 @@ import org.thoughtcrime.securesms.ApplicationContext;
|
||||||
import org.thoughtcrime.securesms.attachments.Attachment;
|
import org.thoughtcrime.securesms.attachments.Attachment;
|
||||||
import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil;
|
import org.thoughtcrime.securesms.crypto.UnidentifiedAccessUtil;
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||||
|
import org.thoughtcrime.securesms.database.MessageDatabase;
|
||||||
import org.thoughtcrime.securesms.database.MessageDatabase.SyncMessageId;
|
import org.thoughtcrime.securesms.database.MessageDatabase.SyncMessageId;
|
||||||
import org.thoughtcrime.securesms.database.MmsDatabase;
|
import org.thoughtcrime.securesms.database.MmsDatabase;
|
||||||
import org.thoughtcrime.securesms.database.NoSuchMessageException;
|
import org.thoughtcrime.securesms.database.NoSuchMessageException;
|
||||||
|
@ -74,7 +75,7 @@ public class PushMediaSendJob extends PushSendJob {
|
||||||
throw new AssertionError();
|
throw new AssertionError();
|
||||||
}
|
}
|
||||||
|
|
||||||
MmsDatabase database = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase database = DatabaseFactory.getMmsDatabase(context);
|
||||||
OutgoingMediaMessage message = database.getOutgoingMessage(messageId);
|
OutgoingMediaMessage message = database.getOutgoingMessage(messageId);
|
||||||
Set<String> attachmentUploadIds = enqueueCompressingAndUploadAttachmentsChains(jobManager, message);
|
Set<String> attachmentUploadIds = enqueueCompressingAndUploadAttachmentsChains(jobManager, message);
|
||||||
|
|
||||||
|
@ -108,7 +109,7 @@ public class PushMediaSendJob extends PushSendJob {
|
||||||
UndeliverableMessageException
|
UndeliverableMessageException
|
||||||
{
|
{
|
||||||
ExpiringMessageManager expirationManager = ApplicationContext.getInstance(context).getExpiringMessageManager();
|
ExpiringMessageManager expirationManager = ApplicationContext.getInstance(context).getExpiringMessageManager();
|
||||||
MmsDatabase database = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase database = DatabaseFactory.getMmsDatabase(context);
|
||||||
OutgoingMediaMessage message = database.getOutgoingMessage(messageId);
|
OutgoingMediaMessage message = database.getOutgoingMessage(messageId);
|
||||||
|
|
||||||
if (database.isSent(messageId)) {
|
if (database.isSent(messageId)) {
|
||||||
|
|
|
@ -716,14 +716,14 @@ public final class PushProcessMessageJob extends BaseJob {
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
MmsDatabase database = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase database = DatabaseFactory.getMmsDatabase(context);
|
||||||
Recipient sender = Recipient.externalHighTrustPush(context, content.getSender());
|
Recipient sender = Recipient.externalHighTrustPush(context, content.getSender());
|
||||||
IncomingMediaMessage mediaMessage = new IncomingMediaMessage(sender.getId(),
|
IncomingMediaMessage mediaMessage = new IncomingMediaMessage(sender.getId(),
|
||||||
content.getTimestamp(),
|
content.getTimestamp(),
|
||||||
content.getServerReceivedTimestamp(),
|
content.getServerReceivedTimestamp(),
|
||||||
-1,
|
-1,
|
||||||
expiresInSeconds * 1000L,
|
expiresInSeconds * 1000L,
|
||||||
true,
|
true,
|
||||||
false,
|
false,
|
||||||
content.isNeedsReceipt(),
|
content.isNeedsReceipt(),
|
||||||
Optional.absent(),
|
Optional.absent(),
|
||||||
|
@ -1026,7 +1026,7 @@ public final class PushProcessMessageJob extends BaseJob {
|
||||||
|
|
||||||
Optional<InsertResult> insertResult;
|
Optional<InsertResult> insertResult;
|
||||||
|
|
||||||
MmsDatabase database = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase database = DatabaseFactory.getMmsDatabase(context);
|
||||||
database.beginTransaction();
|
database.beginTransaction();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -1089,8 +1089,8 @@ public final class PushProcessMessageJob extends BaseJob {
|
||||||
private long handleSynchronizeSentExpirationUpdate(@NonNull SentTranscriptMessage message)
|
private long handleSynchronizeSentExpirationUpdate(@NonNull SentTranscriptMessage message)
|
||||||
throws MmsException, BadGroupIdException
|
throws MmsException, BadGroupIdException
|
||||||
{
|
{
|
||||||
MmsDatabase database = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase database = DatabaseFactory.getMmsDatabase(context);
|
||||||
Recipient recipient = getSyncMessageDestination(message);
|
Recipient recipient = getSyncMessageDestination(message);
|
||||||
|
|
||||||
OutgoingExpirationUpdateMessage expirationUpdateMessage = new OutgoingExpirationUpdateMessage(recipient,
|
OutgoingExpirationUpdateMessage expirationUpdateMessage = new OutgoingExpirationUpdateMessage(recipient,
|
||||||
message.getTimestamp(),
|
message.getTimestamp(),
|
||||||
|
@ -1109,7 +1109,7 @@ public final class PushProcessMessageJob extends BaseJob {
|
||||||
private long handleSynchronizeSentMediaMessage(@NonNull SentTranscriptMessage message)
|
private long handleSynchronizeSentMediaMessage(@NonNull SentTranscriptMessage message)
|
||||||
throws MmsException, BadGroupIdException
|
throws MmsException, BadGroupIdException
|
||||||
{
|
{
|
||||||
MmsDatabase database = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase database = DatabaseFactory.getMmsDatabase(context);
|
||||||
Recipient recipients = getSyncMessageDestination(message);
|
Recipient recipients = getSyncMessageDestination(message);
|
||||||
Optional<QuoteModel> quote = getValidatedQuote(message.getMessage().getQuote());
|
Optional<QuoteModel> quote = getValidatedQuote(message.getMessage().getQuote());
|
||||||
Optional<Attachment> sticker = getStickerAttachment(message.getMessage().getSticker());
|
Optional<Attachment> sticker = getStickerAttachment(message.getMessage().getSticker());
|
||||||
|
|
|
@ -6,6 +6,7 @@ import org.signal.zkgroup.InvalidInputException;
|
||||||
import org.signal.zkgroup.groups.GroupMasterKey;
|
import org.signal.zkgroup.groups.GroupMasterKey;
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||||
import org.thoughtcrime.securesms.database.GroupDatabase;
|
import org.thoughtcrime.securesms.database.GroupDatabase;
|
||||||
|
import org.thoughtcrime.securesms.database.MessageDatabase;
|
||||||
import org.thoughtcrime.securesms.database.MmsDatabase;
|
import org.thoughtcrime.securesms.database.MmsDatabase;
|
||||||
import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context;
|
import org.thoughtcrime.securesms.database.model.databaseprotos.DecryptedGroupV2Context;
|
||||||
import org.thoughtcrime.securesms.groups.GroupChangeBusyException;
|
import org.thoughtcrime.securesms.groups.GroupChangeBusyException;
|
||||||
|
@ -97,7 +98,7 @@ public final class WakeGroupV2Job extends BaseJob {
|
||||||
long threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(groupRecipient);
|
long threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(groupRecipient);
|
||||||
GroupDatabase.V2GroupProperties v2GroupProperties = group.get().requireV2GroupProperties();
|
GroupDatabase.V2GroupProperties v2GroupProperties = group.get().requireV2GroupProperties();
|
||||||
DecryptedGroupV2Context decryptedGroupV2Context = GroupProtoUtil.createDecryptedGroupV2Context(v2GroupProperties.getGroupMasterKey(), v2GroupProperties.getDecryptedGroup(), null, null);
|
DecryptedGroupV2Context decryptedGroupV2Context = GroupProtoUtil.createDecryptedGroupV2Context(v2GroupProperties.getGroupMasterKey(), v2GroupProperties.getDecryptedGroup(), null, null);
|
||||||
MmsDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
||||||
OutgoingGroupUpdateMessage outgoingMessage = new OutgoingGroupUpdateMessage(groupRecipient, decryptedGroupV2Context, null, System.currentTimeMillis(), 0, false, null, Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
|
OutgoingGroupUpdateMessage outgoingMessage = new OutgoingGroupUpdateMessage(groupRecipient, decryptedGroupV2Context, null, System.currentTimeMillis(), 0, false, null, Collections.emptyList(), Collections.emptyList(), Collections.emptyList());
|
||||||
|
|
||||||
long messageId = mmsDatabase.insertMessageOutbox(outgoingMessage, threadId, false, null);
|
long messageId = mmsDatabase.insertMessageOutbox(outgoingMessage, threadId, false, null);
|
||||||
|
|
|
@ -13,6 +13,7 @@ import org.thoughtcrime.securesms.crypto.IdentityKeyUtil;
|
||||||
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
import org.thoughtcrime.securesms.crypto.MasterSecret;
|
||||||
import org.thoughtcrime.securesms.database.AttachmentDatabase;
|
import org.thoughtcrime.securesms.database.AttachmentDatabase;
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||||
|
import org.thoughtcrime.securesms.database.MessageDatabase;
|
||||||
import org.thoughtcrime.securesms.database.MmsDatabase;
|
import org.thoughtcrime.securesms.database.MmsDatabase;
|
||||||
import org.thoughtcrime.securesms.database.MmsDatabase.Reader;
|
import org.thoughtcrime.securesms.database.MmsDatabase.Reader;
|
||||||
import org.thoughtcrime.securesms.database.PushDatabase;
|
import org.thoughtcrime.securesms.database.PushDatabase;
|
||||||
|
@ -267,7 +268,7 @@ public class LegacyMigrationJob extends MigrationJob {
|
||||||
|
|
||||||
private void schedulePendingIncomingParts(Context context) {
|
private void schedulePendingIncomingParts(Context context) {
|
||||||
final AttachmentDatabase attachmentDb = DatabaseFactory.getAttachmentDatabase(context);
|
final AttachmentDatabase attachmentDb = DatabaseFactory.getAttachmentDatabase(context);
|
||||||
final MmsDatabase mmsDb = DatabaseFactory.getMmsDatabase(context);
|
final MessageDatabase mmsDb = DatabaseFactory.getMmsDatabase(context);
|
||||||
final List<DatabaseAttachment> pendingAttachments = DatabaseFactory.getAttachmentDatabase(context).getPendingAttachments();
|
final List<DatabaseAttachment> pendingAttachments = DatabaseFactory.getAttachmentDatabase(context).getPendingAttachments();
|
||||||
|
|
||||||
Log.i(TAG, pendingAttachments.size() + " pending parts.");
|
Log.i(TAG, pendingAttachments.size() + " pending parts.");
|
||||||
|
|
|
@ -13,6 +13,7 @@ import androidx.annotation.WorkerThread;
|
||||||
import org.thoughtcrime.securesms.ApplicationContext;
|
import org.thoughtcrime.securesms.ApplicationContext;
|
||||||
import org.thoughtcrime.securesms.database.AttachmentDatabase;
|
import org.thoughtcrime.securesms.database.AttachmentDatabase;
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||||
|
import org.thoughtcrime.securesms.database.MessageDatabase;
|
||||||
import org.thoughtcrime.securesms.database.MmsDatabase;
|
import org.thoughtcrime.securesms.database.MmsDatabase;
|
||||||
import org.thoughtcrime.securesms.logging.Log;
|
import org.thoughtcrime.securesms.logging.Log;
|
||||||
import org.thoughtcrime.securesms.service.TimedEventManager;
|
import org.thoughtcrime.securesms.service.TimedEventManager;
|
||||||
|
@ -24,7 +25,7 @@ public class ViewOnceMessageManager extends TimedEventManager<ViewOnceExpiration
|
||||||
|
|
||||||
private static final String TAG = Log.tag(ViewOnceMessageManager.class);
|
private static final String TAG = Log.tag(ViewOnceMessageManager.class);
|
||||||
|
|
||||||
private final MmsDatabase mmsDatabase;
|
private final MessageDatabase mmsDatabase;
|
||||||
private final AttachmentDatabase attachmentDatabase;
|
private final AttachmentDatabase attachmentDatabase;
|
||||||
|
|
||||||
public ViewOnceMessageManager(@NonNull Application application) {
|
public ViewOnceMessageManager(@NonNull Application application) {
|
||||||
|
|
|
@ -5,6 +5,7 @@ import android.content.Context;
|
||||||
import androidx.annotation.NonNull;
|
import androidx.annotation.NonNull;
|
||||||
|
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||||
|
import org.thoughtcrime.securesms.database.MessageDatabase;
|
||||||
import org.thoughtcrime.securesms.database.MmsDatabase;
|
import org.thoughtcrime.securesms.database.MmsDatabase;
|
||||||
import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
|
import org.thoughtcrime.securesms.database.model.MmsMessageRecord;
|
||||||
import org.thoughtcrime.securesms.logging.Log;
|
import org.thoughtcrime.securesms.logging.Log;
|
||||||
|
@ -15,7 +16,7 @@ class ViewOnceMessageRepository {
|
||||||
|
|
||||||
private static final String TAG = Log.tag(ViewOnceMessageRepository.class);
|
private static final String TAG = Log.tag(ViewOnceMessageRepository.class);
|
||||||
|
|
||||||
private final MmsDatabase mmsDatabase;
|
private final MessageDatabase mmsDatabase;
|
||||||
|
|
||||||
ViewOnceMessageRepository(@NonNull Context context) {
|
ViewOnceMessageRepository(@NonNull Context context) {
|
||||||
this.mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
this.mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
||||||
|
|
|
@ -19,6 +19,7 @@ import org.thoughtcrime.securesms.database.CursorList;
|
||||||
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
import org.thoughtcrime.securesms.database.DatabaseFactory;
|
||||||
import org.thoughtcrime.securesms.database.MentionDatabase;
|
import org.thoughtcrime.securesms.database.MentionDatabase;
|
||||||
import org.thoughtcrime.securesms.database.MentionUtil;
|
import org.thoughtcrime.securesms.database.MentionUtil;
|
||||||
|
import org.thoughtcrime.securesms.database.MessageDatabase;
|
||||||
import org.thoughtcrime.securesms.database.MmsDatabase;
|
import org.thoughtcrime.securesms.database.MmsDatabase;
|
||||||
import org.thoughtcrime.securesms.database.MmsSmsColumns;
|
import org.thoughtcrime.securesms.database.MmsSmsColumns;
|
||||||
import org.thoughtcrime.securesms.database.RecipientDatabase;
|
import org.thoughtcrime.securesms.database.RecipientDatabase;
|
||||||
|
@ -82,7 +83,7 @@ public class SearchRepository {
|
||||||
private final ExecutorService parallelExecutor;
|
private final ExecutorService parallelExecutor;
|
||||||
private final RecipientDatabase recipientDatabase;
|
private final RecipientDatabase recipientDatabase;
|
||||||
private final MentionDatabase mentionDatabase;
|
private final MentionDatabase mentionDatabase;
|
||||||
private final MmsDatabase mmsDatabase;
|
private final MessageDatabase mmsDatabase;
|
||||||
|
|
||||||
public SearchRepository() {
|
public SearchRepository() {
|
||||||
this.context = ApplicationDependencies.getApplication().getApplicationContext();
|
this.context = ApplicationDependencies.getApplication().getApplicationContext();
|
||||||
|
@ -262,7 +263,7 @@ public class SearchRepository {
|
||||||
|
|
||||||
List<MessageResult> results = new ArrayList<>();
|
List<MessageResult> results = new ArrayList<>();
|
||||||
|
|
||||||
try (MmsDatabase.Reader reader = mmsDatabase.getMessages(mentionQueryResults.keySet())) {
|
try (MessageDatabase.Reader reader = mmsDatabase.getMessages(mentionQueryResults.keySet())) {
|
||||||
MessageRecord record;
|
MessageRecord record;
|
||||||
while ((record = reader.getNext()) != null) {
|
while ((record = reader.getNext()) != null) {
|
||||||
List<Mention> mentions = mentionQueryResults.get(record.getId());
|
List<Mention> mentions = mentionQueryResults.get(record.getId());
|
||||||
|
@ -296,7 +297,7 @@ public class SearchRepository {
|
||||||
|
|
||||||
List<MessageResult> results = new ArrayList<>();
|
List<MessageResult> results = new ArrayList<>();
|
||||||
|
|
||||||
try (MmsDatabase.Reader reader = mmsDatabase.getMessages(mentionQueryResults.keySet())) {
|
try (MessageDatabase.Reader reader = mmsDatabase.getMessages(mentionQueryResults.keySet())) {
|
||||||
MessageRecord record;
|
MessageRecord record;
|
||||||
while ((record = reader.getNext()) != null) {
|
while ((record = reader.getNext()) != null) {
|
||||||
//noinspection ConstantConditions
|
//noinspection ConstantConditions
|
||||||
|
|
|
@ -122,8 +122,8 @@ public class MessageSender {
|
||||||
final SmsDatabase.InsertListener insertListener)
|
final SmsDatabase.InsertListener insertListener)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
ThreadDatabase threadDatabase = DatabaseFactory.getThreadDatabase(context);
|
ThreadDatabase threadDatabase = DatabaseFactory.getThreadDatabase(context);
|
||||||
MmsDatabase database = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase database = DatabaseFactory.getMmsDatabase(context);
|
||||||
|
|
||||||
long allocatedThreadId = threadDatabase.getOrCreateValidThreadId(message.getRecipient(), threadId, message.getDistributionType());
|
long allocatedThreadId = threadDatabase.getOrCreateValidThreadId(message.getRecipient(), threadId, message.getDistributionType());
|
||||||
Recipient recipient = message.getRecipient();
|
Recipient recipient = message.getRecipient();
|
||||||
|
@ -150,7 +150,7 @@ public class MessageSender {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
ThreadDatabase threadDatabase = DatabaseFactory.getThreadDatabase(context);
|
ThreadDatabase threadDatabase = DatabaseFactory.getThreadDatabase(context);
|
||||||
MmsDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
||||||
AttachmentDatabase attachmentDatabase = DatabaseFactory.getAttachmentDatabase(context);
|
AttachmentDatabase attachmentDatabase = DatabaseFactory.getAttachmentDatabase(context);
|
||||||
|
|
||||||
long allocatedThreadId;
|
long allocatedThreadId;
|
||||||
|
@ -185,7 +185,7 @@ public class MessageSender {
|
||||||
|
|
||||||
JobManager jobManager = ApplicationDependencies.getJobManager();
|
JobManager jobManager = ApplicationDependencies.getJobManager();
|
||||||
AttachmentDatabase attachmentDatabase = DatabaseFactory.getAttachmentDatabase(context);
|
AttachmentDatabase attachmentDatabase = DatabaseFactory.getAttachmentDatabase(context);
|
||||||
MmsDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
||||||
ThreadDatabase threadDatabase = DatabaseFactory.getThreadDatabase(context);
|
ThreadDatabase threadDatabase = DatabaseFactory.getThreadDatabase(context);
|
||||||
List<AttachmentId> preUploadAttachmentIds = Stream.of(preUploadResults).map(PreUploadResult::getAttachmentId).toList();
|
List<AttachmentId> preUploadAttachmentIds = Stream.of(preUploadResults).map(PreUploadResult::getAttachmentId).toList();
|
||||||
List<String> preUploadJobIds = Stream.of(preUploadResults).map(PreUploadResult::getJobIds).flatMap(Stream::of).toList();
|
List<String> preUploadJobIds = Stream.of(preUploadResults).map(PreUploadResult::getJobIds).flatMap(Stream::of).toList();
|
||||||
|
@ -470,7 +470,7 @@ public class MessageSender {
|
||||||
private static void sendLocalMediaSelf(Context context, long messageId) {
|
private static void sendLocalMediaSelf(Context context, long messageId) {
|
||||||
try {
|
try {
|
||||||
ExpiringMessageManager expirationManager = ApplicationContext.getInstance(context).getExpiringMessageManager();
|
ExpiringMessageManager expirationManager = ApplicationContext.getInstance(context).getExpiringMessageManager();
|
||||||
MmsDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
MessageDatabase mmsDatabase = DatabaseFactory.getMmsDatabase(context);
|
||||||
MmsSmsDatabase mmsSmsDatabase = DatabaseFactory.getMmsSmsDatabase(context);
|
MmsSmsDatabase mmsSmsDatabase = DatabaseFactory.getMmsSmsDatabase(context);
|
||||||
OutgoingMediaMessage message = mmsDatabase.getOutgoingMessage(messageId);
|
OutgoingMediaMessage message = mmsDatabase.getOutgoingMessage(messageId);
|
||||||
SyncMessageId syncId = new SyncMessageId(Recipient.self().getId(), message.getSentTimeMillis());
|
SyncMessageId syncId = new SyncMessageId(Recipient.self().getId(), message.getSentTimeMillis());
|
||||||
|
|
Loading…
Reference in New Issue