1
0
mirror of https://github.com/BoostIo/Boostnote synced 2025-12-13 17:56:25 +00:00

re-organize attachment functions and updated comments doc

This commit is contained in:
Nguyễn Việt Hưng
2019-08-28 21:23:52 +12:00
committed by Junyoung Choi
parent 8355e1e006
commit 0b84a372f6
3 changed files with 49 additions and 36 deletions

View File

@@ -136,9 +136,24 @@ export function isMarkdownTitleURL (str) {
return /(^#{1,6}\s)(?:\w+:|^)\/\/(?:[^\s\.]+\.\S{2}|localhost[\:?\d]*)/.test(str) return /(^#{1,6}\s)(?:\w+:|^)\/\/(?:[^\s\.]+\.\S{2}|localhost[\:?\d]*)/.test(str)
} }
export function humanFileSize (bytes) {
const threshold = 1000
if (Math.abs(bytes) < threshold) {
return bytes + ' B'
}
var units = ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
var u = -1
do {
bytes /= threshold
++u
} while (Math.abs(bytes) >= threshold && u < units.length - 1)
return bytes.toFixed(1) + ' ' + units[u]
}
export default { export default {
lastFindInArray, lastFindInArray,
escapeHtmlCharacters, escapeHtmlCharacters,
isObjectEqual, isObjectEqual,
isMarkdownTitleURL isMarkdownTitleURL,
humanFileSize
} }

View File

@@ -627,9 +627,9 @@ function deleteAttachmentsNotPresentInNote (markdownContent, storageKey, noteKey
/** /**
* @description Get all existing attachments related to a specific note * @description Get all existing attachments related to a specific note
including their status (in use or not) and their path. Return null if there're no attachment related to note or specified parametters are invalid including their status (in use or not) and their path. Return null if there're no attachment related to note or specified parametters are invalid
* @param markdownContent markdownContent of the current note
* @param storageKey StorageKey of the current note * @param storageKey StorageKey of the current note
* @param noteKey NoteKey of the currentNote * @param noteKey NoteKey of the currentNote
* @param linkText Text that was pasted
* @return {Promise<Array<{path: String, isInUse: bool}>>} Promise returning the * @return {Promise<Array<{path: String, isInUse: bool}>>} Promise returning the
list of attachments with their properties */ list of attachments with their properties */
function getAttachmentsPathAndStatus (markdownContent, storageKey, noteKey) { function getAttachmentsPathAndStatus (markdownContent, storageKey, noteKey) {
@@ -671,6 +671,29 @@ function getAttachmentsPathAndStatus (markdownContent, storageKey, noteKey) {
} }
} }
/**
* @description Remove all specified attachment paths
* @param attachments attachment paths
* @return {Promise} Promise after all attachments are removed */
function removeAttachmentsByPaths (attachments) {
const promises = []
for (const attachment of attachments) {
const promise = new Promise((resolve, reject) => {
fs.unlink(attachment, (err) => {
if (err) {
console.error('Could not delete "%s"', attachment)
console.error(err)
reject(err)
return
}
resolve()
})
})
promises.push(promise)
}
return Promise.all(promises)
}
/** /**
* Clones the attachments of a given note. * Clones the attachments of a given note.
* Copies the attachments to their new destination and updates the content of the new note so that the attachment-links again point to the correct destination. * Copies the attachments to their new destination and updates the content of the new note so that the attachment-links again point to the correct destination.
@@ -773,6 +796,7 @@ module.exports = {
getAbsolutePathsOfAttachmentsInContent, getAbsolutePathsOfAttachmentsInContent,
importAttachments, importAttachments,
removeStorageAndNoteReferences, removeStorageAndNoteReferences,
removeAttachmentsByPaths,
deleteAttachmentFolder, deleteAttachmentFolder,
deleteAttachmentsNotPresentInNote, deleteAttachmentsNotPresentInNote,
getAttachmentsPathAndStatus, getAttachmentsPathAndStatus,

View File

@@ -6,6 +6,7 @@ import dataApi from 'browser/main/lib/dataApi'
import attachmentManagement from 'browser/main/lib/dataApi/attachmentManagement' import attachmentManagement from 'browser/main/lib/dataApi/attachmentManagement'
import StorageItem from './StorageItem' import StorageItem from './StorageItem'
import i18n from 'browser/lib/i18n' import i18n from 'browser/lib/i18n'
import { humanFileSize } from 'browser/lib/utils'
import fs from 'fs' import fs from 'fs'
const electron = require('electron') const electron = require('electron')
@@ -27,20 +28,6 @@ function browseFolder () {
}) })
} }
function humanFileSize (bytes) {
const threshold = 1000
if (Math.abs(bytes) < threshold) {
return bytes + ' B'
}
var units = ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']
var u = -1
do {
bytes /= threshold
++u
} while (Math.abs(bytes) >= threshold && u < units.length - 1)
return bytes.toFixed(1) + ' ' + units[u]
}
class StoragesTab extends React.Component { class StoragesTab extends React.Component {
constructor (props) { constructor (props) {
super(props) super(props)
@@ -94,25 +81,8 @@ class StoragesTab extends React.Component {
e.preventDefault() e.preventDefault()
} }
removeAllAttachments (attachments) { handleRemoveUnusedAttachments (attachments) {
const promises = [] attachmentManagement.removeAttachmentsByPaths(attachments)
for (const attachment of attachments) {
for (const file of attachment) {
const promise = new Promise((resolve, reject) => {
fs.unlink(file, (err) => {
if (err) {
console.error('Could not delete "%s"', file)
console.error(err)
reject(err)
return
}
resolve()
})
})
promises.push(promise)
}
}
Promise.all(promises)
.then(() => this.loadAttachmentStorage()) .then(() => this.loadAttachmentStorage())
.catch(console.error) .catch(console.error)
} }
@@ -142,6 +112,9 @@ class StoragesTab extends React.Component {
}, 0) }, 0)
const totalAttachmentsSize = totalUnusedAttachmentsSize + totalInuseAttachmentsSize const totalAttachmentsSize = totalUnusedAttachmentsSize + totalInuseAttachmentsSize
const unusedAttachmentPaths = unusedAttachments
.reduce((acc, curr) => acc.concat(curr.path), [])
if (!boundingBox) { return null } if (!boundingBox) { return null }
const storageList = data.storageMap.map((storage) => { const storageList = data.storageMap.map((storage) => {
return <StorageItem return <StorageItem
@@ -174,7 +147,8 @@ class StoragesTab extends React.Component {
<p styleName='list-attachment-label'> <p styleName='list-attachment-label'>
Total attachments size: {humanFileSize(totalAttachmentsSize)} ({totalAttachments} items) Total attachments size: {humanFileSize(totalAttachmentsSize)} ({totalAttachments} items)
</p> </p>
<button styleName='list-attachement-clear-button' onClick={() => this.removeAllAttachments(unusedAttachments)}> <button styleName='list-attachement-clear-button'
onClick={() => this.handleRemoveUnusedAttachments(unusedAttachmentPaths)}>
{i18n.__('Clear unused attachments')} {i18n.__('Clear unused attachments')}
</button> </button>
</div> </div>