From 214357ca68ebd80cc59cd1ee34a5a292feaebbe0 Mon Sep 17 00:00:00 2001 From: Robin Appelman Date: Wed, 19 Mar 2014 13:53:59 +0100 Subject: [PATCH] Improve sorting performance of large lists of files --- apps/files/ajax/rawlist.php | 5 ++--- apps/files/lib/helper.php | 15 +++++++++------ apps/files_trashbin/lib/helper.php | 8 ++++++-- 3 files changed, 17 insertions(+), 11 deletions(-) diff --git a/apps/files/ajax/rawlist.php b/apps/files/ajax/rawlist.php index 89c21a172fc..6433ddefd69 100644 --- a/apps/files/ajax/rawlist.php +++ b/apps/files/ajax/rawlist.php @@ -33,6 +33,8 @@ if (is_array($mimetypes) && count($mimetypes)) { } else { $files = array_merge($files, \OC\Files\Filesystem::getDirectoryContent($dir)); } +// Sort by name +usort($files, array('\OCA\Files\Helper', 'fileCmp')); $result = array(); foreach ($files as $file) { @@ -51,7 +53,4 @@ foreach ($files as $file) { $result[] = $fileData; } -// Sort by name -usort($result, array('\OCA\Files\Helper', 'fileCmp')); - OC_JSON::success(array('data' => $result)); diff --git a/apps/files/lib/helper.php b/apps/files/lib/helper.php index b9e41a352bc..c41e2d15581 100644 --- a/apps/files/lib/helper.php +++ b/apps/files/lib/helper.php @@ -51,17 +51,20 @@ class Helper /** * Comparator function to sort files alphabetically and have * the directories appear first - * @param array $a file - * @param array $b file - * @return -1 if $a must come before $b, 1 otherwise + * + * @param \OCP\Files\FileInfo $a file + * @param \OCP\Files\FileInfo $b file + * @return int -1 if $a must come before $b, 1 otherwise */ public static function fileCmp($a, $b) { - if ($a['type'] === 'dir' and $b['type'] !== 'dir') { + $aType = $a->getType(); + $bType = $b->getType(); + if ($aType === 'dir' and $bType !== 'dir') { return -1; - } elseif ($a['type'] !== 'dir' and $b['type'] === 'dir') { + } elseif ($aType !== 'dir' and $bType === 'dir') { return 1; } else { - return strnatcasecmp($a['name'], $b['name']); + return strnatcasecmp($a->getName(), $b->getName()); } } diff --git a/apps/files_trashbin/lib/helper.php b/apps/files_trashbin/lib/helper.php index fe0d1d30a72..9c24332a964 100644 --- a/apps/files_trashbin/lib/helper.php +++ b/apps/files_trashbin/lib/helper.php @@ -2,13 +2,15 @@ namespace OCA\Files_Trashbin; +use OC\Files\FileInfo; + class Helper { /** * Retrieves the contents of a trash bin directory. * @param string $dir path to the directory inside the trashbin * or empty to retrieve the root of the trashbin - * @return array of files + * @return \OCP\Files\FileInfo[] */ public static function getTrashFiles($dir){ $result = array(); @@ -52,6 +54,8 @@ class Helper $files = array(); $id = 0; + list($storage, $internalPath) = $view->resolvePath($dir); + $absoluteDir = $view->getAbsolutePath($dir); foreach ($result as $r) { $i = array(); $i['id'] = $id++; @@ -77,7 +81,7 @@ class Helper $i['isPreviewAvailable'] = \OC::$server->getPreviewManager()->isMimeSupported($r['mime']); } $i['icon'] = \OCA\Files\Helper::determineIcon($i); - $files[] = $i; + $files[] = new FileInfo($absoluteDir . '/' . $i['name'], $storage, $internalPath . '/' . $i['name'], $i); } usort($files, array('\OCA\Files\Helper', 'fileCmp')); -- 2.39.5