diff --git a/src/common/utils/EventTask.ts b/src/common/utils/EventTask.ts index 7ce44051..3263f06c 100644 --- a/src/common/utils/EventTask.ts +++ b/src/common/utils/EventTask.ts @@ -110,6 +110,44 @@ export class NTEventWrapper { resolve(retData); }); } + async RegisterListen void>(ListenerName = '', waitTimes = 1, timeout = 5000, checker: (...args: Parameters) => boolean) { + return new Promise>((resolve, reject) => { + const ListenerNameList = ListenerName.split('/'); + const ListenerMainName = ListenerNameList[0]; + const ListenerSubName = ListenerNameList[1]; + const id = randomUUID(); + let complete = 0; + let retData: Parameters | undefined = undefined; + const databack = () => { + if (complete == 0) { + reject(new Error(' ListenerName:' + ListenerName + ' timeout')); + } else { + resolve(retData!); + } + }; + const Timeouter = setTimeout(databack, timeout); + const eventCallbak = { + timeout: timeout, + createtime: Date.now(), + checker: checker, + func: (...args: Parameters) => { + complete++; + retData = args; + if (complete >= waitTimes) { + clearTimeout(Timeouter); + databack(); + } + } + }; + if (!this.EventTask.get(ListenerMainName)) { + this.EventTask.set(ListenerMainName, new Map()); + } + if (!(this.EventTask.get(ListenerMainName)?.get(ListenerSubName))) { + this.EventTask.get(ListenerMainName)?.set(ListenerSubName, new Map()); + } + this.EventTask.get(ListenerMainName)?.get(ListenerSubName)?.set(id, eventCallbak); + }); + } async CallNormalEvent Promise, ListenerType extends (...args: any[]) => void> (EventName = '', ListenerName = '', waitTimes = 1, timeout: number = 3000, checker: (...args: Parameters) => boolean, ...args: Parameters) { return new Promise<[EventRet: Awaited>, ...Parameters]>(async (resolve, reject) => { diff --git a/src/core/src/apis/file.ts b/src/core/src/apis/file.ts index ea6e0336..676b6dde 100644 --- a/src/core/src/apis/file.ts +++ b/src/core/src/apis/file.ts @@ -187,16 +187,22 @@ export class NTQQFileApi { }[] }[] }; - const [id, data] = await NTEventDispatch.CallNormalEvent void>( - 'NodeIKernelSearchService/searchFileWithKeywords', - 'NodeIKernelSearchListener/onSearchFileKeywordsResult', - 1, - 10000, - (arg): boolean => { return id == data.searchId }, - keys, - 12 - ); - return data.resultItems[0]; + // (params: OnListener) => void 'NodeIKernelSearchListener/onSearchFileKeywordsResult', + // 1, + // 10000, + // (arg): boolean => { return id == data.searchId }, + // keys, + // 12 + const Event = await NTEventDispatch.CreatEventFunction('NodeIKernelSearchService/searchFileWithKeywords'); + let id = ''; + const [Listener] = await NTEventDispatch.RegisterListen<(params: OnListener) => void>('NodeIKernelSearchListener/onSearchFileKeywordsResult', 1, 5000, (params) => { + if (id !== '' && params.searchId == id) { + return true + } + return false; + }); + id = await Event!(keys, 12); + return Listener.resultItems[0]; } static async getImageUrl(element: PicElement) { if (!element) { diff --git a/src/core/src/services/NodeIKernelRichMediaService.ts b/src/core/src/services/NodeIKernelRichMediaService.ts index 74a77636..650898d3 100644 --- a/src/core/src/services/NodeIKernelRichMediaService.ts +++ b/src/core/src/services/NodeIKernelRichMediaService.ts @@ -8,6 +8,23 @@ export enum UrlFileDownloadType { KURLFILEDOWNLOADCOMMON, KURLFILEDOWNLOADINSTALLAPP } +export enum RMBizTypeEnum { + KUNKNOWN, + KC2CFILE, + KGROUPFILE, + KC2CPIC, + KGROUPPIC, + KDISCPIC, + KC2CVIDEO, + KGROUPVIDEO, + KC2CPTT, + KGROUPPTT, + KFEEDCOMMENTPIC, + KGUILDFILE, + KGUILDPIC, + KGUILDPTT, + KGUILDVIDEO +} export interface CommonFileInfo { bizType: number; chatType: number; @@ -227,13 +244,25 @@ export interface NodeIKernelRichMediaService { cancelSearcheGroupFile(arg1: unknown, arg2: unknown, arg3: unknown): unknown; - onlyDownloadFile(arg1: unknown, arg2: unknown, arg3: unknown): unknown; + onlyDownloadFile(peer: Peer, arg2: unknown, arg3: Array<{ + fileId: string, + fileName: string, + fileSize: string, + fileModelId: string + } + >): unknown; onlyUploadFile(arg1: unknown, arg2: unknown): unknown; isExtraLargePic(arg1: unknown, arg2: unknown, arg3: unknown): unknown; - uploadRMFileWithoutMsg(arg: unknown): unknown; + uploadRMFileWithoutMsg(arg: { + bizType: RMBizTypeEnum, + filePath: string, + peerUid: string, + transferId: string + useNTV2: string + }): Promise; isNull(): boolean; } \ No newline at end of file diff --git a/src/core/src/services/NodeIKernelSearchService.ts b/src/core/src/services/NodeIKernelSearchService.ts index 3cac5018..f0dda81a 100644 --- a/src/core/src/services/NodeIKernelSearchService.ts +++ b/src/core/src/services/NodeIKernelSearchService.ts @@ -51,7 +51,7 @@ export interface NodeIKernelSearchService { cancelSearchMsgWithKeywords(...args: any[]): unknown;// needs 3 arguments - searchFileWithKeywords(keywords: string[], source: number): Promise;// needs 2 arguments + searchFileWithKeywords(keywords: string[], source: number): Promise;// needs 2 arguments searchMoreFileWithKeywordsr(...args: any[]): unknown;// needs 1 arguments