Skip to content
This repository has been archived by the owner on Nov 22, 2024. It is now read-only.

Commit

Permalink
Hide PWA app from Spotlight
Browse files Browse the repository at this point in the history
Reviewed By: LukeDefeo

Differential Revision: D50411182

fbshipit-source-id: 46c089c69aefb58f85a861c7898ee355f094e03c
  • Loading branch information
aigoncharov authored and facebook-github-bot committed Oct 20, 2023
1 parent a8be443 commit aea77cc
Show file tree
Hide file tree
Showing 7 changed files with 85 additions and 31 deletions.
1 change: 1 addition & 0 deletions desktop/flipper-common/src/server-types.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -380,6 +380,7 @@ export type FlipperServerCommands = {
shutdown: () => Promise<void>;
'is-logged-in': () => Promise<boolean>;
'environment-info': () => Promise<EnvironmentInfo>;
'move-pwa': () => Promise<void>;
};

export type GraphResponse = {
Expand Down
4 changes: 4 additions & 0 deletions desktop/flipper-server-core/src/FlipperServerImpl.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ import {flipperDataFolder, flipperSettingsFolder} from './utils/paths';
import {DebuggableDevice} from './devices/DebuggableDevice';
import {jfUpload} from './fb-stubs/jf';
import path from 'path';
import {movePWA} from './utils/findInstallation';

const {access, copyFile, mkdir, unlink, stat, readlink, readFile, writeFile} =
promises;
Expand Down Expand Up @@ -597,6 +598,9 @@ export class FlipperServerImpl implements FlipperServer {
'environment-info': async () => {
return this.config.environmentInfo;
},
'move-pwa': async () => {
await movePWA();
},
};

registerDevice(device: ServerDevice) {
Expand Down
1 change: 1 addition & 0 deletions desktop/flipper-server-core/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ export * from './tracker';
export {loadLauncherSettings} from './utils/launcherSettings';
export {loadProcessConfig} from './utils/processConfig';
export {getEnvironmentInfo} from './utils/environmentInfo';
export {findInstallation} from './utils/findInstallation';
export {getGatekeepers} from './gk';
export {setupPrefetcher} from './fb-stubs/Prefetcher';
export * from './server/attachSocketServer';
Expand Down
77 changes: 77 additions & 0 deletions desktop/flipper-server-core/src/utils/findInstallation.tsx
Original file line number Diff line number Diff line change
@@ -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;
}
}
}
29 changes: 0 additions & 29 deletions desktop/flipper-server/src/findInstallation.tsx

This file was deleted.

3 changes: 1 addition & 2 deletions desktop/flipper-server/src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,7 @@ import {
} from 'flipper-server-core';
import {addLogTailer, isTest, LoggerFormat} from 'flipper-common';
import exitHook from 'exit-hook';
import {getAuthToken} from 'flipper-server-core';
import {findInstallation} from './findInstallation';
import {getAuthToken, findInstallation} from 'flipper-server-core';

const argv = yargs
.usage('yarn flipper-server [args]')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,7 @@ async function install(event: any) {
if (choiceResult.outcome === 'accepted') {
tracker.track('pwa-install-outcome', {installed: true});
console.log('PWA installation, user accepted the prompt.');
return getRenderHostInstance().flipperServer.exec('move-pwa');
} else {
tracker.track('pwa-install-outcome', {installed: false});
console.log('PWA installation, user dismissed the prompt.');
Expand Down

0 comments on commit aea77cc

Please sign in to comment.