mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-04 02:09:35 +02:00
encoding detection fixes
This commit is contained in:
parent
c849daa8e8
commit
f0cc6dda87
7 changed files with 28 additions and 10 deletions
|
@ -81,6 +81,24 @@ static void fillMetaInfo(JNIEnv* env, jobject javaBook, Book &book) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void fillLanguageAndEncoding(JNIEnv* env, jobject javaBook, Book &book) {
|
||||||
|
jstring javaString;
|
||||||
|
|
||||||
|
javaString = AndroidUtil::createJavaString(env, book.language());
|
||||||
|
if (javaString != 0) {
|
||||||
|
env->CallVoidMethod(javaBook, AndroidUtil::MID_Book_setLanguage, javaString);
|
||||||
|
env->DeleteLocalRef(javaString);
|
||||||
|
}
|
||||||
|
|
||||||
|
javaString = AndroidUtil::createJavaString(env, book.encoding());
|
||||||
|
if (javaString != 0) {
|
||||||
|
env->CallVoidMethod(javaBook, AndroidUtil::MID_Book_setEncoding, javaString);
|
||||||
|
env->DeleteLocalRef(javaString);
|
||||||
|
}
|
||||||
|
|
||||||
|
env->CallVoidMethod(javaBook, AndroidUtil::MID_Book_save);
|
||||||
|
}
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
JNIEXPORT jboolean JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPlugin_readMetaInfoNative(JNIEnv* env, jobject thiz, jobject javaBook) {
|
JNIEXPORT jboolean JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPlugin_readMetaInfoNative(JNIEnv* env, jobject thiz, jobject javaBook) {
|
||||||
shared_ptr<FormatPlugin> plugin = findCppPlugin(env, thiz);
|
shared_ptr<FormatPlugin> plugin = findCppPlugin(env, thiz);
|
||||||
|
@ -100,7 +118,6 @@ JNIEXPORT jboolean JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPl
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
JNIEXPORT void JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPlugin_detectLanguageAndEncoding(JNIEnv* env, jobject thiz, jobject javaBook) {
|
JNIEXPORT void JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPlugin_detectLanguageAndEncoding(JNIEnv* env, jobject thiz, jobject javaBook) {
|
||||||
// TODO: implement
|
|
||||||
shared_ptr<FormatPlugin> plugin = findCppPlugin(env, thiz);
|
shared_ptr<FormatPlugin> plugin = findCppPlugin(env, thiz);
|
||||||
if (plugin.isNull()) {
|
if (plugin.isNull()) {
|
||||||
return;
|
return;
|
||||||
|
@ -111,7 +128,7 @@ JNIEXPORT void JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPlugin
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
//fillLanguageAndEncoding(env, javaBook, *book);
|
fillLanguageAndEncoding(env, javaBook, *book);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool initBookModel(JNIEnv *env, jobject javaModel, BookModel &model) {
|
static bool initBookModel(JNIEnv *env, jobject javaModel, BookModel &model) {
|
||||||
|
|
|
@ -43,7 +43,7 @@ bool TxtPlugin::readMetaInfo(Book &book) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TxtPlugin::readModel(BookModel &model) const {
|
bool TxtPlugin::readModel(BookModel &model) const {
|
||||||
const Book &book = *model.book();
|
Book &book = *model.book();
|
||||||
const ZLFile &file = book.file();
|
const ZLFile &file = book.file();
|
||||||
shared_ptr<ZLInputStream> stream = file.inputStream();
|
shared_ptr<ZLInputStream> stream = file.inputStream();
|
||||||
if (stream.isNull()) {
|
if (stream.isNull()) {
|
||||||
|
@ -56,6 +56,7 @@ bool TxtPlugin::readModel(BookModel &model) const {
|
||||||
detector.detect(*stream, format);
|
detector.detect(*stream, format);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
readLanguageAndEncoding(book);
|
||||||
TxtBookReader(model, format, book.encoding()).readDocument(*stream);
|
TxtBookReader(model, format, book.encoding()).readDocument(*stream);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,6 +90,7 @@ jmethodID AndroidUtil::MID_Book_setLanguage;
|
||||||
jmethodID AndroidUtil::MID_Book_setEncoding;
|
jmethodID AndroidUtil::MID_Book_setEncoding;
|
||||||
jmethodID AndroidUtil::MID_Book_addAuthor;
|
jmethodID AndroidUtil::MID_Book_addAuthor;
|
||||||
jmethodID AndroidUtil::MID_Book_addTag;
|
jmethodID AndroidUtil::MID_Book_addTag;
|
||||||
|
jmethodID AndroidUtil::MID_Book_save;
|
||||||
|
|
||||||
jmethodID AndroidUtil::SMID_Tag_getTag;
|
jmethodID AndroidUtil::SMID_Tag_getTag;
|
||||||
|
|
||||||
|
@ -196,6 +197,7 @@ bool AndroidUtil::init(JavaVM* jvm) {
|
||||||
CHECK_NULL( MID_Book_setEncoding = env->GetMethodID(cls, "setEncoding", "(Ljava/lang/String;)V") );
|
CHECK_NULL( MID_Book_setEncoding = env->GetMethodID(cls, "setEncoding", "(Ljava/lang/String;)V") );
|
||||||
CHECK_NULL( MID_Book_addAuthor = env->GetMethodID(cls, "addAuthor", "(Ljava/lang/String;Ljava/lang/String;)V") );
|
CHECK_NULL( MID_Book_addAuthor = env->GetMethodID(cls, "addAuthor", "(Ljava/lang/String;Ljava/lang/String;)V") );
|
||||||
CHECK_NULL( MID_Book_addTag = env->GetMethodID(cls, "addTag", "(Lorg/geometerplus/fbreader/library/Tag;)V") );
|
CHECK_NULL( MID_Book_addTag = env->GetMethodID(cls, "addTag", "(Lorg/geometerplus/fbreader/library/Tag;)V") );
|
||||||
|
CHECK_NULL( MID_Book_save = env->GetMethodID(cls, "save", "()Z") );
|
||||||
env->DeleteLocalRef(cls);
|
env->DeleteLocalRef(cls);
|
||||||
|
|
||||||
CHECK_NULL( cls = env->FindClass(Class_Tag) );
|
CHECK_NULL( cls = env->FindClass(Class_Tag) );
|
||||||
|
|
|
@ -100,6 +100,7 @@ public:
|
||||||
static jmethodID MID_Book_setEncoding;
|
static jmethodID MID_Book_setEncoding;
|
||||||
static jmethodID MID_Book_addAuthor;
|
static jmethodID MID_Book_addAuthor;
|
||||||
static jmethodID MID_Book_addTag;
|
static jmethodID MID_Book_addTag;
|
||||||
|
static jmethodID MID_Book_save;
|
||||||
|
|
||||||
static jmethodID SMID_Tag_getTag;
|
static jmethodID SMID_Tag_getTag;
|
||||||
|
|
||||||
|
|
|
@ -67,6 +67,7 @@
|
||||||
public void setEncoding(**);
|
public void setEncoding(**);
|
||||||
public void addAuthor(**,**);
|
public void addAuthor(**,**);
|
||||||
public void addTag(**);
|
public void addTag(**);
|
||||||
|
public boolean save();
|
||||||
}
|
}
|
||||||
-keep class org.geometerplus.fbreader.library.Tag
|
-keep class org.geometerplus.fbreader.library.Tag
|
||||||
-keepclassmembers class org.geometerplus.fbreader.library.Tag {
|
-keepclassmembers class org.geometerplus.fbreader.library.Tag {
|
||||||
|
|
|
@ -73,11 +73,8 @@ class LanguagePreference extends ZLStringListPreference {
|
||||||
++index;
|
++index;
|
||||||
}
|
}
|
||||||
setLists(codes, names);
|
setLists(codes, names);
|
||||||
String language = myBook.getLanguage();
|
final String language = myBook.getLanguage();
|
||||||
if (language == null) {
|
if (language == null || !setInitialValue(language)) {
|
||||||
language = ZLLanguageUtil.OTHER_LANGUAGE_CODE;
|
|
||||||
}
|
|
||||||
if (!setInitialValue(language)) {
|
|
||||||
setInitialValue(ZLLanguageUtil.OTHER_LANGUAGE_CODE);
|
setInitialValue(ZLLanguageUtil.OTHER_LANGUAGE_CODE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -289,12 +289,11 @@ public class Book {
|
||||||
final FormatPlugin plugin = PluginCollection.Instance().getPlugin(File);
|
final FormatPlugin plugin = PluginCollection.Instance().getPlugin(File);
|
||||||
if (plugin != null) {
|
if (plugin != null) {
|
||||||
try {
|
try {
|
||||||
System.err.println("do encoding detection");
|
|
||||||
plugin.detectLanguageAndEncoding(this);
|
plugin.detectLanguageAndEncoding(this);
|
||||||
} catch (BookReadingException e) {
|
} catch (BookReadingException e) {
|
||||||
}
|
}
|
||||||
if (myEncoding == null) {
|
if (myEncoding == null) {
|
||||||
//setEncoding("utf-8");
|
setEncoding("utf-8");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue