Array of AniList media entries.
Array of media IDs that failed in the previous sync.
The user's authentication token.
Optional
onProgress: (progress: SyncProgress) => voidOptional callback for progress updates.
Optional
abortSignal: AbortSignalOptional abort signal to cancel the retry.
A promise resolving to a SyncReport object.
export async function retryFailedUpdates(
entries: AniListMediaEntry[],
failedMediaIds: number[],
token: string,
onProgress?: (progress: SyncProgress) => void,
abortSignal?: AbortSignal,
): Promise<SyncReport> {
// Filter entries to only include previously failed ones
const entriesToRetry = entries.filter((entry) =>
failedMediaIds.includes(entry.mediaId),
);
console.log(
`🔄 Retrying ${entriesToRetry.length} failed updates out of ${entries.length} total entries`,
);
// Add retry metadata to each entry
entriesToRetry.forEach((entry) => {
// Initialize the syncMetadata if it doesn't exist
if (!entry.syncMetadata) {
entry.syncMetadata = {
useIncrementalSync: false,
targetProgress: entry.progress,
progress: entry.progress,
isRetry: true,
retryTimestamp: Date.now(),
retryCount: 1,
};
} else {
// Update existing syncMetadata
entry.syncMetadata = {
...entry.syncMetadata,
isRetry: true,
retryTimestamp: Date.now(),
retryCount: (entry.syncMetadata.retryCount || 0) + 1,
};
}
});
// Run the sync with only the failed entries
return syncMangaBatch(entriesToRetry, token, onProgress, abortSignal);
}
Retry failed updates from a previous sync.