1.抽取interface到data类
2.实现缓存未完成初始化时,子线程不写文件 Signed-off-by: madixin <madixin@huawei.com>
This commit is contained in:
parent
91634663dc
commit
b99e97d811
|
@ -14,7 +14,7 @@
|
|||
*/
|
||||
import { IEngineKey, ImageKnifeOption, PixelMapTransformation } from '@ohos/imageknife';
|
||||
import { SparkMD5 } from '@ohos/imageknife/src/main/ets/3rd_party/sparkmd5/spark-md5';
|
||||
import { ImageKnifeRequestSource } from '@ohos/imageknife/src/main/ets/ImageKnifeDispatcher';
|
||||
import { ImageKnifeRequestSource } from '@ohos/imageknife/src/main/ets/model/ImageKnifeData';
|
||||
|
||||
//全局自定义key demo
|
||||
@Sendable
|
||||
|
|
|
@ -13,11 +13,11 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
import { ImageKnifeRequest } from './ImageKnifeRequest';
|
||||
import { ReadCacheStrategyType, ImageKnifeData } from './model/ImageKnifeData';
|
||||
import { ReadCacheStrategyType, ImageKnifeData, ImageKnifeRequestSource } from './model/ImageKnifeData';
|
||||
import { MemoryLruCache } from './utils/MemoryLruCache';
|
||||
import { IMemoryCache } from './utils/IMemoryCache'
|
||||
import { FileCache } from './utils/FileCache';
|
||||
import { ImageKnifeDispatcher, ImageKnifeRequestSource } from './ImageKnifeDispatcher';
|
||||
import { ImageKnifeDispatcher } from './ImageKnifeDispatcher';
|
||||
import { IEngineKey } from './key/IEngineKey';
|
||||
import { HeaderOptions, ImageKnifeOption } from './ImageKnifeOption';
|
||||
import { DefaultEngineKey } from './key/DefaultEngineKey';
|
||||
|
@ -56,6 +56,15 @@ export class ImageKnife {
|
|||
this.fileCache = new FileCache(context, size, memory)
|
||||
this.fileCache.initFileCache()
|
||||
}
|
||||
|
||||
/**
|
||||
* 判断文件缓存是否初始化
|
||||
* @returns 是否初始化
|
||||
*/
|
||||
public isFileCacheInit(): boolean {
|
||||
return this.fileCache === undefined ? false : this.fileCache.isFileCacheInit()
|
||||
}
|
||||
|
||||
/**
|
||||
* 全局添加单个请求头
|
||||
* @param key 请求头属性
|
||||
|
|
|
@ -19,7 +19,6 @@ import List from '@ohos.util.List';
|
|||
import LightWeightMap from '@ohos.util.LightWeightMap';
|
||||
import { LogUtil } from './utils/LogUtil';
|
||||
import buffer from '@ohos.buffer';
|
||||
import common from '@ohos.app.ability.common';
|
||||
import { FileCache } from './utils/FileCache';
|
||||
import fs from '@ohos.file.fs';
|
||||
import { ImageKnife } from './ImageKnife';
|
||||
|
@ -33,8 +32,7 @@ import { FileTypeUtil } from './utils/FileTypeUtil';
|
|||
import util from '@ohos.util';
|
||||
import { IEngineKey } from './key/IEngineKey';
|
||||
import { DefaultEngineKey } from './key/DefaultEngineKey';
|
||||
import { HeaderOptions } from './ImageKnifeOption';
|
||||
import { PixelMapTransformation } from './transform/PixelMapTransformation';
|
||||
import { ImageKnifeRequestWithSource , ImageKnifeRequestSource , RequestJobResult , RequestJobRequest } from './model/ImageKnifeData'
|
||||
|
||||
export class ImageKnifeDispatcher {
|
||||
// 最大并发
|
||||
|
@ -116,7 +114,7 @@ export class ImageKnifeDispatcher {
|
|||
customGetImage: currentRequest.imageKnifeOption.customGetImage,
|
||||
onlyRetrieveFromCache: currentRequest.imageKnifeOption.onlyRetrieveFromCache,
|
||||
transformation:currentRequest.imageKnifeOption.transformation,
|
||||
writeCacheStrategy: currentRequest.imageKnifeOption.writeCacheStrategy,
|
||||
writeCacheStrategy: ImageKnife.getInstance().isFileCacheInit() ? currentRequest.imageKnifeOption.writeCacheStrategy : WriteCacheStrategyType.Memory, // 未初始化文件缓存时,不写文件缓存
|
||||
engineKey: this.engineKey,
|
||||
signature: currentRequest.imageKnifeOption.signature,
|
||||
requestSource
|
||||
|
@ -246,7 +244,7 @@ async function requestJob(request: RequestJobRequest): Promise<RequestJobResult
|
|||
LogUtil.log("customGetImage customGetImage");
|
||||
resBuf = await request.customGetImage(request.context, request.src)
|
||||
// 保存文件缓存
|
||||
if (resBuf !== undefined) {
|
||||
if (resBuf !== undefined && request.writeCacheStrategy !== WriteCacheStrategyType.Memory) {
|
||||
let copyBuf = buffer.concat([buffer.from(resBuf)]).buffer; // IDE有bug,不能直接获取resBuf.byteLength
|
||||
bufferSize = copyBuf.byteLength
|
||||
FileCache.saveFileCacheOnlyFile(request.context, fileKey, resBuf)
|
||||
|
@ -258,7 +256,7 @@ async function requestJob(request: RequestJobRequest): Promise<RequestJobResult
|
|||
if (request.src.indexOf("http://") == 0 || request.src.indexOf("https://") == 0) { //从网络下载
|
||||
// 先从文件缓存获取
|
||||
resBuf = FileCache.getFileCacheByFile(request.context, fileKey)
|
||||
if (resBuf === undefined && request.onlyRetrieveFromCache != true && request.requestSource == 0) {
|
||||
if (resBuf === undefined && request.onlyRetrieveFromCache != true && request.requestSource === ImageKnifeRequestSource.SRC) {
|
||||
let httpRequest = http.createHttp();
|
||||
let progress: number = 0
|
||||
const headerObj: Record<string,object> = {}
|
||||
|
@ -323,9 +321,9 @@ async function requestJob(request: RequestJobRequest): Promise<RequestJobResult
|
|||
}
|
||||
}
|
||||
} else if ((request.src as Resource).id !== undefined) { //从资源文件获取
|
||||
if (resBuf == undefined && request.onlyRetrieveFromCache != true && request.requestSource == 0) {
|
||||
if (resBuf == undefined && request.onlyRetrieveFromCache != true && request.requestSource == ImageKnifeRequestSource.SRC) {
|
||||
resBuf = request.context.resourceManager.getMediaContentSync((request.src as Resource).id).buffer as ArrayBuffer
|
||||
} else if (resBuf == undefined && request.requestSource != 0) {
|
||||
} else if (resBuf == undefined && request.requestSource != ImageKnifeRequestSource.SRC) {
|
||||
resBuf = request.context.resourceManager.getMediaContentSync((request.src as Resource).id).buffer as ArrayBuffer
|
||||
}
|
||||
}
|
||||
|
@ -362,7 +360,7 @@ async function requestJob(request: RequestJobRequest): Promise<RequestJobResult
|
|||
})
|
||||
|
||||
// 图形变化
|
||||
if (request.requestSource == 0 && request.transformation !== undefined) {
|
||||
if (request.requestSource === ImageKnifeRequestSource.SRC && request.transformation !== undefined) {
|
||||
resPixelmap = await request.transformation?.transform(request.context, resPixelmap!, 0, 0)
|
||||
}
|
||||
|
||||
|
@ -373,35 +371,3 @@ async function requestJob(request: RequestJobRequest): Promise<RequestJobResult
|
|||
};
|
||||
}
|
||||
|
||||
|
||||
export enum ImageKnifeRequestSource {
|
||||
SRC,
|
||||
PLACE_HOLDER,
|
||||
ERROR_HOLDER
|
||||
}
|
||||
|
||||
|
||||
export interface ImageKnifeRequestWithSource {
|
||||
request: ImageKnifeRequest
|
||||
source: ImageKnifeRequestSource
|
||||
}
|
||||
|
||||
interface RequestJobResult {
|
||||
pixelMap: PixelMap | string | undefined
|
||||
bufferSize: number
|
||||
fileKey: string
|
||||
}
|
||||
|
||||
interface RequestJobRequest {
|
||||
context: common.UIAbilityContext,
|
||||
src: string | PixelMap | Resource,
|
||||
headers?:Array<HeaderOptions>,
|
||||
allHeaders:Map<string,Object>,
|
||||
customGetImage?: (context: Context, src: string | PixelMap | Resource) => Promise<ArrayBuffer | undefined>,
|
||||
onlyRetrieveFromCache?: boolean
|
||||
requestSource:ImageKnifeRequestSource
|
||||
transformation?: PixelMapTransformation
|
||||
writeCacheStrategy?: WriteCacheStrategyType
|
||||
signature?: string
|
||||
engineKey:IEngineKey
|
||||
}
|
||||
|
|
|
@ -13,12 +13,8 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
import { ImageKnifeOption } from './ImageKnifeOption';
|
||||
import { ImageKnifeData } from './model/ImageKnifeData';
|
||||
import { ImageKnife } from './ImageKnife'
|
||||
import common from '@ohos.app.ability.common';
|
||||
import { SparkMD5 } from './3rd_party/sparkmd5/spark-md5'
|
||||
import { LogUtil } from './utils/LogUtil'
|
||||
import { ImageKnifeRequestSource } from './ImageKnifeDispatcher';
|
||||
|
||||
|
||||
|
||||
export class ImageKnifeRequest {
|
||||
|
|
|
@ -16,7 +16,7 @@ import { SparkMD5 } from '../3rd_party/sparkmd5/spark-md5';
|
|||
import { ImageKnifeOption } from '../ImageKnifeOption';
|
||||
import { IEngineKey } from './IEngineKey';
|
||||
import { PixelMapTransformation } from '../transform/PixelMapTransformation';
|
||||
import { ImageKnifeRequestSource } from '../ImageKnifeDispatcher';
|
||||
import { ImageKnifeRequestSource } from '../model/ImageKnifeData';
|
||||
|
||||
@Sendable
|
||||
export class DefaultEngineKey implements IEngineKey {
|
||||
|
|
|
@ -12,8 +12,8 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import { ImageKnifeRequestSource } from '../ImageKnifeDispatcher'
|
||||
import { ImageKnifeOption } from '../ImageKnifeOption'
|
||||
import { ImageKnifeRequestSource } from '../model/ImageKnifeData'
|
||||
|
||||
export interface IEngineKey {
|
||||
// 生成内存缓存key
|
||||
|
|
|
@ -12,6 +12,12 @@
|
|||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
import { HeaderOptions } from '../ImageKnifeOption'
|
||||
import { ImageKnifeRequest } from '../ImageKnifeRequest'
|
||||
import { IEngineKey } from '../key/IEngineKey'
|
||||
import { PixelMapTransformation } from '../transform/PixelMapTransformation'
|
||||
import common from '@ohos.app.ability.common';
|
||||
|
||||
export interface ImageKnifeData {
|
||||
source: PixelMap | string,
|
||||
imageWidth: number,
|
||||
|
@ -40,3 +46,44 @@ export enum WriteCacheStrategyType {
|
|||
File = 2
|
||||
}
|
||||
|
||||
/**
|
||||
* 区分是src,placehodler,还是error_holder
|
||||
*/
|
||||
export enum ImageKnifeRequestSource {
|
||||
SRC,
|
||||
PLACE_HOLDER,
|
||||
ERROR_HOLDER
|
||||
}
|
||||
|
||||
|
||||
export interface ImageKnifeRequestWithSource {
|
||||
request: ImageKnifeRequest
|
||||
source: ImageKnifeRequestSource
|
||||
}
|
||||
|
||||
/**
|
||||
* request子线程处理时的返回
|
||||
*/
|
||||
export interface RequestJobResult {
|
||||
pixelMap: PixelMap | string | undefined
|
||||
bufferSize: number
|
||||
fileKey: string
|
||||
}
|
||||
|
||||
/**
|
||||
* request子线程处理时的请求参数
|
||||
*/
|
||||
export interface RequestJobRequest {
|
||||
context: common.UIAbilityContext,
|
||||
src: string | PixelMap | Resource,
|
||||
headers?: Array<HeaderOptions>,
|
||||
allHeaders: Map<string, Object>,
|
||||
customGetImage?: (context: Context, src: string | PixelMap | Resource) => Promise<ArrayBuffer | undefined>,
|
||||
onlyRetrieveFromCache?: boolean
|
||||
requestSource: ImageKnifeRequestSource
|
||||
transformation?: PixelMapTransformation
|
||||
writeCacheStrategy?: WriteCacheStrategyType
|
||||
signature?: string
|
||||
engineKey: IEngineKey
|
||||
}
|
||||
|
||||
|
|
|
@ -103,6 +103,10 @@ export class FileCache {
|
|||
this.isInited = true
|
||||
}
|
||||
|
||||
public isFileCacheInit():boolean {
|
||||
return this.isInited
|
||||
}
|
||||
|
||||
// 添加缓存键值对,同时写文件
|
||||
put(key: string, value: ArrayBuffer): void {
|
||||
if (key == null || value == null) {
|
||||
|
|
Loading…
Reference in New Issue