1
0
Fork 0
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:
Nikolay Pultsin 2012-03-18 03:39:02 +00:00
parent c849daa8e8
commit f0cc6dda87
7 changed files with 28 additions and 10 deletions

View file

@ -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"
JNIEXPORT jboolean JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPlugin_readMetaInfoNative(JNIEnv* env, jobject thiz, jobject javaBook) {
shared_ptr<FormatPlugin> plugin = findCppPlugin(env, thiz);
@ -100,7 +118,6 @@ JNIEXPORT jboolean JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPl
extern "C"
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);
if (plugin.isNull()) {
return;
@ -111,7 +128,7 @@ JNIEXPORT void JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPlugin
return;
}
//fillLanguageAndEncoding(env, javaBook, *book);
fillLanguageAndEncoding(env, javaBook, *book);
}
static bool initBookModel(JNIEnv *env, jobject javaModel, BookModel &model) {

View file

@ -43,7 +43,7 @@ bool TxtPlugin::readMetaInfo(Book &book) const {
}
bool TxtPlugin::readModel(BookModel &model) const {
const Book &book = *model.book();
Book &book = *model.book();
const ZLFile &file = book.file();
shared_ptr<ZLInputStream> stream = file.inputStream();
if (stream.isNull()) {
@ -56,6 +56,7 @@ bool TxtPlugin::readModel(BookModel &model) const {
detector.detect(*stream, format);
}
readLanguageAndEncoding(book);
TxtBookReader(model, format, book.encoding()).readDocument(*stream);
return true;
}

View file

@ -90,6 +90,7 @@ jmethodID AndroidUtil::MID_Book_setLanguage;
jmethodID AndroidUtil::MID_Book_setEncoding;
jmethodID AndroidUtil::MID_Book_addAuthor;
jmethodID AndroidUtil::MID_Book_addTag;
jmethodID AndroidUtil::MID_Book_save;
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_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_save = env->GetMethodID(cls, "save", "()Z") );
env->DeleteLocalRef(cls);
CHECK_NULL( cls = env->FindClass(Class_Tag) );

View file

@ -100,6 +100,7 @@ public:
static jmethodID MID_Book_setEncoding;
static jmethodID MID_Book_addAuthor;
static jmethodID MID_Book_addTag;
static jmethodID MID_Book_save;
static jmethodID SMID_Tag_getTag;

View file

@ -67,6 +67,7 @@
public void setEncoding(**);
public void addAuthor(**,**);
public void addTag(**);
public boolean save();
}
-keep class org.geometerplus.fbreader.library.Tag
-keepclassmembers class org.geometerplus.fbreader.library.Tag {

View file

@ -73,11 +73,8 @@ class LanguagePreference extends ZLStringListPreference {
++index;
}
setLists(codes, names);
String language = myBook.getLanguage();
if (language == null) {
language = ZLLanguageUtil.OTHER_LANGUAGE_CODE;
}
if (!setInitialValue(language)) {
final String language = myBook.getLanguage();
if (language == null || !setInitialValue(language)) {
setInitialValue(ZLLanguageUtil.OTHER_LANGUAGE_CODE);
}
}

View file

@ -289,12 +289,11 @@ public class Book {
final FormatPlugin plugin = PluginCollection.Instance().getPlugin(File);
if (plugin != null) {
try {
System.err.println("do encoding detection");
plugin.detectLanguageAndEncoding(this);
} catch (BookReadingException e) {
}
if (myEncoding == null) {
//setEncoding("utf-8");
setEncoding("utf-8");
}
}
}