summaryrefslogtreecommitdiffstats
path: root/apps/files/src
diff options
context:
space:
mode:
authorJohn Molakvoæ <skjnldsv@protonmail.com>2021-09-17 09:52:02 +0200
committerJohn Molakvoæ <skjnldsv@protonmail.com>2021-09-17 10:08:32 +0200
commited8aacf415d89859a1cf0b53189bc1a7b4de72bc (patch)
treee2fa7f8de68f4422982d579e09501a15b7912d7a /apps/files/src
parent62a814f4fbdec485e97e6b55a8320a02ced488bb (diff)
downloadnextcloud-server-ed8aacf415d89859a1cf0b53189bc1a7b4de72bc.tar.gz
nextcloud-server-ed8aacf415d89859a1cf0b53189bc1a7b4de72bc.zip
Fix file creation from template without ext
Signed-off-by: John Molakvoæ <skjnldsv@protonmail.com>
Diffstat (limited to 'apps/files/src')
-rw-r--r--apps/files/src/services/Templates.js16
-rw-r--r--apps/files/src/views/TemplatePicker.vue27
2 files changed, 32 insertions, 11 deletions
diff --git a/apps/files/src/services/Templates.js b/apps/files/src/services/Templates.js
index f92747b7282..b466def408f 100644
--- a/apps/files/src/services/Templates.js
+++ b/apps/files/src/services/Templates.js
@@ -27,3 +27,19 @@ export const getTemplates = async function() {
const response = await axios.get(generateOcsUrl('apps/files/api/v1/templates'))
return response.data.ocs.data
}
+
+/**
+ * Create a new file from a specified template
+ *
+ * @param {string} filePath The new file destination path
+ * @param {string} templatePath The template source path
+ * @param {string} templateType The template type e.g 'user'
+ */
+export const createFromTemplate = async function(filePath, templatePath, templateType) {
+ const response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/create'), {
+ filePath,
+ templatePath,
+ templateType,
+ })
+ return response.data.ocs.data
+}
diff --git a/apps/files/src/views/TemplatePicker.vue b/apps/files/src/views/TemplatePicker.vue
index e19c206aad6..7c866db8a58 100644
--- a/apps/files/src/views/TemplatePicker.vue
+++ b/apps/files/src/views/TemplatePicker.vue
@@ -66,14 +66,13 @@
</template>
<script>
-import { generateOcsUrl } from '@nextcloud/router'
+import { normalize } from 'path'
import { showError } from '@nextcloud/dialogs'
-import axios from '@nextcloud/axios'
import EmptyContent from '@nextcloud/vue/dist/Components/EmptyContent'
import Modal from '@nextcloud/vue/dist/Components/Modal'
import { getCurrentDirectory } from '../utils/davUtils'
-import { getTemplates } from '../services/Templates'
+import { createFromTemplate, getTemplates } from '../services/Templates'
import TemplatePreview from '../components/TemplatePreview'
const border = 2
@@ -113,7 +112,9 @@ export default {
* @returns {string}
*/
nameWithoutExt() {
- return this.name.indexOf('.') > -1 ? this.name.split('.').slice(0, -1).join('.') : this.name
+ return this.name.indexOf('.') > -1
+ ? this.name.split('.').slice(0, -1).join('.')
+ : this.name
},
emptyTemplate() {
@@ -198,14 +199,18 @@ export default {
const currentDirectory = getCurrentDirectory()
const fileList = OCA?.Files?.App?.currentFileList
- try {
- const response = await axios.post(generateOcsUrl('apps/files/api/v1/templates/create'), {
- filePath: `${currentDirectory}/${this.name}`,
- templatePath: this.selectedTemplate?.filename,
- templateType: this.selectedTemplate?.templateType,
- })
+ // If the file doesn't have an extension, add the default one
+ if (this.nameWithoutExt === this.name) {
+ this.logger.debug('Fixed invalid filename', { name: this.name, extension: this.provider?.extension })
+ this.name = this.name + this.provider?.extension
+ }
- const fileInfo = response.data.ocs.data
+ try {
+ const fileInfo = await createFromTemplate(
+ normalize(`${currentDirectory}/${this.name}`),
+ this.selectedTemplate?.filename,
+ this.selectedTemplate?.templateType,
+ )
this.logger.debug('Created new file', fileInfo)
await fileList?.addAndFetchFileInfo(this.name)