diff --git a/client-protocol/Chat.ts b/client-protocol/Chat.ts index ee76c07..3953945 100644 --- a/client-protocol/Chat.ts +++ b/client-protocol/Chat.ts @@ -81,24 +81,25 @@ export default class Chat extends BaseClientObject { * 对话消息 * ================================================ */ - async getMessages(args: { page?: number, offset?: number }) { + async getMessages(args: { page?: number, offset?: number, limit?: number }) { return (await this.getMessageBeans(args)).map((v) => new Message(this.client, v)) } - async getMessagesOrThrow(args: { page?: number, offset?: number }) { + async getMessagesOrThrow(args: { page?: number, offset?: number, limit?: number }) { return (await this.getMessageBeansOrThrow(args)).map((v) => new Message(this.client, v)) } - async getMessageBeans(args: { page?: number, offset?: number }) { + async getMessageBeans(args: { page?: number, offset?: number, limit?: number }) { try { return await this.getMessageBeansOrThrow(args) } catch (_) { return [] } } - async getMessageBeansOrThrow({ page, offset }: { page?: number, offset?: number }) { + async getMessageBeansOrThrow({ page, offset, limit }: { page?: number, offset?: number, limit?: number }) { const re = await this.client.invoke("Chat.getMessageHistory", { token: this.client.access_token, page, offset, + limit, target: this.bean.id, }) if (re.code == 200) return re.data!.messages as MessageBean[] diff --git a/internal-shared/ApiDeclare.ts b/internal-shared/ApiDeclare.ts index 7da7977..d3a852c 100644 --- a/internal-shared/ApiDeclare.ts +++ b/internal-shared/ApiDeclare.ts @@ -60,4 +60,6 @@ export const CallableMethodBeforeAuth = [ "User.register", "User.login", "User.refreshAccessToken", -] \ No newline at end of file +] + +export const PageFetchMaxLimit = 15 diff --git a/server/api/ChatApi.ts b/server/api/ChatApi.ts index d5c08f5..d7273fa 100644 --- a/server/api/ChatApi.ts +++ b/server/api/ChatApi.ts @@ -116,7 +116,7 @@ export default class ChatApi extends BaseApi { code: 200, msg: "成功", data: { - messages: MessagesManager.getInstanceForChat(chat)[args.page ? 'getMessagesWithPage' : 'getMessagesWithOffset'](null, (args.page ? args.page : args.offset) as number), + messages: MessagesManager.getInstanceForChat(chat)[args.page ? 'getMessagesWithPage' : 'getMessagesWithOffset'](args.limit as number | undefined, (args.page ? args.page : args.offset) as number), }, } }) diff --git a/server/data/MessagesManager.ts b/server/data/MessagesManager.ts index c7e459f..46d7fd5 100644 --- a/server/data/MessagesManager.ts +++ b/server/data/MessagesManager.ts @@ -6,6 +6,7 @@ import chalk from "chalk" import config from "../config.ts" import Chat from "./Chat.ts" import MessageBean from "./MessageBean.ts" +import { PageFetchMaxLimit } from "lingchair-internal-shared" export default class MessagesManager { static database: DatabaseSync = this.init() @@ -60,13 +61,13 @@ export default class MessagesManager { }) } getMessagesWithOffset(limit: number | undefined | null, offset: number = 0) { - const ls = MessagesManager.database.prepare(`SELECT * FROM ${this.getTableName()} ORDER BY id DESC LIMIT ? OFFSET ?;`).all(limit || 15, offset) as unknown as MessageBean[] + const ls = MessagesManager.database.prepare(`SELECT * FROM ${this.getTableName()} ORDER BY id DESC LIMIT ? OFFSET ?;`).all(limit || PageFetchMaxLimit, offset) as unknown as MessageBean[] return ls.map((v) => ({ ...v, chat_id: this.chat.bean.id, })) } getMessagesWithPage(limit: number | undefined | null, page: number = 0) { - return this.getMessagesWithOffset(limit, (limit || 15) * page) + return this.getMessagesWithOffset(limit, (limit || PageFetchMaxLimit) * page) } }