Compare commits

..

2 Commits

Author SHA1 Message Date
zgf 327c4c0088 子线程网络请求和自定义网络改为异步请求
Signed-off-by: zgf <zenggaofeng2@h-partners.com>
2024-10-24 11:34:01 +00:00
zgf 024e1d175c 子线程网络请求和自定义网络改为异步请求
Signed-off-by: zgf <zenggaofeng2@h-partners.com>
2024-10-24 19:32:42 +08:00
8 changed files with 38 additions and 49 deletions

View File

@ -58,21 +58,19 @@ export struct CustomNetImagePage {
}
// 自定义下载方法
@Concurrent
async function custom(context: Context, src: string | PixelMap | Resource,headers?: Record<string,Object>): Promise<ArrayBuffer | undefined> {
return new Promise((resolve,reject)=>{
async function custom(context: Context, src: string | PixelMap | Resource,onComplete:(buffer:ArrayBuffer)=>void,onError:(err:string)=>void,headers?: Record<string, Object>): Promise<void> {
if (typeof src == "string") {
let session = GetSession.session
let req = new rcp.Request(src,"GET");
session.fetch(req).then((response)=>{
if(response.statusCode == 200) {
let buffer = response.body
resolve(buffer)
onComplete(buffer!)
} else {
reject("rcp code:"+response.statusCode)
onError("rcp code:"+response.statusCode)
}
}).catch((err:BusinessError)=>{
reject("error rcp src:"+src+",err:"+JSON.stringify(err))
onError("error rcp src:"+src+",err:"+JSON.stringify(err))
})
}
})
}

View File

@ -109,8 +109,8 @@ struct LoadStatePage {
}
// 自定义下载方法
@Concurrent
async function custom(context: Context, src: string | PixelMap | Resource,headers?: Record<string,Object>): Promise<ArrayBuffer | undefined> {
async function custom(context: Context, src: string | PixelMap | Resource,onComplete:(buffer:ArrayBuffer)=>void,onError:(err:string)=>void,headers?: Record<string, Object>):Promise<void> {
console.info("ImageKnife:: custom download" + src)
// 举例写死从本地文件读取,也可以自己请求网络图片
return undefined
onError("undefined")
}

View File

@ -128,11 +128,11 @@ struct SingleImage {
// 自定义下载方法
@Concurrent
async function custom(context: Context, src: string | PixelMap | Resource,headers?: Record<string,Object>): Promise<ArrayBuffer | undefined> {
async function custom(context: Context, src: string | PixelMap | Resource,onComplete:(buffer:ArrayBuffer)=>void,onError:(err:string)=>void,headers?: Record<string, Object>): Promise<void> {
let refer = headers!["refer"] as string
console.info("ImageKnife:: custom download" + src,"refer:"+refer)
// 举例写死从本地文件读取,也可以自己请求网络图片
let buffer = context.resourceManager.getMediaContentSync($r("app.media.startIcon").id).buffer as ArrayBuffer
return buffer
onComplete(buffer)
}

View File

@ -60,9 +60,9 @@ struct TestSetCustomImagePage {
}
}
@Concurrent
async function custom(context: Context, src: string | PixelMap | Resource,headers?: Record<string,Object>): Promise<ArrayBuffer | undefined> {
async function custom(context: Context, src: string | PixelMap | Resource,onComplete:(buffer:ArrayBuffer)=>void,onError:(err:string)=>void,headers?: Record<string, Object>):Promise<void> {
console.info("ImageKnife:: custom download" + src)
// 举例写死从本地文件读取,也可以自己请求网络图片
let buffer = context.resourceManager.getMediaContentSync($r("app.media.pngSample").id).buffer as ArrayBuffer
return buffer
onComplete(buffer)
}

View File

@ -38,7 +38,7 @@ export class ImageKnife {
private _isRequestInSubThread: boolean = true;
//定义全局网络请求header map
headerMap: Map<string, Object> = new Map<string, Object>();
customGetImage: ((context: Context, src: string | PixelMap | Resource,headers?: Record<string,Object>) => Promise<ArrayBuffer | undefined>) | undefined = undefined
customGetImage: ((context: Context, src: string | PixelMap | Resource,onComplete:(buffer:ArrayBuffer)=>void,onError:(err:string)=>void,headers?: Record<string, Object>) => Promise<void>) | undefined = undefined
public static getInstance(): ImageKnife {
if (!ImageKnife.instance) {
ImageKnife.instance = new ImageKnife();
@ -482,10 +482,10 @@ export class ImageKnife {
* 全局设置自定义下载
* @param customGetImage 自定义请求函数
*/
setCustomGetImage(customGetImage?: (context: Context, src: string | PixelMap | Resource,headers?: Record<string,Object>) => Promise<ArrayBuffer | undefined>) {
setCustomGetImage(customGetImage?: (context: Context, src: string | PixelMap | Resource,onComplete:(buffer:ArrayBuffer)=>void,onError:(err:string)=>void,headers?: Record<string, Object>) => Promise<void>) {
this.customGetImage = customGetImage
}
getCustomGetImage(): undefined | ((context: Context, src: string | PixelMap | Resource,headers?: Record<string,Object>) => Promise<ArrayBuffer | undefined>){
getCustomGetImage(): undefined | ((context: Context, src: string | PixelMap | Resource,onComplete:(buffer:ArrayBuffer)=>void,onError:(err:string)=>void,headers?: Record<string, Object>) => Promise<void>){
return this.customGetImage
}
}

View File

@ -246,10 +246,7 @@ export class ImageKnifeLoader {
if (resBuf === undefined) {
LogUtil.log("start customGetImage src=" + request.src)
const headerObj: Record<string, Object> = ImageKnifeLoader.getHeaderObj(request)
try {
request.customGetImage(request.context, request.src, headerObj)
.then((buffer)=>{
if(buffer != undefined) {
let onComplete = (buffer:ArrayBuffer) => {
// 保存文件缓存
if (request.writeCacheStrategy !== CacheStrategy.Memory) {
LogUtil.log("ImageKnife_DataTime_requestJob_saveFileCacheOnlyFile.start:" + request.src)
@ -257,17 +254,11 @@ export class ImageKnifeLoader {
LogUtil.log("ImageKnife_DataTime_requestJob_saveFileCacheOnlyFile.end:" + request.src)
}
ImageKnifeLoader.parseImage(buffer,fileKey,request)
} else {
loadError = "customGetImage loadFail undefined"
ImageKnifeLoader.makeEmptyResult(request,loadError)
}
}).catch((err:string)=>{
let onError = (err:string) => {
ImageKnifeLoader.makeEmptyResult(request,err)
})
} catch (e) {
loadError = "customGetImage loadFail failed"
ImageKnifeLoader.makeEmptyResult(request,loadError + e)
}
request.customGetImage(request.context, request.src,onComplete,onError, headerObj)
LogUtil.log("end customGetImage src=" + request.src)
return
}

View File

@ -91,7 +91,7 @@ export interface RequestJobRequest {
allHeaders: Map<string, Object>,
componentWidth: number,
componentHeight: number,
customGetImage?: (context: Context, src: string | PixelMap | Resource,headers?: Record<string,Object>) => Promise<ArrayBuffer | undefined>,
customGetImage?: (context: Context, src: string | PixelMap | Resource ,onComplete:(buffer:ArrayBuffer)=>void,onError:(err:string)=>void,headers?: Record<string, Object>) => Promise<void>,
onlyRetrieveFromCache?: boolean
requestSource: ImageKnifeRequestSource
transformation?: PixelMapTransformation

View File

@ -61,7 +61,7 @@ export class ImageKnifeOption {
placeholderObjectFit?: ImageFit
// 错误图填充效果
errorholderObjectFit?: ImageFit
customGetImage?: (context: Context, src: string | PixelMap | Resource,headers?: Record<string,Object>) => Promise<ArrayBuffer | undefined>
customGetImage?: (context: Context, src: string | PixelMap | Resource,onComplete:(buffer:ArrayBuffer)=>void,onError:(err:string)=>void,headers?: Record<string, Object>) => Promise<void>
border?: BorderOptions
// 缓存策略
writeCacheStrategy?: CacheStrategy