diff --git a/src/create-tasks.ts b/src/create-tasks.ts index 3091dd0..8fad480 100644 --- a/src/create-tasks.ts +++ b/src/create-tasks.ts @@ -1,13 +1,14 @@ import { CommonErrorResponse, + TasksModel, ValidationErrorResponse, + ResponseObject, } from "@crowdin/crowdin-api-client"; import { CrowdinType, createTask, deleteTask, isCommonErrorResponse, - listBranches, listTasks, unwrapErrorResponse, } from "./lib/crowdin"; @@ -20,15 +21,19 @@ export interface CreateTasksOptions { type: "proofread" | "translate"; } +const taskLimit: number = 500; + export default async (options: CreateTasksOptions) => { log.info("Creating tasks..."); - const branches = await listBranches(options.branchName); - const branchId = branches.data[0].data.id; - const tasks = await listTasks({ branchId }); + let tasks: ResponseObject[] = []; + for (let i = 0; tasks.length >= i * taskLimit; i++) { + const moreTasks = await listTasks(i * taskLimit, taskLimit); + tasks = tasks.concat(moreTasks.data); + } await Promise.allSettled( - tasks.data + tasks .filter(task => task.data.fileIds.includes(options.fileId)) .map(task => deleteTask(task.data.id)) ); diff --git a/src/delete-branch.ts b/src/delete-branch.ts index fe4ede8..b0afc76 100644 --- a/src/delete-branch.ts +++ b/src/delete-branch.ts @@ -7,12 +7,15 @@ import { } from "./lib/crowdin"; import { getCrowdinBranchName } from "./utils/get-crowdin-branch-name"; import log from "./utils/logging"; +import { TasksModel, ResponseObject } from "@crowdin/crowdin-api-client"; export interface DeleteBranchOptions { branchName: string; deleteTasks?: boolean; } +const taskLimit: number = 500; + export default async ({ branchName: gitBranchName, deleteTasks, @@ -39,17 +42,28 @@ export default async ({ try { if (deleteTasks) { + log.info("Deleting tasks"); const files = await listFiles(branchId); - const tasks = await listTasks({ branchId }); + if (files?.data.length !== 1) { + return log.error(`Expected 1 file, found ${files?.data.length}`); + } + + let tasks: ResponseObject[] = []; + for (let i = 0; tasks.length >= i * taskLimit; i++) { + const moreTasks = await listTasks(i * taskLimit, taskLimit); + tasks = tasks.concat(moreTasks.data); + } await Promise.allSettled( - tasks.data - .filter(task => { - return task.data.fileIds.some(fileId => - files.data.some(file => file.data.id === fileId) + tasks + .filter(task => task.data.fileIds.includes(files.data[0].data.id)) + .map(task => { + log.info( + `Deleting task: ${task.data.title} - ${task.data.targetLanguageId}` ); + + return deleteTask(task.data.id); }) - .map(task => deleteTask(task.data.id)) ).then(results => results.forEach(result => { if (result.status === "rejected") { diff --git a/src/lib/crowdin.ts b/src/lib/crowdin.ts index 5297513..815bc9d 100644 --- a/src/lib/crowdin.ts +++ b/src/lib/crowdin.ts @@ -193,13 +193,13 @@ export const exportFile = async ( return axios.get(translation.data.url); }; -export const listTasks = (options?: { - branchId: number; -}): Promise> => { +export const listTasks = ( + offset: number = 0, + limit: number = 500 +): Promise> => { return tasksApi.listTasks(CROWDIN_PROJECT_ID, { - limit: 500, - status: TasksModel.Status.TODO, - ...(options || {}), + limit: limit, + offset: offset, }); };