mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-23 10:20:25 +01:00
Fix backup restore issue with new attachment table name.
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user