Fix backup restore issue with new attachment table name.

This commit is contained in:
Greyson Parrelli
2024-01-09 16:17:14 -05:00
parent b96a5af133
commit 8c3c7c18ad

View File

@@ -194,26 +194,33 @@ public class FullBackupImporter extends FullBackupBase {
private static void processAttachment(@NonNull Context context, @NonNull AttachmentSecret attachmentSecret, @NonNull SQLiteDatabase db, @NonNull Attachment attachment, BackupRecordInputStream inputStream)
throws IOException
{
File dataFile = AttachmentTable.newFile(context);
Pair<byte[], OutputStream> output = ModernEncryptingPartOutputStream.createFor(attachmentSecret, dataFile, false);
File dataFile = AttachmentTable.newFile(context);
Pair<byte[], OutputStream> output = ModernEncryptingPartOutputStream.createFor(attachmentSecret, dataFile, false);
boolean isLegacyTable = SqlUtil.tableExists(db, "part");
String dataFileColumnName = isLegacyTable ? "_data" : AttachmentTable.DATA_FILE;
String dataRandomColumnName = isLegacyTable ? "data_random" : AttachmentTable.DATA_RANDOM;
String idColumnName = isLegacyTable ? "_id" : AttachmentTable.ID;
String tableName = isLegacyTable ? "part" : AttachmentTable.TABLE_NAME;
ContentValues contentValues = new ContentValues();
try {
inputStream.readAttachmentTo(output.second, attachment.length);
contentValues.put(AttachmentTable.DATA_FILE, dataFile.getAbsolutePath());
contentValues.put(AttachmentTable.DATA_RANDOM, output.first);
contentValues.put(dataFileColumnName, dataFile.getAbsolutePath());
contentValues.put(dataRandomColumnName, output.first);
} catch (BackupRecordInputStream.BadMacException e) {
Log.w(TAG, "Bad MAC for attachment " + attachment.attachmentId + "! Can't restore it.", e);
dataFile.delete();
contentValues.put(AttachmentTable.DATA_FILE, (String) null);
contentValues.put(AttachmentTable.DATA_RANDOM, (String) null);
contentValues.put(dataFileColumnName, (String) null);
contentValues.put(dataRandomColumnName, (String) null);
}
db.update(AttachmentTable.TABLE_NAME, contentValues,
AttachmentTable.ID + " = ?",
new String[] {String.valueOf(attachment.rowId)});
db.update(tableName,
contentValues,
idColumnName + " = ?",
SqlUtil.buildArgs(attachment.rowId));
}
private static void processSticker(@NonNull Context context, @NonNull AttachmentSecret attachmentSecret, @NonNull SQLiteDatabase db, @NonNull Sticker sticker, BackupRecordInputStream inputStream)