Skip to content

Commit 01b781c

Browse files
fix(dav): add missing search_supports_creation_time and search_supports_upload_time to Capabilities return type
Signed-off-by: Cristian Scheid <cristianscheid@gmail.com>
1 parent 6bae0a9 commit 01b781c

7 files changed

Lines changed: 31 additions & 3 deletions

File tree

apps/dav/lib/Capabilities.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,13 @@ public function __construct(
1717
}
1818

1919
/**
20-
* @return array{dav: array{chunking: string, bulkupload?: string, absence-supported?: bool, absence-replacement?: bool}}
20+
* @return array{dav: array{chunking: string, search_supports_creation_time: bool, search_supports_upload_time: bool, bulkupload?: string, absence-supported?: bool, absence-replacement?: bool}}
2121
*/
2222
public function getCapabilities() {
2323
$capabilities = [
2424
'dav' => [
2525
'chunking' => '1.0',
26+
'search_supports_creation_time' => true,
2627
'search_supports_upload_time' => true,
2728
]
2829
];

apps/dav/lib/Files/FileSearchBackend.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ public function getPropertyDefinitionsForScope(string $href, ?string $path): arr
8585
new SearchPropertyDefinition('{DAV:}displayname', true, true, true),
8686
new SearchPropertyDefinition('{DAV:}getcontenttype', true, true, true),
8787
new SearchPropertyDefinition('{DAV:}getlastmodified', true, true, true, SearchPropertyDefinition::DATATYPE_DATETIME),
88+
new SearchPropertyDefinition('{DAV:}creationdate', true, true, true, SearchPropertyDefinition::DATATYPE_DATETIME),
8889
new SearchPropertyDefinition('{http://nextcloud.org/ns}upload_time', true, true, true, SearchPropertyDefinition::DATATYPE_DATETIME),
8990
new SearchPropertyDefinition(FilesPlugin::SIZE_PROPERTYNAME, true, true, true, SearchPropertyDefinition::DATATYPE_NONNEGATIVE_INTEGER),
9091
new SearchPropertyDefinition(TagsPlugin::FAVORITE_PROPERTYNAME, true, true, true, SearchPropertyDefinition::DATATYPE_BOOLEAN),
@@ -298,6 +299,8 @@ private function getSearchResultProperty(SearchResult $result, SearchPropertyDef
298299
return $node->getName();
299300
case '{DAV:}getlastmodified':
300301
return $node->getLastModified();
302+
case '{DAV:}creationdate':
303+
return $node->getNode()->getCreationTime();
301304
case '{http://nextcloud.org/ns}upload_time':
302305
return $node->getNode()->getUploadTime();
303306
case FilesPlugin::SIZE_PROPERTYNAME:
@@ -454,6 +457,8 @@ private function mapPropertyNameToColumn(SearchPropertyDefinition $property) {
454457
return 'mimetype';
455458
case '{DAV:}getlastmodified':
456459
return 'mtime';
460+
case '{DAV:}creationdate':
461+
return 'creation_time';
457462
case '{http://nextcloud.org/ns}upload_time':
458463
return 'upload_time';
459464
case FilesPlugin::SIZE_PROPERTYNAME:

apps/dav/openapi.json

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,20 @@
2929
"dav": {
3030
"type": "object",
3131
"required": [
32-
"chunking"
32+
"chunking",
33+
"search_supports_creation_time",
34+
"search_supports_upload_time"
3335
],
3436
"properties": {
3537
"chunking": {
3638
"type": "string"
3739
},
40+
"search_supports_creation_time": {
41+
"type": "boolean"
42+
},
43+
"search_supports_upload_time": {
44+
"type": "boolean"
45+
},
3846
"bulkupload": {
3947
"type": "string"
4048
},

apps/dav/tests/unit/CapabilitiesTest.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ public function testGetCapabilities(): void {
2828
$expected = [
2929
'dav' => [
3030
'chunking' => '1.0',
31+
'search_supports_creation_time' => true,
32+
'search_supports_upload_time' => true,
3133
],
3234
];
3335
$this->assertSame($expected, $capabilities->getCapabilities());
@@ -47,6 +49,8 @@ public function testGetCapabilitiesWithBulkUpload(): void {
4749
$expected = [
4850
'dav' => [
4951
'chunking' => '1.0',
52+
'search_supports_creation_time' => true,
53+
'search_supports_upload_time' => true,
5054
'bulkupload' => '1.0',
5155
],
5256
];
@@ -67,6 +71,8 @@ public function testGetCapabilitiesWithAbsence(): void {
6771
$expected = [
6872
'dav' => [
6973
'chunking' => '1.0',
74+
'search_supports_creation_time' => true,
75+
'search_supports_upload_time' => true,
7076
'absence-supported' => true,
7177
'absence-replacement' => true,
7278
],

apps/files/src/components/FileEntry/FileEntryPreview.vue

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@
3939
<FavoriteIcon v-once />
4040
</span>
4141

42+
<!-- Recently created icon -->
43+
<span v-else-if="isRecentView && isRecentlyCreated" class="files-list__row-icon-recently-created">
44+
<RecentlyCreatedIcon v-once />
45+
</span>
46+
4247
<OverlayIcon :is="fileOverlay"
4348
v-if="fileOverlay"
4449
class="files-list__row-icon-overlay files-list__row-icon-overlay--file" />
@@ -70,6 +75,7 @@ import PlayCircleIcon from 'vue-material-design-icons/PlayCircle.vue'
7075
7176
import CollectivesIcon from './CollectivesIcon.vue'
7277
import FavoriteIcon from './FavoriteIcon.vue'
78+
import RecentlyCreatedIcon from './RecentlyCreatedIcon.vue'
7379
7480
import { isLivePhoto } from '../../services/LivePhotos'
7581
import { useUserConfigStore } from '../../store/userconfig.ts'

lib/private/Files/Cache/QuerySearchHelper.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,7 @@ public function searchInCaches(ISearchQuery $searchQuery, array $caches): array
151151

152152
$requestedFields = $this->searchBuilder->extractRequestedFields($searchQuery->getSearchOperation());
153153

154-
$joinExtendedCache = in_array('upload_time', $requestedFields);
154+
$joinExtendedCache = in_array('creation_time', $requestedFields) || in_array('upload_time', $requestedFields);
155155

156156
$query = $builder->selectFileCache('file', $joinExtendedCache);
157157

lib/private/Files/Cache/SearchBuilder.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@ class SearchBuilder {
6363
'share_with' => 'string',
6464
'share_type' => 'integer',
6565
'owner' => 'string',
66+
'creation_time' => 'integer',
6667
'upload_time' => 'integer',
6768
];
6869

@@ -257,6 +258,7 @@ private function validateComparison(ISearchComparison $operator) {
257258
'share_with' => ['eq'],
258259
'share_type' => ['eq'],
259260
'owner' => ['eq'],
261+
'creation_time' => ['eq', 'gt', 'lt', 'gte', 'lte'],
260262
'upload_time' => ['eq', 'gt', 'lt', 'gte', 'lte'],
261263
];
262264

0 commit comments

Comments
 (0)