!144 [Issues: #I9BULK] 修复获取不到磁盘缓存文件问题

Merge pull request !144 from baofeng/master
This commit is contained in:
openharmony_ci 2024-03-28 07:03:08 +00:00 committed by Gitee
commit acc5ac5c72
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
6 changed files with 21 additions and 15 deletions

View File

@ -10,6 +10,7 @@
- 新增多线程优先级
- 修复复用场景下图片闪动以及概率错位
- 获取组件宽高改为使用CanvasRenderingContext2D对象获取宽高并修复改变字体大小导致部分图片消失
- 修复获取不到磁盘缓存文件问题
## 2.1.2-rc.10
- 修复部分gif图片识别成静态图

View File

@ -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;

View File

@ -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;

View File

@ -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);
}

View File

@ -35,4 +35,5 @@ export class TaskParams {
generateResourceKey: string = "";
generateDataKey: string = "";
signature?: ObjectKey;
diskMemoryCachePath: string = "";
}

View File

@ -199,7 +199,7 @@ export class RequestManager {
// 加载磁盘缓存 原图
private loadDiskFromSource(request: RequestOption, onComplete: (value: PixelMap | GIFFrame[]) => void | PromiseLike<ImageKnifeData>, 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<ImageKnifeData>, 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<ImageKnifeData>, 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<ArrayBuffer>, reject: (reason?: BusinessError | string) => void) => {