From f5004e8f0c75b5aa8c8f603f9d62e371f121f1c2 Mon Sep 17 00:00:00 2001 From: Vincent Petry Date: Mon, 11 Apr 2022 15:13:39 +0200 Subject: Expose ZIP stat information MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Co-authored-by: Côme Chilliet --- lib/private/Archive/ZIP.php | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'lib/private/Archive') diff --git a/lib/private/Archive/ZIP.php b/lib/private/Archive/ZIP.php index ca9a046ab83..743d313f951 100644 --- a/lib/private/Archive/ZIP.php +++ b/lib/private/Archive/ZIP.php @@ -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 + */ + 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 */ -- cgit v1.2.3