Skip to content

Commit f210de0

Browse files
committed
Added FileSystem.ts and fixed todo section
1 parent 1ee576b commit f210de0

17 files changed

+262
-234
lines changed

electron/IPC/fileSystem.ts

+113
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
import { SendChannels } from "./General/channelsInterface";
2+
import IPC from "./General/IPC";
3+
import { app, BrowserWindow } from "electron";
4+
import { access, writeFile, mkdir, readFile } from 'fs/promises';
5+
import path from "path";
6+
7+
8+
const nameAPI = "fileSystem";
9+
10+
// to Main
11+
const validSendChannel: SendChannels = {
12+
"readFile": readFileTodos,
13+
"saveFile": saveFile
14+
};
15+
16+
// from Main
17+
const validReceiveChannel: string[] = [
18+
"getFile"
19+
];
20+
21+
const fileSystem = new IPC ({
22+
nameAPI,
23+
validSendChannel,
24+
validReceiveChannel
25+
});
26+
27+
export default fileSystem;
28+
29+
async function readFileTodos(mainWindow: BrowserWindow, event: Electron.IpcMainEvent, fileName: any) {
30+
const fileExists = await checkFileTodosExists(fileName);
31+
if (!fileExists) {
32+
await createDir();
33+
const data = `[]`;
34+
await writeTodos(fileName, data);
35+
}
36+
const todos = await loadTodos(fileName);
37+
mainWindow.webContents.send("getFile", todos);
38+
}
39+
40+
async function saveFile(mainWindow: BrowserWindow, event: Electron.IpcMainEvent, data: { fileName: string, todo: string }) {
41+
const { fileName, todo } = {...data};
42+
console.log(fileName);
43+
console.log(todo);
44+
45+
const fileExists = await checkFileTodosExists(fileName);
46+
if (!fileExists) {
47+
await createDir();
48+
}
49+
await writeTodos(fileName, todo);
50+
}
51+
52+
async function checkFileTodosExists(fileName:string) {
53+
const userData = app.getPath('userData');
54+
const pathFile = path.join(userData, 'todos' ,fileName);
55+
try {
56+
await access(pathFile);
57+
return true;
58+
} catch (error) {
59+
console.log("DOES NOT exist:", pathFile);
60+
console.error(error);
61+
return false;
62+
}
63+
}
64+
65+
async function writeTodos(fileName: string, data: string) {
66+
const userData = app.getPath('userData');
67+
const pathFile = path.join(userData, 'todos' ,fileName);
68+
try {
69+
await writeFile(pathFile, data);
70+
} catch (error) {
71+
console.log("await writeFile(pathFile, data);", pathFile);
72+
console.error(error);
73+
}
74+
}
75+
76+
async function createDir() {
77+
const userData = app.getPath('userData');
78+
const pathDir = path.join(userData, 'todos');
79+
let dirExists = false;
80+
try {
81+
await access(pathDir);
82+
dirExists = true;
83+
} catch (error) {
84+
// The check failed
85+
console.log("DOES NOT exist:", pathDir);
86+
console.error(error);
87+
dirExists = false;
88+
}
89+
90+
if (!dirExists) {
91+
try {
92+
await mkdir(pathDir);
93+
} catch (error) {
94+
console.log(" await mkdir(pathDir);", pathDir);
95+
console.error(error);
96+
}
97+
}
98+
}
99+
100+
101+
async function loadTodos(fileName: string) {
102+
const userData = app.getPath('userData');
103+
const pathDir = path.join(userData, 'todos', fileName);
104+
let result = [];
105+
try {
106+
const rawData = await readFile(pathDir, 'utf-8');
107+
result = JSON.parse(rawData);
108+
} catch (err) {
109+
console.error(err);
110+
}
111+
112+
return result;
113+
}

electron/configureDev.ts

+1
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ class ConfigureDev {
4343
_build_Dist() { exec("npm run svelte:build"); }
4444
_watch_Dist() { require("electron-reload")(path.join(__dirname, "www")); }
4545
_serve_Dist() {
46+
// this.loadURL = serve({ directory: pathOnDisk, scheme: "html" });
4647
this.loadURL = serve({ directory: "dist/www" });
4748
}
4849

electron/index.ts

+9-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import Main from "./mainWindow";
44

55
import systemInfo from './IPC/systemInfo';
66
import updaterInfo from './IPC/updaterInfo';
7+
import fileSystem from './IPC/fileSystem';
78

89
const developerOptions = {
910
isInProduction: true, // true if is in production
@@ -12,6 +13,12 @@ const developerOptions = {
1213
watchSvelteBuild: false, // true when you want to watch build svelte
1314
};
1415

16+
/*
17+
testing svelte side: isInProduction: false, serveSvelteDev: true, buildSvelteDev:false, watchSvelteBuild: false
18+
testing only electron side: isInProduction: true, serveSvelteDev: false, buildSvelteDev:false, watchSvelteBuild: false
19+
testing both side: isInProduction: true, serveSvelteDev: false, buildSvelteDev:true, watchSvelteBuild: true
20+
*/
21+
1522
const windowSettings = {
1623
title: "MEMENTO - SvelteKit, Electron, TypeScript",
1724
width: 854,
@@ -23,8 +30,8 @@ let main = new Main(windowSettings, developerOptions);
2330
main.onEvent.on("window-created", async () => {
2431
systemInfo.initIpcMain(ipcMain, main.window);
2532
updaterInfo.initIpcMain(ipcMain, main.window);
26-
33+
fileSystem.initIpcMain(ipcMain, main.window);
34+
2735
updaterInfo.initAutoUpdater(autoUpdater, main.window);
28-
2936
});
3037

electron/mainWindow.ts

+12-2
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,19 @@ class Main {
6666
});
6767

6868
if (this.configDev.isLocalHost()) {
69-
await window.loadURL("http://localhost:3000/");
69+
try {
70+
await window.loadURL("http://localhost:3000/");
71+
} catch (error) {
72+
console.log(`ERROR: window.loadURL("http://localhost:3000/");`)
73+
console.log(error)
74+
}
7075
} else if (this.configDev.isElectronServe()) {
71-
await this.configDev.loadURL(window);
76+
try {
77+
await this.configDev.loadURL(window);
78+
} catch (error) {
79+
console.log(`this.configDev.loadURL(window);`)
80+
console.log(error)
81+
}
7282
}
7383

7484
window.show();

electron/preload.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { generateContextBridge } from "./IPC/General/contextBridge"
22

3-
import systemInfo from "./IPC/systemInfo";
3+
import systemInfo from './IPC/systemInfo';
44
import updaterInfo from './IPC/updaterInfo';
5+
import fileSystem from './IPC/fileSystem';
56

6-
generateContextBridge([systemInfo, updaterInfo]);
7+
generateContextBridge([systemInfo, updaterInfo, fileSystem]);

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"description": "Memento: how to use Svelte with Electron and TypeScript",
55
"author": "Samuele de Tomasi <[email protected]>",
66
"license": "MIT",
7-
"version": "0.0.2",
7+
"version": "0.0.3",
88
"main": "dist/index.js",
99
"scripts": {
1010
"nodemon": "nodemon",

svelte/src/hooks.ts

-23
This file was deleted.

svelte/src/lib/form.ts

+39-30
Original file line numberDiff line numberDiff line change
@@ -12,42 +12,51 @@ export function enhance(
1212
result: (res: Response, form: HTMLFormElement) => void;
1313
}
1414
) {
15-
let current_token: {};
1615

1716
async function handle_submit(e: Event) {
18-
const token = (current_token = {});
19-
2017
e.preventDefault();
21-
18+
console.log("HANDLE_SUBMIT");
19+
console.log(e);
20+
const formData = new FormData(form);
21+
console.log(formData);
22+
console.log(form);
2223
const body = new FormData(form);
23-
2424
if (pending) pending(body, form);
25+
console.log(body);
26+
console.log(form.action);
27+
// const token = (current_token = {});
2528

26-
try {
27-
const res = await fetch(form.action, {
28-
method: form.method,
29-
headers: {
30-
accept: 'application/json'
31-
},
32-
body
33-
});
34-
35-
if (token !== current_token) return;
36-
37-
if (res.ok) {
38-
result(res, form);
39-
} else if (error) {
40-
error(res, null, form);
41-
} else {
42-
console.error(await res.text());
43-
}
44-
} catch (e) {
45-
if (error) {
46-
error(null, e, form);
47-
} else {
48-
throw e;
49-
}
50-
}
29+
// e.preventDefault();
30+
31+
// const body = new FormData(form);
32+
33+
// if (pending) pending(body, form);
34+
35+
// try {
36+
// const res = await fetch(form.action, {
37+
// method: form.method,
38+
// headers: {
39+
// accept: 'application/json'
40+
// },
41+
// body
42+
// });
43+
44+
// if (token !== current_token) return;
45+
46+
// if (res.ok) {
47+
// result(res, form);
48+
// } else if (error) {
49+
// error(res, null, form);
50+
// } else {
51+
// console.error(await res.text());
52+
// }
53+
// } catch (e) {
54+
// if (error) {
55+
// error(null, e, form);
56+
// } else {
57+
// throw e;
58+
// }
59+
// }
5160
}
5261

5362
form.addEventListener('submit', handle_submit);

svelte/src/routes/help/index.svelte

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<script lang="ts">
22
import { slide } from 'svelte/transition';
3-
import Tab from '../../components/tab.svelte';
3+
import Tab from '$lib/components/tab.svelte';
44
55
import Start from './tab/start.svelte';
66
import Command from './tab/command.svelte';

svelte/src/routes/help/tab/renderer.svelte

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<script lang="ts">
2-
import Version from '../../../components/Version.svelte';
3-
import InfoElectron from '../../../components/InfoElectron.svelte';
2+
import Version from '$lib/components/Version.svelte';
3+
import InfoElectron from '$lib/components/InfoElectron.svelte';
44
</script>
55

66
<div>

svelte/src/routes/todos/[uid].json.ts

-16
This file was deleted.

svelte/src/routes/todos/_api.ts

-48
This file was deleted.

0 commit comments

Comments
 (0)