Compare commits

..

3 Commits

Author SHA1 Message Date
zgf cab7c0f0f8
Pre Merge pull request !411 from zgf/3.x 2024-10-25 01:46:52 +00:00
zgf e641e99cb8 子线程网络请求和自定义网络改为异步请求
Signed-off-by: zgf <zenggaofeng2@h-partners.com>
2024-10-25 01:46:51 +00:00
zgf 1dde38f537 子线程网络请求和自定义网络改为异步请求
Signed-off-by: zgf <zenggaofeng2@h-partners.com>
2024-10-25 09:44:54 +08:00
8 changed files with 49 additions and 38 deletions

View File

@ -58,19 +58,21 @@ export struct CustomNetImagePage {
}
// 自定义下载方法
@Concurrent
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
onComplete(buffer!)
} else {
onError("rcp code:"+response.statusCode)
}
}).catch((err:BusinessError)=>{
onError("error rcp src:"+src+",err:"+JSON.stringify(err))
})
}
async function custom(context: Context, src: string | PixelMap | Resource,headers?: Record<string,Object>): Promise<ArrayBuffer | undefined> {
return new Promise((resolve,reject)=>{
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)
} else {
reject("rcp code:"+response.statusCode)
}
}).catch((err:BusinessError)=>{
reject("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,onComplete:(buffer:ArrayBuffer)=>void,onError:(err:string)=>void,headers?: Record<string, Object>):Promise<void> {
async function custom(context: Context, src: string | PixelMap | Resource,headers?: Record<string,Object>): Promise<ArrayBuffer | undefined> {
console.info("ImageKnife:: custom download" + src)
// 举例写死从本地文件读取,也可以自己请求网络图片
onError("undefined")
return undefined
}

View File

@ -128,11 +128,11 @@ struct SingleImage {
// 自定义下载方法
@Concurrent
async function custom(context: Context, src: string | PixelMap | Resource,onComplete:(buffer:ArrayBuffer)=>void,onError:(err:string)=>void,headers?: Record<string, Object>): Promise<void> {
async function custom(context: Context, src: string | PixelMap | Resource,headers?: Record<string,Object>): Promise<ArrayBuffer | undefined> {
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
onComplete(buffer)
return buffer
}

View File

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

View File

@ -246,19 +246,28 @@ export class ImageKnifeLoader {
if (resBuf === undefined) {
LogUtil.log("start customGetImage src=" + request.src)
const headerObj: Record<string, Object> = ImageKnifeLoader.getHeaderObj(request)
let onComplete = (buffer:ArrayBuffer) => {
// 保存文件缓存
if (request.writeCacheStrategy !== CacheStrategy.Memory) {
LogUtil.log("ImageKnife_DataTime_requestJob_saveFileCacheOnlyFile.start:" + request.src)
FileCache.saveFileCacheOnlyFile(request.context, fileKey, buffer, request.fileCacheFolder)
LogUtil.log("ImageKnife_DataTime_requestJob_saveFileCacheOnlyFile.end:" + request.src)
}
ImageKnifeLoader.parseImage(buffer,fileKey,request)
try {
request.customGetImage(request.context, request.src, headerObj)
.then((buffer)=>{
if(buffer != undefined) {
// 保存文件缓存
if (request.writeCacheStrategy !== CacheStrategy.Memory) {
LogUtil.log("ImageKnife_DataTime_requestJob_saveFileCacheOnlyFile.start:" + request.src)
FileCache.saveFileCacheOnlyFile(request.context, fileKey, buffer, request.fileCacheFolder)
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)
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 ,onComplete:(buffer:ArrayBuffer)=>void,onError:(err:string)=>void,headers?: Record<string, Object>) => Promise<void>,
customGetImage?: (context: Context, src: string | PixelMap | Resource,headers?: Record<string,Object>) => Promise<ArrayBuffer | undefined>,
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,onComplete:(buffer:ArrayBuffer)=>void,onError:(err:string)=>void,headers?: Record<string, Object>) => Promise<void>
customGetImage?: (context: Context, src: string | PixelMap | Resource,headers?: Record<string,Object>) => Promise<ArrayBuffer | undefined>
border?: BorderOptions
// 缓存策略
writeCacheStrategy?: CacheStrategy