mirror of
https://github.com/gedoor/legado.git
synced 2024-07-04 23:36:56 +08:00
优化
This commit is contained in:
parent
25aec01b1a
commit
900bc3876c
|
@ -101,6 +101,13 @@ public class LazyResource extends Resource {
|
|||
throw new IOException(
|
||||
"Could not load the contents of resource: " + this.getHref());
|
||||
} else {
|
||||
/*掌上书苑有很多自制书OPF的nameSpace格式不标准,强制修复成正确的格式*/
|
||||
if (getHref().endsWith("opf")) {
|
||||
String string = new String(readData)
|
||||
.replace(" smlns=\"", " xmlns=\"")
|
||||
.replace(" mlns=\"", " xmlns=\"");
|
||||
readData = string.getBytes();
|
||||
}
|
||||
this.data = readData;
|
||||
}
|
||||
|
||||
|
|
|
@ -75,17 +75,28 @@ public class PackageDocumentReader extends PackageDocumentBase {
|
|||
/**
|
||||
* 修复一些非标准epub格式由于 opf 文件内容不全而读取不到图片的问题
|
||||
*
|
||||
* @return ,修复图片路径后的一个Element列表
|
||||
* @return 修复图片路径后的一个Element列表
|
||||
* @author qianfanguojin
|
||||
*/
|
||||
private static ArrayList<Element> ensureImageInfo(Resources resources,
|
||||
Element manifestElement) {
|
||||
Element manifestElement,
|
||||
Document packageDocument) {
|
||||
ArrayList<Element> fixedElements = new ArrayList<>();
|
||||
//加入当前所有的 item 标签
|
||||
HashSet<String> originItemHrefSet = new HashSet<>();
|
||||
//加入当前所有的 item 标签 并将 href 保存到集合中
|
||||
NodeList originItemElements = manifestElement
|
||||
.getElementsByTagNameNS(NAMESPACE_OPF, OPFTags.item);
|
||||
for (int i = 0; i < originItemElements.getLength(); i++) {
|
||||
fixedElements.add((Element) originItemElements.item(i));
|
||||
Element itemElement = (Element) originItemElements.item(i);
|
||||
fixedElements.add(itemElement);
|
||||
String href = DOMUtil
|
||||
.getAttribute(itemElement, NAMESPACE_OPF, OPFAttributes.href);
|
||||
try {
|
||||
href = URLDecoder.decode(href, Constants.CHARACTER_ENCODING);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
Log.e(TAG, e.getMessage());
|
||||
}
|
||||
originItemHrefSet.add(href);
|
||||
}
|
||||
|
||||
//如果有图片资源未定义在 originItemElements ,则加入该图片信息得到 fixedElements 中
|
||||
|
@ -93,36 +104,15 @@ public class PackageDocumentReader extends PackageDocumentBase {
|
|||
MediaType currentMediaType = resource.getMediaType();
|
||||
if (currentMediaType == MediaTypes.JPG || currentMediaType == MediaTypes.PNG) {
|
||||
String imageHref = resource.getHref();
|
||||
//确保该图片信息 resource 在原 originItemElements 列表中没有出现过
|
||||
boolean flag = false;
|
||||
int i;
|
||||
for (i = 0; i < originItemElements.getLength(); i++) {
|
||||
Element itemElement = (Element) originItemElements.item(i);
|
||||
String href = DOMUtil
|
||||
.getAttribute(itemElement, NAMESPACE_OPF, OPFAttributes.href);
|
||||
try {
|
||||
href = URLDecoder.decode(href, Constants.CHARACTER_ENCODING);
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
Log.e(TAG, e.getMessage());
|
||||
}
|
||||
if (href.equals(imageHref)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i == originItemElements.getLength()) {
|
||||
flag = true;
|
||||
}
|
||||
if (flag) {
|
||||
//由于暂时无法实例化一个Element,则选择克隆一个已存在的节点来修改以达到新增 Element 的效果,作为临时解决方案
|
||||
Element tempElement = (Element) manifestElement.getElementsByTagNameNS(NAMESPACE_OPF, OPFTags.item).item(0).cloneNode(true);
|
||||
//确保该图片信息 resource 在原 originItemHrefSet 集合中没有出现过
|
||||
if (!originItemHrefSet.contains(imageHref)) {
|
||||
Element tempElement = packageDocument.createElement("item");
|
||||
tempElement.setAttribute("id", imageHref.replace("/", ""));
|
||||
tempElement.setAttribute("href", imageHref);
|
||||
tempElement.setAttribute("media-type", currentMediaType.getName());
|
||||
fixedElements.add(tempElement);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
return fixedElements;
|
||||
}
|
||||
|
@ -151,7 +141,7 @@ public class PackageDocumentReader extends PackageDocumentBase {
|
|||
"Package document does not contain element " + OPFTags.manifest);
|
||||
return result;
|
||||
}
|
||||
List<Element> ensuredElements = ensureImageInfo(resources, manifestElement);
|
||||
List<Element> ensuredElements = ensureImageInfo(resources, manifestElement, packageDocument);
|
||||
for (Element itemElement : ensuredElements) {
|
||||
// Element itemElement = ;
|
||||
String id = DOMUtil
|
||||
|
|
Loading…
Reference in New Issue
Block a user