2323use OCP \Files \NotFoundException ;
2424use OCP \Files \NotPermittedException ;
2525use OCP \Files \SimpleFS \ISimpleFile ;
26+ use OCP \FilesMetadata \IFilesMetadataManager ;
2627use OCP \IPreview ;
2728use OCP \IURLGenerator ;
2829use OCP \Lock \LockedException ;
@@ -39,6 +40,7 @@ public function __construct(
3940 private IMimeTypeDetector $ mimeTypeDetector ,
4041 private IURLGenerator $ urlGenerator ,
4142 private IFilenameValidator $ filenameValidator ,
43+ private IFilesMetadataManager $ filesMetadataManager ,
4244 ) {
4345 }
4446
@@ -219,21 +221,34 @@ public function getAttachmentList(int $documentId, ?string $userId = null, ?Sess
219221
220222 $ attachments = [];
221223 $ userFolder = $ userId !== null ? $ this ->rootFolder ->getUserFolder ($ userId ) : null ;
224+
225+ $ fileNodes = [];
226+ $ fileIds = [];
222227 foreach ($ attachmentDir ->getDirectoryListing () as $ node ) {
223- if (!($ node instanceof File)) {
224- // Ignore anything but files
225- continue ;
228+ if ($ node instanceof File) {
229+ // we only want Files
230+ $ fileNodes [] = $ node ;
231+ $ fileIds [] = $ node ->getId ();
226232 }
233+ }
234+
235+ // this is done outside the loop for efficiency
236+ $ metadataMap = $ this ->filesMetadataManager ->getMetadataForFiles ($ fileIds );
237+
238+ foreach ($ fileNodes as $ node ) {
227239 $ isImage = in_array ($ node ->getMimetype (), AttachmentController::IMAGE_MIME_TYPES , true );
228240 $ name = $ node ->getName ();
241+ $ fileId = $ node ->getId ();
242+ $ metadata = $ metadataMap [$ fileId ] ?? null ;
229243 $ attachments [] = [
230- 'fileId ' => $ node -> getId () ,
244+ 'fileId ' => $ fileId ,
231245 'name ' => $ name ,
232246 'size ' => Util::humanFileSize ($ node ->getSize ()),
233247 'mimetype ' => $ node ->getMimeType (),
234248 'mtime ' => $ node ->getMTime (),
235249 'isImage ' => $ isImage ,
236250 'davPath ' => $ userFolder ?->getRelativePath($ node ->getPath ()),
251+ 'metadata ' => $ metadata ,
237252 'fullUrl ' => $ isImage
238253 ? $ this ->urlGenerator ->linkToRouteAbsolute ('text.Attachment.getImageFile ' ) . $ urlParamsBase . '&imageFileName= ' . rawurlencode ($ name ) . '&preferRawImage=1 '
239254 : $ this ->urlGenerator ->linkToRouteAbsolute ('text.Attachment.getMediaFile ' ) . $ urlParamsBase . '&mediaFileName= ' . rawurlencode ($ name ),
0 commit comments