@@ -175,7 +175,7 @@ private function handle(string $method, string $path, $contents, $request): Resp
175175 break ;
176176 case 'GET ' :
177177 case 'HEAD ' :
178- $ mime = $ this ->getRequestedMimeType ($ request ->getHeaderLine ("Accept " ));
178+ $ mime = $ this ->getRequestedMimeTypes ($ request ->getHeaderLine ("Accept " ));
179179 $ response = $ this ->handleReadRequest ($ response , $ path , $ contents , $ mime );
180180 if ($ method === 'HEAD ' ) {
181181 $ response ->getBody ()->rewind ();
@@ -672,27 +672,29 @@ private function handleUpdateRequest(Response $response, string $path, string $c
672672 return $ response ;
673673 }
674674
675- private function getRequestedMimeType ($ accept )
675+ private function getRequestedMimeTypes ($ accept )
676676 {
677+ $ requestedTypes = [];
678+
677679 // text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
678680 $ mimes = explode (", " , $ accept );
679681 foreach ($ mimes as $ mime ) {
680- $ parts = explode ("; " , $ mime );
681- $ mimeInfo = $ parts [0 ];
682- switch ($ mimeInfo ) {
683- case "text/turtle " : // turtle
684- case "application/ld+json " : //json
685- case "application/rdf+xml " : //rdf
686- return $ mimeInfo ;
687- break ;
688- }
682+ $ parts = explode ("; " , $ mime );
683+ $ mimeInfo = $ parts [0 ];
684+ $ requestedTypes [] = $ mimeInfo ;
689685 }
690- return '' ;
686+ return $ requestedTypes ;
691687 }
692688
693- private function handleReadRequest (Response $ response , string $ path , $ contents , $ mime = '' ): Response
689+ private function handleReadRequest (Response $ response , string $ path , $ contents , $ acceptedMimeTypes =[] ): Response
694690 {
695691 $ filesystem = $ this ->filesystem ;
692+ if (empty ($ acceptedMimeTypes )) {
693+ $ mime = '' ;
694+ } else {
695+ $ mime = $ acceptedMimeTypes [0 ];
696+ }
697+
696698 if ($ path === "/ " ) { // FIXME: this is a patch to make it work for Solid-Nextcloud; we should be able to just list '/';
697699 $ contents = $ this ->listDirectoryAsTurtle ($ path );
698700 $ response ->getBody ()->write ($ contents );
@@ -734,7 +736,13 @@ private function handleReadRequest(Response $response, string $path, $contents,
734736 $ mimetype = $ filesystem ->asMime ($ mime )->getMimetype ($ path );
735737 }
736738
737- $ contents = $ filesystem ->asMime ($ mime )->read ($ path );
739+ $ fileMimeType = $ filesystem ->asMime ('' )->getMimetype ($ path );
740+ if (in_array ($ fileMimeType , $ acceptedMimeTypes )) {
741+ $ contents = $ filesystem ->asMime ('' )->read ($ path );
742+ $ mimetype = $ fileMimeType ;
743+ } else {
744+ $ contents = $ filesystem ->asMime ($ mime )->read ($ path );
745+ }
738746
739747 if ($ contents !== false ) {
740748 $ response ->getBody ()->write ($ contents );
0 commit comments