1.更新占位图解析

2.新增重试占位图解析

Signed-off-by: zhoulisheng1 <zhoulisheng1@huawei.com>
This commit is contained in:
zhoulisheng1 2022-11-14 03:43:09 -08:00
parent 164fa1c515
commit c1c3ce210f
3 changed files with 188 additions and 46 deletions

View File

@ -13,12 +13,14 @@
* limitations under the License. * limitations under the License.
*/ */
import {RequestOption} from "../../imageknife/RequestOption" import { RequestOption } from '../../imageknife/RequestOption'
import {FileTypeUtil} from "../../imageknife/utils/FileTypeUtil" import { FileTypeUtil } from '../../imageknife/utils/FileTypeUtil'
import {ImageKnifeData} from "../ImageKnifeData" import { ImageKnifeData, ImageKnifeType } from '../ImageKnifeData'
import {ParseImageUtil} from '../utils/ParseImageUtil' import { ParseImageUtil } from '../utils/ParseImageUtil'
import {ParseResClient} from '../resourcemanage/ParseResClient' import { SupportFormat } from '../utils/FileTypeUtil'
import image from "@ohos.multimedia.image" import { SVGParseImpl } from '../utils/svg/SVGParseImpl'
import { ParseResClient } from '../resourcemanage/ParseResClient'
import image from '@ohos.multimedia.image'
export class ErrorHolderManager { export class ErrorHolderManager {
private options: RequestOption; private options: RequestOption;
@ -30,7 +32,7 @@ export class ErrorHolderManager {
static execute(option: RequestOption) { static execute(option: RequestOption) {
let manager = new ErrorHolderManager(option); let manager = new ErrorHolderManager(option);
return new Promise(manager.process.bind(manager)) return new Promise(manager.process.bind(manager))
.then(option.errorholderOnComplete.bind(option)).catch(option.errorholderOnError.bind(option)); .then(option.errorholderOnComplete.bind(option)).catch(option.errorholderOnError.bind(option));
} }
process(onComplete, onError) { process(onComplete, onError) {
@ -40,9 +42,7 @@ export class ErrorHolderManager {
private displayErrorholder(onComplete, onError) { private displayErrorholder(onComplete, onError) {
console.log("displayErrorholder") console.log("displayErrorholder")
if ((typeof (this.options.errorholderSrc as image.PixelMap).isEditable) == 'boolean') { if ((typeof (this.options.errorholderSrc as image.PixelMap).isEditable) == 'boolean') {
let imageKnifeData = new ImageKnifeData(); let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, this.options.errorholderSrc as PixelMap)
imageKnifeData.imageKnifeType = ImageKnifeData.PIXELMAP
imageKnifeData.imageKnifeValue = this.options.placeholderSrc as PixelMap
onComplete(imageKnifeData); onComplete(imageKnifeData);
} else if (typeof this.options.errorholderSrc == 'string') { } else if (typeof this.options.errorholderSrc == 'string') {
@ -53,22 +53,21 @@ export class ErrorHolderManager {
let suc = (arraybuffer) => { let suc = (arraybuffer) => {
let fileTypeUtil = new FileTypeUtil(); let fileTypeUtil = new FileTypeUtil();
let typeValue = fileTypeUtil.getFileType(arraybuffer); let typeValue = fileTypeUtil.getFileType(arraybuffer);
if ("gif" == typeValue || "svg" == typeValue) { switch (typeValue) {
let imageKnifeData = new ImageKnifeData(); case SupportFormat.svg:
imageKnifeData.imageKnifeType = "Resource" this.svgProcess(onComplete, onError, arraybuffer, typeValue)
imageKnifeData.imageKnifeValue = this.options.errorholderSrc as Resource break;
imageKnifeData.imageKnifeSourceType = typeValue; case SupportFormat.jpg:
onComplete(imageKnifeData); case SupportFormat.png:
} else { case SupportFormat.bmp:
let parseImageUtils = new ParseImageUtil(); case SupportFormat.gif:
let success = (value: PixelMap) => { case SupportFormat.tiff:
let imageKnifeData = new ImageKnifeData(); case SupportFormat.webp:
imageKnifeData.imageKnifeType = "PixelMap" this.mediaImageProcess(onComplete, onError, arraybuffer, typeValue)
imageKnifeData.imageKnifeValue = value break;
imageKnifeData.imageKnifeSourceType = typeValue; default:
onComplete(imageKnifeData); onError("ErrorHolderManager 文件类型不支持")
} break;
parseImageUtils.parseImage(arraybuffer, success, onError)
} }
} }
resourceFetch.loadResource(res, suc, onError) resourceFetch.loadResource(res, suc, onError)
@ -77,4 +76,24 @@ export class ErrorHolderManager {
} }
} }
} }
private svgProcess(onComplete, onError, arraybuffer, typeValue) {
let svgParseImpl = new SVGParseImpl()
let size = { width: this.options.size.width, height: this.options.size.height }
svgParseImpl.parseSvg(arraybuffer, size).then((value: PixelMap) => {
let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, value)
onComplete(imageKnifeData)
}).catch(err => {
onError(err)
})
}
private mediaImageProcess(onComplete, onError, arraybuffer, typeValue) {
let parseImageUtil = new ParseImageUtil()
let success = (value: PixelMap) => {
let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, value)
onComplete(imageKnifeData)
}
parseImageUtil.parseImage(arraybuffer, success, onError)
}
} }

View File

@ -16,9 +16,11 @@ import {RequestOption} from "../../imageknife/RequestOption"
import {ResourceTypeEts} from "../../imageknife/constants/ResourceTypeEts" import {ResourceTypeEts} from "../../imageknife/constants/ResourceTypeEts"
import {Base64} from "../../cache/Base64" import {Base64} from "../../cache/Base64"
import {FileTypeUtil} from "../../imageknife/utils/FileTypeUtil" import {FileTypeUtil} from "../../imageknife/utils/FileTypeUtil"
import {ImageKnifeData} from "../ImageKnifeData" import {ImageKnifeData,ImageKnifeType} from "../ImageKnifeData"
import {ParseImageUtil} from '../utils/ParseImageUtil' import {ParseImageUtil} from '../utils/ParseImageUtil'
import {ParseResClient} from '../resourcemanage/ParseResClient' import {ParseResClient} from '../resourcemanage/ParseResClient'
import { SupportFormat } from '../utils/FileTypeUtil'
import { SVGParseImpl } from '../utils/svg/SVGParseImpl'
import resourceManager from '@ohos.resourceManager'; import resourceManager from '@ohos.resourceManager';
import image from "@ohos.multimedia.image" import image from "@ohos.multimedia.image"
@ -42,9 +44,7 @@ export class PlaceHolderManager {
private displayPlaceholder(onComplete, onError) { private displayPlaceholder(onComplete, onError) {
console.log("displayPlaceholder") console.log("displayPlaceholder")
if ((typeof (this.options.placeholderSrc as image.PixelMap).isEditable) == 'boolean') { if ((typeof (this.options.placeholderSrc as image.PixelMap).isEditable) == 'boolean') {
let imageKnifeData = new ImageKnifeData(); let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, this.options.placeholderSrc as PixelMap)
imageKnifeData.imageKnifeType = ImageKnifeData.PIXELMAP
imageKnifeData.imageKnifeValue = this.options.placeholderSrc as PixelMap
onComplete(imageKnifeData); onComplete(imageKnifeData);
} else if (typeof this.options.placeholderSrc == 'string') { } else if (typeof this.options.placeholderSrc == 'string') {
@ -55,16 +55,21 @@ export class PlaceHolderManager {
let suc = (arraybuffer) => { let suc = (arraybuffer) => {
let fileTypeUtil = new FileTypeUtil(); let fileTypeUtil = new FileTypeUtil();
let typeValue = fileTypeUtil.getFileType(arraybuffer); let typeValue = fileTypeUtil.getFileType(arraybuffer);
if ("gif" == typeValue || "svg" == typeValue) { switch (typeValue) {
let imageKnifeData = this.createImageKnifeData("Resource", this.options.placeholderSrc as Resource, typeValue); case SupportFormat.svg:
onComplete(imageKnifeData); this.svgProcess(onComplete, onError, arraybuffer, typeValue)
} else { break;
let parseImageUtils = new ParseImageUtil(); case SupportFormat.jpg:
let success = (value: PixelMap) => { case SupportFormat.png:
let imageKnifeData = this.createImageKnifeData('PixelMap', value, typeValue); case SupportFormat.bmp:
onComplete(imageKnifeData); case SupportFormat.gif:
} case SupportFormat.tiff:
parseImageUtils.parseImage(arraybuffer, success, onError) case SupportFormat.webp:
this.mediaImageProcess(onComplete, onError, arraybuffer, typeValue)
break;
default:
onError("PlaceHolderManager 文件类型不支持")
break;
} }
} }
resourceFetch.loadResource(res, suc, onError) resourceFetch.loadResource(res, suc, onError)
@ -73,11 +78,26 @@ export class PlaceHolderManager {
} }
} }
} }
private createImageKnifeData(imageKnifeType:string, imageKnifeValue:PixelMap|string|Resource, imageKnifeSourceType:string):ImageKnifeData{
let imageKnifeData = new ImageKnifeData();
imageKnifeData.imageKnifeType = imageKnifeType;
imageKnifeData.imageKnifeValue = imageKnifeValue; private svgProcess(onComplete, onError, arraybuffer, typeValue) {
imageKnifeData.imageKnifeSourceType = imageKnifeSourceType; let svgParseImpl = new SVGParseImpl()
return imageKnifeData; let size = { width: this.options.size.width, height: this.options.size.height }
svgParseImpl.parseSvg(arraybuffer, size).then((value: PixelMap) => {
let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, value)
onComplete(imageKnifeData)
}).catch(err => {
onError(err)
})
}
private mediaImageProcess(onComplete, onError, arraybuffer, typeValue) {
let parseImageUtil = new ParseImageUtil()
let success = (value: PixelMap) => {
let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, value)
onComplete(imageKnifeData)
}
parseImageUtil.parseImage(arraybuffer, success, onError)
} }
} }

View File

@ -0,0 +1,103 @@
/*
* Copyright (C) 2021 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import {RequestOption} from "../../imageknife/RequestOption"
import {ResourceTypeEts} from "../../imageknife/constants/ResourceTypeEts"
import {Base64} from "../../cache/Base64"
import {FileTypeUtil} from "../../imageknife/utils/FileTypeUtil"
import {ImageKnifeData,ImageKnifeType} from "../ImageKnifeData"
import {ParseImageUtil} from '../utils/ParseImageUtil'
import {ParseResClient} from '../resourcemanage/ParseResClient'
import { SupportFormat } from '../utils/FileTypeUtil'
import { SVGParseImpl } from '../utils/svg/SVGParseImpl'
import resourceManager from '@ohos.resourceManager';
import image from "@ohos.multimedia.image"
export class RetryHolderManager {
private options: RequestOption;
constructor(option: RequestOption) {
this.options = option;
}
static execute(option: RequestOption) {
let manager = new RetryHolderManager(option);
return new Promise(manager.process.bind(manager))
.then(option.retryholderOnComplete.bind(option)).catch(option.retryholderOnError.bind(option));
}
process(onComplete, onError) {
this.displayRetryholder(onComplete, onError);
}
private displayRetryholder(onComplete, onError) {
console.log("displayRetryholder")
if ((typeof (this.options.retryholderSrc as image.PixelMap).isEditable) == 'boolean') {
let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, this.options.placeholderSrc as PixelMap)
onComplete(imageKnifeData);
} else if (typeof this.options.placeholderSrc == 'string') {
} else {
let res = this.options.retryholderSrc as Resource;
if (typeof res.id != 'undefined' && typeof res.id != 'undefined') {
let resourceFetch = new ParseResClient();
let suc = (arraybuffer) => {
let fileTypeUtil = new FileTypeUtil();
let typeValue = fileTypeUtil.getFileType(arraybuffer);
switch (typeValue) {
case SupportFormat.svg:
this.svgProcess(onComplete, onError, arraybuffer, typeValue)
break;
case SupportFormat.jpg:
case SupportFormat.png:
case SupportFormat.bmp:
case SupportFormat.gif:
case SupportFormat.tiff:
case SupportFormat.webp:
this.mediaImageProcess(onComplete, onError, arraybuffer, typeValue)
break;
default:
onError("PlaceHolderManager 文件类型不支持")
break;
}
}
resourceFetch.loadResource(res, suc, onError)
} else {
onError("PlaceHolderManager 输入参数有问题!")
}
}
}
private svgProcess(onComplete, onError, arraybuffer, typeValue) {
let svgParseImpl = new SVGParseImpl()
let size = { width: this.options.size.width, height: this.options.size.height }
svgParseImpl.parseSvg(arraybuffer, size).then((value: PixelMap) => {
let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, value)
onComplete(imageKnifeData)
}).catch(err => {
onError(err)
})
}
private mediaImageProcess(onComplete, onError, arraybuffer, typeValue) {
let parseImageUtil = new ParseImageUtil()
let success = (value: PixelMap) => {
let imageKnifeData = ImageKnifeData.createImagePixelMap(ImageKnifeType.PIXELMAP, value)
onComplete(imageKnifeData)
}
parseImageUtil.parseImage(arraybuffer, success, onError)
}
}