[Issues: #I9BULK] 修复获取不到磁盘缓存文件问题
Signed-off-by: baofeng <baofeng6@h-partners.com>
This commit is contained in:
parent
1528f54f32
commit
1b0ced17c5
|
@ -10,6 +10,7 @@
|
|||
- 新增多线程优先级
|
||||
- 修复复用场景下图片闪动以及概率错位
|
||||
- 获取组件宽高改为使用CanvasRenderingContext2D对象获取宽高,并修复改变字体大小导致部分图片消失
|
||||
- 修复获取不到磁盘缓存文件问题
|
||||
|
||||
## 2.1.2-rc.10
|
||||
- 修复部分gif图片识别成静态图
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
@ -35,4 +35,5 @@ export class TaskParams {
|
|||
generateResourceKey: string = "";
|
||||
generateDataKey: string = "";
|
||||
signature?: ObjectKey;
|
||||
diskMemoryCachePath: string = "";
|
||||
}
|
|
@ -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) => {
|
||||
|
|
Loading…
Reference in New Issue