refactor and more documentation

This commit is contained in:
Neeraj Gupta 2021-10-17 21:34:30 +05:30
parent 31cab54098
commit cb16f188b4
No known key found for this signature in database
GPG key ID: 3C5A1684DC1729E1
2 changed files with 22 additions and 21 deletions

View file

@ -11,6 +11,8 @@ class CollectionsDB {
static final _databaseName = "ente.collections.db";
static final table = 'collections';
static final tempTable = 'temp_collections';
static final _sqlBoolTrue = 1;
static final _sqlBoolFalse = 0;
static final columnID = 'collection_id';
static final columnOwner = 'owner';
@ -39,6 +41,7 @@ class CollectionsDB {
initializationScript: intitialScript, migrationScripts: migrationScripts);
CollectionsDB._privateConstructor();
static final CollectionsDB instance = CollectionsDB._privateConstructor();
static Future<Database> _dbFuture;
@ -110,7 +113,7 @@ class CollectionsDB {
return [
'''
ALTER TABLE $table
ADD COLUMN $columnVersion INTEGER DEFAULT 0;
ADD COLUMN $columnVersion INTEGER DEFAULT $_sqlBoolFalse;
'''
];
}
@ -183,10 +186,10 @@ class CollectionsDB {
row[columnSharees] =
json.encode(collection.sharees?.map((x) => x?.toMap())?.toList());
row[columnUpdationTime] = collection.updationTime;
if (collection.isDeleted == null || collection.isDeleted == false) {
row[columnIsDeleted] = 0;
if (collection.isDeleted ?? false) {
row[columnIsDeleted] = _sqlBoolTrue;
} else {
row[columnIsDeleted] = 1;
row[columnIsDeleted] = _sqlBoolTrue;
}
return row;
}
@ -209,7 +212,8 @@ class CollectionsDB {
List<User>.from((json.decode(row[columnSharees]) as List)
.map((x) => User.fromMap(x))),
int.parse(row[columnUpdationTime]),
isDeleted: (row[columnIsDeleted] ?? 0) != 0,
// default to False is columnIsDeleted is not set
isDeleted: (row[columnIsDeleted] ?? _sqlBoolFalse) == _sqlBoolTrue,
);
}
}

View file

@ -10,6 +10,10 @@ import 'package:photos/models/magic_metadata.dart';
import 'package:photos/models/trash_file.dart';
import 'package:sqflite/sqflite.dart';
// The TrashDB doesn't need to flatten and store all attributes of a file.
// Before adding any other column, we should evaluate if we need to query on that
// column or not while showing trashed items. Even if we miss storing any new attributes,
// during restore, all file attributes will be fetched & stored as required.
class TrashDB {
static final _databaseName = "ente.trash.db";
static final _databaseVersion = 1;
@ -26,6 +30,9 @@ class TrashDB {
static final columnFileDecryptionHeader = 'file_decryption_header';
static final columnThumbnailDecryptionHeader = 'thumbnail_decryption_header';
static final columnModificationTime = 'modification_time';
static final columnCreationTime = 'creation_time';
static final columnLocalID = 'local_id';
static final columnTitle = 'title';
static final columnDeviceFolder = 'device_folder';
@ -34,13 +41,9 @@ class TrashDB {
static final columnFileType = 'file_type';
static final columnFileSubType = 'file_sub_type';
static final columnDuration = 'duration';
static final columnHash = 'hash';
static final columnMetadataVersion = 'metadata_version';
static final columnModificationTime = 'modification_time';
static final columnCreationTime = 'creation_time';
static final columnMMdEncodedJson = 'mmd_encoded_json';
static final columnMMdVersion = 'mmd_ver';
static final columnMMdVisibility = 'mmd_visibility';
Future _onCreate(Database db, int version) async {
await db.execute('''
@ -68,7 +71,6 @@ class TrashDB {
$columnMetadataVersion INTEGER,
$columnMMdEncodedJson TEXT DEFAULT '{}',
$columnMMdVersion INTEGER DEFAULT 0,
$columnMMdVisibility INTEGER DEFAULT $kVisibilityVisible
);
CREATE INDEX IF NOT EXISTS creation_time_index ON $tableName($columnCreationTime);
CREATE INDEX IF NOT EXISTS creation_time_index ON $tableName($columnTrashDeleteBy);
@ -208,8 +210,6 @@ class TrashDB {
trashFile.thumbnailDecryptionHeader = row[columnThumbnailDecryptionHeader];
trashFile.fileSubType = row[columnFileSubType] ?? -1;
trashFile.duration = row[columnDuration] ?? 0;
trashFile.hash = row[columnHash];
trashFile.metadataVersion = row[columnMetadataVersion] ?? 0;
trashFile.mMdVersion = row[columnMMdVersion] ?? 0;
trashFile.mMdEncodedJson = row[columnMMdEncodedJson] ?? '{}';
@ -223,6 +223,11 @@ class TrashDB {
row[columnUploadedFileID] = trash.uploadedFileID;
row[columnCollectionID] = trash.collectionID;
row[columnOwnerID] = trash.ownerID;
row[columnEncryptedKey] = trash.encryptedKey;
row[columnKeyDecryptionNonce] = trash.keyDecryptionNonce;
row[columnFileDecryptionHeader] = trash.fileDecryptionHeader;
row[columnThumbnailDecryptionHeader] = trash.thumbnailDecryptionHeader;
row[columnLocalID] = trash.localID;
row[columnTitle] = trash.title;
row[columnDeviceFolder] = trash.deviceFolder;
@ -233,18 +238,10 @@ class TrashDB {
row[columnFileType] = getInt(trash.fileType);
row[columnCreationTime] = trash.creationTime;
row[columnModificationTime] = trash.modificationTime;
row[columnEncryptedKey] = trash.encryptedKey;
row[columnKeyDecryptionNonce] = trash.keyDecryptionNonce;
row[columnFileDecryptionHeader] = trash.fileDecryptionHeader;
row[columnThumbnailDecryptionHeader] = trash.thumbnailDecryptionHeader;
row[columnFileSubType] = trash.fileSubType ?? -1;
row[columnDuration] = trash.duration ?? 0;
row[columnHash] = trash.hash;
row[columnMetadataVersion] = trash.metadataVersion;
row[columnMMdVersion] = trash.mMdVersion ?? 0;
row[columnMMdEncodedJson] = trash.mMdEncodedJson ?? '{}';
row[columnMMdVisibility] =
trash.magicMetadata?.visibility ?? kVisibilityVisible;
return row;
}
}