diff --git a/desktop/app/src/Client.tsx b/desktop/app/src/Client.tsx index 49adeab8a..53c5bb3aa 100644 --- a/desktop/app/src/Client.tsx +++ b/desktop/app/src/Client.tsx @@ -222,7 +222,7 @@ export default class Client extends EventEmitter { isEnabledPlugin(pluginId: string) { return this.store .getState() - .connections.userStarredPlugins[this.query.app]?.includes(pluginId); + .connections.enabledPlugins[this.query.app]?.includes(pluginId); } shouldConnectAsBackgroundPlugin(pluginId: string) { @@ -294,7 +294,7 @@ export default class Client extends EventEmitter { plugin: PluginDefinition | undefined, isEnabled = plugin ? this.isEnabledPlugin(plugin.id) : false, ) { - // start a plugin on start if it is a SandyPlugin, which is starred, and doesn't have persisted state yet + // start a plugin on start if it is a SandyPlugin, which is enabled, and doesn't have persisted state yet if ( isSandyPlugin(plugin) && (isEnabled || defaultEnabledBackgroundPlugins.includes(plugin.id)) && @@ -375,7 +375,7 @@ export default class Client extends EventEmitter { !newBackgroundPlugins.includes(plugin) && this.store .getState() - .connections.userStarredPlugins[this.query.app]?.includes(plugin) + .connections.enabledPlugins[this.query.app]?.includes(plugin) ) { this.deinitPlugin(plugin); } diff --git a/desktop/app/src/PluginContainer.tsx b/desktop/app/src/PluginContainer.tsx index d4d9c5bf2..09b91993c 100644 --- a/desktop/app/src/PluginContainer.tsx +++ b/desktop/app/src/PluginContainer.tsx @@ -32,9 +32,9 @@ import { import { StaticView, setStaticView, - pluginIsStarred, + isPluginEnabled, } from './reducers/connections'; -import {starPlugin} from './reducers/pluginManager'; +import {switchPlugin} from './reducers/pluginManager'; import React, {PureComponent} from 'react'; import {connect, ReactReduxContext} from 'react-redux'; import {setPluginState} from './reducers/pluginStates'; @@ -127,7 +127,7 @@ type DispatchFromProps = { }) => any; setPluginState: (payload: {pluginKey: string; state: any}) => void; setStaticView: (payload: StaticView) => void; - starPlugin: typeof starPlugin; + enablePlugin: typeof switchPlugin; loadPlugin: typeof loadPlugin; }; @@ -315,7 +315,7 @@ class PluginContainer extends PureComponent { { - this.props.starPlugin({ + this.props.enablePlugin({ plugin: activePlugin, selectedApp: (this.props.target as Client)?.query?.app, }); @@ -552,8 +552,8 @@ export default connect( selectedApp, clients, deepLinkPayload, - userStarredPlugins, - userStarredDevicePlugins, + enabledPlugins, + enabledDevicePlugins, }, pluginStates, plugins: {devicePlugins, clientPlugins, installedPlugins}, @@ -580,9 +580,9 @@ export default connect( } pluginIsEnabled = activePlugin !== undefined && - pluginIsStarred( - userStarredPlugins, - userStarredDevicePlugins, + isPluginEnabled( + enabledPlugins, + enabledDevicePlugins, selectedApp, activePlugin.id, ); @@ -619,7 +619,7 @@ export default connect( setPluginState, selectPlugin, setStaticView, - starPlugin, - loadPlugin: loadPlugin, + enablePlugin: switchPlugin, + loadPlugin, }, )(PluginContainer); diff --git a/desktop/app/src/__tests__/PluginContainer.node.tsx b/desktop/app/src/__tests__/PluginContainer.node.tsx index bb1cba385..428f2d697 100644 --- a/desktop/app/src/__tests__/PluginContainer.node.tsx +++ b/desktop/app/src/__tests__/PluginContainer.node.tsx @@ -23,7 +23,7 @@ import { } from 'flipper-plugin'; import {selectPlugin} from '../reducers/connections'; import {updateSettings} from '../reducers/settings'; -import {starPlugin} from '../reducers/pluginManager'; +import {switchPlugin} from '../reducers/pluginManager'; interface PersistedState { count: 1; @@ -287,7 +287,7 @@ test('PluginContainer can render Sandy plugins', async () => { // disable act(() => { store.dispatch( - starPlugin({ + switchPlugin({ plugin: definition, selectedApp: client.query.app, }), @@ -302,7 +302,7 @@ test('PluginContainer can render Sandy plugins', async () => { // re-enable act(() => { store.dispatch( - starPlugin({ + switchPlugin({ plugin: definition, selectedApp: client.query.app, }), @@ -402,7 +402,7 @@ test('PluginContainer triggers correct lifecycles for background plugin', async // disable act(() => { store.dispatch( - starPlugin({ + switchPlugin({ plugin: definition, selectedApp: client.query.app, }), @@ -427,7 +427,7 @@ test('PluginContainer triggers correct lifecycles for background plugin', async // re-enable act(() => { store.dispatch( - starPlugin({ + switchPlugin({ plugin: definition, selectedApp: client.query.app, }), @@ -962,7 +962,7 @@ test('Sandy plugins support isPluginSupported + selectPlugin', async () => { expect(linksSeen).toEqual([]); // star and navigate to a device plugin - store.dispatch(starPlugin({plugin: definition3})); + store.dispatch(switchPlugin({plugin: definition3})); pluginInstance.selectPlugin(definition3.id); expect(pluginInstance.isPluginAvailable(definition3.id)).toBeTruthy(); expect(store.getState().connections.selectedPlugin).toBe(definition3.id); @@ -984,13 +984,13 @@ test('Sandy plugins support isPluginSupported + selectPlugin', async () => { `); expect(linksSeen).toEqual(['data']); - // try to go to plugin 2, fails (not starred, so no-op) + // try to go to plugin 2, fails (not enabled, so no-op) pluginInstance.selectPlugin(definition2.id); expect(store.getState().connections.selectedPlugin).toBe(definition.id); // star plugin 2 and navigate to plugin 2 store.dispatch( - starPlugin({ + switchPlugin({ plugin: definition2, selectedApp: client.query.app, }), diff --git a/desktop/app/src/__tests__/__snapshots__/createMockFlipperWithPlugin.node.tsx.snap b/desktop/app/src/__tests__/__snapshots__/createMockFlipperWithPlugin.node.tsx.snap index c680a879e..654dfd6a4 100644 --- a/desktop/app/src/__tests__/__snapshots__/createMockFlipperWithPlugin.node.tsx.snap +++ b/desktop/app/src/__tests__/__snapshots__/createMockFlipperWithPlugin.node.tsx.snap @@ -24,6 +24,18 @@ Object { "title": "MockAndroidDevice", }, ], + "enabledDevicePlugins": Set { + "DeviceLogs", + "CrashReporter", + "MobileBuilds", + "Hermesdebuggerrn", + "React", + }, + "enabledPlugins": Object { + "TestApp": Array [ + "TestPlugin", + ], + }, "selectedApp": "TestApp#Android#MockAndroidDevice#serial", "selectedDevice": Object { "deviceType": "physical", @@ -37,18 +49,6 @@ Object { "userPreferredApp": "TestApp#Android#MockAndroidDevice#serial", "userPreferredDevice": "MockAndroidDevice", "userPreferredPlugin": "TestPlugin", - "userStarredDevicePlugins": Set { - "DeviceLogs", - "CrashReporter", - "MobileBuilds", - "Hermesdebuggerrn", - "React", - }, - "userStarredPlugins": Object { - "TestApp": Array [ - "TestPlugin", - ], - }, } `; diff --git a/desktop/app/src/__tests__/disconnect.node.tsx b/desktop/app/src/__tests__/disconnect.node.tsx index e4e9f019c..70a711d09 100644 --- a/desktop/app/src/__tests__/disconnect.node.tsx +++ b/desktop/app/src/__tests__/disconnect.node.tsx @@ -111,7 +111,7 @@ test('New device with same serial removes & cleans the old one', async () => { }); device2.loadDevicePlugins( store.getState().plugins.devicePlugins, - store.getState().connections.userStarredDevicePlugins, + store.getState().connections.enabledDevicePlugins, ); expect(device.isArchived).toBe(false); diff --git a/desktop/app/src/dispatcher/__tests__/pluginManager.node.tsx b/desktop/app/src/dispatcher/__tests__/pluginManager.node.tsx index d60e9782f..868901fd4 100644 --- a/desktop/app/src/dispatcher/__tests__/pluginManager.node.tsx +++ b/desktop/app/src/dispatcher/__tests__/pluginManager.node.tsx @@ -11,7 +11,7 @@ jest.mock('../plugins'); jest.mock('../../utils/electronModuleCache'); import { loadPlugin, - starPlugin, + switchPlugin, uninstallPlugin, } from '../../reducers/pluginManager'; import {requirePlugin} from '../plugins'; @@ -189,35 +189,35 @@ test('star plugin', async () => { loadPlugin({plugin: pluginDetails1, enable: false, notifyIfFailed: false}), ); mockFlipper.dispatch( - starPlugin({ + switchPlugin({ plugin: pluginDefinition1, selectedApp: mockClient.query.app, }), ); expect( - mockFlipper.getState().connections.userStarredPlugins[mockClient.query.app], + mockFlipper.getState().connections.enabledPlugins[mockClient.query.app], ).toContain('plugin1'); expect(mockClient.sandyPluginStates.has('plugin1')).toBeTruthy(); }); -test('unstar plugin', async () => { +test('disable plugin', async () => { mockFlipper.dispatch( loadPlugin({plugin: pluginDetails1, enable: false, notifyIfFailed: false}), ); mockFlipper.dispatch( - starPlugin({ + switchPlugin({ plugin: pluginDefinition1, selectedApp: mockClient.query.app, }), ); mockFlipper.dispatch( - starPlugin({ + switchPlugin({ plugin: pluginDefinition1, selectedApp: mockClient.query.app, }), ); expect( - mockFlipper.getState().connections.userStarredPlugins[mockClient.query.app], + mockFlipper.getState().connections.enabledPlugins[mockClient.query.app], ).not.toContain('plugin1'); expect(mockClient.sandyPluginStates.has('plugin1')).toBeFalsy(); }); @@ -231,17 +231,17 @@ test('star device plugin', async () => { }), ); mockFlipper.dispatch( - starPlugin({ + switchPlugin({ plugin: devicePluginDefinition, }), ); expect( - mockFlipper.getState().connections.userStarredDevicePlugins.has('device'), + mockFlipper.getState().connections.enabledDevicePlugins.has('device'), ).toBeTruthy(); expect(mockDevice.sandyPluginStates.has('device')).toBeTruthy(); }); -test('unstar device plugin', async () => { +test('disable device plugin', async () => { mockFlipper.dispatch( loadPlugin({ plugin: devicePluginDetails, @@ -250,17 +250,17 @@ test('unstar device plugin', async () => { }), ); mockFlipper.dispatch( - starPlugin({ + switchPlugin({ plugin: devicePluginDefinition, }), ); mockFlipper.dispatch( - starPlugin({ + switchPlugin({ plugin: devicePluginDefinition, }), ); expect( - mockFlipper.getState().connections.userStarredDevicePlugins.has('device'), + mockFlipper.getState().connections.enabledDevicePlugins.has('device'), ).toBeFalsy(); expect(mockDevice.sandyPluginStates.has('device')).toBeFalsy(); }); diff --git a/desktop/app/src/dispatcher/androidDevice.tsx b/desktop/app/src/dispatcher/androidDevice.tsx index 0ed6bac0d..86b7bfae4 100644 --- a/desktop/app/src/dispatcher/androidDevice.tsx +++ b/desktop/app/src/dispatcher/androidDevice.tsx @@ -242,7 +242,7 @@ export default (store: Store, logger: Logger) => { androidDevice.loadDevicePlugins( store.getState().plugins.devicePlugins, - store.getState().connections.userStarredDevicePlugins, + store.getState().connections.enabledDevicePlugins, ); store.dispatch({ type: 'REGISTER_DEVICE', diff --git a/desktop/app/src/dispatcher/desktopDevice.tsx b/desktop/app/src/dispatcher/desktopDevice.tsx index 3229d5cb3..27bc69be9 100644 --- a/desktop/app/src/dispatcher/desktopDevice.tsx +++ b/desktop/app/src/dispatcher/desktopDevice.tsx @@ -24,7 +24,7 @@ export default (store: Store, _logger: Logger) => { } device.loadDevicePlugins( store.getState().plugins.devicePlugins, - store.getState().connections.userStarredDevicePlugins, + store.getState().connections.enabledDevicePlugins, ); store.dispatch({ type: 'REGISTER_DEVICE', diff --git a/desktop/app/src/dispatcher/iOSDevice.tsx b/desktop/app/src/dispatcher/iOSDevice.tsx index 6ca96cd5a..90c455996 100644 --- a/desktop/app/src/dispatcher/iOSDevice.tsx +++ b/desktop/app/src/dispatcher/iOSDevice.tsx @@ -136,7 +136,7 @@ function processDevices( const iOSDevice = new IOSDevice(udid, type, name); iOSDevice.loadDevicePlugins( store.getState().plugins.devicePlugins, - store.getState().connections.userStarredDevicePlugins, + store.getState().connections.enabledDevicePlugins, ); store.dispatch({ type: 'REGISTER_DEVICE', diff --git a/desktop/app/src/dispatcher/metroDevice.tsx b/desktop/app/src/dispatcher/metroDevice.tsx index d57d7f0bd..10d39f219 100644 --- a/desktop/app/src/dispatcher/metroDevice.tsx +++ b/desktop/app/src/dispatcher/metroDevice.tsx @@ -59,7 +59,7 @@ export async function registerMetroDevice( metroDevice.loadDevicePlugins( store.getState().plugins.devicePlugins, - store.getState().connections.userStarredDevicePlugins, + store.getState().connections.enabledDevicePlugins, ); store.dispatch({ type: 'REGISTER_DEVICE', diff --git a/desktop/app/src/dispatcher/pluginDownloads.tsx b/desktop/app/src/dispatcher/pluginDownloads.tsx index 48e10d361..f246afd08 100644 --- a/desktop/app/src/dispatcher/pluginDownloads.tsx +++ b/desktop/app/src/dispatcher/pluginDownloads.tsx @@ -165,7 +165,7 @@ function pluginIsDisabledForAllConnectedClients( return ( !state.plugins.clientPlugins.has(plugin.id) || !state.connections.clients.some((c) => - state.connections.userStarredPlugins[c.query.app]?.includes(plugin.id), + state.connections.enabledPlugins[c.query.app]?.includes(plugin.id), ) ); } diff --git a/desktop/app/src/dispatcher/pluginManager.tsx b/desktop/app/src/dispatcher/pluginManager.tsx index a80516752..92672e70d 100644 --- a/desktop/app/src/dispatcher/pluginManager.tsx +++ b/desktop/app/src/dispatcher/pluginManager.tsx @@ -15,7 +15,7 @@ import { UninstallPluginActionPayload, UpdatePluginActionPayload, pluginCommandsProcessed, - StarPluginActionPayload, + SwitchPluginActionPayload, PluginCommand, } from '../reducers/pluginManager'; import { @@ -42,10 +42,10 @@ import { } from '../reducers/plugins'; import {_SandyPluginDefinition} from 'flipper-plugin'; import { - devicePluginStarred, - devicePluginUnstarred, - pluginStarred, - pluginUnstarred, + setDevicePluginEnabled, + setDevicePluginDisabled, + setPluginEnabled, + setPluginDisabled, } from '../reducers/connections'; import {deconstructClientId} from '../utils/clientUtils'; import {clearMessageQueue} from '../reducers/pluginMessageQueue'; @@ -112,8 +112,8 @@ export function processPluginCommandsQueue( case 'UPDATE_PLUGIN': updatePlugin(store, command.payload); break; - case 'STAR_PLUGIN': - starPlugin(store, command.payload); + case 'SWITCH_PLUGIN': + switchPlugin(store, command.payload); break; default: console.error('Unexpected plugin command', command); @@ -181,18 +181,18 @@ function getSelectedAppId(store: Store) { return selectedApp; } -function starPlugin( +function switchPlugin( store: Store, - {plugin, selectedApp}: StarPluginActionPayload, + {plugin, selectedApp}: SwitchPluginActionPayload, ) { if (isDevicePluginDefinition(plugin)) { - starDevicePlugin(store, plugin); + switchDevicePlugin(store, plugin); } else { - starClientPlugin(store, plugin, selectedApp); + switchClientPlugin(store, plugin, selectedApp); } } -function starClientPlugin( +function switchClientPlugin( store: Store, plugin: ClientPluginDefinition, selectedApp: string | undefined, @@ -205,7 +205,7 @@ function starClientPlugin( const clients = connections.clients.filter( (client) => client.query.app === selectedApp, ); - if (connections.userStarredPlugins[selectedApp]?.includes(plugin.id)) { + if (connections.enabledPlugins[selectedApp]?.includes(plugin.id)) { clients.forEach((client) => { stopPlugin(client, plugin.id); const pluginKey = getPluginKey( @@ -215,30 +215,30 @@ function starClientPlugin( ); store.dispatch(clearMessageQueue(pluginKey)); }); - store.dispatch(pluginUnstarred(plugin.id, selectedApp)); + store.dispatch(setPluginDisabled(plugin.id, selectedApp)); } else { clients.forEach((client) => { startPlugin(client, plugin); }); - store.dispatch(pluginStarred(plugin.id, selectedApp)); + store.dispatch(setPluginEnabled(plugin.id, selectedApp)); } } -function starDevicePlugin(store: Store, plugin: DevicePluginDefinition) { +function switchDevicePlugin(store: Store, plugin: DevicePluginDefinition) { const {connections} = store.getState(); const devicesWithPlugin = connections.devices.filter((d) => d.supportsPlugin(plugin.details), ); - if (connections.userStarredDevicePlugins.has(plugin.id)) { + if (connections.enabledDevicePlugins.has(plugin.id)) { devicesWithPlugin.forEach((d) => { d.unloadDevicePlugin(plugin.id); }); - store.dispatch(devicePluginUnstarred(plugin.id)); + store.dispatch(setDevicePluginDisabled(plugin.id)); } else { devicesWithPlugin.forEach((d) => { d.loadDevicePlugin(plugin); }); - store.dispatch(devicePluginStarred(plugin.id)); + store.dispatch(setDevicePluginEnabled(plugin.id)); } } @@ -251,7 +251,7 @@ function updateClientPlugin( if (enable) { const selectedApp = getSelectedAppId(store); if (selectedApp) { - store.dispatch(pluginStarred(plugin.id, selectedApp)); + store.dispatch(setPluginEnabled(plugin.id, selectedApp)); } } const clientsWithEnabledPlugin = clients.filter((c) => { @@ -259,7 +259,7 @@ function updateClientPlugin( c.supportsPlugin(plugin.id) && store .getState() - .connections.userStarredPlugins[c.query.app]?.includes(plugin.id) + .connections.enabledPlugins[c.query.app]?.includes(plugin.id) ); }); const previousVersion = store.getState().plugins.clientPlugins.get(plugin.id); @@ -283,7 +283,7 @@ function updateDevicePlugin( enable: boolean, ) { if (enable) { - store.dispatch(devicePluginStarred(plugin.id)); + store.dispatch(setDevicePluginEnabled(plugin.id)); } const connections = store.getState().connections; const devicesWithEnabledPlugin = connections.devices.filter((d) => diff --git a/desktop/app/src/dispatcher/tracking.tsx b/desktop/app/src/dispatcher/tracking.tsx index e4fd4475f..0975d984f 100644 --- a/desktop/app/src/dispatcher/tracking.tsx +++ b/desktop/app/src/dispatcher/tracking.tsx @@ -145,12 +145,18 @@ export default (store: Store, logger: Logger) => { logger.track('usage', TIME_SPENT_EVENT, usageSummary[key], key); } - Object.entries(state.connections.userStarredPlugins).forEach( - ([app, plugins]) => + Object.entries(state.connections.enabledPlugins).forEach( + ([app, plugins]) => { + // TODO: remove "starred-plugns" event in favor of "enabled-plugins" after some transition period logger.track('usage', 'starred-plugins', { - app: app, + app, starredPlugins: plugins, - }), + }); + logger.track('usage', 'enabled-plugins', { + app, + enabledPugins: plugins, + }); + }, ); const bgStats = getPluginBackgroundStats(); diff --git a/desktop/app/src/reducers/__tests__/sandyplugins.node.tsx b/desktop/app/src/reducers/__tests__/sandyplugins.node.tsx index f873521ad..d17f56c9a 100644 --- a/desktop/app/src/reducers/__tests__/sandyplugins.node.tsx +++ b/desktop/app/src/reducers/__tests__/sandyplugins.node.tsx @@ -17,7 +17,7 @@ import { PluginClient, TestUtils, } from 'flipper-plugin'; -import {starPlugin} from '../pluginManager'; +import {switchPlugin} from '../pluginManager'; const pluginDetails = TestUtils.createMockPluginDetails(); @@ -59,7 +59,7 @@ type PluginApi = ReturnType; function starTestPlugin(store: Store, client: Client) { store.dispatch( - starPlugin({ + switchPlugin({ plugin: TestPlugin, selectedApp: client.query.app, }), @@ -110,7 +110,7 @@ test('it should cleanup a plugin if disabled', async () => { client.initPlugin(TestPlugin.id); expect(pluginInstance.connectStub).toHaveBeenCalledTimes(1); - // unstar + // disable starTestPlugin(store, client); expect(client.sandyPluginStates.has(TestPlugin.id)).toBeFalsy(); expect(pluginInstance.disconnectStub).toHaveBeenCalledTimes(1); @@ -174,7 +174,7 @@ test('it should not initialize a sandy plugin if not enabled', async () => { expect(Plugin2.asPluginModule().plugin).toBeCalledTimes(0); store.dispatch( - starPlugin({ + switchPlugin({ plugin: Plugin2, selectedApp: client.query.app, }), @@ -193,7 +193,7 @@ test('it should not initialize a sandy plugin if not enabled', async () => { // disable plugin again store.dispatch( - starPlugin({ + switchPlugin({ plugin: Plugin2, selectedApp: client.query.app, }), @@ -278,7 +278,7 @@ test('it should initialize "Navigation" plugin if not enabled', async () => { expect(Plugin2.asPluginModule().plugin).toBeCalledTimes(1); store.dispatch( - starPlugin({ + switchPlugin({ plugin: Plugin2, selectedApp: client.query.app, }), @@ -292,7 +292,7 @@ test('it should initialize "Navigation" plugin if not enabled', async () => { // disable plugin again store.dispatch( - starPlugin({ + switchPlugin({ plugin: Plugin2, selectedApp: client.query.app, }), diff --git a/desktop/app/src/reducers/connections.tsx b/desktop/app/src/reducers/connections.tsx index dc1b72f88..7f06cae78 100644 --- a/desktop/app/src/reducers/connections.tsx +++ b/desktop/app/src/reducers/connections.tsx @@ -31,7 +31,22 @@ export type StaticView = | ComponentType | React.FunctionComponent; -export type State = { +export type State = StateV1; + +export const persistVersion = 1; +export const persistMigrations = { + 1: (state: any) => { + const stateV0 = state as StateV0; + const stateV1 = { + ...stateV0, + enabledPlugins: stateV0.userStarredPlugins, + enabledDevicePlugins: stateV0.userStarredDevicePlugins, + }; + return stateV1 as any; + }, +}; + +type StateV1 = { devices: Array; androidEmulators: Array; selectedDevice: null | BaseDevice; @@ -40,8 +55,8 @@ export type State = { userPreferredDevice: null | string; userPreferredPlugin: null | string; userPreferredApp: null | string; - userStarredPlugins: {[client: string]: string[]}; - userStarredDevicePlugins: Set; + enabledPlugins: {[client: string]: string[]}; + enabledDevicePlugins: Set; clients: Array; uninitializedClients: Array<{ client: UninitializedClient; @@ -52,6 +67,11 @@ export type State = { staticView: StaticView; }; +type StateV0 = Omit & { + userStarredPlugins: {[client: string]: string[]}; + userStarredDevicePlugins: Set; +}; + export type Action = | { type: 'UNREGISTER_DEVICES'; @@ -109,27 +129,27 @@ export type Action = deepLinkPayload: unknown; } | { - type: 'PLUGIN_STARRED'; + type: 'SET_PLUGIN_ENABLED'; payload: { pluginId: string; selectedApp: string; }; } | { - type: 'DEVICE_PLUGIN_STARRED'; + type: 'SET_DEVICE_PLUGIN_ENABLED'; payload: { pluginId: string; }; } | { - type: 'PLUGIN_UNSTARRED'; + type: 'SET_PLUGIN_DISABLED'; payload: { pluginId: string; selectedApp: string; }; } | { - type: 'DEVICE_PLUGIN_UNSTARRED'; + type: 'SET_DEVICE_PLUGIN_DISABLED'; payload: { pluginId: string; }; @@ -151,8 +171,8 @@ const INITAL_STATE: State = { userPreferredDevice: null, userPreferredPlugin: null, userPreferredApp: null, - userStarredPlugins: {}, - userStarredDevicePlugins: new Set([ + enabledPlugins: {}, + enabledDevicePlugins: new Set([ 'DeviceLogs', 'CrashReporter', 'MobileBuilds', @@ -384,42 +404,42 @@ export default (state: State = INITAL_STATE, action: Actions): State => { }); return state; } - case 'PLUGIN_STARRED': { + case 'SET_PLUGIN_ENABLED': { const {pluginId, selectedApp} = action.payload; return produce(state, (draft) => { - if (!draft.userStarredPlugins[selectedApp]) { - draft.userStarredPlugins[selectedApp] = []; + if (!draft.enabledPlugins[selectedApp]) { + draft.enabledPlugins[selectedApp] = []; } - const plugins = draft.userStarredPlugins[selectedApp]; + const plugins = draft.enabledPlugins[selectedApp]; const idx = plugins.indexOf(pluginId); if (idx === -1) { plugins.push(pluginId); } }); } - case 'DEVICE_PLUGIN_STARRED': { + case 'SET_DEVICE_PLUGIN_ENABLED': { const {pluginId} = action.payload; return produce(state, (draft) => { - draft.userStarredDevicePlugins.add(pluginId); + draft.enabledDevicePlugins.add(pluginId); }); } - case 'PLUGIN_UNSTARRED': { + case 'SET_PLUGIN_DISABLED': { const {pluginId, selectedApp} = action.payload; return produce(state, (draft) => { - if (!draft.userStarredPlugins[selectedApp]) { - draft.userStarredPlugins[selectedApp] = []; + if (!draft.enabledPlugins[selectedApp]) { + draft.enabledPlugins[selectedApp] = []; } - const plugins = draft.userStarredPlugins[selectedApp]; + const plugins = draft.enabledPlugins[selectedApp]; const idx = plugins.indexOf(pluginId); if (idx !== -1) { plugins.splice(idx, 1); } }); } - case 'DEVICE_PLUGIN_UNSTARRED': { + case 'SET_DEVICE_PLUGIN_DISABLED': { const {pluginId} = action.payload; return produce(state, (draft) => { - draft.userStarredDevicePlugins.delete(pluginId); + draft.enabledDevicePlugins.delete(pluginId); }); } default: @@ -467,30 +487,30 @@ export const selectClient = (clientId: string | null): Action => ({ payload: clientId, }); -export const pluginStarred = (pluginId: string, appId: string): Action => ({ - type: 'PLUGIN_STARRED', +export const setPluginEnabled = (pluginId: string, appId: string): Action => ({ + type: 'SET_PLUGIN_ENABLED', payload: { pluginId, selectedApp: appId, }, }); -export const devicePluginStarred = (pluginId: string): Action => ({ - type: 'DEVICE_PLUGIN_STARRED', +export const setDevicePluginEnabled = (pluginId: string): Action => ({ + type: 'SET_DEVICE_PLUGIN_ENABLED', payload: { pluginId, }, }); -export const devicePluginUnstarred = (pluginId: string): Action => ({ - type: 'DEVICE_PLUGIN_UNSTARRED', +export const setDevicePluginDisabled = (pluginId: string): Action => ({ + type: 'SET_DEVICE_PLUGIN_DISABLED', payload: { pluginId, }, }); -export const pluginUnstarred = (pluginId: string, appId: string): Action => ({ - type: 'PLUGIN_UNSTARRED', +export const setPluginDisabled = (pluginId: string, appId: string): Action => ({ + type: 'SET_PLUGIN_DISABLED', payload: { pluginId, selectedApp: appId, @@ -618,19 +638,19 @@ export function getSelectedPluginKey(state: State): string | undefined { : undefined; } -export function pluginIsStarred( - userStarredPlugins: State['userStarredPlugins'], - userStarredDevicePlugins: State['userStarredDevicePlugins'], +export function isPluginEnabled( + enabledPlugins: State['enabledPlugins'], + enabledDevicePlugins: State['enabledDevicePlugins'], app: string | null, pluginId: string, ): boolean { - if (userStarredDevicePlugins.has(pluginId)) { + if (enabledDevicePlugins.has(pluginId)) { return true; } if (!app) { return false; } const appInfo = deconstructClientId(app); - const starred = userStarredPlugins[appInfo.app]; + const starred = enabledPlugins[appInfo.app]; return starred && starred.indexOf(pluginId) > -1; } diff --git a/desktop/app/src/reducers/index.tsx b/desktop/app/src/reducers/index.tsx index b20329999..13d96688d 100644 --- a/desktop/app/src/reducers/index.tsx +++ b/desktop/app/src/reducers/index.tsx @@ -15,6 +15,8 @@ import application, { import connections, { State as DevicesState, Action as DevicesAction, + persistMigrations as devicesPersistMigrations, + persistVersion as devicesPersistVersion, } from './connections'; import pluginStates, { State as PluginStatesState, @@ -67,7 +69,7 @@ import {launcherConfigDir} from '../utils/launcher'; import os from 'os'; import {resolve} from 'path'; import xdg from 'xdg-basedir'; -import {createTransform, persistReducer} from 'redux-persist'; +import {createMigrate, createTransform, persistReducer} from 'redux-persist'; import {PersistPartial} from 'redux-persist/es/persistReducer'; import {Store as ReduxStore, MiddlewareAPI as ReduxMiddlewareAPI} from 'redux'; @@ -140,10 +142,16 @@ export default combineReducers({ 'userPreferredDevice', 'userPreferredPlugin', 'userPreferredApp', - 'userStarredPlugins', - 'userStarredDevicePlugins', + 'enabledPlugins', + 'enabledDevicePlugins', ], - transforms: [setTransformer({whitelist: ['userStarredDevicePlugins']})], + transforms: [ + setTransformer({ + whitelist: ['enabledDevicePlugins', 'userStarredDevicePlugins'], + }), + ], + version: devicesPersistVersion, + migrate: createMigrate(devicesPersistMigrations), }, connections, ), diff --git a/desktop/app/src/reducers/pluginManager.tsx b/desktop/app/src/reducers/pluginManager.tsx index 8fae961a1..440748f1d 100644 --- a/desktop/app/src/reducers/pluginManager.tsx +++ b/desktop/app/src/reducers/pluginManager.tsx @@ -20,7 +20,7 @@ export type PluginCommand = | LoadPluginAction | UninstallPluginAction | UpdatePluginAction - | StarPluginAction; + | SwitchPluginAction; export type LoadPluginActionPayload = { plugin: ActivatablePluginDetails; @@ -52,14 +52,14 @@ export type UpdatePluginAction = { payload: UpdatePluginActionPayload; }; -export type StarPluginActionPayload = { +export type SwitchPluginActionPayload = { plugin: PluginDefinition; selectedApp?: string; }; -export type StarPluginAction = { - type: 'STAR_PLUGIN'; - payload: StarPluginActionPayload; +export type SwitchPluginAction = { + type: 'SWITCH_PLUGIN'; + payload: SwitchPluginActionPayload; }; export type Action = @@ -81,7 +81,7 @@ export default function reducer( case 'LOAD_PLUGIN': case 'UNINSTALL_PLUGIN': case 'UPDATE_PLUGIN': - case 'STAR_PLUGIN': + case 'SWITCH_PLUGIN': return produce(state, (draft) => { draft.pluginCommandsQueue.push(action); }); @@ -118,7 +118,7 @@ export const registerPluginUpdate = ( payload, }); -export const starPlugin = (payload: StarPluginActionPayload): Action => ({ - type: 'STAR_PLUGIN', +export const switchPlugin = (payload: SwitchPluginActionPayload): Action => ({ + type: 'SWITCH_PLUGIN', payload, }); diff --git a/desktop/app/src/reducers/supportForm.tsx b/desktop/app/src/reducers/supportForm.tsx index 9c7be791e..fe5cd6b32 100644 --- a/desktop/app/src/reducers/supportForm.tsx +++ b/desktop/app/src/reducers/supportForm.tsx @@ -10,7 +10,7 @@ import {Actions, Store} from './'; import {setStaticView} from './connections'; import {deconstructClientId} from '../utils/clientUtils'; -import {starPlugin as setStarPlugin} from './pluginManager'; +import {switchPlugin} from './pluginManager'; import {showStatusUpdatesForDuration} from '../utils/promiseTimeout'; import {selectedPlugins as setSelectedPlugins} from './plugins'; import {addStatusMessage, removeStatusMessage} from './application'; @@ -125,7 +125,7 @@ export class Group { if (selectedApp) { const {app} = deconstructClientId(selectedApp); const enabledPlugins: Array | null = store.getState().connections - .userStarredPlugins[app]; + .enabledPlugins[app]; const unsupportedPlugins = []; for (const requiredPlugin of this.requiredPlugins) { const requiredPluginEnabled = @@ -139,7 +139,7 @@ export class Group { store.getState().plugins.clientPlugins.get(requiredPlugin) || store.getState().plugins.devicePlugins.get(requiredPlugin)!; store.dispatch( - setStarPlugin({ + switchPlugin({ selectedApp: app, plugin, }), diff --git a/desktop/app/src/sandy-chrome/appinspect/PluginList.tsx b/desktop/app/src/sandy-chrome/appinspect/PluginList.tsx index 2478cc352..1acec1632 100644 --- a/desktop/app/src/sandy-chrome/appinspect/PluginList.tsx +++ b/desktop/app/src/sandy-chrome/appinspect/PluginList.tsx @@ -38,7 +38,7 @@ import { } from '../../reducers/pluginDownloads'; import { loadPlugin, - starPlugin, + switchPlugin, uninstallPlugin, } from '../../reducers/pluginManager'; import {BundledPluginDetails} from 'plugin-lib'; @@ -86,8 +86,8 @@ export const PluginList = memo(function PluginList({ metroDevice, client, plugins, - connections.userStarredPlugins, - connections.userStarredDevicePlugins, + connections.enabledPlugins, + connections.enabledDevicePlugins, pluginsChanged, ]); const isConnected = useValue(activeDevice?.connected, false); @@ -142,12 +142,12 @@ export const PluginList = memo(function PluginList({ }, [dispatch, metroDevice, connections.selectedApp], ); - const handleStarPlugin = useCallback( + const handleEnablePlugin = useCallback( (id: string) => { const plugin = (plugins.clientPlugins.get(id) ?? plugins.devicePlugins.get(id))!; dispatch( - starPlugin({ + switchPlugin({ selectedApp: client?.query.app, plugin, }), @@ -207,7 +207,7 @@ export const PluginList = memo(function PluginList({ isArchived ? null : ( @@ -250,7 +250,7 @@ export const PluginList = memo(function PluginList({ isConnected ? ( @@ -285,7 +285,7 @@ export const PluginList = memo(function PluginList({ } diff --git a/desktop/app/src/sandy-chrome/appinspect/__tests__/PluginList.spec.tsx b/desktop/app/src/sandy-chrome/appinspect/__tests__/PluginList.spec.tsx index fe1a4ba85..8bed81a91 100644 --- a/desktop/app/src/sandy-chrome/appinspect/__tests__/PluginList.spec.tsx +++ b/desktop/app/src/sandy-chrome/appinspect/__tests__/PluginList.spec.tsx @@ -24,7 +24,7 @@ import { registerMarketplacePlugins, registerPlugins, } from '../../../reducers/plugins'; -import {starPlugin} from '../../../reducers/pluginManager'; +import {switchPlugin} from '../../../reducers/pluginManager'; // eslint-disable-next-line import * as LogsPluginModule from '../../../../../plugins/logs/index'; @@ -174,8 +174,8 @@ describe('basic findBestDevice with metro present', () => { metro, flipper.client, state.plugins, - state.connections.userStarredPlugins, - state.connections.userStarredDevicePlugins, + state.connections.enabledPlugins, + state.connections.enabledDevicePlugins, ), ).toEqual({ downloadablePlugins: [], @@ -286,8 +286,8 @@ describe('basic findBestDevice with metro present', () => { metro, flipper.client, state.plugins, - state.connections.userStarredPlugins, - state.connections.userStarredDevicePlugins, + state.connections.enabledPlugins, + state.connections.enabledDevicePlugins, ); expect(pluginLists).toEqual({ devicePlugins: [logsPlugin], @@ -316,7 +316,7 @@ describe('basic findBestDevice with metro present', () => { }); flipper.store.dispatch( - starPlugin({ + switchPlugin({ plugin: plugin2, selectedApp: flipper.client.query.app, }), @@ -328,8 +328,8 @@ describe('basic findBestDevice with metro present', () => { metro, flipper.client, state.plugins, - state.connections.userStarredPlugins, - state.connections.userStarredDevicePlugins, + state.connections.enabledPlugins, + state.connections.enabledDevicePlugins, ), ).toMatchObject({ enabledPlugins: [plugin2], diff --git a/desktop/app/src/test-utils/MockFlipper.tsx b/desktop/app/src/test-utils/MockFlipper.tsx index 1048b312c..f0ac7ccc8 100644 --- a/desktop/app/src/test-utils/MockFlipper.tsx +++ b/desktop/app/src/test-utils/MockFlipper.tsx @@ -126,7 +126,7 @@ export default class MockFlipper { }); device.loadDevicePlugins( this._store.getState().plugins.devicePlugins, - this.store.getState().connections.userStarredDevicePlugins, + this.store.getState().connections.enabledDevicePlugins, ); this._devices.push(device); return device; diff --git a/desktop/app/src/test-utils/createMockFlipperWithPlugin.tsx b/desktop/app/src/test-utils/createMockFlipperWithPlugin.tsx index 4aeca884a..4499a8ba0 100644 --- a/desktop/app/src/test-utils/createMockFlipperWithPlugin.tsx +++ b/desktop/app/src/test-utils/createMockFlipperWithPlugin.tsx @@ -31,7 +31,7 @@ import {PluginDefinition} from '../plugin'; import PluginContainer from '../PluginContainer'; import {getPluginKey, isDevicePluginDefinition} from '../utils/pluginUtils'; import MockFlipper from './MockFlipper'; -import {starPlugin} from '../reducers/pluginManager'; +import {switchPlugin} from '../reducers/pluginManager'; export type MockFlipperResult = { client: Client; @@ -71,11 +71,9 @@ function isPluginEnabled( (!isDevicePluginDefinition(pluginClazz) && store .getState() - .connections.userStarredPlugins[selectedApp]?.includes( - pluginClazz.id, - )) || + .connections.enabledPlugins[selectedApp]?.includes(pluginClazz.id)) || (isDevicePluginDefinition(pluginClazz) && - store.getState().connections.userStarredDevicePlugins.has(pluginClazz.id)) + store.getState().connections.enabledDevicePlugins.has(pluginClazz.id)) ); } @@ -108,7 +106,7 @@ export async function createMockFlipperWithPlugin( // enable the plugin if (!isPluginEnabled(store, pluginClazz, name)) { store.dispatch( - starPlugin({ + switchPlugin({ plugin: pluginClazz, selectedApp: client.query.app, }), @@ -118,7 +116,7 @@ export async function createMockFlipperWithPlugin( options?.additionalPlugins?.forEach((plugin) => { if (!isPluginEnabled(store, plugin, name)) { store.dispatch( - starPlugin({ + switchPlugin({ plugin, selectedApp: client.query.app, }), @@ -172,7 +170,7 @@ export async function createMockFlipperWithPlugin( throw new Error('unknown plugin ' + id); } store.dispatch( - starPlugin({ + switchPlugin({ plugin, selectedApp: client.query.app, }), diff --git a/desktop/app/src/utils/__tests__/messageQueue.node.tsx b/desktop/app/src/utils/__tests__/messageQueue.node.tsx index ac719a3aa..94ffcafdf 100644 --- a/desktop/app/src/utils/__tests__/messageQueue.node.tsx +++ b/desktop/app/src/utils/__tests__/messageQueue.node.tsx @@ -23,7 +23,7 @@ import pluginMessageQueue, { queueMessages, } from '../../reducers/pluginMessageQueue'; import {registerPlugins} from '../../reducers/plugins'; -import {starPlugin} from '../../reducers/pluginManager'; +import {switchPlugin} from '../../reducers/pluginManager'; interface PersistedState { count: 1; @@ -54,9 +54,9 @@ class TestPlugin extends FlipperPlugin { } } -function starTestPlugin(store: Store, client: Client) { +function switchTestPlugin(store: Store, client: Client) { store.dispatch( - starPlugin({ + switchPlugin({ plugin: TestPlugin, selectedApp: client.query.app, }), @@ -174,8 +174,8 @@ test('queue - events are NOT processed immediately if plugin is NOT selected (bu [pluginKey]: [], }); - // unstar, but, messages still arrives because selected - starTestPlugin(store, client); + // disable, but, messages still arrives because selected + switchTestPlugin(store, client); selectTestPlugin(store, client); sendMessage('inc', {delta: 3}); client.flushMessageBuffer(); @@ -186,14 +186,14 @@ test('queue - events are NOT processed immediately if plugin is NOT selected (bu }, }); - // different plugin, and not starred, message will never arrive + // different plugin, and not enabled, message will never arrive selectDeviceLogs(store); sendMessage('inc', {delta: 4}); client.flushMessageBuffer(); expect(store.getState().pluginMessageQueue).toEqual({}); // star again, plugin still not selected, message is queued - starTestPlugin(store, client); + switchTestPlugin(store, client); sendMessage('inc', {delta: 5}); client.flushMessageBuffer(); @@ -686,14 +686,14 @@ test('queue - messages that have not yet flushed be lost when disabling the plug `); // disable - starTestPlugin(store, client); + switchTestPlugin(store, client); expect(client.messageBuffer).toMatchInlineSnapshot(`Object {}`); expect(store.getState().pluginMessageQueue).toMatchInlineSnapshot( `Object {}`, ); // re-enable, no messages arrive - starTestPlugin(store, client); + switchTestPlugin(store, client); client.flushMessageBuffer(); processMessageQueue(TestPlugin, pluginKey, store); expect(store.getState().pluginStates).toMatchInlineSnapshot(`Object {}`); diff --git a/desktop/app/src/utils/__tests__/messageQueueSandy.node.tsx b/desktop/app/src/utils/__tests__/messageQueueSandy.node.tsx index 446b2c382..394269e9d 100644 --- a/desktop/app/src/utils/__tests__/messageQueueSandy.node.tsx +++ b/desktop/app/src/utils/__tests__/messageQueueSandy.node.tsx @@ -25,7 +25,7 @@ import { PluginClient, _SandyPluginInstance, } from 'flipper-plugin'; -import {starPlugin} from '../../reducers/pluginManager'; +import {switchPlugin} from '../../reducers/pluginManager'; type Events = { inc: { @@ -57,9 +57,9 @@ const TestPlugin = new _SandyPluginDefinition( }, ); -function starTestPlugin(store: Store, client: Client) { +function switchTestPlugin(store: Store, client: Client) { store.dispatch( - starPlugin({ + switchPlugin({ plugin: TestPlugin, selectedApp: client.query.app, }), @@ -184,8 +184,8 @@ test('queue - events are NOT processed immediately if plugin is NOT selected (bu [pluginKey]: [], }); - // unstar. Messages don't arrive anymore - starTestPlugin(store, client); + // disable. Messages don't arrive anymore + switchTestPlugin(store, client); // weird state... selectTestPlugin(store, client); sendMessage('inc', {delta: 3}); @@ -193,7 +193,7 @@ test('queue - events are NOT processed immediately if plugin is NOT selected (bu // active, immediately processed expect(client.sandyPluginStates.has(TestPlugin.id)).toBe(false); - // different plugin, and not starred, message will never arrive + // different plugin, and not enabled, message will never arrive selectDeviceLogs(store); sendMessage('inc', {delta: 4}); client.flushMessageBuffer(); @@ -201,7 +201,7 @@ test('queue - events are NOT processed immediately if plugin is NOT selected (bu expect(store.getState().pluginMessageQueue).toEqual({}); // star again, plugin still not selected, message is queued - starTestPlugin(store, client); + switchTestPlugin(store, client); sendMessage('inc', {delta: 5}); client.flushMessageBuffer(); @@ -230,13 +230,12 @@ test('queue - events ARE processed immediately if plugin is NOT selected / enabl selectDeviceLogs(store); expect(store.getState().connections.selectedPlugin).toBe('DeviceLogs'); store.dispatch( - starPlugin({ + switchPlugin({ plugin: NavigationPlugin, selectedApp: client.query.app, }), ); - expect(store.getState().connections.userStarredPlugins) - .toMatchInlineSnapshot(` + expect(store.getState().connections.enabledPlugins).toMatchInlineSnapshot(` Object { "TestApp": Array [], } @@ -728,14 +727,14 @@ test('queue - messages that have not yet flushed be lost when disabling the plug `); // disable - starTestPlugin(store, client); + switchTestPlugin(store, client); expect(client.messageBuffer).toMatchInlineSnapshot(`Object {}`); expect(store.getState().pluginMessageQueue).toMatchInlineSnapshot( `Object {}`, ); // re-enable, no messages arrive - starTestPlugin(store, client); + switchTestPlugin(store, client); client.flushMessageBuffer(); processMessageQueue( client.sandyPluginStates.get(TestPlugin.id)!, diff --git a/desktop/app/src/utils/exportData.tsx b/desktop/app/src/utils/exportData.tsx index 500ce6c82..a41936629 100644 --- a/desktop/app/src/utils/exportData.tsx +++ b/desktop/app/src/utils/exportData.tsx @@ -802,7 +802,7 @@ export function importDataToStore(source: string, data: string, store: Store) { }); archivedDevice.loadDevicePlugins( store.getState().plugins.devicePlugins, - store.getState().connections.userStarredDevicePlugins, + store.getState().connections.enabledDevicePlugins, deserializeObject(device.pluginStates), ); store.dispatch({ diff --git a/desktop/app/src/utils/flipperLibImplementation.tsx b/desktop/app/src/utils/flipperLibImplementation.tsx index b0915b061..f3ccc2de3 100644 --- a/desktop/app/src/utils/flipperLibImplementation.tsx +++ b/desktop/app/src/utils/flipperLibImplementation.tsx @@ -47,9 +47,7 @@ export function initializeFlipperLibImplementation( if ( store .getState() - .connections.userStarredPlugins[client.query.app]?.includes( - pluginId, - ) + .connections.enabledPlugins[client.query.app]?.includes(pluginId) ) { return true; } diff --git a/desktop/app/src/utils/messageQueue.tsx b/desktop/app/src/utils/messageQueue.tsx index 106317365..4ca56e1c4 100644 --- a/desktop/app/src/utils/messageQueue.tsx +++ b/desktop/app/src/utils/messageQueue.tsx @@ -21,7 +21,7 @@ import { DEFAULT_MAX_QUEUE_SIZE, } from '../reducers/pluginMessageQueue'; import {IdlerImpl} from './Idler'; -import {pluginIsStarred, getSelectedPluginKey} from '../reducers/connections'; +import {isPluginEnabled, getSelectedPluginKey} from '../reducers/connections'; import {deconstructPluginKey} from './clientUtils'; import {defaultEnabledBackgroundPlugins} from './pluginUtils'; import {batch, Idler, _SandyPluginInstance} from 'flipper-plugin'; @@ -133,9 +133,9 @@ export function processMessagesLater( case plugin instanceof _SandyPluginInstance: case plugin instanceof FlipperDevicePlugin: case (plugin as any).prototype instanceof FlipperDevicePlugin: - case pluginIsStarred( - store.getState().connections.userStarredPlugins, - store.getState().connections.userStarredDevicePlugins, + case isPluginEnabled( + store.getState().connections.enabledPlugins, + store.getState().connections.enabledDevicePlugins, deconstructPluginKey(pluginKey).client, pluginId, ): diff --git a/desktop/app/src/utils/pluginUtils.tsx b/desktop/app/src/utils/pluginUtils.tsx index 902e1c041..e52e931e2 100644 --- a/desktop/app/src/utils/pluginUtils.tsx +++ b/desktop/app/src/utils/pluginUtils.tsx @@ -83,8 +83,8 @@ export function getExportablePlugins( undefined, client, state.plugins, - state.connections.userStarredPlugins, - state.connections.userStarredDevicePlugins, + state.connections.enabledPlugins, + state.connections.enabledDevicePlugins, ); return [ @@ -179,8 +179,8 @@ export function computePluginLists( metroDevice: BaseDevice | undefined, client: Client | undefined, plugins: State['plugins'], - userStarredPlugins: State['connections']['userStarredPlugins'], - userStarredDevicePlugins: Set, + enabledPluginsState: State['connections']['enabledPlugins'], + enabledDevicePluginsState: Set, _pluginsChanged?: number, // this argument is purely used to invalidate the memoization cache ) { const uninstalledMarketplacePlugins = filterNewestVersionOfEachPlugin( @@ -191,12 +191,12 @@ export function computePluginLists( ...plugins.devicePlugins.values(), ] .filter((p) => device?.supportsPlugin(p)) - .filter((p) => userStarredDevicePlugins.has(p.id)); + .filter((p) => enabledDevicePluginsState.has(p.id)); const metroPlugins: DevicePluginDefinition[] = [ ...plugins.devicePlugins.values(), ] .filter((p) => metroDevice?.supportsPlugin(p)) - .filter((p) => userStarredDevicePlugins.has(p.id)); + .filter((p) => enabledDevicePluginsState.has(p.id)); const enabledPlugins: ClientPluginDefinition[] = []; const disabledPlugins: PluginDefinition[] = [ ...plugins.devicePlugins.values(), @@ -206,7 +206,7 @@ export function computePluginLists( device?.supportsPlugin(p.details) || metroDevice?.supportsPlugin(p.details), ) - .filter((p) => !userStarredDevicePlugins.has(p.id)); + .filter((p) => !enabledDevicePluginsState.has(p.id)); const unavailablePlugins: [plugin: PluginDetails, reason: string][] = []; const downloadablePlugins: ( | DownloadablePluginDetails @@ -263,7 +263,7 @@ export function computePluginLists( device, client, clientPlugins, - client && userStarredPlugins[client.query.app], + client && enabledPluginsState[client.query.app], true, ); clientPlugins.forEach((plugin) => { @@ -323,7 +323,7 @@ function getFavoritePlugins( device: BaseDevice, client: Client, allPlugins: PluginDefinition[], - starredPlugins: undefined | string[], + enabledPlugins: undefined | string[], returnFavoredPlugins: boolean, // if false, unfavoried plugins are returned ): PluginDefinition[] { if (device.isArchived) { @@ -335,11 +335,11 @@ function getFavoritePlugins( (plugin) => client.plugins.indexOf(plugin.id) !== -1, ); } - if (!starredPlugins || !starredPlugins.length) { + if (!enabledPlugins || !enabledPlugins.length) { return returnFavoredPlugins ? [] : allPlugins; } return allPlugins.filter((plugin) => { - const idx = starredPlugins.indexOf(plugin.id); + const idx = enabledPlugins.indexOf(plugin.id); return idx === -1 ? !returnFavoredPlugins : returnFavoredPlugins; }); } diff --git a/desktop/scripts/build-utils.ts b/desktop/scripts/build-utils.ts index 31cd424fc..7aa13151f 100644 --- a/desktop/scripts/build-utils.ts +++ b/desktop/scripts/build-utils.ts @@ -31,7 +31,7 @@ const {version} = require('../package.json'); const dev = process.env.NODE_ENV !== 'production'; // For insiders builds we bundle top 5 popular device plugins, -// plus top 10 popular "universal" plugins starred by more than 100 users. +// plus top 10 popular "universal" plugins enabled by more than 100 users. const hardcodedPlugins = new Set([ // Popular device plugins 'DeviceLogs',