diff --git a/src-ui/src/app/components/admin/tasks/tasks.component.html b/src-ui/src/app/components/admin/tasks/tasks.component.html
index 418dfa8fa..934e9007f 100644
--- a/src-ui/src/app/components/admin/tasks/tasks.component.html
+++ b/src-ui/src/app/components/admin/tasks/tasks.component.html
@@ -76,33 +76,27 @@
-
{{ task.task_file_name }} |
+ {{ task.input_data?.filename }} |
{{ task.date_created | customDate:'short' }} |
@if (activeTab !== 'started' && activeTab !== 'queued') {
- @if (task.result?.length > 50) {
+ @if (task.result_message?.length > 50) {
- {{ task.result | slice:0:50 }}…
+ {{ task.result_message | slice:0:50 }}…
}
- @if (task.result?.length <= 50) {
- {{ task.result }}
+ @if (task.result_message?.length <= 50) {
+ {{ task.result_message }}
}
- {{ task.result | slice:0:300 }}@if (task.result.length > 300) {
+ {{ task.result_message | slice:0:300 }}@if (task.result_message.length > 300) {
…
}
- @if (task.result?.length > 300) {
+ @if (task.result_message?.length > 300) {
(click for full output)
}
- @if (task.duplicate_documents?.length > 0) {
-
-
- Duplicate(s) detected
-
- }
|
}
@@ -116,7 +110,7 @@
Dismiss
- @if (task.related_document) {
+ @if (task.related_document_ids?.[0]) {
@@ -127,7 +121,7 @@
- {{ task.result }}
+ {{ task.result_message }}
|
}
diff --git a/src-ui/src/app/components/admin/tasks/tasks.component.spec.ts b/src-ui/src/app/components/admin/tasks/tasks.component.spec.ts
index 1a085150e..4c85c939e 100644
--- a/src-ui/src/app/components/admin/tasks/tasks.component.spec.ts
+++ b/src-ui/src/app/components/admin/tasks/tasks.component.spec.ts
@@ -20,8 +20,8 @@ import { throwError } from 'rxjs'
import { routes } from 'src/app/app-routing.module'
import {
PaperlessTask,
- PaperlessTaskName,
PaperlessTaskStatus,
+ PaperlessTaskTriggerSource,
PaperlessTaskType,
} from 'src/app/data/paperless-task'
import { IfPermissionsDirective } from 'src/app/directives/if-permissions.directive'
@@ -39,81 +39,100 @@ const tasks: PaperlessTask[] = [
{
id: 467,
task_id: '11ca1a5b-9f81-442c-b2c8-7e4ae53657f1',
- task_file_name: 'test.pdf',
+ input_data: { filename: 'test.pdf' },
date_created: new Date('2023-03-01T10:26:03.093116Z'),
date_done: new Date('2023-03-01T10:26:07.223048Z'),
- type: PaperlessTaskType.Auto,
- task_name: PaperlessTaskName.ConsumeFile,
- status: PaperlessTaskStatus.Failed,
- result: 'test.pd: Not consuming test.pdf: It is a duplicate of test (#100)',
+ task_type: PaperlessTaskType.ConsumeFile,
+ task_type_display: 'Consume File',
+ trigger_source: PaperlessTaskTriggerSource.FolderConsume,
+ trigger_source_display: 'Folder Consume',
+ status: PaperlessTaskStatus.Failure,
+ status_display: 'Failure',
+ result_message:
+ 'test.pd: Not consuming test.pdf: It is a duplicate of test (#100)',
acknowledged: false,
- related_document: null,
+ related_document_ids: [],
},
{
id: 466,
task_id: '10ca1a5b-3c08-442c-b2c8-7e4ae53657f1',
- task_file_name: '191092.pdf',
+ input_data: { filename: '191092.pdf' },
date_created: new Date('2023-03-01T09:26:03.093116Z'),
date_done: new Date('2023-03-01T09:26:07.223048Z'),
- type: PaperlessTaskType.Auto,
- task_name: PaperlessTaskName.ConsumeFile,
- status: PaperlessTaskStatus.Failed,
- result:
+ task_type: PaperlessTaskType.ConsumeFile,
+ task_type_display: 'Consume File',
+ trigger_source: PaperlessTaskTriggerSource.FolderConsume,
+ trigger_source_display: 'Folder Consume',
+ status: PaperlessTaskStatus.Failure,
+ status_display: 'Failure',
+ result_message:
'191092.pd: Not consuming 191092.pdf: It is a duplicate of 191092 (#311)',
acknowledged: false,
- related_document: null,
+ related_document_ids: [],
},
{
id: 465,
task_id: '3612d477-bb04-44e3-985b-ac580dd496d8',
- task_file_name: 'Scan Jun 6, 2023 at 3.19 PM.pdf',
+ input_data: { filename: 'Scan Jun 6, 2023 at 3.19 PM.pdf' },
date_created: new Date('2023-06-06T15:22:05.722323-07:00'),
date_done: new Date('2023-06-06T15:22:14.564305-07:00'),
- type: PaperlessTaskType.Auto,
- task_name: PaperlessTaskName.ConsumeFile,
+ task_type: PaperlessTaskType.ConsumeFile,
+ task_type_display: 'Consume File',
+ trigger_source: PaperlessTaskTriggerSource.FolderConsume,
+ trigger_source_display: 'Folder Consume',
status: PaperlessTaskStatus.Pending,
- result: null,
+ status_display: 'Pending',
+ result_message: null,
acknowledged: false,
- related_document: null,
+ related_document_ids: [],
},
{
id: 464,
task_id: '2eac4716-2aa6-4dcd-9953-264e11656d7e',
- task_file_name: 'paperless-mail-l4dkg8ir',
+ input_data: { filename: 'paperless-mail-l4dkg8ir' },
date_created: new Date('2023-06-04T11:24:32.898089-07:00'),
date_done: new Date('2023-06-04T11:24:44.678605-07:00'),
- type: PaperlessTaskType.Auto,
- task_name: PaperlessTaskName.ConsumeFile,
- status: PaperlessTaskStatus.Complete,
- result: 'Success. New document id 422 created',
+ task_type: PaperlessTaskType.ConsumeFile,
+ task_type_display: 'Consume File',
+ trigger_source: PaperlessTaskTriggerSource.EmailConsume,
+ trigger_source_display: 'Email Consume',
+ status: PaperlessTaskStatus.Success,
+ status_display: 'Success',
+ result_message: 'Success. New document id 422 created',
acknowledged: false,
- related_document: 422,
+ related_document_ids: [422],
},
{
id: 463,
task_id: '28125528-1575-4d6b-99e6-168906e8fa5c',
- task_file_name: 'onlinePaymentSummary.pdf',
+ input_data: { filename: 'onlinePaymentSummary.pdf' },
date_created: new Date('2023-06-01T13:49:51.631305-07:00'),
date_done: new Date('2023-06-01T13:49:54.190220-07:00'),
- type: PaperlessTaskType.Auto,
- task_name: PaperlessTaskName.ConsumeFile,
- status: PaperlessTaskStatus.Complete,
- result: 'Success. New document id 421 created',
+ task_type: PaperlessTaskType.ConsumeFile,
+ task_type_display: 'Consume File',
+ trigger_source: PaperlessTaskTriggerSource.FolderConsume,
+ trigger_source_display: 'Folder Consume',
+ status: PaperlessTaskStatus.Success,
+ status_display: 'Success',
+ result_message: 'Success. New document id 421 created',
acknowledged: false,
- related_document: 421,
+ related_document_ids: [421],
},
{
id: 462,
task_id: 'a5b9ca47-0c8e-490f-a04c-6db5d5fc09e5',
- task_file_name: 'paperless-mail-_rrpmqk6',
+ input_data: { filename: 'paperless-mail-_rrpmqk6' },
date_created: new Date('2023-06-07T02:54:35.694916Z'),
date_done: null,
- type: PaperlessTaskType.Auto,
- task_name: PaperlessTaskName.ConsumeFile,
+ task_type: PaperlessTaskType.ConsumeFile,
+ task_type_display: 'Consume File',
+ trigger_source: PaperlessTaskTriggerSource.EmailConsume,
+ trigger_source_display: 'Email Consume',
status: PaperlessTaskStatus.Started,
- result: null,
+ status_display: 'Started',
+ result_message: null,
acknowledged: false,
- related_document: null,
+ related_document_ids: [],
},
]
@@ -167,7 +186,7 @@ describe('TasksComponent', () => {
fixture.detectChanges()
httpTestingController
.expectOne(
- `${environment.apiBaseUrl}tasks/?task_name=consume_file&acknowledged=false`
+ `${environment.apiBaseUrl}tasks/?task_type=consume_file&acknowledged=false`
)
.flush(tasks)
})
@@ -176,7 +195,7 @@ describe('TasksComponent', () => {
const tabButtons = fixture.debugElement.queryAll(By.directive(NgbNavItem))
let currentTasksLength = tasks.filter(
- (t) => t.status === PaperlessTaskStatus.Failed
+ (t) => t.status === PaperlessTaskStatus.Failure
).length
component.activeTab = TaskTab.Failed
fixture.detectChanges()
@@ -188,7 +207,7 @@ describe('TasksComponent', () => {
).toHaveLength(currentTasksLength + 1)
currentTasksLength = tasks.filter(
- (t) => t.status === PaperlessTaskStatus.Complete
+ (t) => t.status === PaperlessTaskStatus.Success
).length
component.activeTab = TaskTab.Completed
fixture.detectChanges()
@@ -308,7 +327,7 @@ describe('TasksComponent', () => {
expect(component.selectedTasks).toEqual(
new Set(
tasks
- .filter((t) => t.status === PaperlessTaskStatus.Failed)
+ .filter((t) => t.status === PaperlessTaskStatus.Failure)
.map((t) => t.id)
)
)
@@ -322,7 +341,7 @@ describe('TasksComponent', () => {
component.dismissAndGo(tasks[3])
expect(routerSpy).toHaveBeenCalledWith([
'documents',
- tasks[3].related_document,
+ tasks[3].related_document_ids?.[0],
])
})
diff --git a/src-ui/src/app/components/admin/tasks/tasks.component.ts b/src-ui/src/app/components/admin/tasks/tasks.component.ts
index 6f144c58c..decba1eb8 100644
--- a/src-ui/src/app/components/admin/tasks/tasks.component.ts
+++ b/src-ui/src/app/components/admin/tasks/tasks.component.ts
@@ -175,7 +175,7 @@ export class TasksComponent
dismissAndGo(task: PaperlessTask) {
this.dismissTask(task)
- this.router.navigate(['documents', task.related_document])
+ this.router.navigate(['documents', task.related_document_ids?.[0]])
}
expandTask(task: PaperlessTask) {
@@ -207,11 +207,13 @@ export class TasksComponent
if (this._filterText.length) {
tasks = tasks.filter((t) => {
if (this.filterTargetID == TaskFilterTargetID.Name) {
- return t.task_file_name
- .toLowerCase()
+ return (t.input_data?.filename as string)
+ ?.toLowerCase()
.includes(this._filterText.toLowerCase())
} else if (this.filterTargetID == TaskFilterTargetID.Result) {
- return t.result.toLowerCase().includes(this._filterText.toLowerCase())
+ return t.result_message
+ ?.toLowerCase()
+ .includes(this._filterText.toLowerCase())
}
})
}
diff --git a/src-ui/src/app/components/common/system-status-dialog/system-status-dialog.component.html b/src-ui/src/app/components/common/system-status-dialog/system-status-dialog.component.html
index 636e574f5..5ec800b2e 100644
--- a/src-ui/src/app/components/common/system-status-dialog/system-status-dialog.component.html
+++ b/src-ui/src/app/components/common/system-status-dialog/system-status-dialog.component.html
@@ -169,10 +169,10 @@
}
@if (currentUserIsSuperUser) {
- @if (isRunning(PaperlessTaskName.IndexOptimize)) {
+ @if (isRunning(PaperlessTaskType.IndexOptimize)) {
} @else {
-
@if (currentUserIsSuperUser) {
- @if (isRunning(PaperlessTaskName.TrainClassifier)) {
+ @if (isRunning(PaperlessTaskType.TrainClassifier)) {
} @else {
-
+
Run Task
@@ -237,10 +237,10 @@
}
@if (currentUserIsSuperUser) {
- @if (isRunning(PaperlessTaskName.SanityCheck)) {
+ @if (isRunning(PaperlessTaskType.SanityCheck)) {
} @else {
-
+
Run Task
@@ -285,10 +285,10 @@
}
@if (currentUserIsSuperUser) {
- @if (isRunning(PaperlessTaskName.LLMIndexUpdate)) {
+ @if (isRunning(PaperlessTaskType.LlmIndex)) {
} @else {
-
+
Run Task
diff --git a/src-ui/src/app/components/common/system-status-dialog/system-status-dialog.component.spec.ts b/src-ui/src/app/components/common/system-status-dialog/system-status-dialog.component.spec.ts
index 0fd331b10..58310be8f 100644
--- a/src-ui/src/app/components/common/system-status-dialog/system-status-dialog.component.spec.ts
+++ b/src-ui/src/app/components/common/system-status-dialog/system-status-dialog.component.spec.ts
@@ -25,7 +25,7 @@ import {
import { NgbActiveModal } from '@ng-bootstrap/ng-bootstrap'
import { NgxBootstrapIconsModule, allIcons } from 'ngx-bootstrap-icons'
import { Subject, of, throwError } from 'rxjs'
-import { PaperlessTaskName } from 'src/app/data/paperless-task'
+import { PaperlessTaskType } from 'src/app/data/paperless-task'
import {
InstallType,
SystemStatus,
@@ -138,9 +138,9 @@ describe('SystemStatusDialogComponent', () => {
})
it('should check if task is running', () => {
- component.runTask(PaperlessTaskName.IndexOptimize)
- expect(component.isRunning(PaperlessTaskName.IndexOptimize)).toBeTruthy()
- expect(component.isRunning(PaperlessTaskName.SanityCheck)).toBeFalsy()
+ component.runTask(PaperlessTaskType.IndexOptimize)
+ expect(component.isRunning(PaperlessTaskType.IndexOptimize)).toBeTruthy()
+ expect(component.isRunning(PaperlessTaskType.SanityCheck)).toBeFalsy()
})
it('should support running tasks, refresh status and show toasts', () => {
@@ -151,22 +151,22 @@ describe('SystemStatusDialogComponent', () => {
// fail first
runSpy.mockReturnValue(throwError(() => new Error('error')))
- component.runTask(PaperlessTaskName.IndexOptimize)
- expect(runSpy).toHaveBeenCalledWith(PaperlessTaskName.IndexOptimize)
+ component.runTask(PaperlessTaskType.IndexOptimize)
+ expect(runSpy).toHaveBeenCalledWith(PaperlessTaskType.IndexOptimize)
expect(toastErrorSpy).toHaveBeenCalledWith(
- `Failed to start task ${PaperlessTaskName.IndexOptimize}, see the logs for more details`,
+ `Failed to start task ${PaperlessTaskType.IndexOptimize}, see the logs for more details`,
expect.any(Error)
)
// succeed
runSpy.mockReturnValue(of({}))
getStatusSpy.mockReturnValue(of(status))
- component.runTask(PaperlessTaskName.IndexOptimize)
- expect(runSpy).toHaveBeenCalledWith(PaperlessTaskName.IndexOptimize)
+ component.runTask(PaperlessTaskType.IndexOptimize)
+ expect(runSpy).toHaveBeenCalledWith(PaperlessTaskType.IndexOptimize)
expect(getStatusSpy).toHaveBeenCalled()
expect(toastSpy).toHaveBeenCalledWith(
- `Task ${PaperlessTaskName.IndexOptimize} started`
+ `Task ${PaperlessTaskType.IndexOptimize} started`
)
})
diff --git a/src-ui/src/app/components/common/system-status-dialog/system-status-dialog.component.ts b/src-ui/src/app/components/common/system-status-dialog/system-status-dialog.component.ts
index d53bb74bf..88426186c 100644
--- a/src-ui/src/app/components/common/system-status-dialog/system-status-dialog.component.ts
+++ b/src-ui/src/app/components/common/system-status-dialog/system-status-dialog.component.ts
@@ -8,7 +8,7 @@ import {
} from '@ng-bootstrap/ng-bootstrap'
import { NgxBootstrapIconsModule } from 'ngx-bootstrap-icons'
import { Subject, takeUntil } from 'rxjs'
-import { PaperlessTaskName } from 'src/app/data/paperless-task'
+import { PaperlessTaskType } from 'src/app/data/paperless-task'
import {
SystemStatus,
SystemStatusItemStatus,
@@ -49,14 +49,14 @@ export class SystemStatusDialogComponent implements OnInit, OnDestroy {
private settingsService = inject(SettingsService)
public SystemStatusItemStatus = SystemStatusItemStatus
- public PaperlessTaskName = PaperlessTaskName
+ public PaperlessTaskType = PaperlessTaskType
public status: SystemStatus
public frontendVersion: string = environment.version
public versionMismatch: boolean = false
public copied: boolean = false
- private runningTasks: Set = new Set()
+ private runningTasks: Set = new Set()
private unsubscribeNotifier: Subject = new Subject()
get currentUserIsSuperUser(): boolean {
@@ -107,11 +107,11 @@ export class SystemStatusDialogComponent implements OnInit, OnDestroy {
return now.getTime() - date.getTime() > hours * 60 * 60 * 1000
}
- public isRunning(taskName: PaperlessTaskName): boolean {
+ public isRunning(taskName: PaperlessTaskType): boolean {
return this.runningTasks.has(taskName)
}
- public runTask(taskName: PaperlessTaskName) {
+ public runTask(taskName: PaperlessTaskType) {
this.runningTasks.add(taskName)
this.toastService.showInfo(`Task ${taskName} started`)
this.tasksService.run(taskName).subscribe({
diff --git a/src-ui/src/app/data/paperless-task.ts b/src-ui/src/app/data/paperless-task.ts
index 19dd3921e..f44b5a6f4 100644
--- a/src-ui/src/app/data/paperless-task.ts
+++ b/src-ui/src/app/data/paperless-task.ts
@@ -1,49 +1,63 @@
-import { Document } from './document'
import { ObjectWithId } from './object-with-id'
export enum PaperlessTaskType {
- Auto = 'auto_task',
- ScheduledTask = 'scheduled_task',
- ManualTask = 'manual_task',
-}
-
-export enum PaperlessTaskName {
ConsumeFile = 'consume_file',
TrainClassifier = 'train_classifier',
- SanityCheck = 'check_sanity',
+ SanityCheck = 'sanity_check',
IndexOptimize = 'index_optimize',
- LLMIndexUpdate = 'llmindex_update',
+ IndexRebuild = 'index_rebuild',
+ MailFetch = 'mail_fetch',
+ LlmIndex = 'llm_index',
+}
+
+export enum PaperlessTaskTriggerSource {
+ Scheduled = 'scheduled',
+ WebUI = 'web_ui',
+ ApiUpload = 'api_upload',
+ FolderConsume = 'folder_consume',
+ EmailConsume = 'email_consume',
+ System = 'system',
+ Manual = 'manual',
}
export enum PaperlessTaskStatus {
- Pending = 'PENDING',
- Started = 'STARTED',
- Complete = 'SUCCESS',
- Failed = 'FAILURE',
+ Pending = 'pending',
+ Started = 'started',
+ Success = 'success',
+ Failure = 'failure',
+ Revoked = 'revoked',
}
export interface PaperlessTask extends ObjectWithId {
- type: PaperlessTaskType
-
- status: PaperlessTaskStatus
-
- acknowledged: boolean
-
task_id: string
-
- task_file_name: string
-
- task_name: PaperlessTaskName
-
+ task_type: PaperlessTaskType
+ task_type_display: string
+ trigger_source: PaperlessTaskTriggerSource
+ trigger_source_display: string
+ status: PaperlessTaskStatus
+ status_display: string
date_created: Date
-
+ date_started?: Date
date_done?: Date
-
- result?: string
-
- related_document?: number
-
- duplicate_documents?: Document[]
-
+ duration_seconds?: number
+ wait_time_seconds?: number
+ input_data: Record
+ result_data?: Record
+ result_message?: string
+ related_document_ids: number[]
+ acknowledged: boolean
owner?: number
}
+
+export interface PaperlessTaskSummary {
+ task_type: PaperlessTaskType
+ total_count: number
+ pending_count: number
+ success_count: number
+ failure_count: number
+ avg_duration_seconds: number | null
+ avg_wait_time_seconds: number | null
+ last_run: Date | null
+ last_success: Date | null
+ last_failure: Date | null
+}
diff --git a/src-ui/src/app/services/tasks.service.spec.ts b/src-ui/src/app/services/tasks.service.spec.ts
index 640f84587..09bd29441 100644
--- a/src-ui/src/app/services/tasks.service.spec.ts
+++ b/src-ui/src/app/services/tasks.service.spec.ts
@@ -5,11 +5,7 @@ import {
} from '@angular/common/http/testing'
import { TestBed } from '@angular/core/testing'
import { environment } from 'src/environments/environment'
-import {
- PaperlessTaskName,
- PaperlessTaskStatus,
- PaperlessTaskType,
-} from '../data/paperless-task'
+import { PaperlessTaskStatus, PaperlessTaskType } from '../data/paperless-task'
import { TasksService } from './tasks.service'
describe('TasksService', () => {
@@ -37,7 +33,7 @@ describe('TasksService', () => {
it('calls tasks api endpoint on reload', () => {
tasksService.reload()
const req = httpTestingController.expectOne(
- `${environment.apiBaseUrl}tasks/?task_name=consume_file&acknowledged=false`
+ `${environment.apiBaseUrl}tasks/?task_type=consume_file&acknowledged=false`
)
expect(req.request.method).toEqual('GET')
})
@@ -46,7 +42,7 @@ describe('TasksService', () => {
tasksService.loading = true
tasksService.reload()
httpTestingController.expectNone(
- `${environment.apiBaseUrl}tasks/?task_name=consume_file&acknowledged=false`
+ `${environment.apiBaseUrl}tasks/?task_type=consume_file&acknowledged=false`
)
})
@@ -63,7 +59,7 @@ describe('TasksService', () => {
// reload is then called
httpTestingController
.expectOne(
- `${environment.apiBaseUrl}tasks/?task_name=consume_file&acknowledged=false`
+ `${environment.apiBaseUrl}tasks/?task_type=consume_file&acknowledged=false`
)
.flush([])
})
@@ -72,56 +68,56 @@ describe('TasksService', () => {
expect(tasksService.total).toEqual(0)
const mockTasks = [
{
- type: PaperlessTaskType.Auto,
- task_name: PaperlessTaskName.ConsumeFile,
- status: PaperlessTaskStatus.Complete,
+ task_type: PaperlessTaskType.ConsumeFile,
+ status: PaperlessTaskStatus.Success,
acknowledged: false,
task_id: '1234',
- task_file_name: 'file1.pdf',
+ input_data: { filename: 'file1.pdf' },
date_created: new Date(),
+ related_document_ids: [],
},
{
- type: PaperlessTaskType.Auto,
- task_name: PaperlessTaskName.ConsumeFile,
- status: PaperlessTaskStatus.Failed,
+ task_type: PaperlessTaskType.ConsumeFile,
+ status: PaperlessTaskStatus.Failure,
acknowledged: false,
task_id: '1235',
- task_file_name: 'file2.pdf',
+ input_data: { filename: 'file2.pdf' },
date_created: new Date(),
+ related_document_ids: [],
},
{
- type: PaperlessTaskType.Auto,
- task_name: PaperlessTaskName.ConsumeFile,
+ task_type: PaperlessTaskType.ConsumeFile,
status: PaperlessTaskStatus.Pending,
acknowledged: false,
task_id: '1236',
- task_file_name: 'file3.pdf',
+ input_data: { filename: 'file3.pdf' },
date_created: new Date(),
+ related_document_ids: [],
},
{
- type: PaperlessTaskType.Auto,
- task_name: PaperlessTaskName.ConsumeFile,
+ task_type: PaperlessTaskType.ConsumeFile,
status: PaperlessTaskStatus.Started,
acknowledged: false,
task_id: '1237',
- task_file_name: 'file4.pdf',
+ input_data: { filename: 'file4.pdf' },
date_created: new Date(),
+ related_document_ids: [],
},
{
- type: PaperlessTaskType.Auto,
- task_name: PaperlessTaskName.ConsumeFile,
- status: PaperlessTaskStatus.Complete,
+ task_type: PaperlessTaskType.ConsumeFile,
+ status: PaperlessTaskStatus.Success,
acknowledged: false,
task_id: '1238',
- task_file_name: 'file5.pdf',
+ input_data: { filename: 'file5.pdf' },
date_created: new Date(),
+ related_document_ids: [],
},
]
tasksService.reload()
const req = httpTestingController.expectOne(
- `${environment.apiBaseUrl}tasks/?task_name=consume_file&acknowledged=false`
+ `${environment.apiBaseUrl}tasks/?task_type=consume_file&acknowledged=false`
)
req.flush(mockTasks)
@@ -134,9 +130,9 @@ describe('TasksService', () => {
})
it('supports running tasks', () => {
- tasksService.run(PaperlessTaskName.SanityCheck).subscribe((res) => {
+ tasksService.run(PaperlessTaskType.SanityCheck).subscribe((res) => {
expect(res).toEqual({
- result: 'success',
+ task_id: 'abc-123',
})
})
const req = httpTestingController.expectOne(
@@ -144,7 +140,7 @@ describe('TasksService', () => {
)
expect(req.request.method).toEqual('POST')
req.flush({
- result: 'success',
+ task_id: 'abc-123',
})
})
})
diff --git a/src-ui/src/app/services/tasks.service.ts b/src-ui/src/app/services/tasks.service.ts
index 305258d7b..87a15edd9 100644
--- a/src-ui/src/app/services/tasks.service.ts
+++ b/src-ui/src/app/services/tasks.service.ts
@@ -4,8 +4,8 @@ import { Observable, Subject } from 'rxjs'
import { first, takeUntil, tap } from 'rxjs/operators'
import {
PaperlessTask,
- PaperlessTaskName,
PaperlessTaskStatus,
+ PaperlessTaskType,
} from 'src/app/data/paperless-task'
import { environment } from 'src/environments/environment'
@@ -18,7 +18,7 @@ export class TasksService {
private baseUrl: string = environment.apiBaseUrl
private endpoint: string = 'tasks'
- public loading: boolean
+ public loading: boolean = false
private fileTasks: PaperlessTask[] = []
@@ -33,21 +33,27 @@ export class TasksService {
}
public get queuedFileTasks(): PaperlessTask[] {
- return this.fileTasks.filter((t) => t.status == PaperlessTaskStatus.Pending)
+ return this.fileTasks.filter(
+ (t) => t.status === PaperlessTaskStatus.Pending
+ )
}
public get startedFileTasks(): PaperlessTask[] {
- return this.fileTasks.filter((t) => t.status == PaperlessTaskStatus.Started)
+ return this.fileTasks.filter(
+ (t) => t.status === PaperlessTaskStatus.Started
+ )
}
public get completedFileTasks(): PaperlessTask[] {
return this.fileTasks.filter(
- (t) => t.status == PaperlessTaskStatus.Complete
+ (t) => t.status === PaperlessTaskStatus.Success
)
}
public get failedFileTasks(): PaperlessTask[] {
- return this.fileTasks.filter((t) => t.status == PaperlessTaskStatus.Failed)
+ return this.fileTasks.filter(
+ (t) => t.status === PaperlessTaskStatus.Failure
+ )
}
public reload() {
@@ -56,18 +62,16 @@ export class TasksService {
this.http
.get(
- `${this.baseUrl}${this.endpoint}/?task_name=consume_file&acknowledged=false`
+ `${this.baseUrl}${this.endpoint}/?task_type=${PaperlessTaskType.ConsumeFile}&acknowledged=false`
)
.pipe(takeUntil(this.unsubscribeNotifer), first())
.subscribe((r) => {
- this.fileTasks = r.filter(
- (t) => t.task_name == PaperlessTaskName.ConsumeFile
- )
+ this.fileTasks = r
this.loading = false
})
}
- public dismissTasks(task_ids: Set) {
+ public dismissTasks(task_ids: Set): Observable {
return this.http
.post(`${this.baseUrl}tasks/acknowledge/`, {
tasks: [...task_ids],
@@ -81,16 +85,24 @@ export class TasksService {
)
}
+ public dismissAllTasks(): Observable {
+ return this.http.post(`${this.baseUrl}tasks/acknowledge_all/`, {}).pipe(
+ first(),
+ takeUntil(this.unsubscribeNotifer),
+ tap(() => {
+ this.reload()
+ })
+ )
+ }
+
public cancelPending(): void {
this.unsubscribeNotifer.next(true)
}
- public run(taskName: PaperlessTaskName): Observable {
- return this.http.post(
+ public run(taskType: PaperlessTaskType): Observable<{ task_id: string }> {
+ return this.http.post<{ task_id: string }>(
`${environment.apiBaseUrl}${this.endpoint}/run/`,
- {
- task_name: taskName,
- }
+ { task_type: taskType }
)
}
}
|