JNIEXPORT jobjectArray JNICALL Java_org_crosswire_android_sword_SWMgr_getModInfoList (JNIEnv *env, jobject) { init(); int size = 0; for (sword::ModMap::iterator it = mgr->Modules.begin(); it != mgr->Modules.end(); ++it) { if ((!(it->second->getConfigEntry("CipherKey"))) || (*(it->second->getConfigEntry("CipherKey")))) size++; } SWLog::getSystemLog()->logDebug("getModInfoList returning %d length array\n", size); jclass clazzModInfo = env->FindClass("org/crosswire/android/sword/SWMgr$ModInfo"); jfieldID nameID = env->GetFieldID(clazzModInfo, "name", "Ljava/lang/String;"); jfieldID descID = env->GetFieldID(clazzModInfo, "description", "Ljava/lang/String;"); jfieldID catID = env->GetFieldID(clazzModInfo, "category", "Ljava/lang/String;"); jfieldID langID = env->GetFieldID(clazzModInfo, "language", "Ljava/lang/String;"); jfieldID versionID = env->GetFieldID(clazzModInfo, "version", "Ljava/lang/String;"); jfieldID deltaID = env->GetFieldID(clazzModInfo, "delta", "Ljava/lang/String;"); jobjectArray ret = (jobjectArray) env->NewObjectArray(size, clazzModInfo, NULL); int i = 0; for (sword::ModMap::iterator it = mgr->Modules.begin(); it != mgr->Modules.end(); ++it) { SWModule *module = it->second; if ((!(module->getConfigEntry("CipherKey"))) || (*(module->getConfigEntry("CipherKey")))) { SWBuf type = module->Type(); SWBuf cat = module->getConfigEntry("Category"); SWBuf version = module->getConfigEntry("Version"); if (cat.length() > 0) type = cat; jobject modInfo = env->AllocObject(clazzModInfo); jstring val; val = env->NewStringUTF(assureValidUTF8(module->getName())); env->SetObjectField(modInfo, nameID , val); env->DeleteLocalRef(val); val = env->NewStringUTF(assureValidUTF8(module->getDescription())); env->SetObjectField(modInfo, descID , val); env->DeleteLocalRef(val); val = env->NewStringUTF(assureValidUTF8(type.c_str())); env->SetObjectField(modInfo, catID , val); env->DeleteLocalRef(val); val = env->NewStringUTF(assureValidUTF8(module->getLanguage())); env->SetObjectField(modInfo, langID , val); env->DeleteLocalRef(val); val = env->NewStringUTF(assureValidUTF8(version.c_str())); env->SetObjectField(modInfo, versionID, val); env->DeleteLocalRef(val); val = env->NewStringUTF(assureValidUTF8("")); env->SetObjectField(modInfo, deltaID , val); env->DeleteLocalRef(val); env->SetObjectArrayElement(ret, i++, modInfo); env->DeleteLocalRef(modInfo); } } return ret; }
const char *SWModule_getDescription(SWHANDLE hmodule) { SWModule *module = (SWModule *)hmodule; return (const char *)((module) ? module->getDescription() : 0); }
/* * Class: org_crosswire_android_sword_InstallMgr * Method: getRemoteModInfoList * Signature: (Ljava/lang/String;)[Lorg/crosswire/android/sword/SWMgr/ModInfo; */ JNIEXPORT jobjectArray JNICALL Java_org_crosswire_android_sword_InstallMgr_getRemoteModInfoList (JNIEnv *env, jobject me, jstring sourceNameJS) { SWLog::getSystemLog()->logDebug("getRemoteModInfoList\n"); init(); initInstall(); const char *sourceName = env->GetStringUTFChars(sourceNameJS, NULL); SWLog::getSystemLog()->logDebug("sourceName: %s\n", sourceName); jclass clazzModInfo = env->FindClass("org/crosswire/android/sword/SWMgr$ModInfo"); jfieldID nameID = env->GetFieldID(clazzModInfo, "name", "Ljava/lang/String;"); jfieldID descID = env->GetFieldID(clazzModInfo, "description", "Ljava/lang/String;"); jfieldID catID = env->GetFieldID(clazzModInfo, "category", "Ljava/lang/String;"); jfieldID langID = env->GetFieldID(clazzModInfo, "language", "Ljava/lang/String;"); jfieldID versionID = env->GetFieldID(clazzModInfo, "version", "Ljava/lang/String;"); jfieldID deltaID = env->GetFieldID(clazzModInfo, "delta", "Ljava/lang/String;"); InstallSourceMap::iterator source = installMgr->sources.find(sourceName); if (source == installMgr->sources.end()) { SWLog::getSystemLog()->logDebug("remoteListModules returning 0 length array\n"); return (jobjectArray) env->NewObjectArray(0, clazzModInfo, NULL); } SWLog::getSystemLog()->logDebug("found source: %s\n", sourceName); map<SWModule *, int> modStats = installMgr->getModuleStatus(*mgr, *source->second->getMgr()); int size = 0; for (map<SWModule *, int>::iterator it = modStats.begin(); it != modStats.end(); ++it) { size++; } SWLog::getSystemLog()->logDebug("remoteListModules returning %d length array\n", size); jobjectArray ret = (jobjectArray) env->NewObjectArray(size, clazzModInfo, NULL); int i = 0; for (map<SWModule *, int>::iterator it = modStats.begin(); it != modStats.end(); ++it) { SWModule *module = it->first; int status = it->second; SWBuf version = module->getConfigEntry("Version"); SWBuf statusString = " "; if (it->second & InstallMgr::MODSTAT_NEW) statusString = "*"; if (it->second & InstallMgr::MODSTAT_OLDER) statusString = "-"; if (it->second & InstallMgr::MODSTAT_UPDATED) statusString = "+"; SWBuf type = module->Type(); SWBuf cat = module->getConfigEntry("Category"); if (cat.length() > 0) type = cat; jobject modInfo = env->AllocObject(clazzModInfo); jstring val; val = env->NewStringUTF(assureValidUTF8(module->getName())); env->SetObjectField(modInfo, nameID , val); env->DeleteLocalRef(val); val = env->NewStringUTF(assureValidUTF8(module->getDescription())); env->SetObjectField(modInfo, descID , val); env->DeleteLocalRef(val); val = env->NewStringUTF(assureValidUTF8(type.c_str())); env->SetObjectField(modInfo, catID , val); env->DeleteLocalRef(val); val = env->NewStringUTF(assureValidUTF8(module->getLanguage())); env->SetObjectField(modInfo, langID , val); env->DeleteLocalRef(val); val = env->NewStringUTF(assureValidUTF8(version.c_str())); env->SetObjectField(modInfo, versionID, val); env->DeleteLocalRef(val); val = env->NewStringUTF(assureValidUTF8(statusString.c_str())); env->SetObjectField(modInfo, deltaID , val); env->DeleteLocalRef(val); env->SetObjectArrayElement(ret, i++, modInfo); env->DeleteLocalRef(modInfo); } env->ReleaseStringUTFChars(sourceNameJS, sourceName); return ret; }
void systemquery(const char * key, ostream* output){ DiathekeMgr manager; ModMap::iterator it; SWModule *target; bool types = false, descriptions = false, names = false; if (!::stricmp(key, "localelist")) { LocaleMgr *lm = LocaleMgr::getSystemLocaleMgr(); list<SWBuf> loclist = lm->getAvailableLocales(); list<SWBuf>::iterator li = loclist.begin(); for (;li != loclist.end(); li++) { *output << li->c_str() << endl; } } else if (!::stricmp(key, "modulelist")) { types = true; descriptions = true; names = true; } else if (!::stricmp(key, "modulelistnames")) { names = true; } else if (!::stricmp(key, "modulelistdescriptions")) { descriptions = true; } if (types || descriptions || names) { if (types) *output << "Biblical Texts:\n"; for (it = manager.Modules.begin(); it != manager.Modules.end(); it++) { target = it->second; if (!strcmp(target->getType(), "Biblical Texts")) { if (names) *output << target->getName(); if (names && descriptions) *output << " : "; if (descriptions) *output << target->getDescription(); *output << endl; } } if (types) *output << "Commentaries:\n"; for (it = manager.Modules.begin(); it != manager.Modules.end(); it++) { target = it->second; if (!strcmp(target->getType(), "Commentaries")) { if (names) *output << target->getName(); if (names && descriptions) *output << " : "; if (descriptions) *output << target->getDescription(); *output << endl; } } if (types) *output << "Dictionaries:\n"; for (it = manager.Modules.begin(); it != manager.Modules.end(); it++) { target = it->second; if (!strcmp(target->getType(), "Lexicons / Dictionaries")) { if (names) *output << target->getName(); if (names && descriptions) *output << " : "; if (descriptions) *output << target->getDescription(); *output << endl; } } if (types) *output << "Generic books:\n"; for (it = manager.Modules.begin(); it != manager.Modules.end(); it++) { target = it->second; if (!strcmp(target->getType(), "Generic Books")) { if (names) *output << target->getName(); if (names && descriptions) *output << " : "; if (descriptions) *output << target->getDescription(); *output << endl; } } } }