diff --git a/lib/TInitialState.php b/lib/TInitialState.php index 802deb6a62b..b8a90082be5 100644 --- a/lib/TInitialState.php +++ b/lib/TInitialState.php @@ -98,17 +98,23 @@ protected function publishInitialStateForUser(IUser $user, IRootFolder $rootFold ); $attachmentFolder = $this->talkConfig->getAttachmentFolder($user->getUID()); + $freeSpace = 0; if ($attachmentFolder) { try { $userFolder = $rootFolder->getUserFolder($user->getUID()); - if (!$userFolder->nodeExists($attachmentFolder)) { - $userFolder->newFolder($attachmentFolder); + try { + if (!$userFolder->nodeExists($attachmentFolder)) { + $userFolder->newFolder($attachmentFolder); + } + + $freeSpace = $userFolder->get($attachmentFolder)->getFreeSpace(); + } catch (NotPermittedException $e) { + $attachmentFolder = '/'; + $this->serverConfig->setUserValue($user->getUID(), 'spreed', 'attachment_folder', '/'); + $freeSpace = $userFolder->getFreeSpace(); } - } catch (NotPermittedException $e) { - $attachmentFolder = '/'; - $this->serverConfig->setUserValue($user->getUID(), 'spreed', 'attachment_folder', '/'); } catch (NoUserException $e) { } } @@ -118,6 +124,11 @@ protected function publishInitialStateForUser(IUser $user, IRootFolder $rootFold $attachmentFolder ); + $this->initialState->provideInitialState( + 'attachment_folder_free_space', + $freeSpace + ); + $this->initialState->provideInitialState( 'enable_matterbridge', $this->serverConfig->getAppValue('spreed', 'enable_matterbridge', '0') === '1' @@ -147,6 +158,11 @@ protected function publishInitialStateForGuest(): void { '' ); + $this->initialState->provideInitialState( + 'attachment_folder_free_space', + '' + ); + $this->initialState->provideInitialState( 'enable_matterbridge', false diff --git a/src/components/NewMessageForm/NewMessageForm.vue b/src/components/NewMessageForm/NewMessageForm.vue index 2251aef493f..d2e1963c81b 100644 --- a/src/components/NewMessageForm/NewMessageForm.vue +++ b/src/components/NewMessageForm/NewMessageForm.vue @@ -38,6 +38,7 @@ class="new-message-form" @submit.prevent>
{{ t('spreed', 'Upload new files') }} @@ -195,13 +196,19 @@ export default { return this.$store.getters.getUserId() === null }, - canShareAndUploadFiles() { + canShareFiles() { + return !this.currentUserIsGuest && !this.isReadOnly + }, + + canUploadFiles() { const allowed = getCapabilities()?.spreed?.config?.attachments?.allowed - return allowed && !this.currentUserIsGuest && !this.isReadOnly + return allowed + && this.attachmentFolderFreeSpace !== 0 + && this.canShareFiles }, - attachmentFolder() { - return this.$store.getters.getAttachmentFolder() + attachmentFolderFreeSpace() { + return this.$store.getters.getAttachmentFolderFreeSpace() }, }, diff --git a/src/store/fileUploadStore.js b/src/store/fileUploadStore.js index 03c21591b3f..07a52325f94 100644 --- a/src/store/fileUploadStore.js +++ b/src/store/fileUploadStore.js @@ -31,6 +31,7 @@ import { shareFile } from '../services/filesSharingServices' const state = { attachmentFolder: loadState('spreed', 'attachment_folder'), + attachmentFolderFreeSpace: loadState('spreed', 'attachment_folder_free_space'), uploads: { }, currentUploadId: undefined, @@ -76,6 +77,11 @@ const getters = { return state.attachmentFolder }, + // gets the current attachment folder + getAttachmentFolderFreeSpace: (state) => () => { + return state.attachmentFolderFreeSpace + }, + uploadProgress: (state) => (uploadId, index) => { if (state.uploads[uploadId].files[index]) { return state.uploads[uploadId].files[index].uploadedSize / state.uploads[uploadId].files[index].totalSize * 100