From eddd7afa3c5ce16b0bff62b3d49ae9fcd3d012b8 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Tue, 19 Mar 2024 12:32:04 +0900 Subject: [PATCH] Add AppendableBuffer class and modify pipeFetchLog function --- src/ts/storage/globalApi.ts | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/ts/storage/globalApi.ts b/src/ts/storage/globalApi.ts index 548fa432..6992f6f6 100644 --- a/src/ts/storage/globalApi.ts +++ b/src/ts/storage/globalApi.ts @@ -1340,8 +1340,36 @@ if(Capacitor.isNativePlatform()){ streamedFetchListening = true } +class AppendableBuffer{ + buffer:Uint8Array + constructor(){ + this.buffer = new Uint8Array(0) + } + append(data:Uint8Array){ + const newBuffer = new Uint8Array(this.buffer.length + data.length) + newBuffer.set(this.buffer, 0) + newBuffer.set(data, this.buffer.length) + this.buffer = newBuffer + } +} + const pipeFetchLog = (fetchLogIndex:number, readableStream:ReadableStream) => { - const textDecoder = new TextDecoderStream() + let textDecoderBuffer = new AppendableBuffer() + let textDecoderPointer = 0 + const textDecoder = TextDecoderStream ? (new TextDecoderStream()) : new TransformStream({ + transform(chunk, controller) { + try{ + textDecoderBuffer.append(chunk) + const decoded = new TextDecoder('utf-8', { + fatal: true + }).decode(textDecoderBuffer.buffer) + let newString = decoded.slice(textDecoderPointer) + textDecoderPointer = decoded.length + controller.enqueue(newString) + } + catch{} + } + }) textDecoder.readable.pipeTo(new WritableStream({ write(chunk) { fetchLog[fetchLogIndex].response += chunk