aboutsummaryrefslogtreecommitdiffstats
path: root/packages/main/src/controllers/config.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/main/src/controllers/config.ts')
-rw-r--r--packages/main/src/controllers/config.ts32
1 files changed, 11 insertions, 21 deletions
diff --git a/packages/main/src/controllers/config.ts b/packages/main/src/controllers/config.ts
index f2467c7..600a142 100644
--- a/packages/main/src/controllers/config.ts
+++ b/packages/main/src/controllers/config.ts
@@ -28,17 +28,16 @@ import { Disposer, getLogger } from '../utils';
28 28
29const DEFAULT_CONFIG_DEBOUNCE_TIME = ms('1s'); 29const DEFAULT_CONFIG_DEBOUNCE_TIME = ms('1s');
30 30
31const logger = getLogger('controller:config'); 31const log = getLogger('config');
32 32
33export async function initConfig( 33export async function initConfig(
34 config: Config, 34 config: Config,
35 persistenceService: ConfigPersistenceService, 35 persistenceService: ConfigPersistenceService,
36 debounceTime: number = DEFAULT_CONFIG_DEBOUNCE_TIME, 36 debounceTime: number = DEFAULT_CONFIG_DEBOUNCE_TIME,
37): Promise<Disposer> { 37): Promise<Disposer> {
38 logger.debug('Initializing controller'); 38 log.trace('Initializing config controller');
39 39
40 let lastSnapshotOnDisk: ConfigSnapshotOut | null = null; 40 let lastSnapshotOnDisk: ConfigSnapshotOut | null = null;
41 let writingConfig: boolean = false;
42 41
43 async function readConfig(): Promise<boolean> { 42 async function readConfig(): Promise<boolean> {
44 const result = await persistenceService.readConfig(); 43 const result = await persistenceService.readConfig();
@@ -46,9 +45,8 @@ export async function initConfig(
46 try { 45 try {
47 applySnapshot(config, result.data); 46 applySnapshot(config, result.data);
48 lastSnapshotOnDisk = getSnapshot(config); 47 lastSnapshotOnDisk = getSnapshot(config);
49 logger.debug('Loaded config');
50 } catch (err) { 48 } catch (err) {
51 logger.error('Failed to read config', result.data, err); 49 log.error('Failed to apply config snapshot', result.data, err);
52 } 50 }
53 } 51 }
54 return result.found; 52 return result.found;
@@ -56,23 +54,17 @@ export async function initConfig(
56 54
57 async function writeConfig(): Promise<void> { 55 async function writeConfig(): Promise<void> {
58 const snapshot = getSnapshot(config); 56 const snapshot = getSnapshot(config);
59 writingConfig = true; 57 await persistenceService.writeConfig(snapshot);
60 try { 58 lastSnapshotOnDisk = snapshot;
61 await persistenceService.writeConfig(snapshot);
62 lastSnapshotOnDisk = snapshot;
63 logger.debug('Wrote config');
64 } finally {
65 writingConfig = false;
66 }
67 } 59 }
68 60
69 if (!await readConfig()) { 61 if (!await readConfig()) {
70 logger.info('Config file was not found'); 62 log.info('Config file was not found');
71 try { 63 try {
72 await writeConfig(); 64 await writeConfig();
73 logger.info('Created config file'); 65 log.info('Created config file');
74 } catch (err) { 66 } catch (err) {
75 logger.error('Failed to initialize config'); 67 log.error('Failed to initialize config', err);
76 } 68 }
77 } 69 }
78 70
@@ -80,19 +72,17 @@ export async function initConfig(
80 // We can compare snapshots by reference, since it is only recreated on store changes. 72 // We can compare snapshots by reference, since it is only recreated on store changes.
81 if (lastSnapshotOnDisk !== snapshot) { 73 if (lastSnapshotOnDisk !== snapshot) {
82 writeConfig().catch((err) => { 74 writeConfig().catch((err) => {
83 logger.error('Failed to write config on config change', err); 75 log.error('Failed to write config on config change', err);
84 }) 76 })
85 } 77 }
86 }, debounceTime)); 78 }, debounceTime));
87 79
88 const disposeWatcher = persistenceService.watchConfig(async () => { 80 const disposeWatcher = persistenceService.watchConfig(async () => {
89 if (!writingConfig) { 81 await readConfig();
90 await readConfig();
91 }
92 }, debounceTime); 82 }, debounceTime);
93 83
94 return () => { 84 return () => {
95 logger.debug('Disposing controller'); 85 log.trace('Disposing config controller');
96 disposeWatcher(); 86 disposeWatcher();
97 disposeOnSnapshot(); 87 disposeOnSnapshot();
98 }; 88 };