1
0
mirror of https://github.com/laurent22/joplin.git synced 2024-12-24 10:27:10 +02:00

Desktop: Fixes #4916: Ensure that image paths that contain spaces are pasted correctly in the Rich Text editor

This commit is contained in:
Laurent Cozic 2021-05-04 17:44:30 +02:00
parent ebf92605ae
commit 4ea21e0c32
2 changed files with 8 additions and 3 deletions

View File

@ -142,21 +142,21 @@ export async function processPastedHtml(html: string) {
if (!mappedResources[imageSrc]) { if (!mappedResources[imageSrc]) {
try { try {
if (imageSrc.startsWith('file')) { if (imageSrc.startsWith('file')) {
const imageFilePath = path.normalize(imageSrc.substr(7)); const imageFilePath = path.normalize(unescape(imageSrc).substr(7));
const resourceDirPath = path.normalize(Setting.value('resourceDir')); const resourceDirPath = path.normalize(Setting.value('resourceDir'));
if (imageFilePath.startsWith(resourceDirPath)) { if (imageFilePath.startsWith(resourceDirPath)) {
mappedResources[imageSrc] = imageSrc; mappedResources[imageSrc] = imageSrc;
} else { } else {
const createdResource = await shim.createResourceFromPath(imageFilePath); const createdResource = await shim.createResourceFromPath(imageFilePath);
mappedResources[imageSrc] = `file://${Resource.fullPath(createdResource)}`; mappedResources[imageSrc] = `file://${escape(Resource.fullPath(createdResource))}`;
} }
} else { } else {
const filePath = `${Setting.value('tempDir')}/${md5(Date.now() + Math.random())}`; const filePath = `${Setting.value('tempDir')}/${md5(Date.now() + Math.random())}`;
await shim.fetchBlob(imageSrc, { path: filePath }); await shim.fetchBlob(imageSrc, { path: filePath });
const createdResource = await shim.createResourceFromPath(filePath); const createdResource = await shim.createResourceFromPath(filePath);
await shim.fsDriver().remove(filePath); await shim.fsDriver().remove(filePath);
mappedResources[imageSrc] = `file://${Resource.fullPath(createdResource)}`; mappedResources[imageSrc] = `file://${escape(Resource.fullPath(createdResource))}`;
} }
} catch (error) { } catch (error) {
logger.warn(`Error creating a resource for ${imageSrc}.`, error); logger.warn(`Error creating a resource for ${imageSrc}.`, error);

View File

@ -66,6 +66,11 @@ class HtmlUtils {
}); });
} }
// Note that the URLs provided by this function are URL-encoded, which is
// usually what you want for web URLs. But if they are file:// URLs and the
// file path is going to be used, it will need to be unescaped first. The
// transformed SRC, must also be escaped before being sent back to this
// function.
public processImageTags(html: string, callback: Function) { public processImageTags(html: string, callback: Function) {
if (!html) return ''; if (!html) return '';