From 4dee5404c3c5ac820d9506e99d6d98275f1e8141 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 5 Feb 2026 14:55:49 +0100 Subject: [PATCH 1/5] test: Run tests against nextcloud/server#57760 share-update-check-single Signed-off-by: Joas Schilling --- .github/workflows/integration-pgsql.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/integration-pgsql.yml b/.github/workflows/integration-pgsql.yml index 1d757796621..3ca3dcaa26f 100644 --- a/.github/workflows/integration-pgsql.yml +++ b/.github/workflows/integration-pgsql.yml @@ -69,7 +69,7 @@ jobs: - 'sharing-3' - 'sharing-4' php-versions: ['8.3'] - server-versions: ['master'] + server-versions: ['share-update-check-single'] guests-versions: ['main'] circles-versions: ['master'] notifications-versions: ['master'] From 31c83d924d7c59b0a8fd505f57d1826a2bc187b5 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 6 Feb 2026 09:06:21 +0100 Subject: [PATCH 2/5] test: Fix assumption that files are in Talk/ afterwards Signed-off-by: Joas Schilling --- tests/integration/features/sharing-1/create.feature | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/integration/features/sharing-1/create.feature b/tests/integration/features/sharing-1/create.feature index 56ec7538efd..3a0f9342ec5 100644 --- a/tests/integration/features/sharing-1/create.feature +++ b/tests/integration/features/sharing-1/create.feature @@ -350,7 +350,7 @@ Feature: sharing-1/create | item_type | file | | mimetype | text/plain | | storage_id | home::participant2 | - | file_target | /{TALK_PLACEHOLDER}/welcome (2).txt | + | file_target | /Talk/welcome (2).txt | | share_with | group room | | share_with_displayname | Group room | And user "participant3" gets last share From eb84f20e5d0daec93b3051b816af0d73523db6e6 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 6 Feb 2026 15:05:06 +0100 Subject: [PATCH 3/5] fix(sharing): Make sure the share always exists Signed-off-by: Joas Schilling --- lib/Share/RoomShareProvider.php | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/lib/Share/RoomShareProvider.php b/lib/Share/RoomShareProvider.php index 88f76b527c3..d7e5a26f467 100644 --- a/lib/Share/RoomShareProvider.php +++ b/lib/Share/RoomShareProvider.php @@ -831,6 +831,8 @@ private function _getSharedWith( return []; } + $attachmentFolder = null; + /** @var IShare[] $shares */ $shares = []; @@ -857,11 +859,13 @@ private function _getSharedWith( $qb->andWhere($qb->expr()->eq('s.file_source', $qb->createNamedParameter($node->getId()))); } - if ($path !== null) { - $qb->leftJoin('s', 'share', 'sc', $qb->expr()->eq('s.id', 'sc.parent')) - ->andWhere($qb->expr()->eq('sc.share_type', $qb->createNamedParameter(self::SHARE_TYPE_USERROOM))) - ->andWhere($qb->expr()->eq('sc.share_with', $qb->createNamedParameter($userId))); + $qb->leftJoin('s', 'share', 'sc', $qb->expr()->eq('s.id', 'sc.parent')) + ->andWhere($qb->expr()->eq('sc.share_type', $qb->createNamedParameter(self::SHARE_TYPE_USERROOM))) + ->andWhere($qb->expr()->eq('sc.share_with', $qb->createNamedParameter($userId))); + $qb->selectAlias('sc.file_target', 'sc_file_target') + ->selectAlias('sc.permissions', 'sc_permissions'); + if ($path !== null) { if ($forChildren) { $qb->andWhere($qb->expr()->like('sc.file_target', $qb->createNamedParameter($this->dbConnection->escapeLikeParameter($path) . '_%'))); } else { @@ -892,6 +896,16 @@ private function _getSharedWith( $share = $this->createShareObject($data); $shares[$share->getId()] = $share; + + if (array_key_exists('sc_file_target', $data) && $data['sc_file_target'] === null) { + if ($attachmentFolder === null) { + $talkConfig = \OCP\Server::get(\OCA\Talk\Config::class); + $attachmentFolder = $talkConfig->getAttachmentFolder($userId); + } + $share->setTarget(str_replace(self::TALK_FOLDER_PLACEHOLDER, $attachmentFolder, $share->getTarget())); + $share->setPermissions($data['sc_permissions']); + $this->move($share, $userId); + } } $cursor->closeCursor(); } From d7abfdea9f62b96652c217aa82b4142ffda17e09 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 6 Feb 2026 15:25:59 +0100 Subject: [PATCH 4/5] perf(sharing): skip resolveSharesForRecipient when done already Signed-off-by: Joas Schilling --- lib/Share/RoomShareProvider.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/lib/Share/RoomShareProvider.php b/lib/Share/RoomShareProvider.php index d7e5a26f467..644a14e9659 100644 --- a/lib/Share/RoomShareProvider.php +++ b/lib/Share/RoomShareProvider.php @@ -903,15 +903,16 @@ private function _getSharedWith( $attachmentFolder = $talkConfig->getAttachmentFolder($userId); } $share->setTarget(str_replace(self::TALK_FOLDER_PLACEHOLDER, $attachmentFolder, $share->getTarget())); - $share->setPermissions($data['sc_permissions']); + $share->setPermissions((int)$data['sc_permissions']); $this->move($share, $userId); + } else { + $share->setTarget($data['sc_file_target']); + $share->setPermissions((int)$data['sc_permissions']); } } $cursor->closeCursor(); } - $shares = $this->resolveSharesForRecipient($shares, $userId, true); - return $shares; } From fd2f7ea83b67a231a8d6fdf6378975dbc068ddc6 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Sat, 7 Feb 2026 20:27:33 +0100 Subject: [PATCH 5/5] fixup! fix(sharing): Make sure the share always exists --- lib/Share/RoomShareProvider.php | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/Share/RoomShareProvider.php b/lib/Share/RoomShareProvider.php index 644a14e9659..8c3663f992a 100644 --- a/lib/Share/RoomShareProvider.php +++ b/lib/Share/RoomShareProvider.php @@ -903,7 +903,6 @@ private function _getSharedWith( $attachmentFolder = $talkConfig->getAttachmentFolder($userId); } $share->setTarget(str_replace(self::TALK_FOLDER_PLACEHOLDER, $attachmentFolder, $share->getTarget())); - $share->setPermissions((int)$data['sc_permissions']); $this->move($share, $userId); } else { $share->setTarget($data['sc_file_target']);