aboutsummaryrefslogtreecommitdiffstats
path: root/packages/shared/src/stores
diff options
context:
space:
mode:
authorLibravatar Kristóf Marussy <kristof@marussy.com>2022-01-03 01:02:00 +0100
committerLibravatar Kristóf Marussy <kristof@marussy.com>2022-02-08 21:41:27 +0100
commit3b7d52abb0e7de00bdf92ee3482a4cae1f6b7d64 (patch)
tree7122ef45a1fd42c7ab835ab2f2685050de2c45b2 /packages/shared/src/stores
parentchore(deps): update electron to version 17.0.0 (diff)
downloadsophie-3b7d52abb0e7de00bdf92ee3482a4cae1f6b7d64.tar.gz
sophie-3b7d52abb0e7de00bdf92ee3482a4cae1f6b7d64.tar.zst
sophie-3b7d52abb0e7de00bdf92ee3482a4cae1f6b7d64.zip
feat: Add Profile and Service stores
In the main process, it is optional to specify the ID of a Profile or a Service. The missing ID will be filled in with a randomly generated one. Moreover, services without a profile will get a profile generated with the same name. Signed-off-by: Kristóf Marussy <kristof@marussy.com>
Diffstat (limited to 'packages/shared/src/stores')
-rw-r--r--packages/shared/src/stores/Config.ts5
-rw-r--r--packages/shared/src/stores/Profile.ts32
-rw-r--r--packages/shared/src/stores/Service.ts37
3 files changed, 74 insertions, 0 deletions
diff --git a/packages/shared/src/stores/Config.ts b/packages/shared/src/stores/Config.ts
index 1d98a33..1d97e7d 100644
--- a/packages/shared/src/stores/Config.ts
+++ b/packages/shared/src/stores/Config.ts
@@ -22,7 +22,12 @@ import { Instance, types, SnapshotIn, SnapshotOut } from 'mobx-state-tree';
22 22
23import { themeSource } from '../schemas'; 23import { themeSource } from '../schemas';
24 24
25import { profile } from './Profile';
26import { service } from './Service';
27
25export const config = types.model('Config', { 28export const config = types.model('Config', {
29 profiles: types.array(profile),
30 services: types.array(service),
26 themeSource: types.optional(types.enumeration(themeSource.options), 'system'), 31 themeSource: types.optional(types.enumeration(themeSource.options), 'system'),
27}); 32});
28 33
diff --git a/packages/shared/src/stores/Profile.ts b/packages/shared/src/stores/Profile.ts
new file mode 100644
index 0000000..88a0f4d
--- /dev/null
+++ b/packages/shared/src/stores/Profile.ts
@@ -0,0 +1,32 @@
1/*
2 * Copyright (C) 2021-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 { Instance, types, SnapshotIn, SnapshotOut } from 'mobx-state-tree';
22
23export const profile = types.model('Profile', {
24 id: types.identifier,
25 name: types.string,
26});
27
28export interface Profile extends Instance<typeof profile> {}
29
30export interface ProfileSnapshotIn extends SnapshotIn<typeof profile> {}
31
32export interface ProfileSnapshotOut extends SnapshotOut<typeof profile> {}
diff --git a/packages/shared/src/stores/Service.ts b/packages/shared/src/stores/Service.ts
new file mode 100644
index 0000000..ed2cd9a
--- /dev/null
+++ b/packages/shared/src/stores/Service.ts
@@ -0,0 +1,37 @@
1/*
2 * Copyright (C) 2021-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 { Instance, types, SnapshotIn, SnapshotOut } from 'mobx-state-tree';
22
23import { profile } from './Profile';
24
25export const service = types.model('Service', {
26 id: types.identifier,
27 name: types.string,
28 profile: types.reference(profile),
29 // TODO: Remove this once recipes are added.
30 url: types.string,
31});
32
33export interface Service extends Instance<typeof service> {}
34
35export interface ServiceSnapshotIn extends SnapshotIn<typeof service> {}
36
37export interface ServiceSnapshotOut extends SnapshotOut<typeof service> {}