mirror of
https://github.com/nextcloud/server.git
synced 2026-05-28 04:32:30 -04:00
Merge pull request #38095 from nextcloud/artonge/fix/file_metadata_scan
This commit is contained in:
commit
31302c4528
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)/';
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in a new issue