diff options
author | Ferdinand Thiessen <opensource@fthiessen.de> | 2024-08-16 18:17:24 +0200 |
---|---|---|
committer | backportbot[bot] <backportbot[bot]@users.noreply.github.com> | 2024-08-17 16:31:24 +0000 |
commit | 57bd5d06c167371f2a97450220a4e3788f37cb5d (patch) | |
tree | 9f3a9b9179c5f77d2690c925815461296107e857 /apps/files_sharing/src | |
parent | b99c088dc3eff5efa46ebffbf95c903613d24ff2 (diff) | |
download | nextcloud-server-57bd5d06c167371f2a97450220a4e3788f37cb5d.tar.gz nextcloud-server-57bd5d06c167371f2a97450220a4e3788f37cb5d.zip |
fix: Access node owner by top level `owner` property
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Diffstat (limited to 'apps/files_sharing/src')
3 files changed, 27 insertions, 17 deletions
diff --git a/apps/files_sharing/src/actions/sharingStatusAction.ts b/apps/files_sharing/src/actions/sharingStatusAction.ts index 1e25851fa0f..635e9e0d572 100644 --- a/apps/files_sharing/src/actions/sharingStatusAction.ts +++ b/apps/files_sharing/src/actions/sharingStatusAction.ts @@ -26,10 +26,9 @@ export const action = new FileAction({ displayName(nodes: Node[]) { const node = nodes[0] const shareTypes = Object.values(node?.attributes?.['share-types'] || {}).flat() as number[] - const ownerId = node?.attributes?.['owner-id'] if (shareTypes.length > 0 - || (ownerId !== getCurrentUser()?.uid || isExternal(node))) { + || (node.owner !== getCurrentUser()?.uid || isExternal(node))) { return t('files_sharing', 'Shared') } @@ -38,19 +37,32 @@ export const action = new FileAction({ title(nodes: Node[]) { const node = nodes[0] - const ownerId = node?.attributes?.['owner-id'] - const ownerDisplayName = node?.attributes?.['owner-display-name'] - // Mixed share types - if (Array.isArray(node.attributes?.['share-types']) && node.attributes?.['share-types'].length > 1) { + if (node.owner && (node.owner !== getCurrentUser()?.uid || isExternal(node))) { + const ownerDisplayName = node?.attributes?.['owner-display-name'] + return t('files_sharing', 'Shared by {ownerDisplayName}', { ownerDisplayName }) + } + + const shareTypes = Object.values(node?.attributes?.['share-types'] || {}).flat() as number[] + if (shareTypes.length > 1) { return t('files_sharing', 'Shared multiple times with different people') } - if (ownerId && (ownerId !== getCurrentUser()?.uid || isExternal(node))) { - return t('files_sharing', 'Shared by {ownerDisplayName}', { ownerDisplayName }) + const sharees = node.attributes.sharees?.sharee as { id: string, 'display-name': string, type: ShareType }[] | undefined + if (!sharees) { + // No sharees so just show the default message to create a new share + return t('files_sharing', 'Show sharing options') } - return t('files_sharing', 'Show sharing options') + const sharee = [sharees].flat()[0] // the property is sometimes weirdly normalized, so we need to compensate + switch (sharee.type) { + case ShareType.User: + return t('files_sharing', 'Shared with {user}', { user: sharee['display-name'] }) + case ShareType.Group: + return t('files_sharing', 'Shared with group {group}', { group: sharee['display-name'] ?? sharee.id }) + default: + return t('files_sharing', 'Shared with others') + } }, iconSvgInline(nodes: Node[]) { @@ -69,7 +81,7 @@ export const action = new FileAction({ } // Group shares - if (shareTypes.includes(ShareType.Grup) + if (shareTypes.includes(ShareType.Group) || shareTypes.includes(ShareType.RemoteGroup)) { return AccountGroupSvg } @@ -79,9 +91,8 @@ export const action = new FileAction({ return CircleSvg } - const ownerId = node?.attributes?.['owner-id'] - if (ownerId && (ownerId !== getCurrentUser()?.uid || isExternal(node))) { - return generateAvatarSvg(ownerId, isExternal(node)) + if (node.owner && (node.owner !== getCurrentUser()?.uid || isExternal(node))) { + return generateAvatarSvg(node.owner, isExternal(node)) } return AccountPlusSvg @@ -93,7 +104,6 @@ export const action = new FileAction({ } const node = nodes[0] - const ownerId = node?.attributes?.['owner-id'] const shareTypes = node.attributes?.['share-types'] const isMixed = Array.isArray(shareTypes) && shareTypes.length > 0 @@ -104,7 +114,7 @@ export const action = new FileAction({ } // If the node is shared by someone else - if (ownerId && (ownerId !== getCurrentUser()?.uid || isExternal(node))) { + if (node.owner !== getCurrentUser()?.uid || isExternal(node)) { return true } diff --git a/apps/files_sharing/src/components/FileListFilterAccount.vue b/apps/files_sharing/src/components/FileListFilterAccount.vue index 68383735532..11330c500ab 100644 --- a/apps/files_sharing/src/components/FileListFilterAccount.vue +++ b/apps/files_sharing/src/components/FileListFilterAccount.vue @@ -118,7 +118,7 @@ async function updateAvailableAccounts(path: string = '/') { const { contents } = await currentView.value.getContents(path) const available = new Map<string, IUserSelectData>() for (const node of contents) { - const owner = node.owner ?? node.attributes['owner-id'] + const owner = node.owner if (owner && !available.has(owner)) { available.set(owner, { id: owner, diff --git a/apps/files_sharing/src/views/FilesHeaderNoteToRecipient.vue b/apps/files_sharing/src/views/FilesHeaderNoteToRecipient.vue index bb71f0455a2..a8a39c41e5d 100644 --- a/apps/files_sharing/src/views/FilesHeaderNoteToRecipient.vue +++ b/apps/files_sharing/src/views/FilesHeaderNoteToRecipient.vue @@ -29,7 +29,7 @@ import NcUserBubble from '@nextcloud/vue/dist/Components/NcUserBubble.js' const folder = ref<Folder>() const note = computed<string>(() => folder.value?.attributes.note ?? '') const user = computed(() => { - const id = folder.value?.attributes?.['owner-id'] + const id = folder.value?.owner const displayName = folder.value?.attributes?.['owner-display-name'] if (id !== getCurrentUser()?.uid) { return { |