feat: added long text paste control and threshold settings

This commit is contained in:
kangfenmao 2024-12-16 15:08:40 +08:00
parent 7fdc2db522
commit ccbeefc546
8 changed files with 36 additions and 5 deletions

View File

@ -395,6 +395,7 @@
"messages.model.title": "Model Settings",
"messages.title": "Message Settings",
"messages.use_serif_font": "Use serif font",
"messages.input.paste_long_text_threshold": "Paste long text length",
"model": "Default Model",
"models.add.add_model": "Add Model",
"models.add.group_name": "Group Name",

View File

@ -395,6 +395,7 @@
"messages.model.title": "Настройки модели",
"messages.title": "Настройки сообщений",
"messages.use_serif_font": "Использовать serif шрифт",
"messages.input.paste_long_text_threshold": "Длина вставки длинного текста",
"model": "Модель по умолчанию",
"models.add.add_model": "Добавить модель",
"models.add.group_name": "Имя группы",

View File

@ -395,6 +395,7 @@
"messages.model.title": "模型设置",
"messages.title": "消息设置",
"messages.use_serif_font": "使用衬线字体",
"messages.input.paste_long_text_threshold": "长文本长度",
"model": "默认模型",
"models.add.add_model": "添加模型",
"models.add.group_name": "分组名称",

View File

@ -395,6 +395,7 @@
"messages.model.title": "模型設定",
"messages.title": "訊息設定",
"messages.use_serif_font": "使用襯線字體",
"messages.input.paste_long_text_threshold": "長文本長度",
"model": "預設模型",
"models.add.add_model": "添加模型",
"models.add.group_name": "群組名稱",

View File

@ -57,6 +57,7 @@ const Inputbar: FC<Props> = ({ assistant: _assistant, setActiveTopic }) => {
sendMessageShortcut,
fontSize,
pasteLongTextAsFile,
pasteLongTextThreshold,
showInputEstimatedTokens,
clickAssistantToShowTopic,
language,
@ -291,7 +292,7 @@ const Inputbar: FC<Props> = ({ assistant: _assistant, setActiveTopic }) => {
const item = event.clipboardData?.items[0]
if (item && item.kind === 'string' && item.type === 'text/plain') {
item.getAsString(async (pasteText) => {
if (pasteText.length > 1500) {
if (pasteText.length > pasteLongTextThreshold) {
const tempFilePath = await window.api.file.create('pasted_text.txt')
await window.api.file.write(tempFilePath, pasteText)
const selectedFile = await window.api.file.get(tempFilePath)
@ -303,7 +304,7 @@ const Inputbar: FC<Props> = ({ assistant: _assistant, setActiveTopic }) => {
}
}
},
[pasteLongTextAsFile, supportExts, text]
[pasteLongTextAsFile, pasteLongTextThreshold, supportExts, text]
)
const handleDragOver = (e: React.DragEvent<HTMLDivElement>) => {

View File

@ -23,12 +23,13 @@ import {
setMessageFont,
setMessageStyle,
setPasteLongTextAsFile,
setPasteLongTextThreshold,
setRenderInputMessageAsMarkdown,
setShowInputEstimatedTokens,
setShowMessageDivider
} from '@renderer/store/settings'
import { Assistant, AssistantSettings, ThemeMode } from '@renderer/types'
import { Col, Row, Select, Slider, Switch, Tooltip } from 'antd'
import { Col, InputNumber, Row, Select, Slider, Switch, Tooltip } from 'antd'
import { FC, useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
import styled from 'styled-components'
@ -62,7 +63,8 @@ const SettingsTab: FC<Props> = (props) => {
codeShowLineNumbers,
codeCollapsible,
mathEngine,
autoTranslateWithSpace
autoTranslateWithSpace,
pasteLongTextThreshold
} = useSettings()
const onUpdateAssistantSettings = (settings: Partial<AssistantSettings>) => {
@ -320,6 +322,23 @@ const SettingsTab: FC<Props> = (props) => {
onChange={(checked) => dispatch(setPasteLongTextAsFile(checked))}
/>
</SettingRow>
{pasteLongTextAsFile && (
<>
<SettingDivider />
<SettingRow>
<SettingRowTitleSmall>{t('settings.messages.input.paste_long_text_threshold')}</SettingRowTitleSmall>
<InputNumber
size="small"
min={500}
max={10000}
step={100}
value={pasteLongTextThreshold}
onChange={(value) => dispatch(setPasteLongTextThreshold(value ?? 500))}
style={{ width: 80 }}
/>
</SettingRow>
</>
)}
<SettingDivider />
<SettingRow>
<SettingRowTitleSmall>{t('settings.messages.markdown_rendering_input_message')}</SettingRowTitleSmall>

View File

@ -753,6 +753,7 @@ const migrateConfig = {
'49': (state: RootState) => {
state.settings.showMinappIcon = true
state.settings.showFilesIcon = true
state.settings.pasteLongTextThreshold = 1500
if (state.shortcuts) {
state.shortcuts.shortcuts.push({
key: 'copy_last_message',

View File

@ -22,6 +22,7 @@ export interface SettingsState {
topicPosition: 'left' | 'right'
showTopicTime: boolean
pasteLongTextAsFile: boolean
pasteLongTextThreshold: number
clickAssistantToShowTopic: boolean
manualUpdateCheck: boolean
renderInputMessageAsMarkdown: boolean
@ -61,6 +62,7 @@ const initialState: SettingsState = {
topicPosition: 'left',
showTopicTime: false,
pasteLongTextAsFile: false,
pasteLongTextThreshold: 1500,
clickAssistantToShowTopic: false,
manualUpdateCheck: false,
renderInputMessageAsMarkdown: false,
@ -192,6 +194,9 @@ const settingsSlice = createSlice({
},
setShowFilesIcon: (state, action: PayloadAction<boolean>) => {
state.showFilesIcon = action.payload
},
setPasteLongTextThreshold: (state, action: PayloadAction<number>) => {
state.pasteLongTextThreshold = action.payload
}
}
})
@ -232,7 +237,8 @@ export const {
setAutoTranslateWithSpace,
setEnableTopicNaming,
setShowMinappIcon,
setShowFilesIcon
setShowFilesIcon,
setPasteLongTextThreshold
} = settingsSlice.actions
export default settingsSlice.reducer