From 91c764fc89fd630ef2327345238b87b364ec4a43 Mon Sep 17 00:00:00 2001 From: fzk <458813868@qq.com> Date: Fri, 8 Dec 2023 09:37:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=87=8D=E7=BD=AE=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E3=80=81=E6=98=BE=E7=A4=BA=E5=BF=AB=E6=8D=B7=E9=94=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/desktop/CHANGELOG.md | 4 + packages/desktop/electron/i18n/de-DE.json | 4 + packages/desktop/electron/i18n/en-US.json | 13 +- packages/desktop/electron/i18n/zh-CN.json | 9 +- packages/desktop/electron/main/config.ts | 80 ++++++--- packages/desktop/electron/main/contract.ts | 2 + packages/desktop/electron/main/ipcMain.ts | 15 -- .../desktop/electron/preload/electronAPI.ts | 1 - packages/desktop/package.json | 7 +- packages/server/CHANGELOG.md | 4 + packages/server/package.json | 2 +- packages/server/rollup.config.mjs | 3 +- packages/server/src/config/index.ts | 151 ++++++++++------- packages/server/src/contract/index.ts | 12 +- .../src/controller/SettingController.ts | 44 ++++- packages/server/src/entity/Setting.ts | 2 +- packages/server/src/route/Setting.ts | 67 ++++---- packages/web/CHANGELOG.md | 4 + packages/web/src/api/setting.ts | 6 + .../recorderScreen/ScreenRecorder.tsx | 20 +-- .../src/components/setting/basicSetting.tsx | 2 +- .../src/components/setting/serverSetting.tsx | 2 +- .../components/setting/shortcutSetting.tsx | 37 +++++ .../src/components/setting/userSetting.tsx | 43 ++++- packages/web/src/i18n/locales/de-DE.json | 6 +- packages/web/src/i18n/locales/en-US.json | 11 +- packages/web/src/i18n/locales/zh-CN.json | 7 +- .../src/pages/recorderFullScreen/index.tsx | 25 ++- .../web/src/pages/setting/index.module.scss | 13 ++ packages/web/src/pages/setting/index.tsx | 153 +++++++++--------- 30 files changed, 473 insertions(+), 276 deletions(-) create mode 100644 packages/web/src/components/setting/shortcutSetting.tsx diff --git a/packages/desktop/CHANGELOG.md b/packages/desktop/CHANGELOG.md index f07e68e7..cb694eb7 100644 --- a/packages/desktop/CHANGELOG.md +++ b/packages/desktop/CHANGELOG.md @@ -1,5 +1,9 @@ # @pear-rec/desktop +## 1.3.4 + +feat: 重置设置、显示快捷键 + ## 1.3.3 fix: 录屏 bug diff --git a/packages/desktop/electron/i18n/de-DE.json b/packages/desktop/electron/i18n/de-DE.json index f460e0e5..f66de04f 100644 --- a/packages/desktop/electron/i18n/de-DE.json +++ b/packages/desktop/electron/i18n/de-DE.json @@ -77,6 +77,10 @@ "setting": { "userSetting": "Nutzereinstellungen", "basicSetting": "Basiseinstellungen", + "serverSetting": "server", + "shortcutSetting": "shortcut", + "address": "web address", + "openFilePath": "open folder", "language": "Sprache", "filePath": "Dateipfad", "openAtLogin": "Bei Anmeldung öffnen", diff --git a/packages/desktop/electron/i18n/en-US.json b/packages/desktop/electron/i18n/en-US.json index c7293761..532f7ea7 100644 --- a/packages/desktop/electron/i18n/en-US.json +++ b/packages/desktop/electron/i18n/en-US.json @@ -75,13 +75,20 @@ "emptyBtn": "open video" }, "setting": { - "userSetting": "userSetting", - "basicSetting": "basicSetting", + "userSetting": "user", + "basicSetting": "basic", + "serverSetting": "server", + "shortcutSetting": "shortcut", + "address": "web address", + "openFilePath": "open folder", + "reset": "reset", "language": "language", "filePath": "filePath", "openAtLogin": "openAtLogin", "open": "open", "close": "close", - "download": "download" + "download": "download", + "openServer": "open server", + "serverPath": "server path" } } \ No newline at end of file diff --git a/packages/desktop/electron/i18n/zh-CN.json b/packages/desktop/electron/i18n/zh-CN.json index adadd525..4eb9b976 100644 --- a/packages/desktop/electron/i18n/zh-CN.json +++ b/packages/desktop/electron/i18n/zh-CN.json @@ -77,11 +77,18 @@ "setting": { "userSetting": "账户设置", "basicSetting": "通用设置", + "serverSetting": "服务设置", + "shortcutSetting": "快捷键", + "address": "软件地址", + "openFilePath": "打开下载文件夹", + "reset": "重置", "language": "语言", "filePath": "保存地址", "openAtLogin": "开机自启动", "open": "开启", "close": "关闭", - "download": "浏览器下载" + "download": "浏览器下载", + "openServer": "打开服务", + "serverPath": "服务地址" } } \ No newline at end of file diff --git a/packages/desktop/electron/main/config.ts b/packages/desktop/electron/main/config.ts index 0eebbd78..c17a72d6 100644 --- a/packages/desktop/electron/main/config.ts +++ b/packages/desktop/electron/main/config.ts @@ -2,35 +2,43 @@ import jsonfile from 'jsonfile'; import * as fs from 'node:fs'; import { v5 as uuidv5 } from 'uuid'; import dayjs from 'dayjs'; -import { PEAR_FILES_PATH, CONFIG_FILE_PATH } from './contract'; - -const defaultConfig = { - user: { - uuid: uuidv5('https://www.w3.org/', uuidv5.URL), - userName: `pear-rec:user`, - userType: 1, - createdAt: dayjs().format(), - }, - language: 'zh', -}; +import { PEAR_FILES_PATH, CONFIG_FILE_PATH, DEFAULT_CONFIG_FILE_PATH } from './contract'; export function initConfig() { - let config: any = {}; if (!fs.existsSync(PEAR_FILES_PATH)) { - fs.mkdirSync(PEAR_FILES_PATH, { recursive: true }); // 不存在则创建目录 + fs.mkdirSync(PEAR_FILES_PATH, { recursive: true }); } - try { - config = jsonfile.readFileSync(CONFIG_FILE_PATH); - config.user || (config = editConfig('user', defaultConfig.user)); - config.language || (config = editConfig('language', defaultConfig.language)); - } catch (err) { - jsonfile.writeFileSync(CONFIG_FILE_PATH, defaultConfig, { - spaces: 2, - EOL: '\r\n', - }); - console.log('initConfig :', err); - } - return config; + fs.access(DEFAULT_CONFIG_FILE_PATH, fs.constants.F_OK, (err) => { + if (err) { + initDefaultConfig(); + return; + } + }); +} + +function initDefaultConfig() { + const defaultConfig = { + user: { + uuid: uuidv5('https://www.w3.org/', uuidv5.URL), + userName: `pear-rec:user`, + userType: 1, + createdAt: dayjs().format(), + }, + isProxy: false, + proxyPort: '7890', + language: 'zh', + filePath: PEAR_FILES_PATH, + openAtLogin: false, + serverPath: 'http://localhost:9190/', + }; + jsonfile.writeFileSync(CONFIG_FILE_PATH, defaultConfig, { + spaces: 2, + EOL: '\r\n', + }); + jsonfile.writeFileSync(DEFAULT_CONFIG_FILE_PATH, defaultConfig, { + spaces: 2, + EOL: '\r\n', + }); } export function getConfig() { @@ -42,6 +50,28 @@ export function getConfig() { } } +export function getDefaultConfig() { + try { + let defaultConfig = jsonfile.readFileSync(DEFAULT_CONFIG_FILE_PATH) || {}; + return defaultConfig; + } catch (err) { + console.log('getConfig :', err); + } +} + +export function resetConfig() { + try { + let defaultConfig = jsonfile.readFileSync(DEFAULT_CONFIG_FILE_PATH) || {}; + jsonfile.writeFileSync(CONFIG_FILE_PATH, defaultConfig, { + spaces: 2, + EOL: '\r\n', + }); + return defaultConfig; + } catch (err) { + console.log('getConfig :', err); + } +} + export function editConfig(key: string, value: any, cb?: Function) { try { let config = jsonfile.readFileSync(CONFIG_FILE_PATH) || {}; diff --git a/packages/desktop/electron/main/contract.ts b/packages/desktop/electron/main/contract.ts index 511520de..b6fa4b44 100644 --- a/packages/desktop/electron/main/contract.ts +++ b/packages/desktop/electron/main/contract.ts @@ -26,4 +26,6 @@ export const PEAR_FILES_PATH = path.join(DOCS_PATH, 'Pear Files'); export const CONFIG_FILE_PATH = path.join(PEAR_FILES_PATH, `config.json`); +export const DEFAULT_CONFIG_FILE_PATH = path.join(PEAR_FILES_PATH, `default-config.json`); + export const DB_PATH = path.join(PEAR_FILES_PATH, 'db/pear-rec.db'); diff --git a/packages/desktop/electron/main/ipcMain.ts b/packages/desktop/electron/main/ipcMain.ts index 4d57af9c..01a21c2f 100644 --- a/packages/desktop/electron/main/ipcMain.ts +++ b/packages/desktop/electron/main/ipcMain.ts @@ -101,21 +101,6 @@ function initIpcMain() { ipcMain.on('rs:focus', () => { recorderScreenWin.focusRecorderScreenWin(); }); - ipcMain.on('rs:shotScreen', async () => { - const { width, height } = utils.getScreenSize(); - const sources = [ - ...(await desktopCapturer.getSources({ - types: ['screen'], - thumbnailSize: { - width, - height, - }, - })), - ]; - const source = sources.filter((e: any) => e.id == 'screen:0:0')[0]; - const img = source.thumbnail.toPNG(); - recorderScreenWin.shotScreen(img); - }); // 录屏截图 ipcMain.on('cs:open-win', () => { clipScreenWin.closeClipScreenWin(); diff --git a/packages/desktop/electron/preload/electronAPI.ts b/packages/desktop/electron/preload/electronAPI.ts index 3100bdb0..f05c006e 100644 --- a/packages/desktop/electron/preload/electronAPI.ts +++ b/packages/desktop/electron/preload/electronAPI.ts @@ -27,7 +27,6 @@ contextBridge.exposeInMainWorld('electronAPI', { invokeRsGetCursorScreenPoint: () => ipcRenderer.invoke('rs:get-cursor-screen-point'), invokeRsIsFocused: () => ipcRenderer.invoke('rs:is-focused'), sendRsFocus: () => ipcRenderer.send('rs:focus'), - sendRsShotScreen: () => ipcRenderer.send('rs:shotScreen'), sendRsSetIgnoreMouseEvents: (ignore: boolean, options: any) => { ipcRenderer.send('rs:set-ignore-mouse-events', ignore, options); }, diff --git a/packages/desktop/package.json b/packages/desktop/package.json index bdecccdb..f727825e 100644 --- a/packages/desktop/package.json +++ b/packages/desktop/package.json @@ -3,10 +3,7 @@ "version": "1.3.3", "main": "dist-electron/main/index.js", "description": "pear-rec", - "author": { - "name": "027xiguapi", - "email": "458813868@qq.com" - }, + "author": "027xiguapi", "license": "Apache-2.0", "private": true, "debug": { @@ -46,4 +43,4 @@ "engines": { "node": "^14.18.0 || >=16.0.0" } -} \ No newline at end of file +} diff --git a/packages/server/CHANGELOG.md b/packages/server/CHANGELOG.md index 57d1084c..69fb4e3d 100644 --- a/packages/server/CHANGELOG.md +++ b/packages/server/CHANGELOG.md @@ -1,5 +1,9 @@ # @pear-rec/server +## 1.2.5 + +feat: 重置设置 + ## 1.2.4 perf: 设置保存地址 diff --git a/packages/server/package.json b/packages/server/package.json index 80d2693b..ccf3d4a1 100644 --- a/packages/server/package.json +++ b/packages/server/package.json @@ -35,4 +35,4 @@ "sql.js": "^1.8.0", "typeorm": "^0.3.17" } -} \ No newline at end of file +} diff --git a/packages/server/rollup.config.mjs b/packages/server/rollup.config.mjs index 5ba0f3b7..7c9c563d 100644 --- a/packages/server/rollup.config.mjs +++ b/packages/server/rollup.config.mjs @@ -7,7 +7,8 @@ export default { input: 'src/index.ts', output: { file: 'dist/index.js', - format: 'es', + format: 'cjs', + sourcemap: true, }, context: 'window', external: ['typeorm', 'sql.js'], diff --git a/packages/server/src/config/index.ts b/packages/server/src/config/index.ts index e580660a..525a540f 100644 --- a/packages/server/src/config/index.ts +++ b/packages/server/src/config/index.ts @@ -1,74 +1,101 @@ -import jsonfile from "jsonfile"; -import * as fs from "node:fs"; -import { v5 as uuidv5 } from "uuid"; -import dayjs from "dayjs"; -import { PEAR_FILES_PATH, CONFIG_FILE_PATH } from "../contract"; - -const defaultConfig = { - user: { - uuid: uuidv5("https://www.w3.org/", uuidv5.URL), - userName: `pear-rec:user`, - userType: 1, - createdAt: dayjs().format(), - }, - language: "zh", -}; +import jsonfile from 'jsonfile'; +import * as fs from 'node:fs'; +import { v5 as uuidv5 } from 'uuid'; +import dayjs from 'dayjs'; +import { PEAR_FILES_PATH, CONFIG_FILE_PATH, DEFAULT_CONFIG_FILE_PATH } from '../contract'; export function initConfig() { - let config: any = {}; - if (!fs.existsSync(PEAR_FILES_PATH)) { - fs.mkdirSync(PEAR_FILES_PATH, { recursive: true }); // 不存在则创建目录 - } - try { - config = jsonfile.readFileSync(CONFIG_FILE_PATH); - config.user || (config = editConfig("user", defaultConfig.user)); - config.language || - (config = editConfig("language", defaultConfig.language)); - } catch (err) { - jsonfile.writeFileSync(CONFIG_FILE_PATH, defaultConfig, { - spaces: 2, - EOL: "\r\n", - }); - console.log("initConfig :", err); - } - return config; + if (!fs.existsSync(PEAR_FILES_PATH)) { + fs.mkdirSync(PEAR_FILES_PATH, { recursive: true }); + } + fs.access(DEFAULT_CONFIG_FILE_PATH, fs.constants.F_OK, (err) => { + if (err) { + initDefaultConfig(); + return; + } + }); +} + +function initDefaultConfig() { + const defaultConfig = { + user: { + uuid: uuidv5('https://www.w3.org/', uuidv5.URL), + userName: `pear-rec:user`, + userType: 1, + createdAt: dayjs().format(), + }, + isProxy: false, + proxyPort: '7890', + language: 'zh', + filePath: PEAR_FILES_PATH, + openAtLogin: false, + serverPath: 'http://localhost:9190/', + }; + jsonfile.writeFileSync(CONFIG_FILE_PATH, defaultConfig, { + spaces: 2, + EOL: '\r\n', + }); + jsonfile.writeFileSync(DEFAULT_CONFIG_FILE_PATH, defaultConfig, { + spaces: 2, + EOL: '\r\n', + }); } export function getConfig() { - try { - let config = jsonfile.readFileSync(CONFIG_FILE_PATH) || {}; - return config; - } catch (err) { - console.log("getConfig :", err); - } + try { + let config = jsonfile.readFileSync(CONFIG_FILE_PATH) || {}; + return config; + } catch (err) { + console.log('getConfig :', err); + } +} + +export function getDefaultConfig() { + try { + let defaultConfig = jsonfile.readFileSync(DEFAULT_CONFIG_FILE_PATH) || {}; + return defaultConfig; + } catch (err) { + console.log('getConfig :', err); + } +} + +export function resetConfig() { + try { + let defaultConfig = jsonfile.readFileSync(DEFAULT_CONFIG_FILE_PATH) || {}; + jsonfile.writeFileSync(CONFIG_FILE_PATH, defaultConfig, { + spaces: 2, + EOL: '\r\n', + }); + return defaultConfig; + } catch (err) { + console.log('getConfig :', err); + } } export function editConfig(key: string, value: any) { - try { - let config = jsonfile.readFileSync(CONFIG_FILE_PATH) || {}; - config[key] = value; - jsonfile.writeFileSync(CONFIG_FILE_PATH, config, { - spaces: 2, - EOL: "\r\n", - }); - return config; - } catch (err) { - console.log("editConfig :", err); - } + try { + let config = jsonfile.readFileSync(CONFIG_FILE_PATH) || {}; + config[key] = value; + jsonfile.writeFileSync(CONFIG_FILE_PATH, config, { + spaces: 2, + EOL: '\r\n', + }); + return config; + } catch (err) { + console.log('editConfig :', err); + } } export function editUser(key: string, value: string, cb?: Function) { - try { - jsonfile.readFile(CONFIG_FILE_PATH).then((config) => { - const user = config.user; - user[key] = value; - jsonfile - .writeFile(CONFIG_FILE_PATH, { user: user }, { spaces: 2, EOL: "\r\n" }) - .then(() => { - cb && cb(); - }); - }); - } catch (err) { - console.log("editUser :", err); - } + try { + jsonfile.readFile(CONFIG_FILE_PATH).then((config) => { + const user = config.user; + user[key] = value; + jsonfile.writeFile(CONFIG_FILE_PATH, { user: user }, { spaces: 2, EOL: '\r\n' }).then(() => { + cb && cb(); + }); + }); + } catch (err) { + console.log('editUser :', err); + } } diff --git a/packages/server/src/contract/index.ts b/packages/server/src/contract/index.ts index a1583816..5728d41d 100644 --- a/packages/server/src/contract/index.ts +++ b/packages/server/src/contract/index.ts @@ -1,12 +1,14 @@ -import { join } from "node:path"; -import { homedir } from "node:os"; +import { join } from 'node:path'; +import { homedir } from 'node:os'; export const PORT = process.env.PORT || 9190; -export const DOCS_PATH = join(homedir(), "Documents"); +export const DOCS_PATH = join(homedir(), 'Documents'); -export const PEAR_FILES_PATH = join(DOCS_PATH, "Pear Files"); +export const PEAR_FILES_PATH = join(DOCS_PATH, 'Pear Files'); export const CONFIG_FILE_PATH = join(PEAR_FILES_PATH, `config.json`); -export const DB_PATH = join(PEAR_FILES_PATH, "db/pear-rec.db"); +export const DEFAULT_CONFIG_FILE_PATH = join(PEAR_FILES_PATH, `default-config.json`); + +export const DB_PATH = join(PEAR_FILES_PATH, 'db/pear-rec.db'); diff --git a/packages/server/src/controller/SettingController.ts b/packages/server/src/controller/SettingController.ts index d76958f6..8f605b50 100644 --- a/packages/server/src/controller/SettingController.ts +++ b/packages/server/src/controller/SettingController.ts @@ -1,7 +1,7 @@ import { AppDataSource } from '../dataSource'; import { Setting } from '../entity/Setting'; import { UserController } from '../controller/UserController'; -import { PEAR_FILES_PATH } from '../contract'; +import { getDefaultConfig, resetConfig, editConfig } from '../config'; const userController = new UserController(); export class SettingController { @@ -40,13 +40,14 @@ export class SettingController { if (!setting) { const user = await userController._getUserById(userId); + const defaultConfig = getDefaultConfig(); let _setting = { - isProxy: false, - proxyPort: 7890, - language: 'zh', - filePath: PEAR_FILES_PATH, - openAtLogin: false, - serverPath: 'http://localhost:9190/', + isProxy: defaultConfig.isProxy, + proxyPort: defaultConfig.proxyPort, + language: defaultConfig.language, + filePath: defaultConfig.filePath, + openAtLogin: defaultConfig.openAtLogin, + serverPath: defaultConfig.serverPath, user: user, }; _setting = await settingRepository.save(_setting); @@ -56,6 +57,28 @@ export class SettingController { res.json({ code: 0, data: setting }); } + async resetSetting(req, res) { + const settingRepository = AppDataSource.getRepository(Setting); + const setting = await settingRepository.findOneBy({ id: req.params.id }); + + if (!setting) { + return res.json({ code: -1, data: 'setting not found' }); + } + let defaultConfig = getDefaultConfig(); + let _setting = { + isProxy: defaultConfig.isProxy, + proxyPort: defaultConfig.proxyPort, + language: defaultConfig.language, + filePath: defaultConfig.filePath, + openAtLogin: defaultConfig.openAtLogin, + serverPath: defaultConfig.serverPath, + }; + settingRepository.merge(setting, _setting); + await settingRepository.save(setting); + resetConfig(); + res.json({ code: 0, data: setting }); + } + async updateSetting(req, res) { const settingRepository = AppDataSource.getRepository(Setting); const setting = await settingRepository.findOneBy({ id: req.params.id }); @@ -63,8 +86,13 @@ export class SettingController { if (!setting) { return res.json({ code: -1, data: 'setting not found' }); } - settingRepository.merge(setting, req.body); + const _setting = req.body; + settingRepository.merge(setting, _setting); await settingRepository.save(setting); + for (let key in _setting) { + let value = _setting[key]; + editConfig(key, value); + } res.json({ code: 0, data: setting }); } diff --git a/packages/server/src/entity/Setting.ts b/packages/server/src/entity/Setting.ts index b47cff56..1d294257 100644 --- a/packages/server/src/entity/Setting.ts +++ b/packages/server/src/entity/Setting.ts @@ -20,7 +20,7 @@ export class Setting implements ISetting { isProxy: boolean; // 代理端口 - @Column('integer', { nullable: true }) + @Column('varchar', { nullable: true }) proxyPort: number; // 语言 diff --git a/packages/server/src/route/Setting.ts b/packages/server/src/route/Setting.ts index effbe817..d9838952 100644 --- a/packages/server/src/route/Setting.ts +++ b/packages/server/src/route/Setting.ts @@ -1,36 +1,41 @@ -import { SettingController } from "../controller/SettingController"; +import { SettingController } from '../controller/SettingController'; const settingController = new SettingController(); export const SettingRoutes = [ - { - path: "/settings", - method: "get", - action: settingController.getSettings, - }, - { - path: "/addSetting", - method: "post", - action: settingController.createSetting, - }, - { - path: "/setting/:id", - method: "get", - action: settingController.getSetting, - }, - { - path: "/getSettingByUserId/:userId", - method: "get", - action: settingController.getSettingByUserId, - }, - { - path: "/editSetting/:id", - method: "post", - action: settingController.updateSetting, - }, - { - path: "/deleteSettings/:id", - method: "get", - action: settingController.deleteSetting, - }, + { + path: '/settings', + method: 'get', + action: settingController.getSettings, + }, + { + path: '/addSetting', + method: 'post', + action: settingController.createSetting, + }, + { + path: '/setting/:id', + method: 'get', + action: settingController.getSetting, + }, + { + path: '/getSettingByUserId/:userId', + method: 'get', + action: settingController.getSettingByUserId, + }, + { + path: '/editSetting/:id', + method: 'post', + action: settingController.updateSetting, + }, + { + path: '/deleteSettings/:id', + method: 'get', + action: settingController.deleteSetting, + }, + { + path: '/resetSetting/:id', + method: 'get', + action: settingController.resetSetting, + }, ]; diff --git a/packages/web/CHANGELOG.md b/packages/web/CHANGELOG.md index fdccbb86..139e5015 100644 --- a/packages/web/CHANGELOG.md +++ b/packages/web/CHANGELOG.md @@ -1,5 +1,9 @@ # @pear-rec/web +## 1.3.4 + +feat: 重置设置、显示快捷键 + ## 1.3.3 fix: 录屏 bug diff --git a/packages/web/src/api/setting.ts b/packages/web/src/api/setting.ts index 53f42b22..188f20ff 100644 --- a/packages/web/src/api/setting.ts +++ b/packages/web/src/api/setting.ts @@ -15,5 +15,11 @@ export function useSettingApi() { data: data, }); }, + resetSetting: (userId) => { + return request({ + url: `/resetSetting/${userId}`, + method: 'get', + }); + }, }; } diff --git a/packages/web/src/components/recorderScreen/ScreenRecorder.tsx b/packages/web/src/components/recorderScreen/ScreenRecorder.tsx index 67a7984e..69f8c3ed 100644 --- a/packages/web/src/components/recorderScreen/ScreenRecorder.tsx +++ b/packages/web/src/components/recorderScreen/ScreenRecorder.tsx @@ -152,18 +152,14 @@ const ScreenRecorder = (props) => { } function handleShotScreen() { - if (window.isElectron) { - window.electronAPI.sendRsShotScreen(); - } else { - const { width, height } = props.size; - const canvas = document.createElement('canvas'); - canvas.width = width; - canvas.height = height; - const context = canvas.getContext('2d'); - context.drawImage(videoRef.current, 0, 0, canvas.width, canvas.height); - const url = canvas.toDataURL('image/png'); - saveAs(url, `pear-rec_${+new Date()}.png`); - } + const { width, height } = props.size; + const canvas = document.createElement('canvas'); + canvas.width = width; + canvas.height = height; + const context = canvas.getContext('2d'); + context.drawImage(videoRef.current, 0, 0, canvas.width, canvas.height); + const url = canvas.toDataURL('image/png'); + saveAs(url, `pear-rec_${+new Date()}.png`); } // 开始录制 diff --git a/packages/web/src/components/setting/basicSetting.tsx b/packages/web/src/components/setting/basicSetting.tsx index efcfb039..88ad2d0e 100644 --- a/packages/web/src/components/setting/basicSetting.tsx +++ b/packages/web/src/components/setting/basicSetting.tsx @@ -82,7 +82,7 @@ const BasicSetting = (props) => {
- 软件地址: https://github.com/027xiguapi/pear-rec + {t('setting.address')}: https://github.com/027xiguapi/pear-rec
); diff --git a/packages/web/src/components/setting/shortcutSetting.tsx b/packages/web/src/components/setting/shortcutSetting.tsx new file mode 100644 index 00000000..7c5a805d --- /dev/null +++ b/packages/web/src/components/setting/shortcutSetting.tsx @@ -0,0 +1,37 @@ +import React, { useEffect, useRef, useState } from 'react'; +import { useTranslation } from 'react-i18next'; +import { Switch, Form, Input } from 'antd'; +import { useSettingApi } from '../../api/setting'; + +const ShortcutSetting = (props) => { + const settingApi = useSettingApi(); + const { t, i18n } = useTranslation(); + const [form] = Form.useForm(); + const { user, setting } = props; + + return ( +{uuid}
+{formatTime(createdTime)}
+ +