mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-21 00:59:49 +01:00
Clean up bookkeeping around threads.
This commit is contained in:
@@ -697,10 +697,10 @@ public class MmsDatabase extends MessageDatabase {
|
||||
if (retrieved.getGroupId() != null) {
|
||||
RecipientId groupRecipientId = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromPossiblyMigratedGroupId(retrieved.getGroupId());
|
||||
Recipient groupRecipients = Recipient.resolved(groupRecipientId);
|
||||
return DatabaseFactory.getThreadDatabase(context).getThreadIdFor(groupRecipients);
|
||||
return DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(groupRecipients);
|
||||
} else {
|
||||
Recipient sender = Recipient.resolved(retrieved.getFrom());
|
||||
return DatabaseFactory.getThreadDatabase(context).getThreadIdFor(sender);
|
||||
return DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(sender);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -709,7 +709,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||
? Util.toIsoString(notification.getFrom().getTextString())
|
||||
: "";
|
||||
Recipient recipient = Recipient.external(context, fromString);
|
||||
return DatabaseFactory.getThreadDatabase(context).getThreadIdFor(recipient);
|
||||
return DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(recipient);
|
||||
}
|
||||
|
||||
private Cursor rawQuery(@NonNull String where, @Nullable String[] arguments) {
|
||||
|
||||
@@ -741,7 +741,7 @@ public class SmsDatabase extends MessageDatabase {
|
||||
{
|
||||
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
||||
Recipient recipient = Recipient.resolved(groupRecipientId);
|
||||
long threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(recipient);
|
||||
long threadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(recipient);
|
||||
boolean peerEraIdSameAsPrevious = updatePreviousGroupCall(threadId, peekGroupCallEraId, peekJoinedUuids, isCallFull);
|
||||
|
||||
try {
|
||||
@@ -803,7 +803,7 @@ public class SmsDatabase extends MessageDatabase {
|
||||
|
||||
Recipient recipient = Recipient.resolved(groupRecipientId);
|
||||
|
||||
threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(recipient);
|
||||
threadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(recipient);
|
||||
|
||||
String where = TYPE + " = ? AND " + THREAD_ID + " = ?";
|
||||
String[] args = SqlUtil.buildArgs(Types.GROUP_CALL_TYPE, threadId);
|
||||
@@ -908,7 +908,7 @@ public class SmsDatabase extends MessageDatabase {
|
||||
|
||||
private @NonNull Pair<Long, Long> insertCallLog(@NonNull RecipientId recipientId, long type, boolean unread, long timestamp) {
|
||||
Recipient recipient = Recipient.resolved(recipientId);
|
||||
long threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(recipient);
|
||||
long threadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(recipient);
|
||||
|
||||
ContentValues values = new ContentValues(6);
|
||||
values.put(RECIPIENT_ID, recipientId.serialize());
|
||||
@@ -1108,8 +1108,8 @@ public class SmsDatabase extends MessageDatabase {
|
||||
|
||||
long threadId;
|
||||
|
||||
if (groupRecipient == null) threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(recipient);
|
||||
else threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(groupRecipient);
|
||||
if (groupRecipient == null) threadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(recipient);
|
||||
else threadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(groupRecipient);
|
||||
|
||||
ContentValues values = new ContentValues();
|
||||
values.put(RECIPIENT_ID, message.getSender().serialize());
|
||||
@@ -1170,7 +1170,7 @@ public class SmsDatabase extends MessageDatabase {
|
||||
@Override
|
||||
public @NonNull InsertResult insertChatSessionRefreshedMessage(@NonNull RecipientId recipientId, long senderDeviceId, long sentTimestamp) {
|
||||
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
||||
long threadId = DatabaseFactory.getThreadDatabase(context).getThreadIdFor(Recipient.resolved(recipientId));
|
||||
long threadId = DatabaseFactory.getThreadDatabase(context).getOrCreateThreadIdFor(Recipient.resolved(recipientId));
|
||||
long type = Types.SECURE_MESSAGE_BIT | Types.PUSH_MESSAGE_BIT;
|
||||
|
||||
type = type & (Types.TOTAL_MASK - Types.ENCRYPTION_MASK) | Types.ENCRYPTION_REMOTE_FAILED_BIT;
|
||||
|
||||
@@ -225,7 +225,7 @@ public class SmsMigrator {
|
||||
|
||||
if (ourRecipients != null) {
|
||||
if (ourRecipients.size() == 1) {
|
||||
long ourThreadId = threadDatabase.getThreadIdFor(ourRecipients.iterator().next());
|
||||
long ourThreadId = threadDatabase.getOrCreateThreadIdFor(ourRecipients.iterator().next());
|
||||
migrateConversation(context, listener, progress, theirThreadId, ourThreadId);
|
||||
} else if (ourRecipients.size() > 1) {
|
||||
ourRecipients.add(Recipient.self());
|
||||
@@ -235,7 +235,7 @@ public class SmsMigrator {
|
||||
GroupId.Mms ourGroupId = DatabaseFactory.getGroupDatabase(context).getOrCreateMmsGroupForMembers(recipientIds);
|
||||
RecipientId ourGroupRecipientId = DatabaseFactory.getRecipientDatabase(context).getOrInsertFromGroupId(ourGroupId);
|
||||
Recipient ourGroupRecipient = Recipient.resolved(ourGroupRecipientId);
|
||||
long ourThreadId = threadDatabase.getThreadIdFor(ourGroupRecipient, ThreadDatabase.DistributionTypes.CONVERSATION);
|
||||
long ourThreadId = threadDatabase.getOrCreateThreadIdFor(ourGroupRecipient, ThreadDatabase.DistributionTypes.CONVERSATION);
|
||||
|
||||
migrateConversation(context, listener, progress, theirThreadId, ourThreadId);
|
||||
}
|
||||
|
||||
@@ -371,7 +371,7 @@ public class ThreadDatabase extends Database {
|
||||
}
|
||||
|
||||
public boolean hasCalledSince(@NonNull Recipient recipient, long timestamp) {
|
||||
return hasReceivedAnyCallsSince(getThreadIdFor(recipient), timestamp);
|
||||
return hasReceivedAnyCallsSince(getOrCreateThreadIdFor(recipient), timestamp);
|
||||
}
|
||||
|
||||
public boolean hasReceivedAnyCallsSince(long threadId, long timestamp) {
|
||||
@@ -1035,15 +1035,15 @@ public class ThreadDatabase extends Database {
|
||||
return candidateId;
|
||||
}
|
||||
} else {
|
||||
return getThreadIdFor(recipient, distributionType);
|
||||
return getOrCreateThreadIdFor(recipient, distributionType);
|
||||
}
|
||||
}
|
||||
|
||||
public long getThreadIdFor(@NonNull Recipient recipient) {
|
||||
return getThreadIdFor(recipient, DistributionTypes.DEFAULT);
|
||||
public long getOrCreateThreadIdFor(@NonNull Recipient recipient) {
|
||||
return getOrCreateThreadIdFor(recipient, DistributionTypes.DEFAULT);
|
||||
}
|
||||
|
||||
public long getThreadIdFor(@NonNull Recipient recipient, int distributionType) {
|
||||
public long getOrCreateThreadIdFor(@NonNull Recipient recipient, int distributionType) {
|
||||
Long threadId = getThreadIdFor(recipient.getId());
|
||||
if (threadId != null) {
|
||||
return threadId;
|
||||
@@ -1260,7 +1260,7 @@ public class ThreadDatabase extends Database {
|
||||
}
|
||||
|
||||
public @NonNull ThreadRecord getThreadRecordFor(@NonNull Recipient recipient) {
|
||||
return Objects.requireNonNull(getThreadRecord(getThreadIdFor(recipient)));
|
||||
return Objects.requireNonNull(getThreadRecord(getOrCreateThreadIdFor(recipient)));
|
||||
}
|
||||
|
||||
public @NonNull Set<RecipientId> getAllThreadRecipients() {
|
||||
|
||||
@@ -209,8 +209,9 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper implements SignalDatab
|
||||
private static final int MMS_AUTOINCREMENT = 109;
|
||||
private static final int ABANDONED_ATTACHMENT_CLEANUP = 110;
|
||||
private static final int AVATAR_PICKER = 111;
|
||||
private static final int THREAD_CLEANUP = 112;
|
||||
|
||||
private static final int DATABASE_VERSION = 111;
|
||||
private static final int DATABASE_VERSION = 112;
|
||||
private static final String DATABASE_NAME = "signal.db";
|
||||
|
||||
private final Context context;
|
||||
@@ -1955,6 +1956,11 @@ public class SQLCipherOpenHelper extends SQLiteOpenHelper implements SignalDatab
|
||||
}
|
||||
}
|
||||
|
||||
if (oldVersion < THREAD_CLEANUP) {
|
||||
db.delete("mms", "thread_id NOT IN (SELECT _id FROM thread)", null);
|
||||
db.delete("part", "mid != -8675309 AND mid NOT IN (SELECT _id FROM mms)", null);
|
||||
}
|
||||
|
||||
db.setTransactionSuccessful();
|
||||
} finally {
|
||||
db.endTransaction();
|
||||
|
||||
@@ -36,7 +36,7 @@ public final class RecipientMediaLoader extends MediaLoader {
|
||||
if (recipientId == null || recipientId.isUnknown()) return null;
|
||||
|
||||
long threadId = DatabaseFactory.getThreadDatabase(getContext())
|
||||
.getThreadIdFor(Recipient.resolved(recipientId));
|
||||
.getOrCreateThreadIdFor(Recipient.resolved(recipientId));
|
||||
|
||||
return ThreadMediaLoader.createThreadMediaCursor(context, threadId, mediaType, sorting);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user