1
0
mirror of https://github.com/BoostIo/Boostnote synced 2025-12-11 00:36:26 +00:00

- export untitled notes as 'Untitled' based on the language

- export notes with duplicate title as '<title> (<index>)'
This commit is contained in:
Baptiste Augrain
2020-06-12 16:18:27 +02:00
parent 5414fe3384
commit 80b8948433
6 changed files with 57 additions and 14 deletions

View File

@@ -1,8 +1,7 @@
import { findStorage } from 'browser/lib/findStorage' import { findStorage } from 'browser/lib/findStorage'
import resolveStorageData from './resolveStorageData' import resolveStorageData from './resolveStorageData'
import resolveStorageNotes from './resolveStorageNotes' import resolveStorageNotes from './resolveStorageNotes'
import filenamify from 'filenamify' import getFilename from './getFilename'
import path from 'path'
import exportNote from './exportNote' import exportNote from './exportNote'
import getContentFormatter from './getContentFormatter' import getContentFormatter from './getContentFormatter'
@@ -32,6 +31,8 @@ function exportFolder(storageKey, folderKey, fileType, exportDir, config) {
return Promise.reject(e) return Promise.reject(e)
} }
const deduplicator = {}
return resolveStorageData(targetStorage) return resolveStorageData(targetStorage)
.then(storage => { .then(storage => {
return resolveStorageNotes(storage).then(notes => ({ return resolveStorageNotes(storage).then(notes => ({
@@ -49,9 +50,11 @@ function exportFolder(storageKey, folderKey, fileType, exportDir, config) {
return Promise.all( return Promise.all(
notes.map(note => { notes.map(note => {
const targetPath = path.join( const targetPath = getFilename(
note,
fileType,
exportDir, exportDir,
`${filenamify(note.title, { replacement: '_' })}.${fileType}` deduplicator
) )
return exportNote(storage.key, note, targetPath, contentFormatter) return exportNote(storage.key, note, targetPath, contentFormatter)

View File

@@ -7,6 +7,7 @@ import fs from 'fs'
import exportNote from './exportNote' import exportNote from './exportNote'
import formatMarkdown from './formatMarkdown' import formatMarkdown from './formatMarkdown'
import formatHTML from './formatHTML' import formatHTML from './formatHTML'
import getFilename from './getFilename'
/** /**
* @param {String} storageKey * @param {String} storageKey
@@ -83,11 +84,15 @@ function exportStorage(storageKey, fileType, exportDir, config) {
} catch (e) {} } catch (e) {}
}) })
const deduplicator = {}
return Promise.all( return Promise.all(
notes.map(note => { notes.map(note => {
const targetPath = path.join( const targetPath = getFilename(
folderNamesMapping[note.folder], note,
`${filenamify(note.title, { replacement: '_' })}.${fileType}` fileType,
exportDir,
deduplicator
) )
return exportNote(storage.key, note, targetPath, contentFormatter) return exportNote(storage.key, note, targetPath, contentFormatter)

View File

@@ -1,6 +1,5 @@
import exportNoteAs from './exportNoteAs' import exportNoteAs from './exportNoteAs'
import filenamify from 'filenamify' import getFilename from './getFilename'
import path from 'path'
/** /**
* @param {Object} data * @param {Object} data
@@ -15,12 +14,11 @@ function exportTag(data, tag, fileType, exportDir, config) {
.map(note => note) .map(note => note)
.filter(note => note.tags.indexOf(tag) !== -1) .filter(note => note.tags.indexOf(tag) !== -1)
const deduplicator = {}
return Promise.all( return Promise.all(
notes.map(note => { notes.map(note => {
const filename = path.join( const filename = getFilename(note, fileType, exportDir, deduplicator)
exportDir,
`${filenamify(note.title, { replacement: '_' })}.${fileType}`
)
return exportNoteAs(note, filename, fileType, config) return exportNoteAs(note, filename, fileType, config)
}) })

View File

@@ -0,0 +1,37 @@
import filenamify from 'filenamify'
import i18n from 'browser/lib/i18n'
import path from 'path'
/**
* @param {Object} note
* @param {String} fileType
* @param {String} directory
* @param {Object} deduplicator
*
* @return {String}
*/
function getFilename(note, fileType, directory, deduplicator) {
const basename = note.title
? filenamify(note.title, { replacement: '_' })
: i18n.__('Untitled')
if (deduplicator) {
if (deduplicator[basename]) {
const filename = path.join(
directory,
`${basename} (${deduplicator[basename]}).${fileType}`
)
++deduplicator[basename]
return filename
} else {
deduplicator[basename] = 1
}
}
return path.join(directory, `${basename}.${fileType}`)
}
module.exports = getFilename

View File

@@ -22,6 +22,7 @@ const dataApi = {
updateSnippet: require('./updateSnippet'), updateSnippet: require('./updateSnippet'),
fetchSnippet: require('./fetchSnippet'), fetchSnippet: require('./fetchSnippet'),
exportTag: require('./exportTag'), exportTag: require('./exportTag'),
getFilename: require('./getFilename'),
_migrateFromV6Storage: require('./migrateFromV6Storage'), _migrateFromV6Storage: require('./migrateFromV6Storage'),
_resolveStorageData: require('./resolveStorageData'), _resolveStorageData: require('./resolveStorageData'),

View File

@@ -202,7 +202,6 @@
"Create new folder": "Ordner erstellen", "Create new folder": "Ordner erstellen",
"Folder name": "Ordnername", "Folder name": "Ordnername",
"Create": "Erstellen", "Create": "Erstellen",
"Untitled": "Neuer Ordner",
"Unlink Storage": "Speicherverknüpfung aufheben", "Unlink Storage": "Speicherverknüpfung aufheben",
"Unlinking removes this linked storage from Boostnote. No data is removed, please manually delete the folder from your hard drive if needed.": "Die Verknüpfung des Speichers mit Boostnote wird entfernt. Es werden keine Daten gelöscht. Um die Daten dauerhaft zu löschen musst du den Ordner auf der Festplatte manuell entfernen.", "Unlinking removes this linked storage from Boostnote. No data is removed, please manually delete the folder from your hard drive if needed.": "Die Verknüpfung des Speichers mit Boostnote wird entfernt. Es werden keine Daten gelöscht. Um die Daten dauerhaft zu löschen musst du den Ordner auf der Festplatte manuell entfernen.",
"Empty note": "Leere Notiz", "Empty note": "Leere Notiz",