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
は全削除なので気をつけよう。
コメント