Merge pull request #38095 from nextcloud/artonge/fix/file_metadata_scan

pull/37954/head
John Molakvoæ 2023-05-09 17:28:47 +07:00 committed by GitHub
commit 31302c4528
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 4 deletions

@ -60,7 +60,7 @@ class FileMetadataMapper extends QBMapper {
$qb = $this->db->getQueryBuilder();
$qb->select('*')
->from($this->getTableName())
->where($qb->expr()->eq('id', $qb->createNamedParameter($fileId, IQueryBuilder::PARAM_INT_ARRAY)))
->where($qb->expr()->eq('id', $qb->createNamedParameter($fileId, IQueryBuilder::PARAM_INT)))
->andWhere($qb->expr()->eq('group_name', $qb->createNamedParameter($groupName, IQueryBuilder::PARAM_STR)));
return $this->findEntity($qb);
@ -111,7 +111,7 @@ class FileMetadataMapper extends QBMapper {
/**
* Updates an entry in the db from an entity
*
* @param Entity $entity the entity that should be created
* @param FileMetadata $entity the entity that should be created
* @return FileMetadata the saved entity with the set id
* @throws Exception
* @throws \InvalidArgumentException if entity has no id
@ -148,4 +148,30 @@ class FileMetadataMapper extends QBMapper {
return $entity;
}
/**
* Override the insertOrUpdate as we could be in a transaction in which case we can not afford on error.
*
* @param FileMetadata $entity the entity that should be created/updated
* @return FileMetadata the saved entity with the (new) id
* @throws Exception
* @throws \InvalidArgumentException if entity has no id
*/
public function insertOrUpdate(Entity $entity): FileMetadata {
try {
$existingEntity = $this->findForGroupForFile($entity->getId(), $entity->getGroupName());
} catch (\Throwable) {
$existingEntity = null;
}
if ($existingEntity !== null) {
if ($entity->getValue() !== $existingEntity->getValue()) {
return $this->update($entity);
} else {
return $existingEntity;
}
} else {
return parent::insertOrUpdate($entity);
}
}
}

@ -44,11 +44,15 @@ class ExifProvider implements IMetadataProvider {
return extension_loaded('exif');
}
/** @return array{'gps': FileMetadata, 'size': FileMetadata} */
/** @return array{'gps'?: FileMetadata, 'size'?: FileMetadata} */
public function execute(File $file): array {
$exifData = [];
$fileDescriptor = $file->fopen('rb');
if ($fileDescriptor === false) {
return [];
}
$data = null;
try {
// Needed to make reading exif data reliable.
@ -107,7 +111,7 @@ class ExifProvider implements IMetadataProvider {
}
public static function getMimetypesSupported(): string {
return '/image\/.*/';
return '/image\/(png|jpeg|heif|webp|tiff)/';
}
/**