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"
|
||||
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) {
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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) );
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue