File & FilesDB: Add pubMetadata
This commit is contained in:
parent
86de134cb5
commit
4e492396e4
|
@ -56,6 +56,9 @@ class FilesDB {
|
|||
static final columnMMdEncodedJson = 'mmd_encoded_json';
|
||||
static final columnMMdVersion = 'mmd_ver';
|
||||
|
||||
static final columnPubMMdEncodedJson = 'pub_mmd_encoded_json';
|
||||
static final columnPubMMdVersion = 'pub_mmd_ver';
|
||||
|
||||
// part of magic metadata
|
||||
// Only parse & store selected fields from JSON in separate columns if
|
||||
// we need to write query based on that field
|
||||
|
@ -69,6 +72,7 @@ class FilesDB {
|
|||
...addMetadataColumns(),
|
||||
...addMagicMetadataColumns(),
|
||||
...addUniqueConstraintOnCollectionFiles(),
|
||||
...addPubMagicMetadataColumns()
|
||||
];
|
||||
|
||||
final dbConfig = MigrationConfig(
|
||||
|
@ -276,6 +280,17 @@ class FilesDB {
|
|||
];
|
||||
}
|
||||
|
||||
static List<String> addPubMagicMetadataColumns() {
|
||||
return [
|
||||
'''
|
||||
ALTER TABLE $table ADD COLUMN $columnPubMMdEncodedJson TEXT DEFAULT '{}';
|
||||
''',
|
||||
'''
|
||||
ALTER TABLE $table ADD COLUMN $columnPubMMdVersion INTEGER DEFAULT 0;
|
||||
'''
|
||||
];
|
||||
}
|
||||
|
||||
Future<void> clearTable() async {
|
||||
final db = await instance.database;
|
||||
await db.delete(table);
|
||||
|
@ -1019,7 +1034,15 @@ class FilesDB {
|
|||
row[columnMMdEncodedJson] == file.mMdEncodedJson ?? '{}';
|
||||
row[columnMMdVisibility] =
|
||||
file.magicMetadata?.visibility ?? kVisibilityVisible;
|
||||
return row;
|
||||
|
||||
row[columnPubMMdVersion] = file.pubMmdVersion ?? 0;
|
||||
row[columnPubMMdEncodedJson] == file.pubMmdEncodedJson ?? '{}';
|
||||
if (file.pubMagicMetadata != null &&
|
||||
file.pubMagicMetadata.editedTime != null) {
|
||||
// override existing creationTime to avoid re-writing all queries related
|
||||
// to loading the gallery
|
||||
row[columnCreationTime] = file.pubMagicMetadata.editedTime;
|
||||
}
|
||||
}
|
||||
|
||||
File _getFileFromRow(Map<String, dynamic> row) {
|
||||
|
@ -1053,6 +1076,9 @@ class FilesDB {
|
|||
|
||||
file.mMdVersion = row[columnMMdVersion] ?? 0;
|
||||
file.mMdEncodedJson = row[columnMMdEncodedJson] ?? '{}';
|
||||
|
||||
file.pubMmdVersion = row[columnPubMMdVersion] ?? 0;
|
||||
file.pubMmdEncodedJson = row[columnPubMMdEncodedJson] ?? '{}';
|
||||
return file;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,13 +1,14 @@
|
|||
import 'dart:io' as io;
|
||||
|
||||
import 'package:flutter/foundation.dart';
|
||||
import 'package:flutter_sodium/flutter_sodium.dart';
|
||||
import 'package:path/path.dart';
|
||||
import 'package:photo_manager/photo_manager.dart';
|
||||
import 'package:photos/core/configuration.dart';
|
||||
import 'package:photos/core/constants.dart';
|
||||
import 'package:photos/models/magic_metadata.dart';
|
||||
import 'package:photos/models/file_type.dart';
|
||||
import 'package:photos/models/location.dart';
|
||||
import 'package:photos/models/magic_metadata.dart';
|
||||
import 'package:photos/services/feature_flag_service.dart';
|
||||
import 'package:photos/utils/crypto_util.dart';
|
||||
|
||||
|
@ -42,6 +43,14 @@ class File {
|
|||
_mmd ?? MagicMetadata.fromEncodedJson(mMdEncodedJson ?? '{}');
|
||||
set magicMetadata(val) => _mmd = val;
|
||||
|
||||
// public magic metadata is shared if during file/album sharing
|
||||
String pubMmdEncodedJson;
|
||||
int pubMmdVersion = 0;
|
||||
PubMagicMetadata _pubMmd;
|
||||
PubMagicMetadata get pubMagicMetadata =>
|
||||
_pubMmd ?? MagicMetadata.fromEncodedJson(pubMmdEncodedJson ?? '{}');
|
||||
set pubMagicMetadata(val) => _pubMmd = val;
|
||||
|
||||
static const kCurrentMetadataVersion = 1;
|
||||
|
||||
File();
|
||||
|
|
|
@ -6,6 +6,8 @@ const kVisibilityArchive = 1;
|
|||
|
||||
const kMagicKeyVisibility = 'visibility';
|
||||
|
||||
const kPubMagicKeyEditedTime = 'et';
|
||||
|
||||
class MagicMetadata {
|
||||
// 0 -> visible
|
||||
// 1 -> archived
|
||||
|
@ -33,3 +35,29 @@ class MagicMetadata {
|
|||
);
|
||||
}
|
||||
}
|
||||
|
||||
class PubMagicMetadata {
|
||||
//
|
||||
int editedTime;
|
||||
|
||||
PubMagicMetadata({this.editedTime});
|
||||
|
||||
factory PubMagicMetadata.fromEncodedJson(String encodedJson) =>
|
||||
PubMagicMetadata.fromJson(jsonDecode(encodedJson));
|
||||
|
||||
factory PubMagicMetadata.fromJson(dynamic json) =>
|
||||
PubMagicMetadata.fromMap(json);
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
final map = <String, dynamic>{};
|
||||
map[kMagicKeyVisibility] = editedTime;
|
||||
return map;
|
||||
}
|
||||
|
||||
factory PubMagicMetadata.fromMap(Map<String, dynamic> map) {
|
||||
if (map == null) return null;
|
||||
return PubMagicMetadata(
|
||||
editedTime: map[kPubMagicKeyEditedTime],
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue