mirror of
https://github.com/BoostIo/Boostnote
synced 2025-12-14 02:06:29 +00:00
re-organize attachment functions and updated comments doc
This commit is contained in:
committed by
Junyoung Choi
parent
8355e1e006
commit
0b84a372f6
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user