mirror of
				https://github.com/zulip/zulip-desktop.git
				synced 2025-11-04 05:53:21 +00:00 
			
		
		
		
	Using `import * as` import syntax causes some problem if the module exports a class or function. Because the whole point of star import is to import every property the module exports. It turns out we have been using it incorrectly in many places which this commit fixes. Then we fix a linting error by adding a eslint disable rule to solve it along with a TODO because the way we currently do it is wrong. Finally, to conclude this cleanup, we merge all the .gitignore paths into once now that we can.
		
			
				
	
	
		
			102 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
'use strict';
 | 
						|
import JsonDB from 'node-json-db';
 | 
						|
 | 
						|
import fs = require('fs');
 | 
						|
import path = require('path');
 | 
						|
import electron = require('electron');
 | 
						|
import Logger = require('./logger-util');
 | 
						|
 | 
						|
const logger = new Logger({
 | 
						|
	file: 'config-util.log',
 | 
						|
	timestamp: true
 | 
						|
});
 | 
						|
 | 
						|
let instance: null | ConfigUtil = null;
 | 
						|
let dialog: Electron.Dialog = null;
 | 
						|
let app: Electron.App = null;
 | 
						|
 | 
						|
/* To make the util runnable in both main and renderer process */
 | 
						|
if (process.type === 'renderer') {
 | 
						|
	const { remote } = electron;
 | 
						|
	dialog = remote.dialog;
 | 
						|
	app = remote.app;
 | 
						|
} else {
 | 
						|
	dialog = electron.dialog;
 | 
						|
	app = electron.app;
 | 
						|
}
 | 
						|
 | 
						|
class ConfigUtil {
 | 
						|
	db: JsonDB;
 | 
						|
 | 
						|
	constructor() {
 | 
						|
		if (instance) {
 | 
						|
			return instance;
 | 
						|
		} else {
 | 
						|
			instance = this;
 | 
						|
		}
 | 
						|
 | 
						|
		this.reloadDB();
 | 
						|
		return instance;
 | 
						|
	}
 | 
						|
 | 
						|
	getConfigItem(key: string, defaultValue: any = null): any {
 | 
						|
		try {
 | 
						|
			this.db.reload();
 | 
						|
		} catch (err) {
 | 
						|
			logger.error('Error while reloading settings.json: ');
 | 
						|
			logger.error(err);
 | 
						|
		}
 | 
						|
		const value = this.db.getData('/')[key];
 | 
						|
		if (value === undefined) {
 | 
						|
			this.setConfigItem(key, defaultValue);
 | 
						|
			return defaultValue;
 | 
						|
		} else {
 | 
						|
			return value;
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	// This function returns whether a key exists in the configuration file (settings.json)
 | 
						|
	isConfigItemExists(key: string): boolean {
 | 
						|
		try {
 | 
						|
			this.db.reload();
 | 
						|
		} catch (err) {
 | 
						|
			logger.error('Error while reloading settings.json: ');
 | 
						|
			logger.error(err);
 | 
						|
		}
 | 
						|
		const value = this.db.getData('/')[key];
 | 
						|
		return (value !== undefined);
 | 
						|
	}
 | 
						|
 | 
						|
	setConfigItem(key: string, value: any): void {
 | 
						|
		this.db.push(`/${key}`, value, true);
 | 
						|
		this.db.save();
 | 
						|
	}
 | 
						|
 | 
						|
	removeConfigItem(key: string): void {
 | 
						|
		this.db.delete(`/${key}`);
 | 
						|
		this.db.save();
 | 
						|
	}
 | 
						|
 | 
						|
	reloadDB(): void {
 | 
						|
		const settingsJsonPath = path.join(app.getPath('userData'), '/config/settings.json');
 | 
						|
		try {
 | 
						|
			const file = fs.readFileSync(settingsJsonPath, 'utf8');
 | 
						|
			JSON.parse(file);
 | 
						|
		} catch (err) {
 | 
						|
			if (fs.existsSync(settingsJsonPath)) {
 | 
						|
				fs.unlinkSync(settingsJsonPath);
 | 
						|
				dialog.showErrorBox(
 | 
						|
					'Error saving settings',
 | 
						|
					'We encountered an error while saving the settings.'
 | 
						|
				);
 | 
						|
				logger.error('Error while JSON parsing settings.json: ');
 | 
						|
				logger.error(err);
 | 
						|
				logger.reportSentry(err);
 | 
						|
			}
 | 
						|
		}
 | 
						|
		this.db = new JsonDB(settingsJsonPath, true, true);
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
export = new ConfigUtil();
 |