aboutsummaryrefslogtreecommitdiffstats
path: root/packages/main/src/infrastructure/electron/impl/electronShell.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/main/src/infrastructure/electron/impl/electronShell.ts')
-rw-r--r--packages/main/src/infrastructure/electron/impl/electronShell.ts52
1 files changed, 52 insertions, 0 deletions
diff --git a/packages/main/src/infrastructure/electron/impl/electronShell.ts b/packages/main/src/infrastructure/electron/impl/electronShell.ts
new file mode 100644
index 0000000..da246c0
--- /dev/null
+++ b/packages/main/src/infrastructure/electron/impl/electronShell.ts
@@ -0,0 +1,52 @@
1/*
2 * Copyright (C) 2022 Kristóf Marussy <kristof@marussy.com>
3 *
4 * This file is part of Sophie.
5 *
6 * Sophie is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU Affero General Public License as
8 * published by the Free Software Foundation, version 3.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU Affero General Public License for more details.
14 *
15 * You should have received a copy of the GNU Affero General Public License
16 * along with this program. If not, see <https://www.gnu.org/licenses/>.
17 *
18 * SPDX-License-Identifier: AGPL-3.0-only
19 */
20
21import { writeFile } from 'node:fs/promises';
22
23import { app, dialog, shell } from 'electron';
24import { getLogger } from 'loglevel';
25
26import type MainEnv from '../../../stores/MainEnv.js';
27
28const log = getLogger('ElectronShell');
29
30const electronShell: MainEnv = {
31 openURLInExternalBrowser(url: string): void {
32 shell.openExternal(url).catch((error) => {
33 log.error('Failed to open', url, 'in external program', error);
34 });
35 },
36 openAboutDialog(): void {
37 app.showAboutPanel();
38 },
39 async saveTextFile(filename: string, value: string): Promise<void> {
40 const result = await dialog.showSaveDialog({
41 defaultPath: filename,
42 });
43 if (result.canceled || result.filePath === undefined) {
44 log.debug('Saving file', filename, 'canceled');
45 return;
46 }
47 await writeFile(result.filePath, value, 'utf8');
48 log.debug('Saved file', filename, 'to', result.filePath);
49 },
50};
51
52export default electronShell;