chore: fix exporting super notes as md when multiple embedded files have same name [skip e2e]
This commit is contained in:
@@ -18,6 +18,7 @@ import { $createFileExportNode } from '../Lexical/Nodes/FileExportNode'
|
|||||||
import { $createInlineFileNode } from '../Plugins/InlineFilePlugin/InlineFileNode'
|
import { $createInlineFileNode } from '../Plugins/InlineFilePlugin/InlineFileNode'
|
||||||
import { $convertFromMarkdownString } from '../Lexical/Utils/MarkdownImport'
|
import { $convertFromMarkdownString } from '../Lexical/Utils/MarkdownImport'
|
||||||
import { $convertToMarkdownString } from '../Lexical/Utils/MarkdownExport'
|
import { $convertToMarkdownString } from '../Lexical/Utils/MarkdownExport'
|
||||||
|
import { parseFileName } from '@standardnotes/filepicker'
|
||||||
|
|
||||||
export class HeadlessSuperConverter implements SuperConverterServiceInterface {
|
export class HeadlessSuperConverter implements SuperConverterServiceInterface {
|
||||||
private importEditor: LexicalEditor
|
private importEditor: LexicalEditor
|
||||||
@@ -90,6 +91,7 @@ export class HeadlessSuperConverter implements SuperConverterServiceInterface {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
const fileNodes = $nodesOfType(FileNode)
|
const fileNodes = $nodesOfType(FileNode)
|
||||||
|
const filenameCounts: Record<string, number> = {}
|
||||||
Promise.all(
|
Promise.all(
|
||||||
fileNodes.map(async (fileNode) => {
|
fileNodes.map(async (fileNode) => {
|
||||||
const fileItem = getFileItem(fileNode.getId())
|
const fileItem = getFileItem(fileNode.getId())
|
||||||
@@ -112,7 +114,17 @@ export class HeadlessSuperConverter implements SuperConverterServiceInterface {
|
|||||||
} else {
|
} else {
|
||||||
this.exportEditor.update(
|
this.exportEditor.update(
|
||||||
() => {
|
() => {
|
||||||
const fileExportNode = $createFileExportNode(fileItem.name, fileItem.mimeType)
|
filenameCounts[fileItem.name] =
|
||||||
|
filenameCounts[fileItem.name] == undefined ? 0 : filenameCounts[fileItem.name] + 1
|
||||||
|
|
||||||
|
let name = fileItem.name
|
||||||
|
|
||||||
|
if (filenameCounts[name] > 0) {
|
||||||
|
const { name: _name, ext } = parseFileName(name)
|
||||||
|
name = `${_name} - ${fileItem.uuid}.${ext}`
|
||||||
|
}
|
||||||
|
|
||||||
|
const fileExportNode = $createFileExportNode(name, fileItem.mimeType)
|
||||||
fileNode.replace(fileExportNode)
|
fileNode.replace(fileExportNode)
|
||||||
},
|
},
|
||||||
{ discrete: true },
|
{ discrete: true },
|
||||||
|
|||||||
@@ -156,6 +156,7 @@ const noteRequiresFolder = (
|
|||||||
|
|
||||||
const addEmbeddedFilesToFolder = async (application: WebApplication, note: SNNote, folder: ZipDirectoryEntry) => {
|
const addEmbeddedFilesToFolder = async (application: WebApplication, note: SNNote, folder: ZipDirectoryEntry) => {
|
||||||
try {
|
try {
|
||||||
|
const filenameCounts: Record<string, number> = {}
|
||||||
const embeddedFileIDs = headlessSuperConverter.getEmbeddedFileIDsFromSuperString(note.text)
|
const embeddedFileIDs = headlessSuperConverter.getEmbeddedFileIDsFromSuperString(note.text)
|
||||||
for (const embeddedFileID of embeddedFileIDs) {
|
for (const embeddedFileID of embeddedFileIDs) {
|
||||||
const fileItem = application.items.findItem<FileItem>(embeddedFileID)
|
const fileItem = application.items.findItem<FileItem>(embeddedFileID)
|
||||||
@@ -166,7 +167,14 @@ const addEmbeddedFilesToFolder = async (application: WebApplication, note: SNNot
|
|||||||
if (!embeddedFileBlob) {
|
if (!embeddedFileBlob) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
folder.addBlob(parseAndCreateZippableFileName(fileItem.title), embeddedFileBlob)
|
filenameCounts[fileItem.title] =
|
||||||
|
filenameCounts[fileItem.title] == undefined ? 0 : filenameCounts[fileItem.title] + 1
|
||||||
|
let name = fileItem.title
|
||||||
|
if (filenameCounts[fileItem.title] > 0) {
|
||||||
|
const { name: _name, ext } = parseFileName(fileItem.title)
|
||||||
|
name = `${_name} - ${fileItem.uuid}.${ext}`
|
||||||
|
}
|
||||||
|
folder.addBlob(parseAndCreateZippableFileName(name), embeddedFileBlob)
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error(error)
|
console.error(error)
|
||||||
|
|||||||
Reference in New Issue
Block a user