mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-20 08:39:22 +01:00
Fix crash when sending media message as first message in conversation.
This commit is contained in:
@@ -468,7 +468,10 @@ public class AttachmentDatabase extends Database {
|
||||
String selectAllMmsIds = "SELECT " + MmsDatabase.ID + " FROM " + MmsDatabase.TABLE_NAME;
|
||||
String where = MMS_ID + " != " + PREUPLOAD_MESSAGE_ID + " AND " + MMS_ID + " NOT IN (" + selectAllMmsIds + ")";
|
||||
|
||||
db.delete(TABLE_NAME, where, null);
|
||||
int deletes = db.delete(TABLE_NAME, where, null);
|
||||
if (deletes > 0) {
|
||||
Log.i(TAG, "Trimmed " + deletes + " abandoned attachments.");
|
||||
}
|
||||
}
|
||||
|
||||
public int deleteAbandonedAttachmentFiles() {
|
||||
|
||||
@@ -172,7 +172,7 @@ public abstract class MessageDatabase extends Database implements MmsSmsColumns
|
||||
|
||||
public abstract boolean deleteMessage(long messageId);
|
||||
abstract void deleteThread(long threadId);
|
||||
abstract boolean deleteMessagesInThreadBeforeDate(long threadId, long date);
|
||||
abstract int deleteMessagesInThreadBeforeDate(long threadId, long date);
|
||||
abstract void deleteThreads(@NonNull Set<Long> threadIds);
|
||||
abstract void deleteAllThreads();
|
||||
abstract void deleteAbandonedMessages();
|
||||
|
||||
@@ -1451,7 +1451,7 @@ public class MmsDatabase extends MessageDatabase {
|
||||
DatabaseFactory.getThreadDatabase(context).incrementUnread(threadId, 1);
|
||||
}
|
||||
|
||||
ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId));
|
||||
TrimThreadJob.enqueueAsync(threadId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1797,11 +1797,11 @@ public class MmsDatabase extends MessageDatabase {
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean deleteMessagesInThreadBeforeDate(long threadId, long date) {
|
||||
int deleteMessagesInThreadBeforeDate(long threadId, long date) {
|
||||
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
||||
String where = THREAD_ID + " = ? AND " + DATE_RECEIVED + " < " + date;
|
||||
|
||||
return db.delete(TABLE_NAME, where, SqlUtil.buildArgs(threadId)) > 0;
|
||||
return db.delete(TABLE_NAME, where, SqlUtil.buildArgs(threadId));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1809,7 +1809,10 @@ public class MmsDatabase extends MessageDatabase {
|
||||
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
||||
String where = THREAD_ID + " NOT IN (SELECT _id FROM " + ThreadDatabase.TABLE_NAME + ")";
|
||||
|
||||
db.delete(TABLE_NAME, where, null);
|
||||
int deletes = db.delete(TABLE_NAME, where, null);
|
||||
if (deletes > 0) {
|
||||
Log.i(TAG, "Deleted " + deletes + " abandoned messages");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -589,11 +589,11 @@ public class MmsSmsDatabase extends Database {
|
||||
DatabaseFactory.getMmsDatabase(context).setNotifiedTimestamp(timestamp, mmsIds);
|
||||
}
|
||||
|
||||
public boolean deleteMessagesInThreadBeforeDate(long threadId, long trimBeforeDate) {
|
||||
public int deleteMessagesInThreadBeforeDate(long threadId, long trimBeforeDate) {
|
||||
Log.d(TAG, "deleteMessagesInThreadBeforeData(" + threadId + ", " + trimBeforeDate + ")");
|
||||
boolean deletedSms = DatabaseFactory.getSmsDatabase(context).deleteMessagesInThreadBeforeDate(threadId, trimBeforeDate);
|
||||
boolean deletedMms = DatabaseFactory.getMmsDatabase(context).deleteMessagesInThreadBeforeDate(threadId, trimBeforeDate);
|
||||
return deletedSms || deletedMms;
|
||||
int deletes = DatabaseFactory.getSmsDatabase(context).deleteMessagesInThreadBeforeDate(threadId, trimBeforeDate);
|
||||
deletes += DatabaseFactory.getMmsDatabase(context).deleteMessagesInThreadBeforeDate(threadId, trimBeforeDate);
|
||||
return deletes;
|
||||
}
|
||||
|
||||
public void deleteAbandonedMessages() {
|
||||
|
||||
@@ -749,7 +749,7 @@ public class SmsDatabase extends MessageDatabase {
|
||||
}
|
||||
|
||||
notifyConversationListeners(threadId);
|
||||
ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId));
|
||||
TrimThreadJob.enqueueAsync(threadId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -826,7 +826,7 @@ public class SmsDatabase extends MessageDatabase {
|
||||
}
|
||||
|
||||
notifyConversationListeners(threadId);
|
||||
ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId));
|
||||
TrimThreadJob.enqueueAsync(threadId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -892,7 +892,7 @@ public class SmsDatabase extends MessageDatabase {
|
||||
}
|
||||
|
||||
notifyConversationListeners(threadId);
|
||||
ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId));
|
||||
TrimThreadJob.enqueueAsync(threadId);
|
||||
|
||||
return new Pair<>(messageId, threadId);
|
||||
}
|
||||
@@ -979,7 +979,7 @@ public class SmsDatabase extends MessageDatabase {
|
||||
|
||||
Stream.of(threadIdsToUpdate)
|
||||
.withoutNulls()
|
||||
.forEach(threadId -> ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId)));
|
||||
.forEach(TrimThreadJob::enqueueAsync);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -994,7 +994,7 @@ public class SmsDatabase extends MessageDatabase {
|
||||
}
|
||||
|
||||
notifyConversationListeners(threadId);
|
||||
ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId));
|
||||
TrimThreadJob.enqueueAsync(threadId);
|
||||
}
|
||||
|
||||
private void insertGroupV1MigrationNotification(@NonNull RecipientId recipientId, long threadId) {
|
||||
@@ -1119,7 +1119,7 @@ public class SmsDatabase extends MessageDatabase {
|
||||
notifyConversationListeners(threadId);
|
||||
|
||||
if (!silent) {
|
||||
ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId));
|
||||
TrimThreadJob.enqueueAsync(threadId);
|
||||
}
|
||||
|
||||
return Optional.of(new InsertResult(messageId, threadId));
|
||||
@@ -1156,7 +1156,7 @@ public class SmsDatabase extends MessageDatabase {
|
||||
|
||||
notifyConversationListeners(threadId);
|
||||
|
||||
ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId));
|
||||
TrimThreadJob.enqueueAsync(threadId);
|
||||
|
||||
return new InsertResult(messageId, threadId);
|
||||
}
|
||||
@@ -1180,7 +1180,7 @@ public class SmsDatabase extends MessageDatabase {
|
||||
|
||||
notifyConversationListeners(threadId);
|
||||
|
||||
ApplicationDependencies.getJobManager().add(new TrimThreadJob(threadId));
|
||||
TrimThreadJob.enqueueAsync(threadId);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1335,11 +1335,11 @@ public class SmsDatabase extends MessageDatabase {
|
||||
}
|
||||
|
||||
@Override
|
||||
boolean deleteMessagesInThreadBeforeDate(long threadId, long date) {
|
||||
int deleteMessagesInThreadBeforeDate(long threadId, long date) {
|
||||
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
||||
String where = THREAD_ID + " = ? AND " + DATE_RECEIVED + " < " + date;
|
||||
|
||||
return db.delete(TABLE_NAME, where, SqlUtil.buildArgs(threadId)) > 0;
|
||||
return db.delete(TABLE_NAME, where, SqlUtil.buildArgs(threadId));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -1347,7 +1347,10 @@ public class SmsDatabase extends MessageDatabase {
|
||||
SQLiteDatabase db = databaseHelper.getWritableDatabase();
|
||||
String where = THREAD_ID + " NOT IN (SELECT _id FROM " + ThreadDatabase.TABLE_NAME + ")";
|
||||
|
||||
db.delete(TABLE_NAME, where, null);
|
||||
int deletes = db.delete(TABLE_NAME, where, null);
|
||||
if (deletes > 0) {
|
||||
Log.i(TAG, "Deleted " + deletes + " abandoned messages");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -340,12 +340,15 @@ public class ThreadDatabase extends Database {
|
||||
if (trimBeforeDate != NO_TRIM_BEFORE_DATE_SET) {
|
||||
Log.i(TAG, "Trimming thread: " + threadId + " before: " + trimBeforeDate);
|
||||
|
||||
boolean deletedMessages = DatabaseFactory.getMmsSmsDatabase(context).deleteMessagesInThreadBeforeDate(threadId, trimBeforeDate);
|
||||
int deletes = DatabaseFactory.getMmsSmsDatabase(context).deleteMessagesInThreadBeforeDate(threadId, trimBeforeDate);
|
||||
|
||||
if (deletedMessages) {
|
||||
if (deletes > 0) {
|
||||
Log.i(TAG, "Trimming deleted " + deletes + " messages thread: " + threadId);
|
||||
setLastScrolled(threadId, 0);
|
||||
update(threadId, false);
|
||||
notifyConversationListeners(threadId);
|
||||
} else {
|
||||
Log.i(TAG, "Trimming deleted no messages thread: " + threadId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user