From dfbd72b1dfd4a4681c452c9113248045e69880cd Mon Sep 17 00:00:00 2001 From: Aman Harwara Date: Sun, 19 Jun 2022 02:30:49 +0530 Subject: [PATCH] fix: exporting multiple notes with same title (#1119) --- .../Components/NotesOptions/NotesOptions.tsx | 4 ++-- .../src/javascripts/Services/ArchiveManager.ts | 18 +++++++++++++++--- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/packages/web/src/javascripts/Components/NotesOptions/NotesOptions.tsx b/packages/web/src/javascripts/Components/NotesOptions/NotesOptions.tsx index dcebefe12..12c5a6d2c 100644 --- a/packages/web/src/javascripts/Components/NotesOptions/NotesOptions.tsx +++ b/packages/web/src/javascripts/Components/NotesOptions/NotesOptions.tsx @@ -222,7 +222,7 @@ const NotesOptions = ({ const format = editor?.package_info?.file_type || 'txt' return `${note.title}.${format}` }, - [application], + [application.componentManager], ) const downloadSelectedItems = useCallback(async () => { @@ -239,7 +239,7 @@ const NotesOptions = ({ await application.getArchiveService().downloadDataAsZip( notes.map((note) => { return { - filename: getNoteFileName(note), + name: getNoteFileName(note), content: new Blob([note.text]), } }), diff --git a/packages/web/src/javascripts/Services/ArchiveManager.ts b/packages/web/src/javascripts/Services/ArchiveManager.ts index e832bba22..f5d6500d7 100644 --- a/packages/web/src/javascripts/Services/ArchiveManager.ts +++ b/packages/web/src/javascripts/Services/ArchiveManager.ts @@ -20,7 +20,7 @@ function zippableFileName(name: string, suffix = '', format = 'txt'): string { } type ZippableData = { - filename: string + name: string content: Blob }[] @@ -119,9 +119,21 @@ export class ArchiveManager { const zip = await import('@zip.js/zip.js') const writer = new zip.ZipWriter(new zip.BlobWriter('application/zip')) + const filenameCounts: Record = {} + for (let i = 0; i < data.length; i++) { - const { name, ext } = parseFileName(data[i].filename) - await writer.add(zippableFileName(name, '', ext), new zip.BlobReader(data[i].content)) + const file = data[i] + + const { name, ext } = parseFileName(file.name) + + filenameCounts[file.name] = filenameCounts[file.name] == undefined ? 0 : filenameCounts[file.name] + 1 + + const currentFileNameIndex = filenameCounts[file.name] + + await writer.add( + zippableFileName(name, currentFileNameIndex > 0 ? ` - ${currentFileNameIndex}` : '', ext), + new zip.BlobReader(file.content), + ) } const zipFileAsBlob = await writer.close()