paperless-ngx/src-ui/src/app/services/upload-documents.service.ts

75 lines
2.5 KiB
TypeScript
Raw Normal View History

2022-03-29 23:02:48 -07:00
import { Injectable } from '@angular/core'
import { HttpEventType } from '@angular/common/http'
import { FileSystemFileEntry, NgxFileDropEntry } from 'ngx-file-drop'
import {
ConsumerStatusService,
FileStatusPhase,
} from './consumer-status.service'
import { DocumentService } from './rest/document.service'
2022-04-05 13:29:51 -07:00
import { Subscription } from 'rxjs'
@Injectable({
2022-03-29 23:02:48 -07:00
providedIn: 'root',
})
export class UploadDocumentsService {
2022-04-05 13:29:51 -07:00
private uploadSubscriptions: Array<Subscription> = []
constructor(
private documentService: DocumentService,
private consumerStatusService: ConsumerStatusService
2022-03-29 23:02:48 -07:00
) {}
uploadFiles(files: NgxFileDropEntry[]) {
for (const droppedFile of files) {
if (droppedFile.fileEntry.isFile) {
2022-03-29 23:02:48 -07:00
const fileEntry = droppedFile.fileEntry as FileSystemFileEntry
fileEntry.file((file: File) => {
let formData = new FormData()
formData.append('document', file, file.name)
let status = this.consumerStatusService.newFileUpload(file.name)
status.message = $localize`Connecting...`
2022-04-05 13:29:51 -07:00
this.uploadSubscriptions[file.name] = this.documentService
.uploadDocument(formData)
.subscribe({
next: (event) => {
if (event.type == HttpEventType.UploadProgress) {
status.updateProgress(
FileStatusPhase.UPLOADING,
event.loaded,
event.total
2022-03-29 23:02:48 -07:00
)
2022-04-05 13:29:51 -07:00
status.message = $localize`Uploading...`
} else if (event.type == HttpEventType.Response) {
status.taskId = event.body['task_id']
status.message = $localize`Upload complete, waiting...`
this.uploadSubscriptions[file.name]?.complete()
}
},
error: (error) => {
switch (error.status) {
case 400: {
this.consumerStatusService.fail(
status,
error.error.document
)
break
}
default: {
this.consumerStatusService.fail(
status,
$localize`HTTP error: ${error.status} ${error.statusText}`
)
break
}
2022-03-29 23:02:48 -07:00
}
2022-04-05 13:29:51 -07:00
this.uploadSubscriptions[file.name]?.complete()
},
})
2022-03-29 23:02:48 -07:00
})
}
}
}
}