diff --git a/.gitignore b/.gitignore index e43b0f988..4befed30a 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ .DS_Store +.idea diff --git a/desktop-app/src/main/main.ts b/desktop-app/src/main/main.ts index e4f8084b7..8408dcbe9 100644 --- a/desktop-app/src/main/main.ts +++ b/desktop-app/src/main/main.ts @@ -11,7 +11,6 @@ import path from 'path'; import { app, BrowserWindow, shell, screen, ipcMain } from 'electron'; import { setupTitlebar } from 'custom-electron-titlebar/main'; -import { useState } from 'react'; import cli from './cli'; import { PROTOCOL } from '../common/constants'; import MenuBuilder from './menu'; diff --git a/desktop-app/src/main/web-permissions/index.ts b/desktop-app/src/main/web-permissions/index.ts index e93571c09..65d0b8a3a 100644 --- a/desktop-app/src/main/web-permissions/index.ts +++ b/desktop-app/src/main/web-permissions/index.ts @@ -1,5 +1,6 @@ import { BrowserWindow, session } from 'electron'; import PermissionsManager, { PERMISSION_STATE } from './PermissionsManager'; +import store from '../../store'; // eslint-disable-next-line import/prefer-default-export export const WebPermissionHandlers = (mainWindow: BrowserWindow) => { @@ -25,6 +26,18 @@ export const WebPermissionHandlers = (mainWindow: BrowserWindow) => { return status === PERMISSION_STATE.GRANTED; } ); + + session.defaultSession.webRequest.onBeforeSendHeaders( + { + urls: [''], + }, + (details, callback) => { + details.requestHeaders['Accept-Language'] = store.get( + 'userPreferences.webRequestHeaderAcceptLanguage' + ); + callback({ requestHeaders: details.requestHeaders }); + } + ); }, }; }; diff --git a/desktop-app/src/renderer/components/FileUploader/FileUploader.test.tsx b/desktop-app/src/renderer/components/FileUploader/FileUploader.test.tsx index 5d60ffbe9..bb39ae06f 100644 --- a/desktop-app/src/renderer/components/FileUploader/FileUploader.test.tsx +++ b/desktop-app/src/renderer/components/FileUploader/FileUploader.test.tsx @@ -1,4 +1,4 @@ -import { render, fireEvent, waitFor } from '@testing-library/react'; +import { render, fireEvent } from '@testing-library/react'; import '@testing-library/jest-dom'; import { FileUploader, FileUploaderProps } from './FileUploader'; import { useFileUpload } from './hooks'; diff --git a/desktop-app/src/renderer/components/ToolBar/Menu/Flyout/Settings/SettingsContent.test.tsx b/desktop-app/src/renderer/components/ToolBar/Menu/Flyout/Settings/SettingsContent.test.tsx new file mode 100644 index 000000000..a6971a1df --- /dev/null +++ b/desktop-app/src/renderer/components/ToolBar/Menu/Flyout/Settings/SettingsContent.test.tsx @@ -0,0 +1,46 @@ +import * as React from 'react'; + +import { render, fireEvent } from '@testing-library/react'; + +import { SettingsContent } from './SettingsContent'; + +const mockOnClose = jest.fn(); + +describe('SettingsContentHeader', () => { + const renderComponent = () => + render(); + + it('Accept-Language is saved to store', () => { + const { getByTestId } = renderComponent(); + + const acceptLanguageInput = getByTestId('settings-accept_language-input'); + const screenshotLocationInput = getByTestId( + 'settings-screenshot_location-input' + ); + const saveButton = getByTestId('settings-save-button'); + + fireEvent.change(acceptLanguageInput, { target: { value: 'cz-Cz' } }); + fireEvent.change(screenshotLocationInput, { + target: { value: './path/location' }, + }); + fireEvent.click(saveButton); + + expect(window.electron.store.set).toHaveBeenNthCalledWith( + 1, + 'userPreferences.screenshot.saveLocation', + './path/location' + ); + expect(window.electron.store.set).toHaveBeenNthCalledWith( + 2, + 'userPreferences.customTitlebar', + undefined + ); + expect(window.electron.store.set).toHaveBeenNthCalledWith( + 3, + 'userPreferences.webRequestHeaderAcceptLanguage', + 'cz-Cz' + ); + + expect(mockOnClose).toHaveBeenCalled(); + }); +}); diff --git a/desktop-app/src/renderer/components/ToolBar/Menu/Flyout/Settings/SettingsContent.tsx b/desktop-app/src/renderer/components/ToolBar/Menu/Flyout/Settings/SettingsContent.tsx index 569244efa..e954fef36 100644 --- a/desktop-app/src/renderer/components/ToolBar/Menu/Flyout/Settings/SettingsContent.tsx +++ b/desktop-app/src/renderer/components/ToolBar/Menu/Flyout/Settings/SettingsContent.tsx @@ -2,6 +2,7 @@ import { useId, useState } from 'react'; import Button from 'renderer/components/Button'; import Toggle from 'renderer/components/Toggle'; +import { SettingsContentHeaders } from './SettingsContentHeaders'; interface Props { onClose: () => void; @@ -16,6 +17,13 @@ export const SettingsContent = ({ onClose }: Props) => { window.electron.store.get('userPreferences.customTitlebar') ); + const [webRequestHeaderAcceptLanguage, setWebRequestHeaderAcceptLanguage] = + useState( + window.electron.store.get( + 'userPreferences.webRequestHeaderAcceptLanguage' + ) + ); + const onSave = () => { if (screenshotSaveLocation === '' || screenshotSaveLocation == null) { // eslint-disable-next-line no-alert @@ -32,6 +40,11 @@ export const SettingsContent = ({ onClose }: Props) => { enableCustomTitlebar ); + window.electron.store.set( + 'userPreferences.webRequestHeaderAcceptLanguage', + webRequestHeaderAcceptLanguage + ); + onClose(); }; @@ -43,6 +56,7 @@ export const SettingsContent = ({ onClose }: Props) => {