You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

132 lines
4.8 KiB
TypeScript

// Copyright (C) 2021-2022 Intel Corporation
// Copyright (C) 2022 CVAT.ai Corporation
//
// SPDX-License-Identifier: MIT
import { ActionUnion, createAction, ThunkAction } from 'utils/redux';
import { getCore, Storage } from 'cvat-core-wrapper';
const core = getCore();
export enum ExportActionTypes {
OPEN_EXPORT_DATASET_MODAL = 'OPEN_EXPORT_DATASET_MODAL',
CLOSE_EXPORT_DATASET_MODAL = 'CLOSE_EXPORT_DATASET_MODAL',
EXPORT_DATASET = 'EXPORT_DATASET',
EXPORT_DATASET_SUCCESS = 'EXPORT_DATASET_SUCCESS',
EXPORT_DATASET_FAILED = 'EXPORT_DATASET_FAILED',
OPEN_EXPORT_BACKUP_MODAL = 'OPEN_EXPORT_BACKUP_MODAL',
CLOSE_EXPORT_BACKUP_MODAL = 'CLOSE_EXPORT_BACKUP_MODAL',
EXPORT_BACKUP = 'EXPORT_BACKUP',
EXPORT_BACKUP_SUCCESS = 'EXPORT_BACKUP_SUCCESS',
EXPORT_BACKUP_FAILED = 'EXPORT_BACKUP_FAILED',
}
export const exportActions = {
openExportDatasetModal: (instance: any) => (
createAction(ExportActionTypes.OPEN_EXPORT_DATASET_MODAL, { instance })
),
closeExportDatasetModal: (instance: any) => (
createAction(ExportActionTypes.CLOSE_EXPORT_DATASET_MODAL, { instance })
),
exportDataset: (instance: any, format: string) => (
createAction(ExportActionTypes.EXPORT_DATASET, { instance, format })
),
exportDatasetSuccess: (
instance: any,
instanceType: 'project' | 'task' | 'job',
format: string,
isLocal: boolean,
resource: 'Dataset' | 'Annotations',
) => (
createAction(ExportActionTypes.EXPORT_DATASET_SUCCESS, {
instance,
instanceType,
format,
isLocal,
resource,
})
),
exportDatasetFailed: (instance: any, instanceType: 'project' | 'task' | 'job', format: string, error: any) => (
createAction(ExportActionTypes.EXPORT_DATASET_FAILED, {
instance,
instanceType,
format,
error,
})
),
openExportBackupModal: (instance: any) => (
createAction(ExportActionTypes.OPEN_EXPORT_BACKUP_MODAL, { instance })
),
closeExportBackupModal: (instance: any) => (
createAction(ExportActionTypes.CLOSE_EXPORT_BACKUP_MODAL, { instance })
),
exportBackup: (instance: any) => (
createAction(ExportActionTypes.EXPORT_BACKUP, { instance })
),
exportBackupSuccess: (instance: any, instanceType: 'task' | 'project', isLocal: boolean) => (
createAction(ExportActionTypes.EXPORT_BACKUP_SUCCESS, { instance, instanceType, isLocal })
),
exportBackupFailed: (instance: any, instanceType: 'task' | 'project', error: any) => (
createAction(ExportActionTypes.EXPORT_BACKUP_FAILED, { instance, instanceType, error })
),
};
export const exportDatasetAsync = (
instance: any,
format: string,
saveImages: boolean,
useDefaultSettings: boolean,
targetStorage: Storage,
name?: string,
): ThunkAction => async (dispatch) => {
dispatch(exportActions.exportDataset(instance, format));
let instanceType: 'project' | 'task' | 'job';
if (instance instanceof core.classes.Project) {
instanceType = 'project';
} else if (instance instanceof core.classes.Task) {
instanceType = 'task';
} else {
instanceType = 'job';
}
try {
const result = await instance.annotations
.exportDataset(format, saveImages, useDefaultSettings, targetStorage, name);
if (result) {
const downloadAnchor = window.document.getElementById('downloadAnchor') as HTMLAnchorElement;
downloadAnchor.href = result;
downloadAnchor.click();
}
const resource = saveImages ? 'Dataset' : 'Annotations';
dispatch(exportActions.exportDatasetSuccess(instance, instanceType, format, !!result, resource));
} catch (error) {
dispatch(exportActions.exportDatasetFailed(instance, instanceType, format, error));
}
};
export const exportBackupAsync = (
instance: any,
targetStorage: Storage,
useDefaultSetting: boolean,
fileName?: string,
): ThunkAction => async (dispatch) => {
dispatch(exportActions.exportBackup(instance));
const instanceType = (instance instanceof core.classes.Project) ? 'project' : 'task';
try {
const result = await instance.backup(targetStorage, useDefaultSetting, fileName);
if (result) {
const downloadAnchor = window.document.getElementById('downloadAnchor') as HTMLAnchorElement;
downloadAnchor.href = result;
downloadAnchor.click();
}
dispatch(exportActions.exportBackupSuccess(instance, instanceType, !!result));
} catch (error) {
dispatch(exportActions.exportBackupFailed(instance, instanceType, error as Error));
}
};
export type ExportActions = ActionUnion<typeof exportActions>;