feat: implement checksum-based duplicate detection for split email attachments
Build and Push Multi-Platform Images / build-and-push (push) Successful in 33s
Build and Push Multi-Platform Images / build-and-push (push) Successful in 33s
This commit is contained in:
@@ -131,40 +131,59 @@ export default function MailImportWizard({ visible, onClose, email, attachments
|
||||
setImportData(prev => prev.map(item => item.virtualId === virtualId ? { ...item, [key]: value } : item));
|
||||
};
|
||||
|
||||
const handleSplit = (virtualId: string, splitPage: number) => {
|
||||
setImportData(prev => {
|
||||
const idx = prev.findIndex(i => i.virtualId === virtualId);
|
||||
if (idx === -1) return prev;
|
||||
|
||||
const itemToSplit = prev[idx];
|
||||
const start = itemToSplit.pages?.start || 1;
|
||||
const end = itemToSplit.pages?.end || 999; // 999 means to the end
|
||||
|
||||
const part1 = { ...itemToSplit, virtualId: `${itemToSplit.attachmentId}_${start}_${splitPage}`, pages: { start, end: splitPage }, fileName: `${itemToSplit.fileName} (Teil 1)` };
|
||||
const part2 = { ...itemToSplit, virtualId: `${itemToSplit.attachmentId}_${splitPage+1}_${end}`, pages: { start: splitPage + 1, end }, fileName: `${itemToSplit.fileName} (Teil 2)` };
|
||||
|
||||
// Propagate date and barcode
|
||||
const parentDate = eingangsdaten[virtualId] || dayjs(email.Date);
|
||||
const parentBarcode = barcodes[virtualId];
|
||||
|
||||
setEingangsdaten(prev => ({
|
||||
...prev,
|
||||
[part1.virtualId]: parentDate,
|
||||
[part2.virtualId]: parentDate,
|
||||
}));
|
||||
|
||||
if (parentBarcode) {
|
||||
setBarcodes(prev => ({
|
||||
...prev,
|
||||
[part1.virtualId]: { ...parentBarcode },
|
||||
[part2.virtualId]: { ...parentBarcode },
|
||||
}));
|
||||
}
|
||||
const handleSplit = async (virtualId: string, splitPage: number) => {
|
||||
const idx = importData.findIndex(i => i.virtualId === virtualId);
|
||||
if (idx === -1) return;
|
||||
|
||||
const itemToSplit = importData[idx];
|
||||
const start = itemToSplit.pages?.start || 1;
|
||||
const end = itemToSplit.pages?.end || 999;
|
||||
|
||||
const part1Pages = { start, end: splitPage };
|
||||
const part2Pages = { start: splitPage + 1, end };
|
||||
|
||||
const part1 = { ...itemToSplit, virtualId: `${itemToSplit.attachmentId}_${start}_${splitPage}`, pages: part1Pages, fileName: `${itemToSplit.fileName} (Teil 1)` };
|
||||
const part2 = { ...itemToSplit, virtualId: `${itemToSplit.attachmentId}_${splitPage+1}_${end}`, pages: part2Pages, fileName: `${itemToSplit.fileName} (Teil 2)` };
|
||||
|
||||
const parentDate = eingangsdaten[virtualId] || dayjs(email.Date);
|
||||
const parentBarcode = barcodes[virtualId];
|
||||
|
||||
setEingangsdaten(prev => ({
|
||||
...prev,
|
||||
[part1.virtualId]: parentDate,
|
||||
[part2.virtualId]: parentDate,
|
||||
}));
|
||||
|
||||
if (parentBarcode) {
|
||||
setBarcodes(prev => ({
|
||||
...prev,
|
||||
[part1.virtualId]: { ...parentBarcode },
|
||||
[part2.virtualId]: { ...parentBarcode },
|
||||
}));
|
||||
}
|
||||
|
||||
setImportData(prev => {
|
||||
const newArray = [...prev];
|
||||
newArray.splice(idx, 1, part1, part2);
|
||||
return newArray;
|
||||
});
|
||||
|
||||
// Checksumme der geteilten Teile prüfen
|
||||
try {
|
||||
const [dup1, dup2] = await Promise.all([
|
||||
emailImportApi.checkSplitChecksum(itemToSplit.attachmentId, part1Pages),
|
||||
emailImportApi.checkSplitChecksum(itemToSplit.attachmentId, part2Pages),
|
||||
]);
|
||||
if (dup1 || dup2) {
|
||||
setImportData(prev => prev.map(item => {
|
||||
if (item.virtualId === part1.virtualId && dup1) return { ...item, isDuplicate: true, type: 'IGNORE' as const };
|
||||
if (item.virtualId === part2.virtualId && dup2) return { ...item, isDuplicate: true, type: 'IGNORE' as const };
|
||||
return item;
|
||||
}));
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Fehler bei Checksummen-Prüfung nach Split', e);
|
||||
}
|
||||
};
|
||||
|
||||
const loadBelegnummern = async () => {
|
||||
|
||||
Reference in New Issue
Block a user