Hide PWA app from Spotlight
Reviewed By: LukeDefeo Differential Revision: D50411182 fbshipit-source-id: 46c089c69aefb58f85a861c7898ee355f094e03c
This commit is contained in:
committed by
Facebook GitHub Bot
parent
a8be443670
commit
aea77cc4da
@@ -380,6 +380,7 @@ export type FlipperServerCommands = {
|
|||||||
shutdown: () => Promise<void>;
|
shutdown: () => Promise<void>;
|
||||||
'is-logged-in': () => Promise<boolean>;
|
'is-logged-in': () => Promise<boolean>;
|
||||||
'environment-info': () => Promise<EnvironmentInfo>;
|
'environment-info': () => Promise<EnvironmentInfo>;
|
||||||
|
'move-pwa': () => Promise<void>;
|
||||||
};
|
};
|
||||||
|
|
||||||
export type GraphResponse = {
|
export type GraphResponse = {
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ import {flipperDataFolder, flipperSettingsFolder} from './utils/paths';
|
|||||||
import {DebuggableDevice} from './devices/DebuggableDevice';
|
import {DebuggableDevice} from './devices/DebuggableDevice';
|
||||||
import {jfUpload} from './fb-stubs/jf';
|
import {jfUpload} from './fb-stubs/jf';
|
||||||
import path from 'path';
|
import path from 'path';
|
||||||
|
import {movePWA} from './utils/findInstallation';
|
||||||
|
|
||||||
const {access, copyFile, mkdir, unlink, stat, readlink, readFile, writeFile} =
|
const {access, copyFile, mkdir, unlink, stat, readlink, readFile, writeFile} =
|
||||||
promises;
|
promises;
|
||||||
@@ -597,6 +598,9 @@ export class FlipperServerImpl implements FlipperServer {
|
|||||||
'environment-info': async () => {
|
'environment-info': async () => {
|
||||||
return this.config.environmentInfo;
|
return this.config.environmentInfo;
|
||||||
},
|
},
|
||||||
|
'move-pwa': async () => {
|
||||||
|
await movePWA();
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
registerDevice(device: ServerDevice) {
|
registerDevice(device: ServerDevice) {
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ export * from './tracker';
|
|||||||
export {loadLauncherSettings} from './utils/launcherSettings';
|
export {loadLauncherSettings} from './utils/launcherSettings';
|
||||||
export {loadProcessConfig} from './utils/processConfig';
|
export {loadProcessConfig} from './utils/processConfig';
|
||||||
export {getEnvironmentInfo} from './utils/environmentInfo';
|
export {getEnvironmentInfo} from './utils/environmentInfo';
|
||||||
|
export {findInstallation} from './utils/findInstallation';
|
||||||
export {getGatekeepers} from './gk';
|
export {getGatekeepers} from './gk';
|
||||||
export {setupPrefetcher} from './fb-stubs/Prefetcher';
|
export {setupPrefetcher} from './fb-stubs/Prefetcher';
|
||||||
export * from './server/attachSocketServer';
|
export * from './server/attachSocketServer';
|
||||||
|
|||||||
77
desktop/flipper-server-core/src/utils/findInstallation.tsx
Normal file
77
desktop/flipper-server-core/src/utils/findInstallation.tsx
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
/**
|
||||||
|
* 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 fs from 'fs-extra';
|
||||||
|
import os from 'os';
|
||||||
|
import GK from '../fb-stubs/GK';
|
||||||
|
|
||||||
|
const pwaRoot = path.join(
|
||||||
|
os.homedir(),
|
||||||
|
'Applications',
|
||||||
|
'Chrome Apps.localized',
|
||||||
|
);
|
||||||
|
const appFolder = path.resolve(pwaRoot, '.flipper');
|
||||||
|
const defaultAppPath = path.join(pwaRoot, 'Flipper.app');
|
||||||
|
const movedAppPath = path.join(appFolder, 'Flipper.app');
|
||||||
|
|
||||||
|
export async function movePWA(): Promise<void> {
|
||||||
|
if (os.platform() !== 'darwin') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!GK.get('flipper_move_pwa')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Move PWA into its own folder
|
||||||
|
// Later we will make the folder hidden so Spotlight stops indexing it
|
||||||
|
// Sadly, Spotlight can stop indexing only hidden folder, not hidden files
|
||||||
|
// Therefore, we have to create this parent folder in the first place.
|
||||||
|
if (!(await fs.pathExists(appFolder))) {
|
||||||
|
await fs.mkdir(appFolder);
|
||||||
|
}
|
||||||
|
await fs.move(defaultAppPath, movedAppPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function findInstallation(): Promise<string | undefined> {
|
||||||
|
if (os.platform() !== 'darwin') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (GK.get('flipper_move_pwa')) {
|
||||||
|
if (await fs.pathExists(defaultAppPath)) {
|
||||||
|
await movePWA();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
console.error('Failed to move PWA', e);
|
||||||
|
} finally {
|
||||||
|
if (GK.get('flipper_move_pwa')) {
|
||||||
|
const movedAppPlistPath = path.join(
|
||||||
|
movedAppPath,
|
||||||
|
'Contents',
|
||||||
|
'Info.plist',
|
||||||
|
);
|
||||||
|
if (await fs.pathExists(movedAppPlistPath)) {
|
||||||
|
return movedAppPath;
|
||||||
|
}
|
||||||
|
// We should get here only if moving PWA failed
|
||||||
|
}
|
||||||
|
const dafaultAppPlistPath = path.join(
|
||||||
|
defaultAppPath,
|
||||||
|
'Contents',
|
||||||
|
'Info.plist',
|
||||||
|
);
|
||||||
|
if (await fs.pathExists(dafaultAppPlistPath)) {
|
||||||
|
return defaultAppPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
/**
|
|
||||||
* 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 fs from 'fs-extra';
|
|
||||||
import os from 'os';
|
|
||||||
|
|
||||||
export async function findInstallation(): Promise<string | undefined> {
|
|
||||||
if (os.platform() !== 'darwin') {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const appPath = path.join(
|
|
||||||
os.homedir(),
|
|
||||||
'Applications',
|
|
||||||
'Chrome Apps.localized',
|
|
||||||
'Flipper.app',
|
|
||||||
);
|
|
||||||
const appPlistPath = path.join(appPath, 'Contents', 'Info.plist');
|
|
||||||
if (await fs.pathExists(appPlistPath)) {
|
|
||||||
return appPath;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -31,8 +31,7 @@ import {
|
|||||||
} from 'flipper-server-core';
|
} from 'flipper-server-core';
|
||||||
import {addLogTailer, isTest, LoggerFormat} from 'flipper-common';
|
import {addLogTailer, isTest, LoggerFormat} from 'flipper-common';
|
||||||
import exitHook from 'exit-hook';
|
import exitHook from 'exit-hook';
|
||||||
import {getAuthToken} from 'flipper-server-core';
|
import {getAuthToken, findInstallation} from 'flipper-server-core';
|
||||||
import {findInstallation} from './findInstallation';
|
|
||||||
|
|
||||||
const argv = yargs
|
const argv = yargs
|
||||||
.usage('yarn flipper-server [args]')
|
.usage('yarn flipper-server [args]')
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ async function install(event: any) {
|
|||||||
if (choiceResult.outcome === 'accepted') {
|
if (choiceResult.outcome === 'accepted') {
|
||||||
tracker.track('pwa-install-outcome', {installed: true});
|
tracker.track('pwa-install-outcome', {installed: true});
|
||||||
console.log('PWA installation, user accepted the prompt.');
|
console.log('PWA installation, user accepted the prompt.');
|
||||||
|
return getRenderHostInstance().flipperServer.exec('move-pwa');
|
||||||
} else {
|
} else {
|
||||||
tracker.track('pwa-install-outcome', {installed: false});
|
tracker.track('pwa-install-outcome', {installed: false});
|
||||||
console.log('PWA installation, user dismissed the prompt.');
|
console.log('PWA installation, user dismissed the prompt.');
|
||||||
|
|||||||
Reference in New Issue
Block a user