mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-03 09:49:19 +02:00
FileEncryptionInfo usages
This commit is contained in:
parent
38b5aa56f6
commit
b13d73fa2f
7 changed files with 60 additions and 11 deletions
|
@ -398,7 +398,7 @@ void XHTMLTagImageAction::doAtStart(XHTMLReader &reader, const char **xmlattribu
|
|||
}
|
||||
const std::string imageName = imageFile.name(false);
|
||||
bookReader(reader).addImageReference(imageName, 0, reader.myMarkNextImageAsCover);
|
||||
bookReader(reader).addImage(imageName, new ZLFileImage(imageFile, "", 0));
|
||||
bookReader(reader).addImage(imageName, new ZLFileImage(imageFile, "", 0, 0, reader.myEncryptionMap->info(imageFile.path())));
|
||||
reader.myMarkNextImageAsCover = false;
|
||||
if (flagParagraphIsOpen && reader.myCurrentParagraphIsEmpty) {
|
||||
bookReader(reader).addControl(IMAGE, false);
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
*/
|
||||
|
||||
#include <ZLFile.h>
|
||||
#include <FileEncryptionInfo.h>
|
||||
#include <ZLFileImage.h>
|
||||
|
||||
#include "AndroidUtil.h"
|
||||
|
@ -36,7 +37,7 @@ JavaClass AndroidUtil::Class_java_io_InputStream("java/io/InputStream");
|
|||
|
||||
JavaClass AndroidUtil::Class_ZLibrary("org/geometerplus/zlibrary/core/library/ZLibrary");
|
||||
JavaClass AndroidUtil::Class_ZLFile("org/geometerplus/zlibrary/core/filesystem/ZLFile");
|
||||
JavaClass AndroidUtil::Class_FileEncryptionInfo("org/geometerplus/zlibrary/core/enryption/FileEncryptionInfo");
|
||||
JavaClass AndroidUtil::Class_FileEncryptionInfo("org/geometerplus/zlibrary/core/drm/FileEncryptionInfo");
|
||||
JavaClass AndroidUtil::Class_ZLFileImage("org/geometerplus/zlibrary/core/image/ZLFileImage");
|
||||
JavaClass AndroidUtil::Class_ZLTextModel("org/geometerplus/zlibrary/text/model/ZLTextModel");
|
||||
JavaClass AndroidUtil::Class_CachedCharStorageException("org/geometerplus/zlibrary/text/model/CachedCharStorageException");
|
||||
|
@ -177,7 +178,7 @@ bool AndroidUtil::init(JavaVM* jvm) {
|
|||
|
||||
Constructor_FileEncryptionInfo = new Constructor(Class_FileEncryptionInfo, "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V");
|
||||
|
||||
Constructor_ZLFileImage = new Constructor(Class_ZLFileImage, "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/filesystem/ZLFile;Ljava/lang/String;[I[I)V");
|
||||
Constructor_ZLFileImage = new Constructor(Class_ZLFileImage, "(Ljava/lang/String;Lorg/geometerplus/zlibrary/core/filesystem/ZLFile;Ljava/lang/String;[I[ILorg/geometerplus/zlibrary/core/drm/FileEncryptionInfo;)V");
|
||||
|
||||
StaticMethod_Paths_cacheDirectory = new StaticObjectMethod(Class_Paths, "cacheDirectory", Class_java_lang_String, "()");
|
||||
|
||||
|
@ -219,6 +220,26 @@ jobject AndroidUtil::createJavaFile(JNIEnv *env, const std::string &path) {
|
|||
return javaFile;
|
||||
}
|
||||
|
||||
jobject AndroidUtil::createJavaEncryptionInfo(JNIEnv *env, shared_ptr<FileEncryptionInfo> info) {
|
||||
if (info.isNull()) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
jstring uri = createJavaString(env, info->Uri);
|
||||
jstring method = createJavaString(env, info->Method);
|
||||
jstring algorithm = createJavaString(env, info->Algorithm);
|
||||
jstring contentId = createJavaString(env, info->ContentId);
|
||||
|
||||
jobject javaInfo = Constructor_FileEncryptionInfo->call(uri, method, algorithm, contentId);
|
||||
|
||||
env->DeleteLocalRef(contentId);
|
||||
env->DeleteLocalRef(algorithm);
|
||||
env->DeleteLocalRef(method);
|
||||
env->DeleteLocalRef(uri);
|
||||
|
||||
return javaInfo;
|
||||
}
|
||||
|
||||
jobject AndroidUtil::createJavaImage(JNIEnv *env, const ZLFileImage &image) {
|
||||
jstring javaMimeType = createJavaString(env, image.mimeType());
|
||||
jobject javaFile = createJavaFile(env, image.file().path());
|
||||
|
@ -233,11 +254,17 @@ jobject AndroidUtil::createJavaImage(JNIEnv *env, const ZLFileImage &image) {
|
|||
jintArray javaOffsets = createJavaIntArray(env, offsets);
|
||||
jintArray javaSizes = createJavaIntArray(env, sizes);
|
||||
|
||||
jobject javaEncryptionInfo = createJavaEncryptionInfo(env, image.encryptionInfo());
|
||||
|
||||
jobject javaImage = Constructor_ZLFileImage->call(
|
||||
javaMimeType, javaFile, javaEncoding,
|
||||
javaOffsets, javaSizes
|
||||
javaOffsets, javaSizes, javaEncryptionInfo
|
||||
);
|
||||
|
||||
if (javaEncryptionInfo != 0) {
|
||||
env->DeleteLocalRef(javaEncryptionInfo);
|
||||
}
|
||||
|
||||
env->DeleteLocalRef(javaEncoding);
|
||||
env->DeleteLocalRef(javaFile);
|
||||
env->DeleteLocalRef(javaMimeType);
|
||||
|
|
|
@ -41,6 +41,7 @@ class ObjectArrayMethod;
|
|||
class StaticObjectMethod;
|
||||
|
||||
class ZLFile;
|
||||
class FileEncryptionInfo;
|
||||
class ZLFileImage;
|
||||
|
||||
class AndroidUtil {
|
||||
|
@ -156,6 +157,7 @@ public:
|
|||
static std::string convertNonUtfString(const std::string &str);
|
||||
|
||||
static jobject createJavaFile(JNIEnv *env, const std::string &path);
|
||||
static jobject createJavaEncryptionInfo(JNIEnv *env, shared_ptr<FileEncryptionInfo> info);
|
||||
static jobject createJavaImage(JNIEnv *env, const ZLFileImage &image);
|
||||
|
||||
static jintArray createJavaIntArray(JNIEnv *env, const std::vector<jint> &data);
|
||||
|
|
|
@ -22,7 +22,9 @@
|
|||
|
||||
#include <vector>
|
||||
|
||||
#include <shared_ptr.h>
|
||||
#include <ZLFile.h>
|
||||
#include <FileEncryptionInfo.h>
|
||||
|
||||
#include "ZLImage.h"
|
||||
|
||||
|
@ -38,12 +40,13 @@ public:
|
|||
typedef std::vector<Block> Blocks;
|
||||
|
||||
public:
|
||||
ZLFileImage(const ZLFile &file, const std::string &encoding, std::size_t offset, std::size_t size = 0);
|
||||
ZLFileImage(const ZLFile &file, const std::string &encoding, std::size_t offset, std::size_t size = 0, shared_ptr<FileEncryptionInfo> encryptionInfo = 0);
|
||||
ZLFileImage(const ZLFile &file, const std::string &encoding, const Blocks &blocks);
|
||||
|
||||
//Kind kind() const;
|
||||
const ZLFile &file() const;
|
||||
const std::string &encoding() const;
|
||||
shared_ptr<FileEncryptionInfo> encryptionInfo() const;
|
||||
const ZLFileImage::Blocks& blocks() const;
|
||||
|
||||
protected:
|
||||
|
@ -52,12 +55,13 @@ protected:
|
|||
private:
|
||||
const ZLFile myFile;
|
||||
const std::string myEncoding;
|
||||
shared_ptr<FileEncryptionInfo> myEncryptionInfo;
|
||||
Blocks myBlocks;
|
||||
};
|
||||
|
||||
inline ZLFileImage::Block::Block(unsigned int off, unsigned int s) : offset(off), size(s) {}
|
||||
|
||||
inline ZLFileImage::ZLFileImage(const ZLFile &file, const std::string &encoding, std::size_t offset, std::size_t size) : ZLSingleImage(file.mimeType()), myFile(file), myEncoding(encoding) {
|
||||
inline ZLFileImage::ZLFileImage(const ZLFile &file, const std::string &encoding, std::size_t offset, std::size_t size, shared_ptr<FileEncryptionInfo> encryptionInfo) : ZLSingleImage(file.mimeType()), myFile(file), myEncoding(encoding), myEncryptionInfo(encryptionInfo) {
|
||||
myBlocks.push_back(Block(offset, size));
|
||||
}
|
||||
|
||||
|
@ -66,6 +70,7 @@ inline ZLFileImage::ZLFileImage(const ZLFile &file, const std::string &encoding,
|
|||
//inline ZLSingleImage::Kind ZLFileImage::kind() const { return FILE_IMAGE; }
|
||||
inline const ZLFile &ZLFileImage::file() const { return myFile; }
|
||||
inline const std::string &ZLFileImage::encoding() const { return myEncoding; }
|
||||
inline shared_ptr<FileEncryptionInfo> ZLFileImage::encryptionInfo() const { return myEncryptionInfo; }
|
||||
inline const ZLFileImage::Blocks &ZLFileImage::blocks() const { return myBlocks; }
|
||||
//inline shared_ptr<ZLInputStream> ZLFileImage::inputStream() const { return myFile.inputStream(); }
|
||||
|
||||
|
|
|
@ -63,6 +63,12 @@ void ZLStringUtil::appendNumber(std::string &str, unsigned int n) {
|
|||
}
|
||||
}
|
||||
|
||||
std::string ZLStringUtil::numberToString(unsigned int n) {
|
||||
std::string str;
|
||||
appendNumber(str, n);
|
||||
return str;
|
||||
}
|
||||
|
||||
void ZLStringUtil::append(std::string &str, const std::vector<std::string> &text) {
|
||||
std::size_t len = str.length();
|
||||
for (std::vector<std::string>::const_iterator it = text.begin(); it != text.end(); ++it) {
|
||||
|
|
|
@ -33,6 +33,7 @@ public:
|
|||
static bool stringEndsWith(const std::string &str, const std::string &end);
|
||||
|
||||
static void appendNumber(std::string &str, unsigned int n);
|
||||
static std::string numberToString(unsigned int n);
|
||||
static void append(std::string &str, const std::vector<std::string> &buffer);
|
||||
static void stripWhiteSpaces(std::string &str);
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@ package org.geometerplus.zlibrary.core.image;
|
|||
|
||||
import java.io.*;
|
||||
|
||||
import org.geometerplus.zlibrary.core.drm.FileEncryptionInfo;
|
||||
import org.geometerplus.zlibrary.core.filesystem.ZLFile;
|
||||
import org.geometerplus.zlibrary.core.util.*;
|
||||
|
||||
|
@ -46,7 +47,8 @@ public class ZLFileImage extends ZLSingleImage {
|
|||
ZLFile.createFileByPath(data[0]),
|
||||
data[1],
|
||||
offsets,
|
||||
lengths
|
||||
lengths,
|
||||
null
|
||||
);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
|
@ -58,17 +60,19 @@ public class ZLFileImage extends ZLSingleImage {
|
|||
private final String myEncoding;
|
||||
private final int[] myOffsets;
|
||||
private final int[] myLengths;
|
||||
private final FileEncryptionInfo myEncryptionInfo;
|
||||
|
||||
public ZLFileImage(String mimeType, ZLFile file, String encoding, int[] offsets, int[] lengths) {
|
||||
this(MimeType.get(mimeType), file, encoding, offsets, lengths);
|
||||
public ZLFileImage(String mimeType, ZLFile file, String encoding, int[] offsets, int[] lengths, FileEncryptionInfo encryptionInfo) {
|
||||
this(MimeType.get(mimeType), file, encoding, offsets, lengths, encryptionInfo);
|
||||
}
|
||||
|
||||
public ZLFileImage(MimeType mimeType, ZLFile file, String encoding, int[] offsets, int[] lengths) {
|
||||
public ZLFileImage(MimeType mimeType, ZLFile file, String encoding, int[] offsets, int[] lengths, FileEncryptionInfo encryptionInfo) {
|
||||
super(mimeType);
|
||||
myFile = file;
|
||||
myEncoding = encoding != null ? encoding : ENCODING_NONE;
|
||||
myOffsets = offsets;
|
||||
myLengths = lengths;
|
||||
myEncryptionInfo = encryptionInfo;
|
||||
}
|
||||
|
||||
public ZLFileImage(String mimeType, ZLFile file, String encoding, int offset, int length) {
|
||||
|
@ -76,7 +80,7 @@ public class ZLFileImage extends ZLSingleImage {
|
|||
}
|
||||
|
||||
public ZLFileImage(MimeType mimeType, ZLFile file, String encoding, int offset, int length) {
|
||||
this(mimeType, file, encoding, new int[] { offset }, new int[] { length });
|
||||
this(mimeType, file, encoding, new int[] { offset }, new int[] { length }, null);
|
||||
}
|
||||
|
||||
public ZLFileImage(MimeType mimeType, ZLFile file) {
|
||||
|
@ -97,6 +101,10 @@ public class ZLFileImage extends ZLSingleImage {
|
|||
@Override
|
||||
public InputStream inputStream() {
|
||||
try {
|
||||
if (myEncryptionInfo != null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
final InputStream stream;
|
||||
if (myOffsets.length == 1) {
|
||||
final int offset = myOffsets[0];
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue