diff options
author | Kristóf Marussy <kristof@marussy.com> | 2022-01-03 01:02:00 +0100 |
---|---|---|
committer | Kristóf Marussy <kristof@marussy.com> | 2022-02-08 21:41:27 +0100 |
commit | 3b7d52abb0e7de00bdf92ee3482a4cae1f6b7d64 (patch) | |
tree | 7122ef45a1fd42c7ab835ab2f2685050de2c45b2 /packages/preload/src/contextBridge | |
parent | chore(deps): update electron to version 17.0.0 (diff) | |
download | sophie-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/preload/src/contextBridge')
-rw-r--r-- | packages/preload/src/contextBridge/__tests__/createSophieRenderer.spec.ts | 27 | ||||
-rw-r--r-- | packages/preload/src/contextBridge/createSophieRenderer.ts | 15 |
2 files changed, 6 insertions, 36 deletions
diff --git a/packages/preload/src/contextBridge/__tests__/createSophieRenderer.spec.ts b/packages/preload/src/contextBridge/__tests__/createSophieRenderer.spec.ts index 88b0077..2652c4e 100644 --- a/packages/preload/src/contextBridge/__tests__/createSophieRenderer.spec.ts +++ b/packages/preload/src/contextBridge/__tests__/createSophieRenderer.spec.ts | |||
@@ -51,10 +51,6 @@ const snapshot: SharedStoreSnapshotIn = { | |||
51 | shouldUseDarkColors: true, | 51 | shouldUseDarkColors: true, |
52 | }; | 52 | }; |
53 | 53 | ||
54 | const invalidSnapshot = { | ||
55 | shouldUseDarkColors: -1, | ||
56 | } as unknown as SharedStoreSnapshotIn; | ||
57 | |||
58 | const patch: IJsonPatch = { | 54 | const patch: IJsonPatch = { |
59 | op: 'replace', | 55 | op: 'replace', |
60 | path: 'foo', | 56 | path: 'foo', |
@@ -121,14 +117,6 @@ describe('SharedStoreConnector', () => { | |||
121 | ).rejects.not.toHaveProperty('message', expect.stringMatching(/s3cr3t/)); | 117 | ).rejects.not.toHaveProperty('message', expect.stringMatching(/s3cr3t/)); |
122 | expect(listener.onSnapshot).not.toHaveBeenCalled(); | 118 | expect(listener.onSnapshot).not.toHaveBeenCalled(); |
123 | }); | 119 | }); |
124 | |||
125 | it('should not pass on invalid snapshots', async () => { | ||
126 | mocked(ipcRenderer.invoke).mockResolvedValueOnce(invalidSnapshot); | ||
127 | await expect(sut.onSharedStoreChange(listener)).rejects.toBeInstanceOf( | ||
128 | Error, | ||
129 | ); | ||
130 | expect(listener.onSnapshot).not.toHaveBeenCalled(); | ||
131 | }); | ||
132 | }); | 120 | }); |
133 | 121 | ||
134 | describe('dispatchAction', () => { | 122 | describe('dispatchAction', () => { |
@@ -220,21 +208,6 @@ describe('SharedStoreConnector', () => { | |||
220 | itDoesNotPassPatchesToTheListener(); | 208 | itDoesNotPassPatchesToTheListener(); |
221 | }); | 209 | }); |
222 | 210 | ||
223 | describe('when a listener failed to register due to an invalid snapshot', () => { | ||
224 | beforeEach(async () => { | ||
225 | mocked(ipcRenderer.invoke).mockResolvedValueOnce(invalidSnapshot); | ||
226 | try { | ||
227 | await sut.onSharedStoreChange(listener); | ||
228 | } catch { | ||
229 | // Ignore error. | ||
230 | } | ||
231 | }); | ||
232 | |||
233 | itRefusesToRegisterAnotherListener(); | ||
234 | |||
235 | itDoesNotPassPatchesToTheListener(); | ||
236 | }); | ||
237 | |||
238 | describe('when a listener failed to register due to listener error', () => { | 211 | describe('when a listener failed to register due to listener error', () => { |
239 | beforeEach(async () => { | 212 | beforeEach(async () => { |
240 | mocked(ipcRenderer.invoke).mockResolvedValueOnce(snapshot); | 213 | mocked(ipcRenderer.invoke).mockResolvedValueOnce(snapshot); |
diff --git a/packages/preload/src/contextBridge/createSophieRenderer.ts b/packages/preload/src/contextBridge/createSophieRenderer.ts index 3174fed..41accfd 100644 --- a/packages/preload/src/contextBridge/createSophieRenderer.ts +++ b/packages/preload/src/contextBridge/createSophieRenderer.ts | |||
@@ -23,8 +23,8 @@ import { | |||
23 | action, | 23 | action, |
24 | MainToRendererIpcMessage, | 24 | MainToRendererIpcMessage, |
25 | RendererToMainIpcMessage, | 25 | RendererToMainIpcMessage, |
26 | sharedStore, | ||
27 | SharedStoreListener, | 26 | SharedStoreListener, |
27 | SharedStoreSnapshotIn, | ||
28 | SophieRenderer, | 28 | SophieRenderer, |
29 | } from '@sophie/shared'; | 29 | } from '@sophie/shared'; |
30 | import { ipcRenderer } from 'electron'; | 30 | import { ipcRenderer } from 'electron'; |
@@ -66,15 +66,12 @@ class SharedStoreConnector { | |||
66 | } catch (error) { | 66 | } catch (error) { |
67 | log.error('Failed to get initial shared store snapshot', error); | 67 | log.error('Failed to get initial shared store snapshot', error); |
68 | } | 68 | } |
69 | if (success) { | 69 | if (!success) { |
70 | if (sharedStore.is(snapshot)) { | 70 | throw new Error('Failed to connect to shared store'); |
71 | listener.onSnapshot(snapshot); | ||
72 | this.listener = listener; | ||
73 | return; | ||
74 | } | ||
75 | log.error('Got invalid initial shared store snapshot', snapshot); | ||
76 | } | 71 | } |
77 | throw new Error('Failed to connect to shared store'); | 72 | // `mobx-state-tree` will validate the snapshot, so we can safely cast here. |
73 | listener.onSnapshot(snapshot as SharedStoreSnapshotIn); | ||
74 | this.listener = listener; | ||
78 | } | 75 | } |
79 | } | 76 | } |
80 | 77 | ||