feat: Check upload directory share state

Signed-off-by: Louis Chemineau <louis@chmn.me>
This commit is contained in:
Louis Chemineau 2024-09-25 16:28:25 +02:00 коммит произвёл Louis
Родитель 8fe135ca0d
Коммит 3d5562b837
2 изменённых файлов: 41 добавлений и 13 удалений

Просмотреть файл

@ -14,6 +14,7 @@ use OCA\Photos\Album\AlbumMapper;
use OCA\Photos\Album\AlbumWithFiles;
use OCA\Photos\Service\UserConfigService;
use OCP\Files\Folder;
use OCP\Files\InvalidDirectoryException;
use OCP\Files\IRootFolder;
use OCP\Files\NotFoundException;
use Sabre\DAV\Exception\Conflict;
@ -81,6 +82,10 @@ class AlbumRoot implements ICollection, ICopyTarget {
throw new Conflict('The destination exists and is not a folder');
}
if ($photosFolder->isShared()) {
throw new InvalidDirectoryException('The destination is a received share');
}
// Check for conflict and rename the file accordingly
$newName = $photosFolder->getNonExistingName($name);

Просмотреть файл

@ -43,18 +43,25 @@
<!-- The actions on the bottom -->
<template #actions>
<UploadPicker :accept="allowedMimes"
:context="uploadContext"
:destination="photosLocationFolder"
:multiple="true"
@uploaded="refreshFiles" />
<NcButton type="primary" :disabled="loading || selectedFileIds.length === 0" @click="emitPickedEvent">
<template #icon>
<ImagePlus v-if="!loading" />
<NcLoadingIcon v-if="loading" />
</template>
{{ t('photos', 'Add to {destination}', { destination }) }}
</NcButton>
<div class="photos-picker__actions">
<div class="photos-picker__actions__buttons">
<UploadPicker :accept="allowedMimes"
:context="uploadContext"
:destination="photosLocationFolder"
:multiple="true"
@uploaded="refreshFiles" />
<NcButton type="primary" :disabled="loading || selectedFileIds.length === 0" @click="emitPickedEvent">
<template #icon>
<ImagePlus v-if="!loading" />
<NcLoadingIcon v-if="loading" />
</template>
{{ t('photos', 'Add to {destination}', { destination }) }}
</NcButton>
</div>
<NcNoteCard v-if="photosLocationFolder.attributes['owner-id'] !== currentUser" type="warning">
{{ t('photos', 'The destination folder is owned by {owner}', { owner: photosLocationFolder.attributes['owner-id'] }) }}
</NcNoteCard>
</div>
</template>
<FilesListViewer class="photos-picker__file-list"
@ -89,11 +96,12 @@
<script>
import { UploadPicker } from '@nextcloud/upload'
import { NcButton, NcDialog, NcLoadingIcon, NcSelect, useIsMobile } from '@nextcloud/vue'
import { NcButton, NcDialog, NcLoadingIcon, NcSelect, NcNoteCard, useIsMobile } from '@nextcloud/vue'
import { defineComponent } from 'vue'
import { mapGetters } from 'vuex'
import moment from '@nextcloud/moment'
import { getCurrentUser } from '@nextcloud/auth'
import ImagePlus from 'vue-material-design-icons/ImagePlus.vue'
@ -116,6 +124,7 @@ export default defineComponent({
NcDialog,
NcLoadingIcon,
NcSelect,
NcNoteCard,
UploadPicker,
},
@ -176,6 +185,7 @@ export default defineComponent({
uploadContext: {
route: 'albumpicker',
},
currentUser: getCurrentUser(),
}
},
@ -280,5 +290,18 @@ export default defineComponent({
justify-content: center;
}
}
&__actions {
display: flex;
flex-direction: column;
flex-grow: 1;
&__buttons {
display: flex;
align-items: center;
justify-content: end;
gap: 16px;
}
}
}
</style>