From 1b0ced17c5e9fe89723d674fdf4d5960aa9434d9 Mon Sep 17 00:00:00 2001 From: baofeng Date: Thu, 28 Mar 2024 12:09:30 +0800 Subject: [PATCH] =?UTF-8?q?[Issues:=20#I9BULK]=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E4=B8=8D=E5=88=B0=E7=A3=81=E7=9B=98=E7=BC=93?= =?UTF-8?q?=E5=AD=98=E6=96=87=E4=BB=B6=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: baofeng --- CHANGELOG.md | 1 + .../main/ets/components/imageknife/ImageKnife.ets | 7 +++++-- .../ets/components/imageknife/ImageKnifeData.ets | 1 + .../ets/components/imageknife/RequestOption.ets | 14 +++++++------- .../main/ets/components/imageknife/TaskParams.ets | 1 + .../imageknife/requestmanage/RequestManager.ets | 12 ++++++------ 6 files changed, 21 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2015a71..1a91d64 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ - 新增多线程优先级 - 修复复用场景下图片闪动以及概率错位 - 获取组件宽高改为使用CanvasRenderingContext2D对象获取宽高,并修复改变字体大小导致部分图片消失 +- 修复获取不到磁盘缓存文件问题 ## 2.1.2-rc.10 - 修复部分gif图片识别成静态图 diff --git a/library/src/main/ets/components/imageknife/ImageKnife.ets b/library/src/main/ets/components/imageknife/ImageKnife.ets index 10520b8..3e9a547 100644 --- a/library/src/main/ets/components/imageknife/ImageKnife.ets +++ b/library/src/main/ets/components/imageknife/ImageKnife.ets @@ -550,7 +550,8 @@ export class ImageKnife { onlyRetrieveFromCache: request.onlyRetrieveFromCache, gpuEnabled: request.gpuEnabled, signature: request.signature, - isCacheable: request.isCacheable + isCacheable: request.isCacheable, + diskMemoryCachePath:this.diskMemoryCache.getPath() } return taskParams; } @@ -623,9 +624,11 @@ export class ImageKnife { } else { if ((typeof (data as PixelMap).isEditable) == 'boolean') { let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, data as PixelMap); + imageKnifeData.needSaveDisk = true; request.loadComplete(imageKnifeData) } else if ((data as GIFFrame[]).length > 0) { let imageKnifeData = ImageKnifeData.createImageGIFFrame(ImageKnifeType.GIFFRAME, data as GIFFrame[]); + imageKnifeData.needSaveDisk = true; request.loadComplete(imageKnifeData) } else { request.loadError("request resources error") @@ -738,7 +741,7 @@ async function taskExecute(taskParams: TaskParams, loadSrcJson: string): Promise newRequestOption.thumbSizeMultiplier = taskParams.thumbSizeMultiplier; newRequestOption.thumbDelayTime = taskParams.thumbDelayTime; newRequestOption.size = taskParams.size; - + newRequestOption.diskMemoryCachePath = taskParams.diskMemoryCachePath; newRequestOption.placeholderSrc = loadSrcObj["placeholderSrc"] as PixelMap | Resource | undefined; newRequestOption.errorholderSrc = loadSrcObj["errorholderSrc"] as PixelMap | Resource | undefined; newRequestOption.retryholderSrc = loadSrcObj["retryholderSrc"] as PixelMap | Resource | undefined; diff --git a/library/src/main/ets/components/imageknife/ImageKnifeData.ets b/library/src/main/ets/components/imageknife/ImageKnifeData.ets index 0f9853b..2b17d4c 100644 --- a/library/src/main/ets/components/imageknife/ImageKnifeData.ets +++ b/library/src/main/ets/components/imageknife/ImageKnifeData.ets @@ -96,6 +96,7 @@ export class ImageKnifeData { static BMP = 'bmp'; static WEBP = 'webp'; waitSaveDisk = false; + needSaveDisk = false; imageKnifeType: ImageKnifeType | undefined = undefined; drawPixelMap: DrawPixelMap | undefined = undefined; drawGIFFrame: DrawGIFFrame | undefined = undefined; diff --git a/library/src/main/ets/components/imageknife/RequestOption.ets b/library/src/main/ets/components/imageknife/RequestOption.ets index 242c211..2ee6be2 100644 --- a/library/src/main/ets/components/imageknife/RequestOption.ets +++ b/library/src/main/ets/components/imageknife/RequestOption.ets @@ -129,6 +129,8 @@ export class RequestOption { signature?: ObjectKey; // 下载原始文件地址 downloadFilePath: string = ""; + //磁盘缓存文件路径 + diskMemoryCachePath: string =""; // 网络文件下载统一存放 networkCacheFolder: string = "ImageKnifeNetworkFolder" // 主线图片 状态变化 是否加载完成 @@ -536,7 +538,7 @@ export class RequestOption { } loadComplete = (imageKnifeData: ImageKnifeData) => { this.setMemoryCache(imageKnifeData,this.generateCacheKey); - if (typeof this.loadSrc == 'string') { + if (typeof this.loadSrc == 'string' && imageKnifeData.needSaveDisk) { this.setDiskCache(); } @@ -601,16 +603,14 @@ export class RequestOption { setDiskCache = () => { try { let diskMemoryCache = ImageKnifeGlobal.getInstance().getImageKnife()?.getDiskMemoryCache(); - let dataArraybuffer: ArrayBuffer = DiskLruCache.getFileCacheByFile((ImageKnifeGlobal.getInstance() - .getHapContext() as common.UIAbilityContext).filesDir as string, this.generateDataKey) as ArrayBuffer; + let dataArraybuffer: ArrayBuffer = DiskLruCache.getFileCacheByFile(diskMemoryCache?.getPath() as string, this.generateDataKey) as ArrayBuffer; //缓存原图片 - if (dataArraybuffer && !diskMemoryCache?.get(this.generateDataKey)) { + if (dataArraybuffer) { diskMemoryCache?.setCacheMapAndSize(this.generateDataKey, dataArraybuffer); } //缓存变换后图片 - let resourceArraybuffer: ArrayBuffer = DiskLruCache.getFileCacheByFile((ImageKnifeGlobal.getInstance() - .getHapContext() as common.UIAbilityContext).filesDir as string, this.generateResourceKey) as ArrayBuffer; - if (resourceArraybuffer && !diskMemoryCache?.get(this.generateResourceKey)) { + let resourceArraybuffer: ArrayBuffer = DiskLruCache.getFileCacheByFile(diskMemoryCache?.getPath() as string, this.generateResourceKey) as ArrayBuffer; + if (resourceArraybuffer) { diskMemoryCache?.setCacheMapAndSize(this.generateResourceKey, resourceArraybuffer); } diff --git a/library/src/main/ets/components/imageknife/TaskParams.ets b/library/src/main/ets/components/imageknife/TaskParams.ets index c940d04..4820288 100644 --- a/library/src/main/ets/components/imageknife/TaskParams.ets +++ b/library/src/main/ets/components/imageknife/TaskParams.ets @@ -35,4 +35,5 @@ export class TaskParams { generateResourceKey: string = ""; generateDataKey: string = ""; signature?: ObjectKey; + diskMemoryCachePath: string = ""; } \ No newline at end of file diff --git a/library/src/main/ets/components/imageknife/requestmanage/RequestManager.ets b/library/src/main/ets/components/imageknife/requestmanage/RequestManager.ets index d167f30..69c4ea5 100644 --- a/library/src/main/ets/components/imageknife/requestmanage/RequestManager.ets +++ b/library/src/main/ets/components/imageknife/requestmanage/RequestManager.ets @@ -199,7 +199,7 @@ export class RequestManager { // 加载磁盘缓存 原图 private loadDiskFromSource(request: RequestOption, onComplete: (value: PixelMap | GIFFrame[]) => void | PromiseLike, onError: (reason?: BusinessError | string) => void) { LogUtil.log("ImageKnife RequestManager loadDiskFromSource") - let cached = DiskLruCache.getFileCacheByFile(request?.moduleContext?.filesDir as string, request.generateDataKey); + let cached = DiskLruCache.getFileCacheByFile(request.diskMemoryCachePath, request.generateDataKey); if (cached != null && cached.byteLength > 0) { LogUtil.log("ImageKnife loadDiskFromSource load resource from DiskLruCache") this.parseDiskFile2PixelMap(request, cached, onComplete, onError) @@ -213,7 +213,7 @@ export class RequestManager { // 加载磁盘缓存 变换后图片 private loadDiskFromTransform(request: RequestOption, onComplete: (value: PixelMap | GIFFrame[]) => void | PromiseLike, onError: (reason?: BusinessError | string) => void) { LogUtil.log("ImageKnife RequestManager loadDiskFromTransform") - let cached = DiskLruCache.getFileCacheByFile(request.moduleContext?.filesDir as string, request.generateResourceKey); + let cached = DiskLruCache.getFileCacheByFile(request.diskMemoryCachePath, request.generateResourceKey); if (cached != null) { LogUtil.log("ImageKnife loadDiskFromTransform load resource from DiskLruCache") this.parseDiskTransformFile2PixelMap(request, cached, onComplete, onError) @@ -396,7 +396,7 @@ export class RequestManager { // 保存二级磁盘缓存 Promise.resolve(source) .then((arraybuffer: ArrayBuffer) => { - DiskLruCache.saveFileCacheOnlyFile(this.options.moduleContext?.filesDir as string, this.options.generateDataKey,arraybuffer); + DiskLruCache.saveFileCacheOnlyFile(this.options.diskMemoryCachePath, this.options.generateDataKey,arraybuffer); }) .catch((err: BusinessError) => { LogUtil.log('download file is =' + ImageKnifeData.GIF + 'and save diskLruCache error =' + (err as BusinessError)) @@ -408,7 +408,7 @@ export class RequestManager { // 保存二级磁盘缓存 Promise.resolve(source) .then((arraybuffer: ArrayBuffer) => { - DiskLruCache.saveFileCacheOnlyFile(this.options.moduleContext?.filesDir as string, this.options.generateDataKey,arraybuffer); + DiskLruCache.saveFileCacheOnlyFile(this.options.diskMemoryCachePath, this.options.generateDataKey,arraybuffer); }) .catch((err: BusinessError) => { LogUtil.log('download file is =' + ImageKnifeData.SVG + 'and save diskLruCache error =' + (err as BusinessError)) @@ -474,9 +474,9 @@ export class RequestManager { private async saveCacheAndDisk(value: PixelMap, filetype: string, onComplete: (value: PixelMap) => void | PromiseLike, source: ArrayBuffer) { let save2DiskCache = (arraybuffer: ArrayBuffer) => { - DiskLruCache.saveFileCacheOnlyFile(this.options.moduleContext?.filesDir as string, this.options.generateDataKey,arraybuffer); + DiskLruCache.saveFileCacheOnlyFile(this.options.diskMemoryCachePath, this.options.generateDataKey,arraybuffer); // 落盘之后需要主动移除当前request并且调用下一个加载 - let removeCurrentAndSearchNextRun = this.options.removeCurrentAndSearchNext + let removeCurrentAndSearchNextRun = this.options.removeCurrentAndSearchNext; removeCurrentAndSearchNextRun(); } let runSave2Disk = (resolve: (value: ArrayBuffer) => void | PromiseLike, reject: (reason?: BusinessError | string) => void) => {