diff --git a/arkoala-arkts/arkui/src/LazyForEach.ts b/arkoala-arkts/arkui/src/LazyForEach.ts index 9488d4fb9dd761581615dbc0e75c14aa500f8f8e..699e72ee9adcc4e22192ebbb6785c1f5a1aea676 100644 --- a/arkoala-arkts/arkui/src/LazyForEach.ts +++ b/arkoala-arkts/arkui/src/LazyForEach.ts @@ -52,9 +52,9 @@ class LazyForEachManager { static isDummy: boolean = false // Special pointer to mark that more elements needed. static specialPointer: pointer = 1 - static OnRangeUpdate(parent: pointer, totalCount: int32, updater: (currentIndex: int32, currentMark: pointer) => void) { + static OnRangeUpdate(parent: pointer, totalCount: int32, updater: (currentIndex: int32, currentMark: pointer, end: int32) => void) { if (LazyForEachManager.isDummy) - scheduleCallback(() => updater(0, LazyForEachManager.specialPointer)) + scheduleCallback(() => updater(0, LazyForEachManager.specialPointer, 100)) else LazyForEachOps.OnRangeUpdate(parent, totalCount, updater) } @@ -118,8 +118,8 @@ export function LazyForEach(dataSource: IDataSource, let parent = contextNode() const visibleRange = new VisibleRange(parent, current.value, current.value) remember(() => { - LazyForEachManager.OnRangeUpdate(visibleRange.parent, dataSource.totalCount() as int32, (currentIndex: int32, currentMark: pointer) => { - console.log(`LazyForEach[${parent}]: current updated to ${currentIndex} ${currentMark}`) + LazyForEachManager.OnRangeUpdate(visibleRange.parent, dataSource.totalCount() as int32, (currentIndex: int32, currentMark: pointer, end: int32) => { + console.log(`LazyForEach[${parent}]: current updated to ${currentIndex} ${currentMark} end=${end}`) current.value = currentIndex mark.value = currentMark version.value++ diff --git a/arkoala-arkts/arkui/src/generated/peers/CallbacksChecker.ts b/arkoala-arkts/arkui/src/generated/peers/CallbacksChecker.ts index eeb2df1b7b5547f17506b33a775b22aaef13da70..2a3abb241efb651c2884d146ea6ced2b0bfe6aae 100644 --- a/arkoala-arkts/arkui/src/generated/peers/CallbacksChecker.ts +++ b/arkoala-arkts/arkui/src/generated/peers/CallbacksChecker.ts @@ -13,7 +13,7 @@ * limitations under the License. */ -import { KBuffer } from "@koalaui/interop" +import { InteropNativeModule, KBuffer } from "@koalaui/interop" import { Deserializer } from "./Deserializer"; import { deserializeAndCallCallback } from "./CallbackDeserializeCall" import { ResourceHolder, KUint8ArrayPtr } from "@koalaui/interop" @@ -31,7 +31,7 @@ const deserializer = new Deserializer(buffer.buffer, bufferSize) export function checkArkoalaCallbacks() { while (true) { deserializer.resetCurrentPosition() - let result = ArkUINativeModule._CheckCallbackEvent(buffer.buffer, bufferSize) + let result = InteropNativeModule._CheckCallbackEvent(buffer.buffer, bufferSize) if (result == 0) break const eventKind = deserializer.readInt32() as CallbackEventKind @@ -39,12 +39,12 @@ export function checkArkoalaCallbacks() { case CallbackEventKind.Event_CallCallback: { deserializeAndCallCallback(deserializer) break; - } + } case CallbackEventKind.Event_HoldManagedResource: { const resourceId = deserializer.readInt32() ResourceHolder.instance().hold(resourceId) break; - } + } case CallbackEventKind.Event_ReleaseManagedResource: { const resourceId = deserializer.readInt32() ResourceHolder.instance().release(resourceId) diff --git a/interop/src/arkts/DeserializerBase.sts b/interop/src/arkts/DeserializerBase.sts index e11dbab7063a6e208d5792c83427120b84095e7b..4f8f0f9f345ac5b40729ca7273eed90a90bf0b29 100644 --- a/interop/src/arkts/DeserializerBase.sts +++ b/interop/src/arkts/DeserializerBase.sts @@ -20,36 +20,11 @@ import { NativeBuffer } from "./NativeBuffer" import { InteropNativeModule } from "./InteropNativeModule" import { Tags, CallbackResource } from "./SerializerBase"; -export abstract class CustomDeserializer { - protected supported: string - protected constructor(supported_: string) { - this.supported = supported_ - } - - supports(kind: string): boolean { - return this.supported.includes(kind) - } - - abstract deserialize(serializer: DeserializerBase, kind: string): object - - next: CustomDeserializer | undefined = undefined -} - -class DateDeserializer extends CustomDeserializer { - constructor() { - super("Date") - } - - deserialize(serializer: DeserializerBase, kind: string): Date { - return new Date(serializer.readString()) - } -} - export class DeserializerBase { private position = 0 private readonly buffer: KBuffer private readonly length: int32 - private static customDeserializers: CustomDeserializer | undefined = new DateDeserializer() + private static customDeserializers: CustomDeserializer | undefined = undefined static registerCustomDeserializer(deserializer: CustomDeserializer) { let current = DeserializerBase.customDeserializers @@ -243,3 +218,29 @@ export class DeserializerBase { throw new Error("Not implemented") } } + +export abstract class CustomDeserializer { + protected supported: string + protected constructor(supported_: string) { + this.supported = supported_ + } + + supports(kind: string): boolean { + return this.supported.includes(kind) + } + + abstract deserialize(serializer: DeserializerBase, kind: string): object + + next: CustomDeserializer | undefined = undefined +} + +class DateDeserializer extends CustomDeserializer { + constructor() { + super("Date") + } + + deserialize(serializer: DeserializerBase, kind: string): Date { + return new Date(serializer.readString()) + } +} +DeserializerBase.registerCustomDeserializer(new DateDeserializer()) diff --git a/interop/src/arkts/SerializerBase.sts b/interop/src/arkts/SerializerBase.sts index 4bd20f756bdae69fffb1996c0a798ec78c689b01..1ef6dc9af7bd8f707407772c1cbe4011956a9239 100644 --- a/interop/src/arkts/SerializerBase.sts +++ b/interop/src/arkts/SerializerBase.sts @@ -110,13 +110,13 @@ class DateSerializer extends CustomSerializer { serializer.writeString((value as Date).toISOString()) } } +SerializerBase.registerCustomSerializer(new DateSerializer()) export class SerializerBase { private position = 0 private buffer: KBuffer private static customSerializers: CustomSerializer | undefined = new DateSerializer() - static registerCustomSerializer(serializer: CustomSerializer) { if (SerializerBase.customSerializers == undefined) { SerializerBase.customSerializers = serializer @@ -308,6 +308,7 @@ export class SerializerBase { this.checkCapacity((4 + value.length * 4 + 1) as int32) // length, data let encodedLength = InteropNativeModule._ManagedStringWrite(value, this.asArray(), this.position + 4) this.setInt32(this.position, encodedLength) + this.position += encodedLength + 4 } //TODO: Needs to be implemented writeBuffer(value: NativeBuffer) { @@ -320,3 +321,4 @@ export class SerializerBase { this.writeInt64(value.length as int64) } } + diff --git a/interop/src/interop/SerializerBase.ts b/interop/src/interop/SerializerBase.ts index 565f6368f736ee6c7d3cd0dbfde3a0894a7593c3..cfd0af65969face35a2013654c77155f8b643d7a 100644 --- a/interop/src/interop/SerializerBase.ts +++ b/interop/src/interop/SerializerBase.ts @@ -66,10 +66,10 @@ export function runtimeType(value: any): int32 { } export function isResource(value: unknown): boolean { - return value !== undefined - && typeof value === 'object' - && value !== null - && value.hasOwnProperty("bundleName") + return value !== undefined + && typeof value === 'object' + && value !== null + && value.hasOwnProperty("bundleName") && value.hasOwnProperty("moduleName") } @@ -270,7 +270,7 @@ export class SerializerBase { writeBuffer(buffer: ArrayBuffer) { const resourceId = ResourceHolder.instance().registerAndHold(buffer) this.writeCallbackResource({ - resourceId, + resourceId, hold: 0, release: 0 })