Browse Source

Improve sorting performance of large lists of files

tags/v7.0.0alpha2
Robin Appelman 10 years ago
parent
commit
214357ca68
3 changed files with 17 additions and 11 deletions
  1. 2
    3
      apps/files/ajax/rawlist.php
  2. 9
    6
      apps/files/lib/helper.php
  3. 6
    2
      apps/files_trashbin/lib/helper.php

+ 2
- 3
apps/files/ajax/rawlist.php View File

@@ -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));

+ 9
- 6
apps/files/lib/helper.php View File

@@ -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());
}
}


+ 6
- 2
apps/files_trashbin/lib/helper.php View File

@@ -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'));

Loading…
Cancel
Save