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" 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) {

View file

@ -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;
} }

View file

@ -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) );

View file

@ -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;

View file

@ -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 {

View file

@ -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);
} }
} }

View file

@ -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");
} }
} }
} }