mirror of
https://github.com/geometer/FBReaderJ.git
synced 2025-10-03 17:59:33 +02:00
native code simplification (introduced JString class)
This commit is contained in:
parent
48cdfee8a2
commit
fdb21b67dc
4 changed files with 71 additions and 83 deletions
|
@ -42,51 +42,38 @@ static shared_ptr<FormatPlugin> findCppPlugin(jobject base) {
|
|||
static void fillUids(JNIEnv* env, jobject javaBook, Book &book) {
|
||||
const UIDList &uids = book.uids();
|
||||
for (UIDList::const_iterator it = uids.begin(); it != uids.end(); ++it) {
|
||||
jstring type = AndroidUtil::createJavaString(env, (*it)->Type);
|
||||
jstring id = AndroidUtil::createJavaString(env, (*it)->Id);
|
||||
AndroidUtil::Method_Book_addUid->call(javaBook, type, id);
|
||||
env->DeleteLocalRef(id);
|
||||
env->DeleteLocalRef(type);
|
||||
JString type(env, (*it)->Type);
|
||||
JString id(env, (*it)->Id);
|
||||
AndroidUtil::Method_Book_addUid->call(javaBook, type.j(), id.j());
|
||||
}
|
||||
}
|
||||
|
||||
static void fillMetaInfo(JNIEnv* env, jobject javaBook, Book &book) {
|
||||
jstring javaString;
|
||||
JString title(env, book.title());
|
||||
AndroidUtil::Method_Book_setTitle->call(javaBook, title.j());
|
||||
|
||||
javaString = AndroidUtil::createJavaString(env, book.title());
|
||||
AndroidUtil::Method_Book_setTitle->call(javaBook, javaString);
|
||||
env->DeleteLocalRef(javaString);
|
||||
|
||||
javaString = AndroidUtil::createJavaString(env, book.language());
|
||||
if (javaString != 0) {
|
||||
AndroidUtil::Method_Book_setLanguage->call(javaBook, javaString);
|
||||
env->DeleteLocalRef(javaString);
|
||||
JString language(env, book.language());
|
||||
if (language.j() != 0) {
|
||||
AndroidUtil::Method_Book_setLanguage->call(javaBook, language.j());
|
||||
}
|
||||
|
||||
javaString = AndroidUtil::createJavaString(env, book.encoding());
|
||||
if (javaString != 0) {
|
||||
AndroidUtil::Method_Book_setEncoding->call(javaBook, javaString);
|
||||
env->DeleteLocalRef(javaString);
|
||||
JString encoding(env, book.encoding());
|
||||
if (encoding.j() != 0) {
|
||||
AndroidUtil::Method_Book_setEncoding->call(javaBook, encoding.j());
|
||||
}
|
||||
|
||||
javaString = AndroidUtil::createJavaString(env, book.seriesTitle());
|
||||
if (javaString != 0) {
|
||||
jstring indexString = AndroidUtil::createJavaString(env, book.indexInSeries());
|
||||
AndroidUtil::Method_Book_setSeriesInfo->call(javaBook, javaString, indexString);
|
||||
if (indexString != 0) {
|
||||
env->DeleteLocalRef(indexString);
|
||||
}
|
||||
env->DeleteLocalRef(javaString);
|
||||
JString seriesTitle(env, book.seriesTitle());
|
||||
if (seriesTitle.j() != 0) {
|
||||
JString indexString(env, book.indexInSeries());
|
||||
AndroidUtil::Method_Book_setSeriesInfo->call(javaBook, seriesTitle.j(), indexString.j());
|
||||
}
|
||||
|
||||
const AuthorList &authors = book.authors();
|
||||
for (std::size_t i = 0; i < authors.size(); ++i) {
|
||||
const Author &author = *authors[i];
|
||||
javaString = env->NewStringUTF(author.name().c_str());
|
||||
jstring key = env->NewStringUTF(author.sortKey().c_str());
|
||||
AndroidUtil::Method_Book_addAuthor->call(javaBook, javaString, key);
|
||||
env->DeleteLocalRef(key);
|
||||
env->DeleteLocalRef(javaString);
|
||||
JString name(env, author.name(), false);
|
||||
JString key(env, author.sortKey(), false);
|
||||
AndroidUtil::Method_Book_addAuthor->call(javaBook, name.j(), key.j());
|
||||
}
|
||||
|
||||
const TagList &tags = book.tags();
|
||||
|
@ -99,18 +86,14 @@ static void fillMetaInfo(JNIEnv* env, jobject javaBook, Book &book) {
|
|||
}
|
||||
|
||||
static void fillLanguageAndEncoding(JNIEnv* env, jobject javaBook, Book &book) {
|
||||
jstring javaString;
|
||||
|
||||
javaString = AndroidUtil::createJavaString(env, book.language());
|
||||
if (javaString != 0) {
|
||||
AndroidUtil::Method_Book_setLanguage->call(javaBook, javaString);
|
||||
env->DeleteLocalRef(javaString);
|
||||
JString language(env, book.language());
|
||||
if (language.j() != 0) {
|
||||
AndroidUtil::Method_Book_setLanguage->call(javaBook, language.j());
|
||||
}
|
||||
|
||||
javaString = AndroidUtil::createJavaString(env, book.encoding());
|
||||
if (javaString != 0) {
|
||||
AndroidUtil::Method_Book_setEncoding->call(javaBook, javaString);
|
||||
env->DeleteLocalRef(javaString);
|
||||
JString encoding(env, book.encoding());
|
||||
if (encoding.j() != 0) {
|
||||
AndroidUtil::Method_Book_setEncoding->call(javaBook, encoding.j());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -215,12 +198,10 @@ static bool initInternalHyperlinks(JNIEnv *env, jobject javaModel, BookModel &mo
|
|||
}
|
||||
allocator.flush();
|
||||
|
||||
jstring linksDirectoryName = env->NewStringUTF(allocator.directoryName().c_str());
|
||||
jstring linksFileExtension = env->NewStringUTF(allocator.fileExtension().c_str());
|
||||
JString linksDirectoryName(env, allocator.directoryName(), false);
|
||||
JString linksFileExtension(env, allocator.fileExtension(), false);
|
||||
jint linksBlocksNumber = allocator.blocksNumber();
|
||||
AndroidUtil::Method_NativeBookModel_initInternalHyperlinks->call(javaModel, linksDirectoryName, linksFileExtension, linksBlocksNumber);
|
||||
env->DeleteLocalRef(linksDirectoryName);
|
||||
env->DeleteLocalRef(linksFileExtension);
|
||||
AndroidUtil::Method_NativeBookModel_initInternalHyperlinks->call(javaModel, linksDirectoryName.j(), linksFileExtension.j(), linksBlocksNumber);
|
||||
return !env->ExceptionCheck();
|
||||
}
|
||||
|
||||
|
@ -265,10 +246,8 @@ static void initTOC(JNIEnv *env, jobject javaModel, const ContentsTree &tree) {
|
|||
const std::vector<shared_ptr<ContentsTree> > &children = tree.children();
|
||||
for (std::vector<shared_ptr<ContentsTree> >::const_iterator it = children.begin(); it != children.end(); ++it) {
|
||||
const ContentsTree &child = **it;
|
||||
jstring text = AndroidUtil::createJavaString(env, child.text());
|
||||
const int ref = child.reference();
|
||||
AndroidUtil::Method_NativeBookModel_addTOCItem->call(javaModel, text, ref);
|
||||
env->DeleteLocalRef(text);
|
||||
JString text(env, child.text());
|
||||
AndroidUtil::Method_NativeBookModel_addTOCItem->call(javaModel, text.j(), child.reference());
|
||||
|
||||
initTOC(env, javaModel, child);
|
||||
|
||||
|
@ -335,9 +314,8 @@ JNIEXPORT jint JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPlugin
|
|||
const std::vector<std::string> &lst = *it;
|
||||
jobjectArray jList = env->NewObjectArray(lst.size(), AndroidUtil::Class_java_lang_String.j(), 0);
|
||||
for (std::size_t i = 0; i < lst.size(); ++i) {
|
||||
jstring jString = AndroidUtil::createJavaString(env, lst[i]);
|
||||
env->SetObjectArrayElement(jList, i, jString);
|
||||
env->DeleteLocalRef(jString);
|
||||
JString jString(env, lst[i]);
|
||||
env->SetObjectArrayElement(jList, i, jString.j());
|
||||
}
|
||||
AndroidUtil::Method_NativeBookModel_registerFontFamilyList->call(javaModel, jList);
|
||||
env->DeleteLocalRef(jList);
|
||||
|
@ -348,21 +326,20 @@ JNIEXPORT jint JNICALL Java_org_geometerplus_fbreader_formats_NativeFormatPlugin
|
|||
if (it->second.isNull()) {
|
||||
continue;
|
||||
}
|
||||
jstring family = AndroidUtil::createJavaString(env, it->first);
|
||||
JString family(env, it->first);
|
||||
jstring normal = createJavaString(env, it->second->Normal);
|
||||
jstring bold = createJavaString(env, it->second->Bold);
|
||||
jstring italic = createJavaString(env, it->second->Italic);
|
||||
jstring boldItalic = createJavaString(env, it->second->BoldItalic);
|
||||
|
||||
AndroidUtil::Method_NativeBookModel_registerFontEntry->call(
|
||||
javaModel, family, normal, bold, italic, boldItalic
|
||||
javaModel, family.j(), normal, bold, italic, boldItalic
|
||||
);
|
||||
|
||||
if (boldItalic != 0) env->DeleteLocalRef(boldItalic);
|
||||
if (italic != 0) env->DeleteLocalRef(italic);
|
||||
if (bold != 0) env->DeleteLocalRef(bold);
|
||||
if (normal != 0) env->DeleteLocalRef(normal);
|
||||
env->DeleteLocalRef(family);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue