Add support for bulkEdit time
This commit is contained in:
parent
39cac17c0c
commit
9f935e11f0
|
@ -12,7 +12,7 @@ extension ListExtension<E> on List<E> {
|
|||
// splitMatch, based on the matchFunction, split the input list in two
|
||||
// lists. result.matched contains items which matched and result.unmatched
|
||||
// contains remaining items.
|
||||
ListMatch<E> splitMatch(bool Function(E element) matchFunction) {
|
||||
ListMatch<E> splitMatch(bool Function(E e) matchFunction) {
|
||||
final listMatch = ListMatch<E>();
|
||||
for (final element in this) {
|
||||
if (matchFunction(element)) {
|
||||
|
|
|
@ -1,14 +1,28 @@
|
|||
import 'package:dio/dio.dart';
|
||||
import 'package:logging/logging.dart';
|
||||
import 'package:path/path.dart';
|
||||
import 'package:photos/core/configuration.dart';
|
||||
import 'package:photos/core/network.dart';
|
||||
import 'package:photos/db/files_db.dart';
|
||||
import 'package:photos/extensions/list.dart';
|
||||
import 'package:photos/models/file.dart';
|
||||
import 'package:photos/models/magic_metadata.dart';
|
||||
import 'package:photos/services/file_magic_service.dart';
|
||||
import 'package:photos/utils/date_time_util.dart';
|
||||
|
||||
class FilesService {
|
||||
late Dio _enteDio;
|
||||
late Logger _logger;
|
||||
late FilesDB _filesDB;
|
||||
late Configuration _config;
|
||||
|
||||
FilesService._privateConstructor() {
|
||||
_enteDio = Network.instance.enteDio;
|
||||
_logger = Logger("FilesService");
|
||||
_filesDB = FilesDB.instance;
|
||||
_config = Configuration.instance;
|
||||
}
|
||||
|
||||
static final FilesService instance = FilesService._privateConstructor();
|
||||
|
||||
Future<int> getFileSize(int uploadedFileID) async {
|
||||
|
@ -25,6 +39,58 @@ class FilesService {
|
|||
rethrow;
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> bulkEditTime(
|
||||
List<File> files,
|
||||
EditTimeSource source,
|
||||
) async {
|
||||
assert(
|
||||
source == EditTimeSource.fileName,
|
||||
"edit source ${source.name} is not supported yet",
|
||||
);
|
||||
final ListMatch<File> result = files.splitMatch(
|
||||
(element) => element.isUploaded,
|
||||
);
|
||||
final List<File> uploadedFiles = result.matched;
|
||||
// editTime For LocalFiles
|
||||
final List<File> localOnlyFiles = result.unmatched;
|
||||
for (File localFile in localOnlyFiles) {
|
||||
final timeResult = parseDateTimeFromFileNameV2(
|
||||
basenameWithoutExtension(localFile.title ?? ""),
|
||||
);
|
||||
if (timeResult != null) {
|
||||
localFile.creationTime = timeResult.microsecondsSinceEpoch;
|
||||
}
|
||||
}
|
||||
await _filesDB.insertMultiple(localOnlyFiles);
|
||||
|
||||
final List<File> remoteFilesToUpdate = [];
|
||||
final Map<int, Map<String, int>> fileIDToUpdateMetadata = {};
|
||||
for (File remoteFile in uploadedFiles) {
|
||||
// discard files not owned by user and also dedupe already processed
|
||||
// files
|
||||
if (remoteFile.ownerID != _config.getUserID()! ||
|
||||
fileIDToUpdateMetadata.containsKey(remoteFile.uploadedFileID)) {
|
||||
continue;
|
||||
}
|
||||
final timeResult = parseDateTimeFromFileNameV2(
|
||||
basenameWithoutExtension(remoteFile.title ?? ""),
|
||||
);
|
||||
if (timeResult != null) {
|
||||
remoteFilesToUpdate.add(remoteFile);
|
||||
fileIDToUpdateMetadata[remoteFile.uploadedFileID!] = {
|
||||
pubMagicKeyEditedTime: timeResult.microsecondsSinceEpoch,
|
||||
};
|
||||
}
|
||||
}
|
||||
if (remoteFilesToUpdate.isNotEmpty) {
|
||||
await FileMagicService.instance.updatePublicMagicMetadata(
|
||||
remoteFilesToUpdate,
|
||||
null,
|
||||
metadataUpdateMap: fileIDToUpdateMetadata,
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enum EditTimeSource {
|
||||
|
|
Loading…
Reference in a new issue