Skip to content

Commit 16f842e

Browse files
author
Michael Lively
committed
fix for attachment naming within notebook metadata
1 parent 74acf9c commit 16f842e

File tree

1 file changed

+17
-18
lines changed

1 file changed

+17
-18
lines changed

extensions/ipynb/src/notebookImagePaste.ts

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,13 @@ class CopyPasteEditProvider implements vscode.DocumentPasteEditProvider {
3131
}
3232

3333
// get filename data from paste
34-
const pasteFilename = dataItem.asFile()?.name;
35-
if (!pasteFilename) {
34+
const clipboardFilename = dataItem.asFile()?.name;
35+
if (!clipboardFilename) {
3636
return undefined;
3737
}
38-
const separatorIndex = pasteFilename?.lastIndexOf('.');
39-
const filename = pasteFilename?.slice(0, separatorIndex);
40-
const filetype = pasteFilename?.slice(separatorIndex);
38+
const separatorIndex = clipboardFilename?.lastIndexOf('.');
39+
const filename = clipboardFilename?.slice(0, separatorIndex);
40+
const filetype = clipboardFilename?.slice(separatorIndex);
4141
if (!filename || !filetype) {
4242
return undefined;
4343
}
@@ -46,13 +46,12 @@ class CopyPasteEditProvider implements vscode.DocumentPasteEditProvider {
4646
if (!currentCell) {
4747
return undefined;
4848
}
49-
5049
const notebookUri = currentCell.notebook.uri;
5150

5251
// create updated metadata for cell (prep for WorkspaceEdit)
5352
const b64string = encodeBase64(fileDataAsUint8);
5453
const startingAttachments = currentCell.metadata.custom?.attachments;
55-
const newMetadata = buildMetadata(b64string, currentCell, pasteFilename, filetype, startingAttachments);
54+
const [newMetadata, revisedFilename] = buildMetadata(b64string, currentCell, filename, filetype, startingAttachments);
5655

5756
// build edits
5857
const nbEdit = vscode.NotebookEdit.updateCellMetadata(currentCell.index, newMetadata);
@@ -62,8 +61,8 @@ class CopyPasteEditProvider implements vscode.DocumentPasteEditProvider {
6261
// create a snippet for paste
6362
const pasteSnippet = new vscode.SnippetString();
6463
pasteSnippet.appendText('![');
65-
pasteSnippet.appendPlaceholder(`${pasteFilename}`);
66-
pasteSnippet.appendText(`](attachment:${pasteFilename})`);
64+
pasteSnippet.appendPlaceholder(`${revisedFilename}`);
65+
pasteSnippet.appendText(`](attachment:${revisedFilename})`);
6766

6867
return { insertText: pasteSnippet, additionalEdit: workspaceEdit };
6968
}
@@ -123,27 +122,27 @@ function encodeBase64(buffer: Uint8Array, padded = true, urlSafe = false) {
123122
return output;
124123
}
125124

126-
function buildMetadata(b64: string, cell: vscode.NotebookCell, filename: string, filetype: string, startingAttachments: any): { [key: string]: any } {
125+
function buildMetadata(b64: string, cell: vscode.NotebookCell, filename: string, filetype: string, startingAttachments: any): [{ [key: string]: any }, string] {
127126
const outputMetadata = { ...cell.metadata };
127+
let tempFilename = filename + filetype;
128128

129129
if (!outputMetadata.custom) {
130-
outputMetadata['custom'] = { 'attachments': { [filename]: { 'image/png': b64 } } };
130+
outputMetadata['custom'] = { 'attachments': { [tempFilename]: { 'image/png': b64 } } };
131131
} else if (!outputMetadata.custom.attachments) {
132-
outputMetadata.custom['attachments'] = { [filename]: { 'image/png': b64 } };
132+
outputMetadata.custom['attachments'] = { [tempFilename]: { 'image/png': b64 } };
133133
} else {
134-
for (let appendValue = 2; filename in startingAttachments; appendValue++) {
135-
const objEntries = Object.entries(startingAttachments[filename]);
134+
for (let appendValue = 2; tempFilename in startingAttachments; appendValue++) {
135+
const objEntries = Object.entries(startingAttachments[tempFilename]);
136136
if (objEntries.length) { // check that mime:b64 are present
137137
const [, attachmentb64] = objEntries[0];
138138
if (attachmentb64 !== b64) { // append a "-#" here. same name, diff data. this matches jupyter behavior
139-
filename = filename.concat(`-${appendValue}`) + filetype;
139+
tempFilename = filename.concat(`-${appendValue}`) + filetype;
140140
}
141141
}
142142
}
143-
outputMetadata.custom.attachments[filename] = { 'image/png': b64 };
143+
outputMetadata.custom.attachments[tempFilename] = { 'image/png': b64 };
144144
}
145-
146-
return outputMetadata;
145+
return [outputMetadata, tempFilename];
147146
}
148147

149148
export function imagePasteSetup() {

0 commit comments

Comments
 (0)