electronで設定などデータを永続化するために、electron-storeを使う。
electron-storeはデータの読み書きなどをしてくれるモジュール。sindresorhus/electron-store: Simple data persistence for your Electron app or module - Save and load user preferences, app state, cache, etc
実装をメモしておく。
単純な値の場合
画面のサイズを保存する例を挙げる。
まずは取得するとき。単純に必要なところでstore.get(key, defaultValue)すればよい。今の場合は、ウィンドウの作成タイミングで呼び出せばいい。
mainWindow = new BrowserWindow({
width: store.get('window.width', 800),
height: store.get('window.height', 600),
//...,
});
次は保存・永続化するとき。保存したいタイミングでstore.set(key, value)すればいい。今の場合は、ウィンドウのクローズイベントの時に呼び出せばいい。closedとcloseがあるが、BrowserWindow | Electronに、
closed
ウインドウがクローズされると発生します。このイベントを受け取った後は、ウインドウへの参照を削除し、これ以上、ウインドウを使用しないようにしてください。
close
ウインドウがクローズされようとするときに発生します。 これは、DOMの beforeunload と unload イベントの前に発生します。 event.preventDefault() を呼び出すことで、クローズがキャンセルされます。
とあるので、ウィンドウがまだ破棄されていないときに発生するcloseを使う。なお、closedではウィンドウを閉じたときに、Error: Object has been destroyedというエラーがポップアップのダイアログで表示される。
また、BrowserWindow | Electronによれば、window.getSize()は幅、高さの順のリストを返すので注意しておく。
// これをwindowの生成時に登録しておけばいい。
mainWindow.on('close', () => {
// Save window size settings
store.set('window.height', mainWindow.getSize()[1]);
store.set('window.width', mainWindow.getSize()[0]);
});
これでOK。
リストを保存する場合
リストの保存もそのまま出来る。
// 記録
store.set('strories', story_list);
// 取り出し
const story_list = store.get('stories', []);
その他
保存場所は、store.pathを参照することで分かる。macosでは
~/Library/Application Support/<name>/config.jsonになっている。これは、electronでのapp.getPath('userData')で取得できるパスと同じ。
データの削除は、store.delete(key)とstore.clear()で行うことができる。clearは全削除なので気をつけよう。


コメント