diff --git a/browser/main/NoteList/index.js b/browser/main/NoteList/index.js index f0626fb9..2fcc61cc 100644 --- a/browser/main/NoteList/index.js +++ b/browser/main/NoteList/index.js @@ -895,43 +895,50 @@ class NoteList extends React.Component { if (!location.pathname.match(/\/trashed/)) this.addNotesFromFiles(filepaths) } - // Add notes to the current folder - addNotesFromFiles (filepaths) { - const { dispatch, location } = this.props - const { storage, folder } = this.resolveTargetFolder() + // Add notes to the current folder + addNotesFromFiles (filepaths) { + const { dispatch, location } = this.props + const { storage, folder } = this.resolveTargetFolder() - if (filepaths === undefined) return - filepaths.forEach((filepath) => { - fs.readFile(filepath, (err, data) => { - if (err) throw Error('File reading error: ', err) + if (filepaths === undefined) return + filepaths.forEach((filepath) => { + fs.readFile(filepath, (err, data) => { + if (err) throw Error('File reading error: ', err) - fs.stat(filepath, (err, {mtime, birthtime}) => { - if (err) throw Error('File stat reading error: ', err) + fs.stat(filepath, (err, {mtime, birthtime}) => { + if (err) throw Error('File stat reading error: ', err) + + const content = data.toString() + const newNote = { + content: content, + folder: folder.key, + title: path.basename(filepath, path.extname(filepath)), + type: 'MARKDOWN_NOTE', + createdAt: birthtime, + updatedAt: mtime + } + dataApi.createNote(storage.key, newNote) + .then((note) => { + + attachmentManagement.importAttachments(note.content, filepath, storage.key, note.key) + .then((newcontent) => { + note.content = newcontent; + + dispatch({ + type: 'UPDATE_NOTE', + note: note + }) + hashHistory.push({ + pathname: location.pathname, + query: {key: getNoteKey(note)} + }) - const content = data.toString() - const newNote = { - content: content, - folder: folder.key, - title: path.basename(filepath, path.extname(filepath)), - type: 'MARKDOWN_NOTE', - createdAt: birthtime, - updatedAt: mtime - } - dataApi.createNote(storage.key, newNote) - .then((note) => { - dispatch({ - type: 'UPDATE_NOTE', - note: note - }) - hashHistory.push({ - pathname: location.pathname, - query: {key: getNoteKey(note)} - }) }) }) }) }) - } + }) +} getTargetIndex () { const { location } = this.props diff --git a/browser/main/lib/dataApi/attachmentManagement.js b/browser/main/lib/dataApi/attachmentManagement.js index 6fa3b51f..c6e7c7a9 100644 --- a/browser/main/lib/dataApi/attachmentManagement.js +++ b/browser/main/lib/dataApi/attachmentManagement.js @@ -449,6 +449,45 @@ function getAbsolutePathsOfAttachmentsInContent (markdownContent, storagePath) { return result } +/** + * @description Copies the attachments to the storage folder and returns the mardown content it should be replaced with + * @param {String} markDownContent content in which the attachment paths should be found + * @param {String} filepath The path of the file with attachments to import + * @param {String} storageKey Storage key of the destination storage + * @param {String} noteKey Key of the current note. Will be used as subfolder in :storage + */ +function importAttachments (markDownContent, filepath, storageKey, noteKey) { + return new Promise((resolve, reject) => { + let attach_names = markDownContent.match(/!\[.+?]\((?:.+?\..+?\))/g); + + if (!attach_names) + resolve(markDownContent); + + else { + let promise_array = []; + let end_path = [] + + for (let i = 0; i < attach_names.length; i++){ + end_path[i] = attach_names[i].match(/(?<=]\()(?:.+?\..+?)(?=\))/)[0]; + let begin_path = filepath.match(/\/.+\//)[0]; + let final_path = path.join(begin_path, end_path[i]); + + promise_array.push(this.copyAttachment(final_path, storageKey, noteKey)); + } + + Promise.all(promise_array).then((file_names) => { + + for (let j = 0; j < file_names.length; j++) { + let new_path = path.join(STORAGE_FOLDER_PLACEHOLDER, noteKey, file_names[j]); + markDownContent = markDownContent.replace(end_path[j], new_path); + } + + resolve(markDownContent); + }) + } + }) +} + /** * @description Moves the attachments of the current note to the new location. * Returns a modified version of the given content so that the links to the attachments point to the new note key. @@ -656,6 +695,7 @@ module.exports = { handlePasteNativeImage, getAttachmentsInMarkdownContent, getAbsolutePathsOfAttachmentsInContent, + importAttachments, removeStorageAndNoteReferences, deleteAttachmentFolder, deleteAttachmentsNotPresentInNote,