From 240b5daf3e1ddcd5b26451fae803634f1cf6fa46 Mon Sep 17 00:00:00 2001 From: Dick Choi Date: Tue, 20 Sep 2016 13:53:58 +0900 Subject: [PATCH] attempt to recover invalid boostnote.json --- browser/main/lib/dataApi/addStorage.js | 25 +++++++++++++++++++++++-- browser/main/lib/dataApi/init.js | 24 +++++++++++++++++++++++- 2 files changed, 46 insertions(+), 3 deletions(-) diff --git a/browser/main/lib/dataApi/addStorage.js b/browser/main/lib/dataApi/addStorage.js index f7fbf6ef..cca49782 100644 --- a/browser/main/lib/dataApi/addStorage.js +++ b/browser/main/lib/dataApi/addStorage.js @@ -2,7 +2,9 @@ const _ = require('lodash') const keygen = require('browser/lib/keygen') const resolveStorageData = require('./resolveStorageData') const resolveStorageNotes = require('./resolveStorageNotes') - +const consts = require('browser/lib/consts') +const path = require('path') +const CSON = require('season') /** * @param {Object} * name, path, type @@ -52,7 +54,26 @@ function addStorage (input) { localStorage.setItem('storages', JSON.stringify(rawStorages)) return newStorage }) - .then(resolveStorageNotes) + .then(function (storage) { + return resolveStorageNotes(storage) + .then((notes) => { + let unknownCount = 0 + notes.forEach((note) => { + if (!storage.folders.some((folder) => note.folder === folder.key)) { + unknownCount++ + storage.folders.push({ + key: note.folder, + color: consts.FOLDER_COLORS[(unknownCount - 1) % 7], + name: 'Unknown ' + unknownCount + }) + } + }) + if (unknownCount > 0) { + CSON.writeFileSync(path.join(storage.path, 'boostnote.json'), _.pick(storage, ['folders', 'version'])) + } + return notes + }) + }) .then(function returnValue (notes) { return { storage: newStorage, diff --git a/browser/main/lib/dataApi/init.js b/browser/main/lib/dataApi/init.js index 7488dce0..965bbe7a 100644 --- a/browser/main/lib/dataApi/init.js +++ b/browser/main/lib/dataApi/init.js @@ -2,6 +2,9 @@ const _ = require('lodash') const resolveStorageData = require('./resolveStorageData') const resolveStorageNotes = require('./resolveStorageNotes') +const consts = require('browser/lib/consts') +const path = require('path') +const CSON = require('season') /** * @return {Object} all storages and notes * ``` @@ -33,7 +36,26 @@ function init () { let fetchNotes = function (storages) { let findNotesFromEachStorage = storages - .map(resolveStorageNotes) + .map((storage) => { + return resolveStorageNotes(storage) + .then((notes) => { + let unknownCount = 0 + notes.forEach((note) => { + if (!storage.folders.some((folder) => note.folder === folder.key)) { + unknownCount++ + storage.folders.push({ + key: note.folder, + color: consts.FOLDER_COLORS[(unknownCount - 1) % 7], + name: 'Unknown ' + unknownCount + }) + } + }) + if (unknownCount > 0) { + CSON.writeFileSync(path.join(storage.path, 'boostnote.json'), _.pick(storage, ['folders', 'version'])) + } + return notes + }) + }) return Promise.all(findNotesFromEachStorage) .then(function concatNoteGroup (noteGroups) { return noteGroups.reduce(function (sum, group) {