Search in sources :

Example 1 with KeyValueDataSet

use of org.thoughtcrime.securesms.keyvalue.KeyValueDataSet in project Signal-Android by WhisperSystems.

the class KeyValueDatabase method getDataSet.

@Override
@NonNull
public KeyValueDataSet getDataSet() {
    KeyValueDataSet dataSet = new KeyValueDataSet();
    try (Cursor cursor = getReadableDatabase().query(TABLE_NAME, null, null, null, null, null, null)) {
        while (cursor != null && cursor.moveToNext()) {
            Type type = Type.fromId(cursor.getInt(cursor.getColumnIndexOrThrow(TYPE)));
            String key = cursor.getString(cursor.getColumnIndexOrThrow(KEY));
            switch(type) {
                case BLOB:
                    dataSet.putBlob(key, cursor.getBlob(cursor.getColumnIndexOrThrow(VALUE)));
                    break;
                case BOOLEAN:
                    dataSet.putBoolean(key, cursor.getInt(cursor.getColumnIndexOrThrow(VALUE)) == 1);
                    break;
                case FLOAT:
                    dataSet.putFloat(key, cursor.getFloat(cursor.getColumnIndexOrThrow(VALUE)));
                    break;
                case INTEGER:
                    dataSet.putInteger(key, cursor.getInt(cursor.getColumnIndexOrThrow(VALUE)));
                    break;
                case LONG:
                    dataSet.putLong(key, cursor.getLong(cursor.getColumnIndexOrThrow(VALUE)));
                    break;
                case STRING:
                    dataSet.putString(key, cursor.getString(cursor.getColumnIndexOrThrow(VALUE)));
                    break;
            }
        }
    }
    return dataSet;
}
Also used : KeyValueDataSet(org.thoughtcrime.securesms.keyvalue.KeyValueDataSet) Cursor(android.database.Cursor) NonNull(androidx.annotation.NonNull)

Example 2 with KeyValueDataSet

use of org.thoughtcrime.securesms.keyvalue.KeyValueDataSet in project Signal-Android by WhisperSystems.

the class FullBackupImporter method processKeyValue.

private static void processKeyValue(BackupProtos.KeyValue keyValue) {
    KeyValueDataSet dataSet = new KeyValueDataSet();
    if (keyValue.hasBlobValue()) {
        dataSet.putBlob(keyValue.getKey(), keyValue.getBlobValue().toByteArray());
    } else if (keyValue.hasBooleanValue()) {
        dataSet.putBoolean(keyValue.getKey(), keyValue.getBooleanValue());
    } else if (keyValue.hasFloatValue()) {
        dataSet.putFloat(keyValue.getKey(), keyValue.getFloatValue());
    } else if (keyValue.hasIntegerValue()) {
        dataSet.putInteger(keyValue.getKey(), keyValue.getIntegerValue());
    } else if (keyValue.hasLongValue()) {
        dataSet.putLong(keyValue.getKey(), keyValue.getLongValue());
    } else if (keyValue.hasStringValue()) {
        dataSet.putString(keyValue.getKey(), keyValue.getStringValue());
    } else {
        Log.i(TAG, "Unknown KeyValue backup value, skipping");
        return;
    }
    KeyValueDatabase.getInstance(ApplicationDependencies.getApplication()).writeDataSet(dataSet, Collections.emptyList());
}
Also used : KeyValueDataSet(org.thoughtcrime.securesms.keyvalue.KeyValueDataSet)

Example 3 with KeyValueDataSet

use of org.thoughtcrime.securesms.keyvalue.KeyValueDataSet in project Signal-Android by WhisperSystems.

the class FullBackupExporter method calculateCount.

private static long calculateCount(@NonNull Context context, @NonNull SQLiteDatabase input, List<String> tables) {
    long count = DATABASE_VERSION_RECORD_COUNT + TABLE_RECORD_COUNT_MULTIPLIER * tables.size();
    for (String table : tables) {
        if (table.equals(MmsDatabase.TABLE_NAME)) {
            count += getCount(input, BackupCountQueries.mmsCount);
        } else if (table.equals(SmsDatabase.TABLE_NAME)) {
            count += getCount(input, BackupCountQueries.smsCount);
        } else if (table.equals(GroupReceiptDatabase.TABLE_NAME)) {
            count += getCount(input, BackupCountQueries.getGroupReceiptCount());
        } else if (table.equals(AttachmentDatabase.TABLE_NAME)) {
            count += getCount(input, BackupCountQueries.getAttachmentCount());
        } else if (table.equals(StickerDatabase.TABLE_NAME)) {
            count += getCount(input, "SELECT COUNT(*) FROM " + table);
        } else if (!BLACKLISTED_TABLES.contains(table) && !table.startsWith("sqlite_")) {
            count += getCount(input, "SELECT COUNT(*) FROM " + table);
        }
    }
    count += IDENTITY_KEY_BACKUP_RECORD_COUNT;
    count += TextSecurePreferences.getPreferencesToSaveToBackupCount(context);
    KeyValueDataSet dataSet = KeyValueDatabase.getInstance(ApplicationDependencies.getApplication()).getDataSet();
    for (String key : SignalStore.getKeysToIncludeInBackup()) {
        if (dataSet.containsKey(key)) {
            count++;
        }
    }
    count += AvatarHelper.getAvatarCount(context);
    return count + FINAL_MESSAGE_COUNT;
}
Also used : KeyValueDataSet(org.thoughtcrime.securesms.keyvalue.KeyValueDataSet) ByteString(com.google.protobuf.ByteString)

Example 4 with KeyValueDataSet

use of org.thoughtcrime.securesms.keyvalue.KeyValueDataSet in project Signal-Android by signalapp.

the class FullBackupExporter method calculateCount.

private static long calculateCount(@NonNull Context context, @NonNull SQLiteDatabase input, List<String> tables) {
    long count = DATABASE_VERSION_RECORD_COUNT + TABLE_RECORD_COUNT_MULTIPLIER * tables.size();
    for (String table : tables) {
        if (table.equals(MmsDatabase.TABLE_NAME)) {
            count += getCount(input, BackupCountQueries.mmsCount);
        } else if (table.equals(SmsDatabase.TABLE_NAME)) {
            count += getCount(input, BackupCountQueries.smsCount);
        } else if (table.equals(GroupReceiptDatabase.TABLE_NAME)) {
            count += getCount(input, BackupCountQueries.getGroupReceiptCount());
        } else if (table.equals(AttachmentDatabase.TABLE_NAME)) {
            count += getCount(input, BackupCountQueries.getAttachmentCount());
        } else if (table.equals(StickerDatabase.TABLE_NAME)) {
            count += getCount(input, "SELECT COUNT(*) FROM " + table);
        } else if (!BLACKLISTED_TABLES.contains(table) && !table.startsWith("sqlite_")) {
            count += getCount(input, "SELECT COUNT(*) FROM " + table);
        }
    }
    count += IDENTITY_KEY_BACKUP_RECORD_COUNT;
    count += TextSecurePreferences.getPreferencesToSaveToBackupCount(context);
    KeyValueDataSet dataSet = KeyValueDatabase.getInstance(ApplicationDependencies.getApplication()).getDataSet();
    for (String key : SignalStore.getKeysToIncludeInBackup()) {
        if (dataSet.containsKey(key)) {
            count++;
        }
    }
    count += AvatarHelper.getAvatarCount(context);
    return count + FINAL_MESSAGE_COUNT;
}
Also used : KeyValueDataSet(org.thoughtcrime.securesms.keyvalue.KeyValueDataSet) ByteString(com.google.protobuf.ByteString)

Example 5 with KeyValueDataSet

use of org.thoughtcrime.securesms.keyvalue.KeyValueDataSet in project Signal-Android by signalapp.

the class FullBackupExporter method exportKeyValues.

private static int exportKeyValues(@NonNull BackupFrameOutputStream outputStream, @NonNull List<String> keysToIncludeInBackup, int count, long estimatedCount, BackupCancellationSignal cancellationSignal) throws IOException {
    KeyValueDataSet dataSet = KeyValueDatabase.getInstance(ApplicationDependencies.getApplication()).getDataSet();
    for (String key : keysToIncludeInBackup) {
        throwIfCanceled(cancellationSignal);
        if (!dataSet.containsKey(key)) {
            continue;
        }
        BackupProtos.KeyValue.Builder builder = BackupProtos.KeyValue.newBuilder().setKey(key);
        Class<?> type = dataSet.getType(key);
        if (type == byte[].class) {
            byte[] data = dataSet.getBlob(key, null);
            if (data != null) {
                builder.setBlobValue(ByteString.copyFrom(dataSet.getBlob(key, null)));
            } else {
                Log.w(TAG, "Skipping storing null blob for key: " + key);
            }
        } else if (type == Boolean.class) {
            builder.setBooleanValue(dataSet.getBoolean(key, false));
        } else if (type == Float.class) {
            builder.setFloatValue(dataSet.getFloat(key, 0));
        } else if (type == Integer.class) {
            builder.setIntegerValue(dataSet.getInteger(key, 0));
        } else if (type == Long.class) {
            builder.setLongValue(dataSet.getLong(key, 0));
        } else if (type == String.class) {
            String data = dataSet.getString(key, null);
            if (data != null) {
                builder.setStringValue(dataSet.getString(key, null));
            } else {
                Log.w(TAG, "Skipping storing null string for key: " + key);
            }
        } else {
            throw new AssertionError("Unknown type: " + type);
        }
        EventBus.getDefault().post(new BackupEvent(BackupEvent.Type.PROGRESS, ++count, estimatedCount));
        outputStream.write(builder.build());
    }
    return count;
}
Also used : KeyValueDataSet(org.thoughtcrime.securesms.keyvalue.KeyValueDataSet) ByteString(com.google.protobuf.ByteString)

Aggregations

KeyValueDataSet (org.thoughtcrime.securesms.keyvalue.KeyValueDataSet)8 ByteString (com.google.protobuf.ByteString)4 Cursor (android.database.Cursor)2 NonNull (androidx.annotation.NonNull)2