Skip to content

Commit

Permalink
Merge pull request #33788 from nextcloud/improve-recent
Browse files Browse the repository at this point in the history
Improve getting recent files performance
  • Loading branch information
CarlSchwan authored Sep 8, 2022
2 parents 9225856 + 67551f3 commit eac54c4
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 31 deletions.
82 changes: 55 additions & 27 deletions lib/private/Files/Node/Folder.php
Original file line number Diff line number Diff line change
Expand Up @@ -413,37 +413,65 @@ public function getNonExistingName($name) {
* @return \OCP\Files\Node[]
*/
public function getRecent($limit, $offset = 0) {
$query = new SearchQuery(
new SearchBinaryOperator(
// filter out non empty folders
ISearchBinaryOperator::OPERATOR_OR,
[
new SearchBinaryOperator(
ISearchBinaryOperator::OPERATOR_NOT,
[
new SearchComparison(
ISearchComparison::COMPARE_EQUAL,
'mimetype',
FileInfo::MIMETYPE_FOLDER
),
]
),
new SearchComparison(
ISearchComparison::COMPARE_EQUAL,
'size',
0
),
]
),
$limit,
$offset,
$filterOutNonEmptyFolder = new SearchBinaryOperator(
// filter out non empty folders
ISearchBinaryOperator::OPERATOR_OR,
[
new SearchOrder(
ISearchOrder::DIRECTION_DESCENDING,
'mtime'
new SearchBinaryOperator(
ISearchBinaryOperator::OPERATOR_NOT,
[
new SearchComparison(
ISearchComparison::COMPARE_EQUAL,
'mimetype',
FileInfo::MIMETYPE_FOLDER
),
]
),
new SearchComparison(
ISearchComparison::COMPARE_EQUAL,
'size',
0
),
]
);

$filterNonRecentFiles = new SearchComparison(
ISearchComparison::COMPARE_GREATER_THAN,
'mtime',
strtotime("-2 week")
);
if ($offset === 0 && $limit <= 100) {
$query = new SearchQuery(
new SearchBinaryOperator(
ISearchBinaryOperator::OPERATOR_AND,
[
$filterOutNonEmptyFolder,
$filterNonRecentFiles,
],
),
$limit,
$offset,
[
new SearchOrder(
ISearchOrder::DIRECTION_DESCENDING,
'mtime'
),
]
);
} else {
$query = new SearchQuery(
$filterOutNonEmptyFolder,
$limit,
$offset,
[
new SearchOrder(
ISearchOrder::DIRECTION_DESCENDING,
'mtime'
),
]
);
}

return $this->search($query);
}
}
8 changes: 4 additions & 4 deletions tests/lib/Files/Node/FolderTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -739,7 +739,7 @@ public function testGetUniqueName($name, $existingFiles, $expected) {
$this->assertEquals($expected, $node->getNonExistingName($name));
}

public function testRecent() {
public function testRecent(): void {
$manager = $this->createMock(Manager::class);
$folderPath = '/bar/foo';
/**
Expand All @@ -755,7 +755,7 @@ public function testRecent() {
$folderInfo = $this->getMockBuilder(FileInfo::class)
->disableOriginalConstructor()->getMock();

$baseTime = 1000;
$baseTime = time();
$storage = new Temporary();
$mount = new MountPoint($storage, '');

Expand Down Expand Up @@ -823,7 +823,7 @@ public function testRecentFolder() {
$folderInfo = $this->getMockBuilder(FileInfo::class)
->disableOriginalConstructor()->getMock();

$baseTime = 1000;
$baseTime = time();
$storage = new Temporary();
$mount = new MountPoint($storage, '');

Expand Down Expand Up @@ -890,7 +890,7 @@ public function testRecentJail() {
$folderInfo = $this->getMockBuilder(FileInfo::class)
->disableOriginalConstructor()->getMock();

$baseTime = 1000;
$baseTime = time();
$storage = new Temporary();
$jail = new Jail([
'storage' => $storage,
Expand Down

0 comments on commit eac54c4

Please sign in to comment.