Ensure that the location is saved to the metadata if unavailable before uploading
This commit is contained in:
parent
3d56f71be3
commit
6cabe8c21a
4 changed files with 23 additions and 63 deletions
|
@ -267,34 +267,13 @@ class FilesDB {
|
|||
}
|
||||
}
|
||||
|
||||
Future<int> update(
|
||||
int generatedID,
|
||||
int uploadedID,
|
||||
int ownerID,
|
||||
int collectionID,
|
||||
int updationTime,
|
||||
String encryptedKey,
|
||||
String keyDecryptionNonce,
|
||||
String fileDecryptionHeader,
|
||||
String thumbnailDecryptionHeader,
|
||||
String metadataDecryptionHeader,
|
||||
) async {
|
||||
Future<int> update(File file) async {
|
||||
final db = await instance.database;
|
||||
final values = new Map<String, dynamic>();
|
||||
values[columnUploadedFileID] = uploadedID;
|
||||
values[columnOwnerID] = ownerID;
|
||||
values[columnCollectionID] = collectionID;
|
||||
values[columnUpdationTime] = updationTime;
|
||||
values[columnEncryptedKey] = encryptedKey;
|
||||
values[columnKeyDecryptionNonce] = keyDecryptionNonce;
|
||||
values[columnFileDecryptionHeader] = fileDecryptionHeader;
|
||||
values[columnThumbnailDecryptionHeader] = thumbnailDecryptionHeader;
|
||||
values[columnMetadataDecryptionHeader] = metadataDecryptionHeader;
|
||||
return await db.update(
|
||||
table,
|
||||
values,
|
||||
_getRowForFile(file),
|
||||
where: '$columnGeneratedID = ?',
|
||||
whereArgs: [generatedID],
|
||||
whereArgs: [file.generatedID],
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -48,22 +48,10 @@ class FavoritesService {
|
|||
|
||||
Future<void> addToFavorites(File file) async {
|
||||
final collectionID = await _getOrCreateFavoriteCollectionID();
|
||||
var fileID = file.uploadedFileID;
|
||||
if (fileID == null) {
|
||||
if (file.uploadedFileID == null) {
|
||||
file.collectionID = collectionID;
|
||||
fileID = (await _fileUploader.encryptAndUploadFile(file)).uploadedFileID;
|
||||
await _filesDB.update(
|
||||
file.generatedID,
|
||||
file.uploadedFileID,
|
||||
file.ownerID,
|
||||
file.collectionID,
|
||||
file.updationTime,
|
||||
file.encryptedKey,
|
||||
file.keyDecryptionNonce,
|
||||
file.fileDecryptionHeader,
|
||||
file.thumbnailDecryptionHeader,
|
||||
file.metadataDecryptionHeader,
|
||||
);
|
||||
final uploadedFile = (await _fileUploader.encryptAndUploadFile(file));
|
||||
await _filesDB.update(uploadedFile);
|
||||
} else {
|
||||
await _collectionsService.addToCollection(collectionID, [file]);
|
||||
_cachedFavoriteFiles.add(file);
|
||||
|
|
|
@ -216,18 +216,7 @@ class SyncService {
|
|||
.addToCollection(file.collectionID, [existingFile]);
|
||||
} else {
|
||||
final uploadedFile = await _uploader.encryptAndUploadFile(file);
|
||||
await _db.update(
|
||||
file.generatedID,
|
||||
uploadedFile.uploadedFileID,
|
||||
uploadedFile.ownerID,
|
||||
uploadedFile.collectionID,
|
||||
uploadedFile.updationTime,
|
||||
file.encryptedKey,
|
||||
file.keyDecryptionNonce,
|
||||
file.fileDecryptionHeader,
|
||||
file.thumbnailDecryptionHeader,
|
||||
file.metadataDecryptionHeader,
|
||||
);
|
||||
await _db.update(uploadedFile);
|
||||
}
|
||||
Bus.instance.fire(PhotoUploadEvent(
|
||||
completed: i + 1, total: filesToBeUploaded.length));
|
||||
|
@ -244,18 +233,16 @@ class SyncService {
|
|||
final existingFile = await _db.getMatchingFile(file.localID, file.title,
|
||||
file.deviceFolder, file.creationTime, file.modificationTime,
|
||||
alternateTitle: getHEICFileNameForJPG(file));
|
||||
await _db.update(
|
||||
existingFile.generatedID,
|
||||
file.uploadedFileID,
|
||||
file.ownerID,
|
||||
file.collectionID,
|
||||
file.updationTime,
|
||||
file.encryptedKey,
|
||||
file.keyDecryptionNonce,
|
||||
file.fileDecryptionHeader,
|
||||
file.thumbnailDecryptionHeader,
|
||||
file.metadataDecryptionHeader,
|
||||
);
|
||||
file.localID = existingFile.localID;
|
||||
if (existingFile.collectionID == null ||
|
||||
existingFile.collectionID == file.collectionID) {
|
||||
// Uploaded for the first time || updated within the same collection
|
||||
file.generatedID = existingFile.generatedID;
|
||||
await _db.update(file);
|
||||
} else {
|
||||
// If an existing file was added to a collection
|
||||
await _db.insert(file);
|
||||
}
|
||||
} catch (e) {
|
||||
file.localID = null; // File uploaded from a different device
|
||||
await _db.insert(file);
|
||||
|
|
|
@ -6,6 +6,7 @@ import 'package:logging/logging.dart';
|
|||
import 'package:photos/core/configuration.dart';
|
||||
import 'package:photos/core/constants.dart';
|
||||
import 'package:photos/models/file.dart';
|
||||
import 'package:photos/models/location.dart';
|
||||
import 'package:photos/models/upload_url.dart';
|
||||
import 'package:photos/services/collections_service.dart';
|
||||
import 'package:photos/utils/crypto_util.dart';
|
||||
|
@ -93,6 +94,11 @@ class FileUploader {
|
|||
String thumbnailObjectKey =
|
||||
await putFile(thumbnailUploadURL, io.File(encryptedThumbnailPath));
|
||||
|
||||
if (file.location.latitude == 0 && file.location.longitude == 0) {
|
||||
final latLong = await (await file.getAsset()).latlngAsync();
|
||||
file.location = Location(latLong.latitude, latLong.longitude);
|
||||
}
|
||||
|
||||
final encryptedMetadataData = CryptoUtil.encryptChaCha(
|
||||
utf8.encode(jsonEncode(file.getMetadata())), fileAttributes.key);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue