diff --git a/src/chrome/ScreenCaptureButtons.tsx b/src/chrome/ScreenCaptureButtons.tsx index bd6495a78..1e462316f 100644 --- a/src/chrome/ScreenCaptureButtons.tsx +++ b/src/chrome/ScreenCaptureButtons.tsx @@ -18,10 +18,7 @@ import config from '../utils/processConfig'; import BaseDevice from '../devices/BaseDevice'; import {State as Store} from '../reducers'; import open from 'open'; - -const CAPTURE_LOCATION = expandTilde( - config().screenCapturePath || remote.app.getPath('desktop'), -); +import {capture, CAPTURE_LOCATION, getFileName} from '../utils/screenshot'; type OwnProps = {}; @@ -49,11 +46,6 @@ export async function openFile(path: string | null) { } } -function getFileName(extension: 'png' | 'mp4'): string { - // Windows does not like `:` in its filenames. Yes, I know ... - return `screencap-${new Date().toISOString().replace(/:/g, '')}.${extension}`; -} - type Props = OwnProps & StateFromProps & DispatchFromProps; class ScreenCaptureButtons extends Component { videoPath: string | null | undefined; @@ -82,17 +74,10 @@ class ScreenCaptureButtons extends Component { this.setState({recordingEnabled}); }; - captureScreenshot: Promise | any = () => { + captureScreenshot: Promise | any = async () => { const {selectedDevice} = this.props; - const pngPath = path.join(CAPTURE_LOCATION, getFileName('png')); if (selectedDevice != null) { - reportPlatformFailures( - selectedDevice - .screenshot() - .then(buffer => writeBufferToFile(pngPath, buffer)) - .then(path => openFile(path)), - 'captureScreenshot', - ); + await capture(selectedDevice); } }; diff --git a/src/dispatcher/__tests__/plugins.node.js b/src/dispatcher/__tests__/plugins.node.js index 579fd9ddd..664fcb203 100644 --- a/src/dispatcher/__tests__/plugins.node.js +++ b/src/dispatcher/__tests__/plugins.node.js @@ -21,10 +21,15 @@ import {init as initLogger} from '../../fb-stubs/Logger.tsx'; import configureStore from 'redux-mock-store'; import {TEST_PASSING_GK, TEST_FAILING_GK} from '../../fb-stubs/GK.tsx'; import TestPlugin from './TestPlugin'; +import {resetConfigForTesting} from '../../utils/processConfig.tsx'; const mockStore = configureStore([])(reducers(undefined, {type: 'INIT'})); const logger = initLogger(mockStore); +beforeEach(() => { + resetConfigForTesting(); +}); + test('dispatcher dispatches REGISTER_PLUGINS', () => { dispatcher(mockStore, logger); const actions = mockStore.getActions(); diff --git a/src/fb-stubs/user.tsx b/src/fb-stubs/user.tsx index 30366122b..24fb30658 100644 --- a/src/fb-stubs/user.tsx +++ b/src/fb-stubs/user.tsx @@ -7,25 +7,27 @@ * @format */ -export function getUser() { - return Promise.reject(); +import {User} from '../reducers/user'; + +export async function getUser(): Promise { + throw new Error('Feature not implemented'); } export async function internGraphPOSTAPIRequest( - endpoint: string, - formFields: { + _endpoint: string, + _formFields: { [key: string]: any; } = {}, ): Promise { - return Promise.reject(); + throw new Error('Feature not implemented'); } -export async function graphQLQuery(query: string) { - return Promise.reject(); +export async function graphQLQuery(_query: string) { + throw new Error('Feature not implemented'); } export function logoutUser(): Promise { - return Promise.reject(); + throw new Error('Feature not implemented'); } export type DataExportResult = { @@ -44,12 +46,19 @@ export type DataExportError = { }; export async function shareFlipperData( - trace: string, + _trace: string, ): Promise { new Notification('Feature not implemented'); - return Promise.reject(); + throw new Error('Feature not implemented'); } -export async function writeKeychain(token: string) { - return Promise.reject(); +export async function writeKeychain(_token: string) { + throw new Error('Feature not implemented'); +} + +export async function uploadFlipperMedia( + _path: string, + _kind: 'Image' | 'Video', +): Promise { + throw new Error('Feature not implemented'); } diff --git a/src/utils/screenshot.tsx b/src/utils/screenshot.tsx index f844d86d1..165f4fa72 100644 --- a/src/utils/screenshot.tsx +++ b/src/utils/screenshot.tsx @@ -8,6 +8,31 @@ */ import fs from 'fs'; +import path from 'path'; +import {BaseDevice} from 'flipper'; +import {reportPlatformFailures} from './metrics'; +import expandTilde from 'expand-tilde'; +import {remote} from 'electron'; +import config from '../utils/processConfig'; + +// TODO: refactor so this doesn't need to be exported +export const CAPTURE_LOCATION = expandTilde( + config().screenCapturePath || remote.app.getPath('desktop'), +); + +// TODO: refactor so this doesn't need to be exported +export function getFileName(extension: 'png' | 'mp4'): string { + // Windows does not like `:` in its filenames. Yes, I know ... + return `screencap-${new Date().toISOString().replace(/:/g, '')}.${extension}`; +} + +export function capture(device: BaseDevice): Promise { + const pngPath = path.join(CAPTURE_LOCATION, getFileName('png')); + return reportPlatformFailures( + device.screenshot().then(buffer => writeBufferToFile(pngPath, buffer)), + 'captureScreenshot', + ); +} /** * Writes a buffer to a specified file path.