Electron - zapisywanie i odczytywanie ustawień programu z pliku

Autor podstrony: Krzysztof Zajączkowski

Stronę tą wyświetlono już: 562 razy

Electron umożliwia wykonywanie operacji, których żadna przeglądana przeglądarka nie umożliwia. Okazuje się bowiem, że bez pytania o zgodę użytkownika można bez problemu na dysku twardym zapisać coś do pliku lub odczytać coś z pliku. Nie jest to jednak jedyna czynność jaką może wykonać program desktopowy.

W moim przypadku zdecydowałem się na stworzenie klasy, która będzie odczytywała i zapisywała dane o rozmiarze okna podczas zmiany jego rozmiaru. Oto ta klasa, która umieściłem w pliku initialize.js:

const fs = require("fs"); class InitialData { windowHeight = 600; windowWidth = 800; } class InitializeApp { initialData = new InitialData(); path = "../initialize.json"; constructor() { if (fs.existsSync(this.path)) { try { this.initialData = JSON.parse(fs.readFileSync(this.path)); console.log(this.initialData); } catch { } } } save() { fs.writeFileSync(this.path, JSON.stringify(this.initialData)); console.log(this.initialData); } } module.exports.InitializeApp = InitializeApp; module.exports.InitialData = InitialData;

Teraz w pliku index.js tworzę globalny obiekt:

let initializeApp = new InitializeApp();

by po chwili lub co najwyżej dwóch wczytać te dane z pliku (jeżeli tylko takowy istnieje). W funkcji createWindow ustawiam wymiary okna na podstawie wczytanych danych oraz podpinam się pod zdarzenie resize by przechwycić zmianę rozmiarów okna:

function createWindow() { win = new BrowserWindow({ width: initializeApp.initialData.windowWidth, height: initializeApp.initialData.windowHeight, webPreferences: { nodeIntegration: true, }, }); /** * Tutaj wskazywany jest plik widoku okna */ win.loadFile("index.html"); Messages.initMessages(win); win.on("resize", (event) => { let size = win.getSize() initializeApp.initialData.windowWidth = size[0]; initializeApp.initialData.windowHeight = size[1]; })

Pozostało już tylko zapisać ustawienia do pliku co też i czynię w callbacku podpiętym pod zdarzenie window-all-closed:

app.on("window-all-closed", () => { initializeApp.save(); if (process.platform !== "darwin") { app.quit(); } });

Teraz po otworzeniu aplikacji, zmianie rozmiarów jej okna oraz zamknięciu i ponownym uruchomieniu okno programu powinno zachować swoje rozmiary.

Strony powiązane
strony powiązane
  1. github.com/Obliczeniowo/Electron-basic-project - gałąź repozytorium zawierająca kod umożliwiający automatyczny zapis i odczyt ustawień programu
Propozycje książek