JNIEXPORT jbyteArray JNICALL Java_org_kiwix_kiwixmobile_JNIKiwix_getContent(JNIEnv *env, jobject obj, jstring url, jobject mimeTypeObj, jobject sizeObj) { /* Default values */ setStringObjValue("", mimeTypeObj, env); setIntObjValue(0, sizeObj, env); jbyteArray data = env->NewByteArray(0); /* Retrieve the content */ if (reader != NULL) { std::string cUrl = jni2c(url, env); std::string cData; std::string cMimeType; unsigned int cSize = 0; pthread_mutex_lock(&readerLock); try { if (reader->getContentByUrl(cUrl, cData, cSize, cMimeType)) { data = env->NewByteArray(cSize); jbyte *dataPointer = env->GetByteArrayElements(data, 0); memcpy(dataPointer, cData.c_str(), cSize); setStringObjValue(cMimeType, mimeTypeObj, env); setIntObjValue(cSize, sizeObj, env); } } catch (exception &e) { std::cerr << e.what() << std::endl; } pthread_mutex_unlock(&readerLock); } return data; }
JNIEXPORT jboolean JNICALL Java_org_kiwix_kiwixmobile_JNIKiwix_searchSuggestions (JNIEnv *env, jobject obj, jstring prefix, jint count) { jboolean retVal = JNI_FALSE; std::string cPrefix = jni2c(prefix, env); unsigned int cCount = jni2c(count); pthread_mutex_lock(&readerLock); try { if (reader != NULL) { if (reader->searchSuggestionsSmart(cPrefix, cCount)) { retVal = JNI_TRUE; } } } catch (exception &e) { std::cerr << e.what() << std::endl; } pthread_mutex_unlock(&readerLock); return retVal; }
JNIEXPORT void JNICALL Java_org_kiwix_kiwixmobile_JNIKiwix_setDataDirectory (JNIEnv *env, jobject obj, jstring dirStr) { std::string cPath = jni2c(dirStr, env); pthread_mutex_lock(&readerLock); try { u_setDataDirectory(cPath.c_str()); } catch (exception &e) { std::cerr << e.what() << std::endl; } pthread_mutex_unlock(&readerLock); }
JNIEXPORT jboolean JNICALL Java_org_kiwix_kiwixmobile_JNIKiwix_loadZIM(JNIEnv *env, jobject obj, jstring path) { jboolean retVal = JNI_TRUE; std::string cPath = jni2c(path, env); pthread_mutex_lock(&readerLock); try { reader = new kiwix::Reader(cPath); } catch (exception &e) { std::cerr << e.what() << std::endl; retVal = JNI_FALSE; } pthread_mutex_unlock(&readerLock); return retVal; }
JNIEXPORT jstring JNICALL Java_org_kiwix_kiwixmobile_JNIKiwix_getMimeType(JNIEnv *env, jobject obj, jstring url) { jstring mimeType; pthread_mutex_lock(&readerLock); if (reader != NULL) { std::string cUrl = jni2c(url, env); try { std::string cMimeType; reader->getMimeTypeByUrl(cUrl, cMimeType); mimeType = c2jni(cMimeType, env); } catch (exception &e) { std::cerr << e.what() << std::endl; } } pthread_mutex_unlock(&readerLock); return mimeType; }
JNIEXPORT jboolean JNICALL Java_org_kiwix_kiwixmobile_JNIKiwix_getPageUrlFromTitle (JNIEnv *env, jobject obj, jstring title, jobject urlObj) { jboolean retVal = JNI_FALSE; std::string cTitle = jni2c(title, env); std::string cUrl; pthread_mutex_lock(&readerLock); try { if (reader != NULL) { if (reader->getPageUrlFromTitle(cTitle, cUrl)) { setStringObjValue(cUrl, urlObj, env); retVal = JNI_TRUE; } } } catch (exception &e) { std::cerr << e.what() << std::endl; } pthread_mutex_unlock(&readerLock); return retVal; }