From 229a3bbf0a7dc984d2ddcfe3de5f97764d1ca7f4 Mon Sep 17 00:00:00 2001 From: Cristian Scheid Date: Mon, 23 Mar 2026 08:58:12 -0300 Subject: [PATCH] feat(file-info): encapsulate logic to get last activity in getLastActivity function Signed-off-by: Cristian Scheid --- apps/dav/lib/Connector/Sabre/FilesPlugin.php | 3 +-- apps/dav/lib/Files/FileSearchBackend.php | 2 +- apps/files_trashbin/lib/Trash/TrashItem.php | 4 ++++ lib/private/Files/FileInfo.php | 4 ++++ lib/private/Files/Node/LazyFolder.php | 7 +++++++ lib/private/Files/Node/Node.php | 4 ++++ lib/private/Files/Search/SearchOrder.php | 4 +--- lib/public/Files/FileInfo.php | 10 ++++++++++ 8 files changed, 32 insertions(+), 6 deletions(-) diff --git a/apps/dav/lib/Connector/Sabre/FilesPlugin.php b/apps/dav/lib/Connector/Sabre/FilesPlugin.php index 17ff62df6c3..9cc6be718d3 100644 --- a/apps/dav/lib/Connector/Sabre/FilesPlugin.php +++ b/apps/dav/lib/Connector/Sabre/FilesPlugin.php @@ -448,8 +448,7 @@ class FilesPlugin extends ServerPlugin { }); $propFind->handle(self::LAST_ACTIVITY_PROPERTYNAME, function () use ($node) { - $fileInfo = $node->getFileInfo(); - return max($fileInfo->getUploadTime(), $fileInfo->getMTime()); + return $node->getFileInfo()->getLastActivity(); }); foreach ($node->getFileInfo()->getMetadata() as $metadataKey => $metadataValue) { diff --git a/apps/dav/lib/Files/FileSearchBackend.php b/apps/dav/lib/Files/FileSearchBackend.php index c14047eef50..16e6e6eb0d2 100644 --- a/apps/dav/lib/Files/FileSearchBackend.php +++ b/apps/dav/lib/Files/FileSearchBackend.php @@ -306,7 +306,7 @@ class FileSearchBackend implements ISearchBackend { case '{http://nextcloud.org/ns}upload_time': return $node->getNode()->getUploadTime(); case '{http://nextcloud.org/ns}last_activity': - return max($node->getNode()->getUploadTime(), $node->getNode()->getMTime()); + return $node->getNode()->getLastActivity(); case FilesPlugin::SIZE_PROPERTYNAME: return $node->getSize(); case FilesPlugin::INTERNAL_FILEID_PROPERTYNAME: diff --git a/apps/files_trashbin/lib/Trash/TrashItem.php b/apps/files_trashbin/lib/Trash/TrashItem.php index 70d5164747f..120d08bcd7c 100644 --- a/apps/files_trashbin/lib/Trash/TrashItem.php +++ b/apps/files_trashbin/lib/Trash/TrashItem.php @@ -154,6 +154,10 @@ class TrashItem implements ITrashItem { return $this->fileInfo->getUploadTime(); } + public function getLastActivity(): int { + return $this->fileInfo->getLastActivity(); + } + public function getParentId(): int { return $this->fileInfo->getParentId(); } diff --git a/lib/private/Files/FileInfo.php b/lib/private/Files/FileInfo.php index 967d404b8a4..6892069a383 100644 --- a/lib/private/Files/FileInfo.php +++ b/lib/private/Files/FileInfo.php @@ -379,6 +379,10 @@ class FileInfo implements \OCP\Files\FileInfo, \ArrayAccess { return (int)$this->data['upload_time']; } + public function getLastActivity(): int { + return max($this->getUploadTime(), $this->getMTime()); + } + public function getParentId(): int { return $this->data['parent'] ?? -1; } diff --git a/lib/private/Files/Node/LazyFolder.php b/lib/private/Files/Node/LazyFolder.php index c23a7d03ada..b73880cabd2 100644 --- a/lib/private/Files/Node/LazyFolder.php +++ b/lib/private/Files/Node/LazyFolder.php @@ -546,6 +546,13 @@ class LazyFolder implements Folder { return $this->__call(__FUNCTION__, func_get_args()); } + /** + * @inheritDoc + */ + public function getLastActivity(): int { + return $this->__call(__FUNCTION__, func_get_args()); + } + public function getRelativePath($path) { return PathHelper::getRelativePath($this->getPath(), $path); } diff --git a/lib/private/Files/Node/Node.php b/lib/private/Files/Node/Node.php index fd8d84883d9..bccde5de990 100644 --- a/lib/private/Files/Node/Node.php +++ b/lib/private/Files/Node/Node.php @@ -475,6 +475,10 @@ class Node implements INode { return $this->getFileInfo()->getUploadTime(); } + public function getLastActivity(): int { + return $this->getFileInfo()->getLastActivity(); + } + public function getParentId(): int { return $this->fileInfo->getParentId(); } diff --git a/lib/private/Files/Search/SearchOrder.php b/lib/private/Files/Search/SearchOrder.php index 3d3b9cb8464..67bc4bb566b 100644 --- a/lib/private/Files/Search/SearchOrder.php +++ b/lib/private/Files/Search/SearchOrder.php @@ -59,9 +59,7 @@ class SearchOrder implements ISearchOrder { case 'permissions': return $a->getPermissions() <=> $b->getPermissions(); case 'last_activity': - $timeA = max($a->getUploadTime(), $a->getMtime()); - $timeB = max($b->getUploadTime(), $b->getMtime()); - return $timeA <=> $timeB; + return $a->getLastActivity() <=> $b->getLastActivity(); default: return 0; } diff --git a/lib/public/Files/FileInfo.php b/lib/public/Files/FileInfo.php index 95419d6354a..942e4f51c31 100644 --- a/lib/public/Files/FileInfo.php +++ b/lib/public/Files/FileInfo.php @@ -282,6 +282,16 @@ interface FileInfo { */ public function getUploadTime(): int; + /** + * Get the last activity date as unix timestamp + * + * Last activity is the more recent of the upload time and the modification time + * + * @return int + * @since 34.0.0 + */ + public function getLastActivity(): int; + /** * Get the fileid or the parent folder * or -1 if this item has no parent folder (because it is the root)