From 71ef0f319f95a4610ee9608588f0c25023d279f5 Mon Sep 17 00:00:00 2001 From: kangfenmao Date: Tue, 22 Oct 2024 19:01:46 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=AF=9D=E9=A2=98=E5=88=86=E4=BA=AB?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=20#103?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/renderer/src/i18n/en-us.json | 3 ++- src/renderer/src/i18n/zh-cn.json | 3 ++- src/renderer/src/i18n/zh-tw.json | 3 ++- src/renderer/src/pages/home/Tabs/Topics.tsx | 6 ++++++ src/renderer/src/utils/export.ts | 24 +++++++++++++++++++++ 5 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 src/renderer/src/utils/export.ts diff --git a/src/renderer/src/i18n/en-us.json b/src/renderer/src/i18n/en-us.json index 81a3bcc0..967d446f 100644 --- a/src/renderer/src/i18n/en-us.json +++ b/src/renderer/src/i18n/en-us.json @@ -79,6 +79,7 @@ "topics.list": "Topic List", "topics.export.title": "Export", "topics.export.image": "Export as image", + "topics.export.md": "Export as markdown", "input.new_topic": "New Topic", "input.topics": " Topics ", "input.clear": "Clear", @@ -234,7 +235,7 @@ "general.view_webdav_settings": "View WebDAV settings", "general.reset.title": "Data Reset", "general.reset.button": "Reset", - "general.manually_check_update.title": "Manually Check for updates", + "general.manually_check_update.title": "Turn off update checking", "data.webdav.title": "WebDAV", "data.webdav.host": "WebDAV Host", "data.webdav.host.placeholder": "http://localhost:8080", diff --git a/src/renderer/src/i18n/zh-cn.json b/src/renderer/src/i18n/zh-cn.json index baeb864e..d0eeaf6a 100644 --- a/src/renderer/src/i18n/zh-cn.json +++ b/src/renderer/src/i18n/zh-cn.json @@ -79,6 +79,7 @@ "topics.list": "话题列表", "topics.export.title": "导出", "topics.export.image": "导出为图片", + "topics.export.md": "导出为 Markdown", "input.new_topic": "新话题", "input.topics": " 话题 ", "input.clear": "清空消息", @@ -234,7 +235,7 @@ "general.reset.title": "重置数据", "general.reset.button": "重置", "general.view_webdav_settings": "查看 WebDAV 设置", - "general.manually_check_update.title": "手动检查更新", + "general.manually_check_update.title": "关闭更新检测", "data.webdav.title": "WebDAV", "data.webdav.host": "WebDAV 地址", "data.webdav.host.placeholder": "http://localhost:8080", diff --git a/src/renderer/src/i18n/zh-tw.json b/src/renderer/src/i18n/zh-tw.json index dbc15dd7..3f15a7a9 100644 --- a/src/renderer/src/i18n/zh-tw.json +++ b/src/renderer/src/i18n/zh-tw.json @@ -79,6 +79,7 @@ "topics.list": "話題列表", "topics.export.title": "匯出", "topics.export.image": "匯出為圖片", + "topics.export.md": "匯出為 Markdown", "input.new_topic": "新話題", "input.topics": " 話題 ", "input.clear": "清除", @@ -234,7 +235,7 @@ "general.view_webdav_settings": "查看 WebDAV 設定", "general.reset.title": "資料重置", "general.reset.button": "重置", - "general.manually_check_update.title": "手動檢查更新", + "general.manually_check_update.title": "關閉更新檢查", "data.webdav.title": "WebDAV", "data.webdav.host": "WebDAV 主機位址", "data.webdav.host.placeholder": "http://localhost:8080", diff --git a/src/renderer/src/pages/home/Tabs/Topics.tsx b/src/renderer/src/pages/home/Tabs/Topics.tsx index f6a1baf4..7a16869c 100644 --- a/src/renderer/src/pages/home/Tabs/Topics.tsx +++ b/src/renderer/src/pages/home/Tabs/Topics.tsx @@ -16,6 +16,7 @@ import { EVENT_NAMES, EventEmitter } from '@renderer/services/event' import store, { useAppSelector } from '@renderer/store' import { setGenerating } from '@renderer/store/runtime' import { Assistant, Topic } from '@renderer/types' +import { exportTopicAsMarkdown } from '@renderer/utils/export' import { Dropdown, MenuProps } from 'antd' import dayjs from 'dayjs' import { findIndex } from 'lodash' @@ -134,6 +135,11 @@ const Topics: FC = ({ assistant: _assistant, activeTopic, setActiveTopic label: t('chat.topics.export.image'), key: 'image', onClick: () => EventEmitter.emit(EVENT_NAMES.EXPORT_TOPIC_IMAGE, topic) + }, + { + label: t('chat.topics.export.md'), + key: 'markdown', + onClick: () => exportTopicAsMarkdown(topic) } ] } diff --git a/src/renderer/src/utils/export.ts b/src/renderer/src/utils/export.ts new file mode 100644 index 00000000..cffbf1c4 --- /dev/null +++ b/src/renderer/src/utils/export.ts @@ -0,0 +1,24 @@ +import db from '@renderer/databases' +import { Message, Topic } from '@renderer/types' + +export const exportMessageAsMarkdown = (message: Message) => { + if (message.role === 'user') { + return `### User\n\n${message.content}` + } + + return `### Assistant\n\n${message.content}` +} + +export const exportMessagesAsMarkdown = (messages: Message[]) => { + return messages.map((message) => exportMessageAsMarkdown(message)).join('\n\n---\n\n') +} + +export const exportTopicAsMarkdown = async (topic: Topic) => { + const fileName = topic.name + '.md' + const topicMessages = await db.topics.get(topic.id) + if (topicMessages) { + const title = '# ' + topic.name + `\n\n` + const markdown = exportMessagesAsMarkdown(topicMessages.messages) + window.api.file.save(fileName, title + markdown) + } +}