Skip to content

Commit 4dc2354

Browse files
committed
fix(telegram): preserve final overflow state
1 parent 19caed6 commit 4dc2354

2 files changed

Lines changed: 26 additions & 3 deletions

File tree

extensions/telegram/src/draft-stream.test.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -505,6 +505,25 @@ describe("createTelegramDraftStream", () => {
505505
);
506506
});
507507

508+
it("continues finalizing more than two overflow chunks after a clamped preview", async () => {
509+
const api = createMockDraftApi();
510+
api.sendMessage
511+
.mockResolvedValueOnce({ message_id: 17 })
512+
.mockResolvedValueOnce({ message_id: 42 })
513+
.mockResolvedValueOnce({ message_id: 43 });
514+
const stream = createDraftStream(api, { maxChars: 10 });
515+
516+
stream.update("1234567890ABCDEFGHIJKLMNOPQRST");
517+
await stream.flush();
518+
await stream.stop();
519+
520+
expect(api.sendMessage).toHaveBeenCalledTimes(3);
521+
expect(api.sendMessage).toHaveBeenNthCalledWith(1, 123, "1234567890", undefined);
522+
expect(api.sendMessage).toHaveBeenNthCalledWith(2, 123, "ABCDEFGHIJ", undefined);
523+
expect(api.sendMessage).toHaveBeenNthCalledWith(3, 123, "KLMNOPQRST", undefined);
524+
expect(stream.lastDeliveredText?.()).toBe("1234567890ABCDEFGHIJKLMNOPQRST");
525+
});
526+
508527
it("retains final overflow preview pages", async () => {
509528
const api = createMockDraftApi();
510529
api.sendMessage

extensions/telegram/src/draft-stream.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,11 @@ export function createTelegramDraftStream(params: {
117117
let previewRevision = 0;
118118
let generation = 0;
119119
let deliveredTextOffset = 0;
120-
let resetStreamToNewMessage: (options?: { keepPending?: boolean; resetOffset?: boolean }) => void;
120+
let resetStreamToNewMessage: (options?: {
121+
keepFinal?: boolean;
122+
keepPending?: boolean;
123+
resetOffset?: boolean;
124+
}) => void;
121125
type PreviewSendParams = {
122126
renderedText: string;
123127
renderedParseMode: "HTML" | undefined;
@@ -227,7 +231,7 @@ export function createTelegramDraftStream(params: {
227231
const supersededParseMode = lastSentParseMode;
228232
const supersededVisibleSinceMs = streamVisibleSinceMs;
229233
deliveredTextOffset = lastDeliveredText.length;
230-
resetStreamToNewMessage({ keepPending: true, resetOffset: false });
234+
resetStreamToNewMessage({ keepFinal: true, keepPending: true, resetOffset: false });
231235
if (typeof supersededMessageId === "number") {
232236
params.onSupersededPreview?.({
233237
messageId: supersededMessageId,
@@ -314,7 +318,7 @@ export function createTelegramDraftStream(params: {
314318

315319
resetStreamToNewMessage = (options) => {
316320
streamState.stopped = false;
317-
streamState.final = false;
321+
streamState.final = options?.keepFinal === true;
318322
generation += 1;
319323
messageSendAttempted = false;
320324
streamMessageId = undefined;

0 commit comments

Comments
 (0)