]> source.dussan.org Git - nextcloud-server.git/commitdiff
Expose ZIP stat information
authorVincent Petry <vincent@nextcloud.com>
Mon, 11 Apr 2022 13:13:39 +0000 (15:13 +0200)
committerVincent Petry <vincent@nextcloud.com>
Mon, 11 Apr 2022 15:49:08 +0000 (17:49 +0200)
Add getStat to OC\Archive\Zip
Required to be able to read the mtime and other metadata.
To give direct access to mtime

Signed-off-by: Vincent Petry <vincent@nextcloud.com>
Co-authored-by: Côme Chilliet <come.chilliet@nextcloud.com>
lib/private/Archive/ZIP.php

index ca9a046ab832f0d067d44731b7cb645f869033ee..743d313f951b049725fb63712a42638067a4dc96 100644 (file)
@@ -110,6 +110,9 @@ class ZIP extends Archive {
         * get the files in a folder
         */
        public function getFolder(string $path): array {
+               // FIXME: multiple calls on getFolder would traverse
+               // the whole file list over and over again
+               // maybe use a Generator or cache the list ?
                $files = $this->getFiles();
                $folderContent = [];
                $pathLength = strlen($path);
@@ -123,6 +126,32 @@ class ZIP extends Archive {
                return $folderContent;
        }
 
+       /**
+        * Generator that returns metadata of all files
+        *
+        * @return \Generator<array>
+        */
+       public function getAllFilesStat() {
+               $fileCount = $this->zip->numFiles;
+               for ($i = 0;$i < $fileCount;$i++) {
+                       yield $this->zip->statIndex($i);
+               }
+       }
+
+       /**
+        * Return stat information for the given path
+        *
+        * @param string path path to get stat information on
+        * @return ?array stat information or null if not found
+        */
+       public function getStat(string $path): ?array {
+               $stat = $this->zip->statName($path);
+               if (!$stat) {
+                       return null;
+               }
+               return $stat;
+       }
+
        /**
         * get all files in the archive
         */