Electron - zapisywanie i odczytywanie ustawień programu z pliku

Stronę tą wyświetlono już: 189 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:

Listing 1
  1. const fs = require("fs");
  2. class InitialData {
  3. windowHeight = 600;
  4. windowWidth = 800;
  5. }
  6. class InitializeApp {
  7. initialData = new InitialData();
  8. path = "../initialize.json";
  9. constructor() {
  10. if (fs.existsSync(this.path)) {
  11. try {
  12. this.initialData = JSON.parse(fs.readFileSync(this.path));
  13. console.log(this.initialData);
  14. } catch {
  15. }
  16. }
  17. }
  18. save() {
  19. fs.writeFileSync(this.path, JSON.stringify(this.initialData));
  20. console.log(this.initialData);
  21. }
  22. }
  23. module.exports.InitializeApp = InitializeApp;
  24. module.exports.InitialData = InitialData;

Teraz w pliku index.js tworzę globalny obiekt:

Listing 2
  1. 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:

Listing 3
  1. function createWindow() {
  2. win = new BrowserWindow({
  3. width: initializeApp.initialData.windowWidth,
  4. height: initializeApp.initialData.windowHeight,
  5. webPreferences: {
  6. nodeIntegration: true,
  7. },
  8. });
  9. /**
  10. * Tutaj wskazywany jest plik widoku okna
  11. */
  12. win.loadFile("index.html");
  13. Messages.initMessages(win);
  14. win.on("resize", (event) => {
  15. let size = win.getSize()
  16. initializeApp.initialData.windowWidth = size[0];
  17. initializeApp.initialData.windowHeight = size[1];
  18. })

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

Listing 4
  1. app.on("window-all-closed", () => {
  2. initializeApp.save();
  3. if (process.platform !== "darwin") {
  4. app.quit();
  5. }
  6. });

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

Komentarze