Add a single place to initialize Flipper utilitary folders

Summary: We have several folders Flipper uses that sometimes we forget to create before Flipper starts. With this diff we have a single place to initialise the necessary folder structure.

Reviewed By: lblasa

Differential Revision: D37036601

fbshipit-source-id: f945f2bfdfc6be24ba87bd4b13c7fcef3fd74451
This commit is contained in:
Andrey Goncharov
2022-06-10 06:38:50 -07:00
committed by Facebook GitHub Bot
parent 60f9a5e8de
commit d987e36c62
4 changed files with 31 additions and 12 deletions

View File

@@ -50,6 +50,8 @@ import rm from 'rimraf';
import assert from 'assert'; import assert from 'assert';
import {initializeAdbClient} from './devices/android/adbClient'; import {initializeAdbClient} from './devices/android/adbClient';
import {assertNotNull} from './comms/Utilities'; import {assertNotNull} from './comms/Utilities';
import {mkdirp} from 'fs-extra';
import {flipperDataFolder, flipperSettingsFolder} from './utils/paths';
const {access, copyFile, mkdir, unlink, stat, readlink, readFile, writeFile} = const {access, copyFile, mkdir, unlink, stat, readlink, readFile, writeFile} =
promises; promises;
@@ -167,6 +169,7 @@ export class FlipperServerImpl implements FlipperServer {
this.setServerState('starting'); this.setServerState('starting');
try { try {
await this.createFolders();
await this.server.init(); await this.server.init();
await this.pluginManager.start(); await this.pluginManager.start();
await this.startDeviceListeners(); await this.startDeviceListeners();
@@ -179,6 +182,11 @@ export class FlipperServerImpl implements FlipperServer {
} }
} }
private async createFolders() {
await mkdirp(flipperDataFolder);
await mkdirp(flipperSettingsFolder);
}
async startDeviceListeners() { async startDeviceListeners() {
const asyncDeviceListenersPromises: Array<Promise<void>> = []; const asyncDeviceListenersPromises: Array<Promise<void>> = [];
if (this.config.settings.enableAndroid) { if (this.config.settings.enableAndroid) {

View File

@@ -16,15 +16,15 @@ import {
import path from 'path'; import path from 'path';
import tmp, {FileOptions} from 'tmp'; import tmp, {FileOptions} from 'tmp';
import {reportPlatformFailures} from 'flipper-common'; import {reportPlatformFailures} from 'flipper-common';
import os from 'os';
import {isTest} from 'flipper-common'; import {isTest} from 'flipper-common';
import {flipperDataFolder} from './paths';
const tmpFile = promisify(tmp.file) as ( const tmpFile = promisify(tmp.file) as (
options?: FileOptions, options?: FileOptions,
) => Promise<string>; ) => Promise<string>;
const getFilePath = (fileName: string): string => { const getFilePath = (fileName: string): string => {
return path.resolve(os.homedir(), '.flipper', 'certs', fileName); return path.resolve(flipperDataFolder, 'certs', fileName);
}; };
// Desktop file paths // Desktop file paths

View File

@@ -0,0 +1,18 @@
/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
*/
import path from 'path';
import os from 'os';
import xdg from 'xdg-basedir';
export const flipperDataFolder = path.resolve(os.homedir(), '.flipper');
export const flipperSettingsFolder = path.resolve(
...(xdg.config ? [xdg.config] : [os.homedir(), '.config']),
'flipper',
);

View File

@@ -9,9 +9,9 @@
import os from 'os'; import os from 'os';
import {resolve} from 'path'; import {resolve} from 'path';
import xdg from 'xdg-basedir';
import {Settings, Tristate} from 'flipper-common'; import {Settings, Tristate} from 'flipper-common';
import {readFile, writeFile, pathExists, mkdirp} from 'fs-extra'; import {readFile, writeFile, pathExists, mkdirp} from 'fs-extra';
import {flipperSettingsFolder} from './paths';
export async function loadSettings( export async function loadSettings(
settingsString: string = '', settingsString: string = '',
@@ -36,21 +36,14 @@ export async function loadSettings(
} }
export async function saveSettings(settings: Settings): Promise<void> { export async function saveSettings(settings: Settings): Promise<void> {
await mkdirp(getSettingsDir()); await mkdirp(flipperSettingsFolder);
await writeFile(getSettingsFile(), JSON.stringify(settings, null, 2), { await writeFile(getSettingsFile(), JSON.stringify(settings, null, 2), {
encoding: 'utf8', encoding: 'utf8',
}); });
} }
function getSettingsDir() {
return resolve(
...(xdg.config ? [xdg.config] : [os.homedir(), '.config']),
'flipper',
);
}
function getSettingsFile() { function getSettingsFile() {
return resolve(getSettingsDir(), 'settings.json'); return resolve(flipperSettingsFolder, 'settings.json');
} }
export const DEFAULT_ANDROID_SDK_PATH = getDefaultAndroidSdkPath(); export const DEFAULT_ANDROID_SDK_PATH = getDefaultAndroidSdkPath();