Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Schwan <carl@carlschwan.eu>2022-09-01 11:45:50 +0300
committerbackportbot-nextcloud[bot] <backportbot-nextcloud[bot]@users.noreply.github.com>2022-09-08 17:44:00 +0300
commit4d4a6727fc6280aa047d6cbae92f8fa9a91f6312 (patch)
tree1ad8e2785e9dc8d68c8fbc777cd6e8a83d77bb1d
parent19ac8fd167de17fb20d3b718a9bba6943a973fa5 (diff)
Filter out old files when trying to get recent filesbackport/33788/stable23
Only do so when asking for less than 100 files and having an offset equal to 0. Signed-off-by: Carl Schwan <carl@carlschwan.eu>
-rw-r--r--lib/private/Files/Node/Folder.php82
-rw-r--r--tests/lib/Files/Node/FolderTest.php8
2 files changed, 59 insertions, 31 deletions
diff --git a/lib/private/Files/Node/Folder.php b/lib/private/Files/Node/Folder.php
index 400fd6bedcc..48bc1c60b21 100644
--- a/lib/private/Files/Node/Folder.php
+++ b/lib/private/Files/Node/Folder.php
@@ -484,37 +484,65 @@ class Folder extends Node implements \OCP\Files\Folder {
* @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);
}
}
diff --git a/tests/lib/Files/Node/FolderTest.php b/tests/lib/Files/Node/FolderTest.php
index 94bcac4aa00..362de61cb29 100644
--- a/tests/lib/Files/Node/FolderTest.php
+++ b/tests/lib/Files/Node/FolderTest.php
@@ -711,7 +711,7 @@ class FolderTest extends NodeTest {
$this->assertEquals($expected, $node->getNonExistingName($name));
}
- public function testRecent() {
+ public function testRecent(): void {
$manager = $this->createMock(Manager::class);
$folderPath = '/bar/foo';
/**
@@ -727,7 +727,7 @@ class FolderTest extends NodeTest {
$folderInfo = $this->getMockBuilder(FileInfo::class)
->disableOriginalConstructor()->getMock();
- $baseTime = 1000;
+ $baseTime = time();
$storage = new Temporary();
$mount = new MountPoint($storage, '');
@@ -795,7 +795,7 @@ class FolderTest extends NodeTest {
$folderInfo = $this->getMockBuilder(FileInfo::class)
->disableOriginalConstructor()->getMock();
- $baseTime = 1000;
+ $baseTime = time();
$storage = new Temporary();
$mount = new MountPoint($storage, '');
@@ -862,7 +862,7 @@ class FolderTest extends NodeTest {
$folderInfo = $this->getMockBuilder(FileInfo::class)
->disableOriginalConstructor()->getMock();
- $baseTime = 1000;
+ $baseTime = time();
$storage = new Temporary();
$jail = new Jail([
'storage' => $storage,