diff --git a/client/pages/upload/index.vue b/client/pages/upload/index.vue index 547f5b05a..229b00f75 100644 --- a/client/pages/upload/index.vue +++ b/client/pages/upload/index.vue @@ -78,7 +78,11 @@ -
+
+ {{ $strings.ButtonUpload }} {{ $strings.ButtonReset }}
@@ -105,6 +109,7 @@ export default { selectedFolderId: null, processing: false, uploadFinished: false, + uploadChunked: false, fetchMetadata: { enabled: false, provider: null @@ -319,6 +324,39 @@ export default { return false }) }, + async uploadItemChunked(item) { + // upload files + const form = new FormData() + form.set('title', item.title) + form.set('library', this.selectedLibraryId) + form.set('folder', this.selectedFolderId) + if (!this.selectedLibraryIsPodcast) { + form.set('author', item.author || '') + form.set('series', item.series || '') + } + + for (let i = 0; i < item.files.length; i++) { + const file = item.files[i] + + form.set('file', file) + + const success = await this.$axios + .$post(`/api/upload`, form) + .then(() => true) + .catch((error) => { + console.error('Failed', error) + var errorMessage = error.response && error.response.data ? error.response.data : 'Oops, something went wrong...' + this.$toast.error(errorMessage) + return false + }) + + if (!success) { + return false + } + } + + return true + }, validateItems() { var itemData = [] for (var item of this.items) { @@ -379,7 +417,9 @@ export default { let itemsFailed = 0 for (const item of itemsToUpload) { this.updateItemCardStatus(item.index, 'uploading') - const result = await this.uploadItem(item) + const result = this.uploadChunked + ? await this.uploadItemChunked(item) + : await this.uploadItem(item) if (result) itemsUploaded++ else itemsFailed++ this.updateItemCardStatus(item.index, result ? 'success' : 'failed') diff --git a/client/strings/en-us.json b/client/strings/en-us.json index 8fe9d8c7e..7d0298c9b 100644 --- a/client/strings/en-us.json +++ b/client/strings/en-us.json @@ -89,6 +89,7 @@ "ButtonSubmit": "Submit", "ButtonTest": "Test", "ButtonUpload": "Upload", + "LabelUploadChunked": "Upload Chunked", "ButtonUploadBackup": "Upload Backup", "ButtonUploadCover": "Upload Cover", "ButtonUploadOPMLFile": "Upload OPML File", @@ -779,4 +780,4 @@ "ToastSocketFailedToConnect": "Socket failed to connect", "ToastUserDeleteFailed": "Failed to delete user", "ToastUserDeleteSuccess": "User deleted" -} \ No newline at end of file +}