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 @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> {
return new Promise((resolve,reject)=>{ if (typeof src == "string") {
if (typeof src == "string") { let session = GetSession.session
let session = GetSession.session let req = new rcp.Request(src,"GET");
let req = new rcp.Request(src,"GET"); session.fetch(req).then((response)=>{
session.fetch(req).then((response)=>{ if(response.statusCode == 200) {
if(response.statusCode == 200) { let buffer = response.body
let buffer = response.body onComplete(buffer!)
resolve(buffer) } else {
} else { onError("rcp code:"+response.statusCode)
reject("rcp code:"+response.statusCode) }
} }).catch((err:BusinessError)=>{
}).catch((err:BusinessError)=>{ onError("error rcp src:"+src+",err:"+JSON.stringify(err))
reject("error rcp src:"+src+",err:"+JSON.stringify(err)) })
}) }
}
})
} }

View File

@ -109,8 +109,8 @@ struct LoadStatePage {
} }
// 自定义下载方法 // 自定义下载方法
@Concurrent @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) console.info("ImageKnife:: custom download" + src)
// 举例写死从本地文件读取,也可以自己请求网络图片 // 举例写死从本地文件读取,也可以自己请求网络图片
return undefined onError("undefined")
} }

View File

@ -128,11 +128,11 @@ struct SingleImage {
// 自定义下载方法 // 自定义下载方法
@Concurrent @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 let refer = headers!["refer"] as string
console.info("ImageKnife:: custom download" + src,"refer:"+refer) console.info("ImageKnife:: custom download" + src,"refer:"+refer)
// 举例写死从本地文件读取,也可以自己请求网络图片 // 举例写死从本地文件读取,也可以自己请求网络图片
let buffer = context.resourceManager.getMediaContentSync($r("app.media.startIcon").id).buffer as ArrayBuffer 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 @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) console.info("ImageKnife:: custom download" + src)
// 举例写死从本地文件读取,也可以自己请求网络图片 // 举例写死从本地文件读取,也可以自己请求网络图片
let buffer = context.resourceManager.getMediaContentSync($r("app.media.pngSample").id).buffer as ArrayBuffer 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; private _isRequestInSubThread: boolean = true;
//定义全局网络请求header map //定义全局网络请求header map
headerMap: Map<string, Object> = new Map<string, Object>(); 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 { public static getInstance(): ImageKnife {
if (!ImageKnife.instance) { if (!ImageKnife.instance) {
ImageKnife.instance = new ImageKnife(); ImageKnife.instance = new ImageKnife();
@ -482,10 +482,10 @@ export class ImageKnife {
* 全局设置自定义下载 * 全局设置自定义下载
* @param customGetImage 自定义请求函数 * @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 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 return this.customGetImage
} }
} }

View File

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

View File

@ -91,7 +91,7 @@ export interface RequestJobRequest {
allHeaders: Map<string, Object>, allHeaders: Map<string, Object>,
componentWidth: number, componentWidth: number,
componentHeight: 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 onlyRetrieveFromCache?: boolean
requestSource: ImageKnifeRequestSource requestSource: ImageKnifeRequestSource
transformation?: PixelMapTransformation transformation?: PixelMapTransformation

View File

@ -61,7 +61,7 @@ export class ImageKnifeOption {
placeholderObjectFit?: ImageFit placeholderObjectFit?: ImageFit
// 错误图填充效果 // 错误图填充效果
errorholderObjectFit?: 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 border?: BorderOptions
// 缓存策略 // 缓存策略
writeCacheStrategy?: CacheStrategy writeCacheStrategy?: CacheStrategy