make DcContext static

This commit is contained in:
B. Petersen 2018-08-18 18:58:27 +02:00
parent 54aa11b964
commit b4bc628f17
8 changed files with 243 additions and 326 deletions

View file

@ -1,6 +1,6 @@
/******************************************************************************* /*******************************************************************************
* *
* Delta Chat Android * Delta Chat Java Adapter
* (C) 2017 Björn Petersen * (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com * Contact: r10s@b44t.com, http://b44t.com
* *
@ -24,7 +24,6 @@
#include <jni.h> #include <jni.h>
#include <android/log.h>
#include "messenger-backend/src/deltachat.h" #include "messenger-backend/src/deltachat.h"
#include "messenger-backend/cmdline/cmdline.h" #include "messenger-backend/cmdline/cmdline.h"
@ -80,11 +79,9 @@ static void s_init_globals(JNIEnv *env, jclass DcContext_class)
s_global_init_done = 1; s_global_init_done = 1;
/* prepare calling back a Java function */ /* prepare calling back a Java function */
__android_log_print(ANDROID_LOG_INFO, "DeltaChat", "JNI: s_init_globals()..."); /* low-level logging, dc_log_*() may not be yet available. However, please note that __android_log_print() may not work (eg. on LG X Cam) */
(*env)->GetJavaVM(env, &s_jvm); /* JNIEnv cannot be shared between threads, so we share the JavaVM object */ (*env)->GetJavaVM(env, &s_jvm); /* JNIEnv cannot be shared between threads, so we share the JavaVM object */
s_DcContext_class = (*env)->NewGlobalRef(env, DcContext_class); s_DcContext_class = (*env)->NewGlobalRef(env, DcContext_class);
s_DcCallback_methodID = (*env)->GetStaticMethodID(env, DcContext_class, "DcCallback","(IJJ)J" /*signature as "(param)ret" with I=int, J=long*/ ); s_DcCallback_methodID = (*env)->GetStaticMethodID(env, DcContext_class, "handleEvent","(IJJ)J" /*signature as "(param)ret" with I=int, J=long*/ );
} }
@ -155,14 +152,15 @@ static uint32_t* jintArray2uint32Pointer(JNIEnv* env, jintArray ja, int* ret_icn
******************************************************************************/ ******************************************************************************/
static dc_context_t* get_dc_context(JNIEnv *env, jclass cls) static dc_context_t* get_dc_context(JNIEnv *env, jobject obj)
{ {
static jfieldID fid = 0; static jfieldID fid = 0;
if( fid == 0 ) { if( fid == 0 ) {
fid = (*env)->GetStaticFieldID(env, cls, "m_hContext", "J" /*Signature, J=long*/); jclass cls = (*env)->GetObjectClass(env, obj);
fid = (*env)->GetFieldID(env, cls, "m_hContext", "J" /*Signature, J=long*/);
} }
if( fid ) { if( fid ) {
return (dc_context_t*)(*env)->GetStaticLongField(env, cls, fid); return (dc_chat_t*)(*env)->GetLongField(env, obj, fid);
} }
return NULL; return NULL;
} }
@ -175,17 +173,6 @@ static uintptr_t s_context_callback_(dc_context_t* context, int event, uintptr_t
jlong l; jlong l;
JNIEnv* env; JNIEnv* env;
#if 0 /* -- __android_log_print() does not log eg. on LG X Cam - but Javas Log.i() etc. do. So, we do not optimize these calls and just use the Java logging. */
if( event==DC_EVENT_INFO || event==DC_EVENT_WARNING ) {
__android_log_print(event==DC_EVENT_INFO? ANDROID_LOG_INFO : ANDROID_LOG_WARN, "DeltaChat", "%s", (char*)data2); /* on problems, add `-llog` to `Android.mk` */
return 0; /* speed up things for info/warning */
}
else if( event == DC_EVENT_ERROR ) {
__android_log_print(ANDROID_LOG_ERROR, "DeltaChat", "%s", (char*)data2);
/* errors are also forwarded to Java to show them in a bubble or so */
}
#endif
if( s_jvm==NULL || s_DcContext_class==NULL || s_DcCallback_methodID==NULL ) { if( s_jvm==NULL || s_DcContext_class==NULL || s_DcCallback_methodID==NULL ) {
return 0; /* may happen on startup */ return 0; /* may happen on startup */
} }
@ -200,155 +187,159 @@ static uintptr_t s_context_callback_(dc_context_t* context, int event, uintptr_t
} }
JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextNew(JNIEnv *env, jclass c) JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextNew(JNIEnv *env, jobject obj, jstring osname)
{ {
s_init_globals(env, c); jclass cls = (*env)->GetObjectClass(env, obj);
return (jlong)dc_context_new(s_context_callback_, NULL, "Android"); s_init_globals(env, cls);
CHAR_REF(osname);
jlong hContext = (jlong)dc_context_new(s_context_callback_, NULL, osnamePtr);
CHAR_UNREF(osname);
return hContext;
} }
/* DcContext - open/configure/connect/fetch */ /* DcContext - open/configure/connect/fetch */
JNIEXPORT jint Java_com_b44t_messenger_DcContext_open(JNIEnv *env, jclass cls, jstring dbfile) JNIEXPORT jint Java_com_b44t_messenger_DcContext_open(JNIEnv *env, jobject obj, jstring dbfile)
{ {
CHAR_REF(dbfile); CHAR_REF(dbfile);
jint ret = dc_open(get_dc_context(env, cls), dbfilePtr, NULL); jint ret = dc_open(get_dc_context(env, obj), dbfilePtr, NULL);
CHAR_UNREF(dbfile) CHAR_UNREF(dbfile)
return ret; return ret;
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_close(JNIEnv *env, jclass cls) JNIEXPORT void Java_com_b44t_messenger_DcContext_close(JNIEnv *env, jobject obj)
{ {
dc_close(get_dc_context(env, cls)); dc_close(get_dc_context(env, obj));
} }
JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getBlobdir(JNIEnv *env, jclass cls) JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getBlobdir(JNIEnv *env, jobject obj)
{ {
char* temp = dc_get_blobdir(get_dc_context(env, cls)); char* temp = dc_get_blobdir(get_dc_context(env, obj));
jstring ret = JSTRING_NEW(temp); jstring ret = JSTRING_NEW(temp);
free(temp); free(temp);
return ret; return ret;
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_configure(JNIEnv *env, jclass cls) JNIEXPORT void Java_com_b44t_messenger_DcContext_configure(JNIEnv *env, jobject obj)
{ {
dc_configure(get_dc_context(env, cls)); dc_configure(get_dc_context(env, obj));
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_stopOngoingProcess(JNIEnv *env, jclass cls) JNIEXPORT void Java_com_b44t_messenger_DcContext_stopOngoingProcess(JNIEnv *env, jobject obj)
{ {
dc_stop_ongoing_process(get_dc_context(env, cls)); dc_stop_ongoing_process(get_dc_context(env, obj));
} }
JNIEXPORT jint Java_com_b44t_messenger_DcContext_isConfigured(JNIEnv *env, jclass cls) JNIEXPORT jint Java_com_b44t_messenger_DcContext_isConfigured(JNIEnv *env, jobject obj)
{ {
return (jint)dc_is_configured(get_dc_context(env, cls)); return (jint)dc_is_configured(get_dc_context(env, obj));
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_performJobs(JNIEnv *env, jclass cls) JNIEXPORT void Java_com_b44t_messenger_DcContext_performJobs(JNIEnv *env, jobject obj)
{ {
dc_perform_imap_jobs(get_dc_context(env, cls)); dc_perform_imap_jobs(get_dc_context(env, obj));
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_idle(JNIEnv *env, jclass cls) JNIEXPORT void Java_com_b44t_messenger_DcContext_idle(JNIEnv *env, jobject obj)
{ {
dc_perform_imap_idle(get_dc_context(env, cls)); dc_perform_imap_idle(get_dc_context(env, obj));
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_interruptIdle(JNIEnv *env, jclass cls) JNIEXPORT void Java_com_b44t_messenger_DcContext_interruptIdle(JNIEnv *env, jobject obj)
{ {
dc_interrupt_imap_idle(get_dc_context(env, cls)); dc_interrupt_imap_idle(get_dc_context(env, obj));
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_fetch(JNIEnv *env, jclass cls) JNIEXPORT void Java_com_b44t_messenger_DcContext_fetch(JNIEnv *env, jobject obj)
{ {
dc_perform_imap_fetch(get_dc_context(env, cls)); dc_perform_imap_fetch(get_dc_context(env, obj));
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_performSmtpJobs(JNIEnv *env, jclass cls) JNIEXPORT void Java_com_b44t_messenger_DcContext_performSmtpJobs(JNIEnv *env, jobject obj)
{ {
dc_perform_smtp_jobs(get_dc_context(env, cls)); dc_perform_smtp_jobs(get_dc_context(env, obj));
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_performSmtpIdle(JNIEnv *env, jclass cls) JNIEXPORT void Java_com_b44t_messenger_DcContext_performSmtpIdle(JNIEnv *env, jobject obj)
{ {
dc_perform_smtp_idle(get_dc_context(env, cls)); dc_perform_smtp_idle(get_dc_context(env, obj));
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_interruptSmtpIdle(JNIEnv *env, jclass cls) JNIEXPORT void Java_com_b44t_messenger_DcContext_interruptSmtpIdle(JNIEnv *env, jobject obj)
{ {
dc_interrupt_smtp_idle(get_dc_context(env, cls)); dc_interrupt_smtp_idle(get_dc_context(env, obj));
} }
/* DcContext - handle contacts */ /* DcContext - handle contacts */
JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getContacts(JNIEnv *env, jclass cls, jint flags, jstring query) JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getContacts(JNIEnv *env, jobject obj, jint flags, jstring query)
{ {
CHAR_REF(query); CHAR_REF(query);
dc_array_t* ca = dc_get_contacts(get_dc_context(env, cls), flags, queryPtr); dc_array_t* ca = dc_get_contacts(get_dc_context(env, obj), flags, queryPtr);
CHAR_UNREF(query); CHAR_UNREF(query);
return dc_array2jintArray_n_unref(env, ca); return dc_array2jintArray_n_unref(env, ca);
} }
JNIEXPORT jint Java_com_b44t_messenger_DcContext_getBlockedCount(JNIEnv *env, jclass cls) JNIEXPORT jint Java_com_b44t_messenger_DcContext_getBlockedCount(JNIEnv *env, jobject obj)
{ {
return dc_get_blocked_cnt(get_dc_context(env, cls)); return dc_get_blocked_cnt(get_dc_context(env, obj));
} }
JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getBlockedContacts(JNIEnv *env, jclass cls) JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getBlockedContacts(JNIEnv *env, jobject obj)
{ {
dc_array_t* ca = dc_get_blocked_contacts(get_dc_context(env, cls)); dc_array_t* ca = dc_get_blocked_contacts(get_dc_context(env, obj));
return dc_array2jintArray_n_unref(env, ca); return dc_array2jintArray_n_unref(env, ca);
} }
JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetContact(JNIEnv *env, jclass c, jlong hContext, jint contact_id) JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetContact(JNIEnv *env, jclass cls, jlong hContext, jint contact_id)
{ {
return (jlong)dc_get_contact((dc_context_t*)hContext, contact_id); return (jlong)dc_get_contact((dc_context_t*)hContext, contact_id);
} }
JNIEXPORT jint Java_com_b44t_messenger_DcContext_createContact(JNIEnv *env, jclass cls, jstring name, jstring addr) JNIEXPORT jint Java_com_b44t_messenger_DcContext_createContact(JNIEnv *env, jobject obj, jstring name, jstring addr)
{ {
CHAR_REF(name); CHAR_REF(name);
CHAR_REF(addr); CHAR_REF(addr);
jint ret = (jint)dc_create_contact(get_dc_context(env, cls), namePtr, addrPtr); jint ret = (jint)dc_create_contact(get_dc_context(env, obj), namePtr, addrPtr);
CHAR_UNREF(addr); CHAR_UNREF(addr);
CHAR_UNREF(name); CHAR_UNREF(name);
return ret; return ret;
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_blockContact(JNIEnv *env, jclass cls, jint contact_id, jint block) JNIEXPORT void Java_com_b44t_messenger_DcContext_blockContact(JNIEnv *env, jobject obj, jint contact_id, jint block)
{ {
dc_block_contact(get_dc_context(env, cls), contact_id, block); dc_block_contact(get_dc_context(env, obj), contact_id, block);
} }
JNIEXPORT jint Java_com_b44t_messenger_DcContext_deleteContact(JNIEnv *env, jclass cls, jint contact_id) JNIEXPORT jint Java_com_b44t_messenger_DcContext_deleteContact(JNIEnv *env, jobject obj, jint contact_id)
{ {
return (jint)dc_delete_contact(get_dc_context(env, cls), contact_id); return (jint)dc_delete_contact(get_dc_context(env, obj), contact_id);
} }
/* DcContext - handle chats */ /* DcContext - handle chats */
JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetChatlist(JNIEnv *env, jclass c, jlong hContext, jint listflags, jstring query, jint queryId) JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetChatlist(JNIEnv *env, jclass cls, jlong hContext, jint listflags, jstring query, jint queryId)
{ {
jlong ret; jlong ret;
if( query ) { if( query ) {
@ -363,162 +354,162 @@ JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetChatlist(JNIEnv *e
} }
JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetChat(JNIEnv *env, jclass c, jlong hContext, jint chat_id) JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetChat(JNIEnv *env, jclass cls, jlong hContext, jint chat_id)
{ {
return (jlong)dc_get_chat((dc_context_t*)hContext, chat_id); return (jlong)dc_get_chat((dc_context_t*)hContext, chat_id);
} }
JNIEXPORT jint Java_com_b44t_messenger_DcContext_getChatIdByContactId(JNIEnv *env, jclass cls, jint contact_id) JNIEXPORT jint Java_com_b44t_messenger_DcContext_getChatIdByContactId(JNIEnv *env, jobject obj, jint contact_id)
{ {
return (jint)dc_get_chat_id_by_contact_id(get_dc_context(env, cls), contact_id); return (jint)dc_get_chat_id_by_contact_id(get_dc_context(env, obj), contact_id);
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_markseenMsgs(JNIEnv *env, jclass cls, jintArray msg_ids) JNIEXPORT void Java_com_b44t_messenger_DcContext_markseenMsgs(JNIEnv *env, jobject obj, jintArray msg_ids)
{ {
int msg_ids_cnt = 0; int msg_ids_cnt = 0;
const uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt); const uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt);
dc_markseen_msgs(get_dc_context(env, cls), msg_ids_ptr, msg_ids_cnt); dc_markseen_msgs(get_dc_context(env, obj), msg_ids_ptr, msg_ids_cnt);
free(msg_ids_ptr); free(msg_ids_ptr);
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_marknoticedChat(JNIEnv *env, jclass cls, jint chat_id) JNIEXPORT void Java_com_b44t_messenger_DcContext_marknoticedChat(JNIEnv *env, jobject obj, jint chat_id)
{ {
dc_marknoticed_chat(get_dc_context(env, cls), chat_id); dc_marknoticed_chat(get_dc_context(env, obj), chat_id);
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_marknoticedContact(JNIEnv *env, jclass cls, jint contact_id) JNIEXPORT void Java_com_b44t_messenger_DcContext_marknoticedContact(JNIEnv *env, jobject obj, jint contact_id)
{ {
dc_marknoticed_contact(get_dc_context(env, cls), contact_id); dc_marknoticed_contact(get_dc_context(env, obj), contact_id);
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_archiveChat(JNIEnv *env, jclass cls, jint chat_id, jint archive) JNIEXPORT void Java_com_b44t_messenger_DcContext_archiveChat(JNIEnv *env, jobject obj, jint chat_id, jint archive)
{ {
dc_archive_chat(get_dc_context(env, cls), chat_id, archive); dc_archive_chat(get_dc_context(env, obj), chat_id, archive);
} }
JNIEXPORT jint Java_com_b44t_messenger_DcContext_createChatByContactId(JNIEnv *env, jclass cls, jint contact_id) JNIEXPORT jint Java_com_b44t_messenger_DcContext_createChatByContactId(JNIEnv *env, jobject obj, jint contact_id)
{ {
return (jint)dc_create_chat_by_contact_id(get_dc_context(env, cls), contact_id); return (jint)dc_create_chat_by_contact_id(get_dc_context(env, obj), contact_id);
} }
JNIEXPORT jint Java_com_b44t_messenger_DcContext_createChatByMsgId(JNIEnv *env, jclass cls, jint msg_id) JNIEXPORT jint Java_com_b44t_messenger_DcContext_createChatByMsgId(JNIEnv *env, jobject obj, jint msg_id)
{ {
return (jint)dc_create_chat_by_msg_id(get_dc_context(env, cls), msg_id); return (jint)dc_create_chat_by_msg_id(get_dc_context(env, obj), msg_id);
} }
JNIEXPORT jint Java_com_b44t_messenger_DcContext_createGroupChat(JNIEnv *env, jclass cls, jboolean verified, jstring name) JNIEXPORT jint Java_com_b44t_messenger_DcContext_createGroupChat(JNIEnv *env, jobject obj, jboolean verified, jstring name)
{ {
CHAR_REF(name); CHAR_REF(name);
jint ret = (jint)dc_create_group_chat(get_dc_context(env, cls), verified, namePtr); jint ret = (jint)dc_create_group_chat(get_dc_context(env, obj), verified, namePtr);
CHAR_UNREF(name); CHAR_UNREF(name);
return ret; return ret;
} }
JNIEXPORT jint Java_com_b44t_messenger_DcContext_isContactInChat(JNIEnv *env, jclass cls, jint chat_id, jint contact_id) JNIEXPORT jint Java_com_b44t_messenger_DcContext_isContactInChat(JNIEnv *env, jobject obj, jint chat_id, jint contact_id)
{ {
return (jint)dc_is_contact_in_chat(get_dc_context(env, cls), chat_id, contact_id); return (jint)dc_is_contact_in_chat(get_dc_context(env, obj), chat_id, contact_id);
} }
JNIEXPORT jint Java_com_b44t_messenger_DcContext_addContactToChat(JNIEnv *env, jclass cls, jint chat_id, jint contact_id) JNIEXPORT jint Java_com_b44t_messenger_DcContext_addContactToChat(JNIEnv *env, jobject obj, jint chat_id, jint contact_id)
{ {
return (jint)dc_add_contact_to_chat(get_dc_context(env, cls), chat_id, contact_id); return (jint)dc_add_contact_to_chat(get_dc_context(env, obj), chat_id, contact_id);
} }
JNIEXPORT jint Java_com_b44t_messenger_DcContext_removeContactFromChat(JNIEnv *env, jclass cls, jint chat_id, jint contact_id) JNIEXPORT jint Java_com_b44t_messenger_DcContext_removeContactFromChat(JNIEnv *env, jobject obj, jint chat_id, jint contact_id)
{ {
return (jint)dc_remove_contact_from_chat(get_dc_context(env, cls), chat_id, contact_id); return (jint)dc_remove_contact_from_chat(get_dc_context(env, obj), chat_id, contact_id);
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_setDraft(JNIEnv *env, jclass cls, jint chat_id, jstring draft /* NULL=delete */) JNIEXPORT void Java_com_b44t_messenger_DcContext_setDraft(JNIEnv *env, jobject obj, jint chat_id, jstring draft /* NULL=delete */)
{ {
CHAR_REF(draft); CHAR_REF(draft);
dc_set_text_draft(get_dc_context(env, cls), chat_id, draftPtr /* NULL=delete */); dc_set_text_draft(get_dc_context(env, obj), chat_id, draftPtr /* NULL=delete */);
CHAR_UNREF(draft); CHAR_UNREF(draft);
} }
JNIEXPORT jint Java_com_b44t_messenger_DcContext_setChatName(JNIEnv *env, jclass cls, jint chat_id, jstring name) JNIEXPORT jint Java_com_b44t_messenger_DcContext_setChatName(JNIEnv *env, jobject obj, jint chat_id, jstring name)
{ {
CHAR_REF(name); CHAR_REF(name);
jint ret = (jint)dc_set_chat_name(get_dc_context(env, cls), chat_id, namePtr); jint ret = (jint)dc_set_chat_name(get_dc_context(env, obj), chat_id, namePtr);
CHAR_UNREF(name); CHAR_UNREF(name);
return ret; return ret;
} }
JNIEXPORT jint Java_com_b44t_messenger_DcContext_setChatProfileImage(JNIEnv *env, jclass cls, jint chat_id, jstring image/*NULL=delete*/) JNIEXPORT jint Java_com_b44t_messenger_DcContext_setChatProfileImage(JNIEnv *env, jobject obj, jint chat_id, jstring image/*NULL=delete*/)
{ {
CHAR_REF(image); CHAR_REF(image);
jint ret = (jint)dc_set_chat_profile_image(get_dc_context(env, cls), chat_id, imagePtr/*CHAR_REF() preserves NULL*/); jint ret = (jint)dc_set_chat_profile_image(get_dc_context(env, obj), chat_id, imagePtr/*CHAR_REF() preserves NULL*/);
CHAR_UNREF(image); CHAR_UNREF(image);
return ret; return ret;
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_deleteChat(JNIEnv *env, jclass cls, jint chat_id) JNIEXPORT void Java_com_b44t_messenger_DcContext_deleteChat(JNIEnv *env, jobject obj, jint chat_id)
{ {
dc_delete_chat(get_dc_context(env, cls), chat_id); dc_delete_chat(get_dc_context(env, obj), chat_id);
} }
/* DcContext - handle messages */ /* DcContext - handle messages */
JNIEXPORT jint Java_com_b44t_messenger_DcContext_getFreshMsgCount(JNIEnv *env, jclass cls, jint chat_id) JNIEXPORT jint Java_com_b44t_messenger_DcContext_getFreshMsgCount(JNIEnv *env, jobject obj, jint chat_id)
{ {
return dc_get_fresh_msg_cnt(get_dc_context(env, cls), chat_id); return dc_get_fresh_msg_cnt(get_dc_context(env, obj), chat_id);
} }
JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetMsg(JNIEnv *env, jclass c, jlong hContext, jint id) JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetMsg(JNIEnv *env, jobject obj, jlong hContext, jint id)
{ {
return (jlong)dc_get_msg((dc_context_t*)hContext, id); return (jlong)dc_get_msg((dc_context_t*)hContext, id);
} }
JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getMsgInfo(JNIEnv *env, jclass cls, jint msg_id) JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getMsgInfo(JNIEnv *env, jobject obj, jint msg_id)
{ {
char* temp = dc_get_msg_info(get_dc_context(env, cls), msg_id); char* temp = dc_get_msg_info(get_dc_context(env, obj), msg_id);
jstring ret = JSTRING_NEW(temp); jstring ret = JSTRING_NEW(temp);
free(temp); free(temp);
return ret; return ret;
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_deleteMsgs(JNIEnv *env, jclass cls, jintArray msg_ids) JNIEXPORT void Java_com_b44t_messenger_DcContext_deleteMsgs(JNIEnv *env, jobject obj, jintArray msg_ids)
{ {
int msg_ids_cnt = 0; int msg_ids_cnt = 0;
const uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt); const uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt);
dc_delete_msgs(get_dc_context(env, cls), msg_ids_ptr, msg_ids_cnt); dc_delete_msgs(get_dc_context(env, obj), msg_ids_ptr, msg_ids_cnt);
free(msg_ids_ptr); free(msg_ids_ptr);
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_forwardMsgs(JNIEnv *env, jclass cls, jintArray msg_ids, jint chat_id) JNIEXPORT void Java_com_b44t_messenger_DcContext_forwardMsgs(JNIEnv *env, jobject obj, jintArray msg_ids, jint chat_id)
{ {
int msg_ids_cnt = 0; int msg_ids_cnt = 0;
const uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt); const uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt);
dc_forward_msgs(get_dc_context(env, cls), msg_ids_ptr, msg_ids_cnt, chat_id); dc_forward_msgs(get_dc_context(env, obj), msg_ids_ptr, msg_ids_cnt, chat_id);
free(msg_ids_ptr); free(msg_ids_ptr);
} }
JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendTextMsg(JNIEnv *env, jclass cls, jint chat_id, jstring text) JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendTextMsg(JNIEnv *env, jobject obj, jint chat_id, jstring text)
{ {
CHAR_REF(text); CHAR_REF(text);
jint msg_id = dc_send_text_msg(get_dc_context(env, cls), chat_id, textPtr); jint msg_id = dc_send_text_msg(get_dc_context(env, obj), chat_id, textPtr);
CHAR_UNREF(text); CHAR_UNREF(text);
return msg_id; return msg_id;
} }
@ -530,7 +521,7 @@ JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendVcardMsg(JNIEnv *env, jobje
} }
JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendMediaMsg(JNIEnv *env, jclass cls, jint chat_id, jint type, jstring file, jstring mime, jint w, jint h, jint ms, jstring author, jstring trackname) JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendMediaMsg(JNIEnv *env, jobject obj, jint chat_id, jint type, jstring file, jstring mime, jint w, jint h, jint ms, jstring author, jstring trackname)
{ {
jint msg_id = 0; jint msg_id = 0;
CHAR_REF(file); CHAR_REF(file);
@ -538,11 +529,11 @@ JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendMediaMsg(JNIEnv *env, jclas
CHAR_REF(author); CHAR_REF(author);
CHAR_REF(trackname); CHAR_REF(trackname);
switch( type ) { switch( type ) {
case DC_MSG_IMAGE: msg_id = (jint)dc_send_image_msg(get_dc_context(env, cls), chat_id, filePtr, mimePtr, w, h); break; case DC_MSG_IMAGE: msg_id = (jint)dc_send_image_msg(get_dc_context(env, obj), chat_id, filePtr, mimePtr, w, h); break;
case DC_MSG_VIDEO: msg_id = (jint)dc_send_video_msg(get_dc_context(env, cls), chat_id, filePtr, mimePtr, w, h, ms); break; case DC_MSG_VIDEO: msg_id = (jint)dc_send_video_msg(get_dc_context(env, obj), chat_id, filePtr, mimePtr, w, h, ms); break;
case DC_MSG_VOICE: msg_id = (jint)dc_send_voice_msg(get_dc_context(env, cls), chat_id, filePtr, mimePtr, ms); break; case DC_MSG_VOICE: msg_id = (jint)dc_send_voice_msg(get_dc_context(env, obj), chat_id, filePtr, mimePtr, ms); break;
case DC_MSG_AUDIO: msg_id = (jint)dc_send_audio_msg(get_dc_context(env, cls), chat_id, filePtr, mimePtr, ms, authorPtr, tracknamePtr); break; case DC_MSG_AUDIO: msg_id = (jint)dc_send_audio_msg(get_dc_context(env, obj), chat_id, filePtr, mimePtr, ms, authorPtr, tracknamePtr); break;
default: msg_id = (jint)dc_send_file_msg (get_dc_context(env, cls), chat_id, filePtr, mimePtr); break; default: msg_id = (jint)dc_send_file_msg (get_dc_context(env, obj), chat_id, filePtr, mimePtr); break;
} }
CHAR_UNREF(trackname); CHAR_UNREF(trackname);
CHAR_UNREF(author); CHAR_UNREF(author);
@ -554,29 +545,29 @@ JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendMediaMsg(JNIEnv *env, jclas
/* DcContext - handle config */ /* DcContext - handle config */
JNIEXPORT void Java_com_b44t_messenger_DcContext_setConfig(JNIEnv *env, jclass cls, jstring key, jstring value /*may be NULL*/) JNIEXPORT void Java_com_b44t_messenger_DcContext_setConfig(JNIEnv *env, jobject obj, jstring key, jstring value /*may be NULL*/)
{ {
CHAR_REF(key); CHAR_REF(key);
CHAR_REF(value); CHAR_REF(value);
dc_set_config(get_dc_context(env, cls), keyPtr, valuePtr /*is NULL if value is NULL, CHAR_REF() handles this*/); dc_set_config(get_dc_context(env, obj), keyPtr, valuePtr /*is NULL if value is NULL, CHAR_REF() handles this*/);
CHAR_UNREF(key); CHAR_UNREF(key);
CHAR_UNREF(value); CHAR_UNREF(value);
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_setConfigInt(JNIEnv *env, jclass cls, jstring key, jint value) JNIEXPORT void Java_com_b44t_messenger_DcContext_setConfigInt(JNIEnv *env, jobject obj, jstring key, jint value)
{ {
CHAR_REF(key); CHAR_REF(key);
dc_set_config_int(get_dc_context(env, cls), keyPtr, value); dc_set_config_int(get_dc_context(env, obj), keyPtr, value);
CHAR_UNREF(key); CHAR_UNREF(key);
} }
JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getConfig(JNIEnv *env, jclass cls, jstring key, jstring def/*may be NULL*/) JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getConfig(JNIEnv *env, jobject obj, jstring key, jstring def/*may be NULL*/)
{ {
CHAR_REF(key); CHAR_REF(key);
CHAR_REF(def); CHAR_REF(def);
char* temp = dc_get_config(get_dc_context(env, cls), keyPtr, defPtr /*is NULL if value is NULL, CHAR_REF() handles this*/); char* temp = dc_get_config(get_dc_context(env, obj), keyPtr, defPtr /*is NULL if value is NULL, CHAR_REF() handles this*/);
jstring ret = NULL; jstring ret = NULL;
if( temp ) { if( temp ) {
ret = JSTRING_NEW(temp); ret = JSTRING_NEW(temp);
@ -588,10 +579,10 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getConfig(JNIEnv *env, jclas
} }
JNIEXPORT jint Java_com_b44t_messenger_DcContext_getConfigInt(JNIEnv *env, jclass cls, jstring key, jint def) JNIEXPORT jint Java_com_b44t_messenger_DcContext_getConfigInt(JNIEnv *env, jobject obj, jstring key, jint def)
{ {
CHAR_REF(key); CHAR_REF(key);
jint ret = dc_get_config_int(get_dc_context(env, cls), keyPtr, def); jint ret = dc_get_config_int(get_dc_context(env, obj), keyPtr, def);
CHAR_UNREF(key); CHAR_UNREF(key);
return ret; return ret;
} }
@ -599,26 +590,26 @@ JNIEXPORT jint Java_com_b44t_messenger_DcContext_getConfigInt(JNIEnv *env, jclas
/* DcContext - out-of-band verification */ /* DcContext - out-of-band verification */
JNIEXPORT jlong Java_com_b44t_messenger_DcContext_checkQrCPtr(JNIEnv *env, jclass cls, jstring qr) JNIEXPORT jlong Java_com_b44t_messenger_DcContext_checkQrCPtr(JNIEnv *env, jobject obj, jstring qr)
{ {
CHAR_REF(qr); CHAR_REF(qr);
jlong ret = (jlong)dc_check_qr(get_dc_context(env, cls), qrPtr); jlong ret = (jlong)dc_check_qr(get_dc_context(env, obj), qrPtr);
CHAR_UNREF(qr); CHAR_UNREF(qr);
return ret; return ret;
} }
JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getSecurejoinQr(JNIEnv *env, jclass cls, jint chat_id) JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getSecurejoinQr(JNIEnv *env, jobject obj, jint chat_id)
{ {
char* temp = dc_get_securejoin_qr(get_dc_context(env, cls), chat_id); char* temp = dc_get_securejoin_qr(get_dc_context(env, obj), chat_id);
jstring ret = JSTRING_NEW(temp); jstring ret = JSTRING_NEW(temp);
free(temp); free(temp);
return ret; return ret;
} }
JNIEXPORT jint Java_com_b44t_messenger_DcContext_joinSecurejoin(JNIEnv *env, jclass cls, jstring qr) JNIEXPORT jint Java_com_b44t_messenger_DcContext_joinSecurejoin(JNIEnv *env, jobject obj, jstring qr)
{ {
CHAR_REF(qr); CHAR_REF(qr);
jint ret = dc_join_securejoin(get_dc_context(env, cls), qrPtr); jint ret = dc_join_securejoin(get_dc_context(env, obj), qrPtr);
CHAR_UNREF(qr); CHAR_UNREF(qr);
return ret; return ret;
} }
@ -626,28 +617,28 @@ JNIEXPORT jint Java_com_b44t_messenger_DcContext_joinSecurejoin(JNIEnv *env, jcl
/* DcContext - misc. */ /* DcContext - misc. */
JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getInfo(JNIEnv *env, jclass cls) JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getInfo(JNIEnv *env, jobject obj)
{ {
char* temp = dc_get_info(get_dc_context(env, cls)); char* temp = dc_get_info(get_dc_context(env, obj));
jstring ret = JSTRING_NEW(temp); jstring ret = JSTRING_NEW(temp);
free(temp); free(temp);
return ret; return ret;
} }
JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getContactEncrInfo(JNIEnv *env, jclass cls, jint contact_id) JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getContactEncrInfo(JNIEnv *env, jobject obj, jint contact_id)
{ {
char* temp = dc_get_contact_encrinfo(get_dc_context(env, cls), contact_id); char* temp = dc_get_contact_encrinfo(get_dc_context(env, obj), contact_id);
jstring ret = JSTRING_NEW(temp); jstring ret = JSTRING_NEW(temp);
free(temp); free(temp);
return ret; return ret;
} }
JNIEXPORT jstring Java_com_b44t_messenger_DcContext_cmdline(JNIEnv *env, jclass cls, jstring cmd) JNIEXPORT jstring Java_com_b44t_messenger_DcContext_cmdline(JNIEnv *env, jobject obj, jstring cmd)
{ {
CHAR_REF(cmd); CHAR_REF(cmd);
char* temp = dc_cmdline(get_dc_context(env, cls), cmdPtr); char* temp = dc_cmdline(get_dc_context(env, obj), cmdPtr);
jstring ret = JSTRING_NEW(temp); jstring ret = JSTRING_NEW(temp);
free(temp); free(temp);
CHAR_UNREF(cmd); CHAR_UNREF(cmd);
@ -655,10 +646,10 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContext_cmdline(JNIEnv *env, jclass
} }
JNIEXPORT jstring Java_com_b44t_messenger_DcContext_initiateKeyTransfer(JNIEnv *env, jclass cls) JNIEXPORT jstring Java_com_b44t_messenger_DcContext_initiateKeyTransfer(JNIEnv *env, jobject obj)
{ {
jstring setup_code = NULL; jstring setup_code = NULL;
char* temp = dc_initiate_key_transfer(get_dc_context(env, cls)); char* temp = dc_initiate_key_transfer(get_dc_context(env, obj));
if( temp ) { if( temp ) {
setup_code = JSTRING_NEW(temp); setup_code = JSTRING_NEW(temp);
free(temp); free(temp);
@ -667,37 +658,37 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContext_initiateKeyTransfer(JNIEnv *
} }
JNIEXPORT jboolean Java_com_b44t_messenger_DcContext_continueKeyTransfer(JNIEnv *env, jclass cls, jint msg_id, jstring setupCode) JNIEXPORT jboolean Java_com_b44t_messenger_DcContext_continueKeyTransfer(JNIEnv *env, jobject obj, jint msg_id, jstring setupCode)
{ {
CHAR_REF(setupCode); CHAR_REF(setupCode);
jboolean ret = dc_continue_key_transfer(get_dc_context(env, cls), msg_id, setupCodePtr); jboolean ret = dc_continue_key_transfer(get_dc_context(env, obj), msg_id, setupCodePtr);
CHAR_UNREF(setupCode); CHAR_UNREF(setupCode);
return ret; return ret;
} }
JNIEXPORT void Java_com_b44t_messenger_DcContext_imex(JNIEnv *env, jclass cls, jint what, jstring dir) JNIEXPORT void Java_com_b44t_messenger_DcContext_imex(JNIEnv *env, jobject obj, jint what, jstring dir)
{ {
CHAR_REF(dir); CHAR_REF(dir);
dc_imex(get_dc_context(env, cls), what, dirPtr, ""); dc_imex(get_dc_context(env, obj), what, dirPtr, "");
CHAR_UNREF(dir); CHAR_UNREF(dir);
} }
JNIEXPORT jint Java_com_b44t_messenger_DcContext_checkPassword(JNIEnv *env, jclass cls, jstring pw) JNIEXPORT jint Java_com_b44t_messenger_DcContext_checkPassword(JNIEnv *env, jobject obj, jstring pw)
{ {
CHAR_REF(pw); CHAR_REF(pw);
jint r = dc_check_password(get_dc_context(env, cls), pwPtr); jint r = dc_check_password(get_dc_context(env, obj), pwPtr);
CHAR_UNREF(pw); CHAR_UNREF(pw);
return r; return r;
} }
JNIEXPORT jstring Java_com_b44t_messenger_DcContext_imexHasBackup(JNIEnv *env, jclass cls, jstring dir) JNIEXPORT jstring Java_com_b44t_messenger_DcContext_imexHasBackup(JNIEnv *env, jobject obj, jstring dir)
{ {
CHAR_REF(dir); CHAR_REF(dir);
jstring ret = NULL; jstring ret = NULL;
char* temp = dc_imex_has_backup(get_dc_context(env, cls), dirPtr); char* temp = dc_imex_has_backup(get_dc_context(env, obj), dirPtr);
if( temp ) { if( temp ) {
ret = JSTRING_NEW(temp); ret = JSTRING_NEW(temp);
free(temp); free(temp);
@ -707,10 +698,10 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContext_imexHasBackup(JNIEnv *env, j
} }
JNIEXPORT jint Java_com_b44t_messenger_DcContext_addAddressBook(JNIEnv *env, jclass cls, jstring adrbook) JNIEXPORT jint Java_com_b44t_messenger_DcContext_addAddressBook(JNIEnv *env, jobject obj, jstring adrbook)
{ {
CHAR_REF(adrbook); CHAR_REF(adrbook);
int modify_count = dc_add_address_book(get_dc_context(env, cls), adrbookPtr); int modify_count = dc_add_address_book(get_dc_context(env, obj), adrbookPtr);
CHAR_UNREF(adrbook); CHAR_UNREF(adrbook);
return modify_count; return modify_count;
} }
@ -787,7 +778,7 @@ static dc_chat_t* get_dc_chat(JNIEnv *env, jobject obj)
} }
JNIEXPORT void Java_com_b44t_messenger_DcChat_DcChatUnref(JNIEnv *env, jclass c, jlong hChat) JNIEXPORT void Java_com_b44t_messenger_DcChat_DcChatUnref(JNIEnv *env, jclass cls, jlong hChat)
{ {
dc_chat_unref((dc_chat_t*)hChat); dc_chat_unref((dc_chat_t*)hChat);
} }
@ -872,45 +863,45 @@ JNIEXPORT jlong Java_com_b44t_messenger_DcChat_getDraftTimestamp(JNIEnv *env, jo
} }
JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatMedia(JNIEnv *env, jclass cls, jint chat_id, jint msg_type, jint or_msg_type) JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatMedia(JNIEnv *env, jobject obj, jint chat_id, jint msg_type, jint or_msg_type)
{ {
dc_array_t* ca = dc_get_chat_media(get_dc_context(env, cls), chat_id, msg_type, or_msg_type); dc_array_t* ca = dc_get_chat_media(get_dc_context(env, obj), chat_id, msg_type, or_msg_type);
return dc_array2jintArray_n_unref(env, ca); return dc_array2jintArray_n_unref(env, ca);
} }
JNIEXPORT jint Java_com_b44t_messenger_DcContext_getNextMedia(JNIEnv *env, jclass cls, jint msg_id, jint dir) JNIEXPORT jint Java_com_b44t_messenger_DcContext_getNextMedia(JNIEnv *env, jobject obj, jint msg_id, jint dir)
{ {
return dc_get_next_media(get_dc_context(env, cls), msg_id, dir); return dc_get_next_media(get_dc_context(env, obj), msg_id, dir);
} }
JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatMsgs(JNIEnv *env, jclass cls, jint chat_id, jint flags, jint marker1before) JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatMsgs(JNIEnv *env, jobject obj, jint chat_id, jint flags, jint marker1before)
{ {
dc_array_t* ca = dc_get_chat_msgs(get_dc_context(env, cls), chat_id, flags, marker1before); dc_array_t* ca = dc_get_chat_msgs(get_dc_context(env, obj), chat_id, flags, marker1before);
return dc_array2jintArray_n_unref(env, ca); return dc_array2jintArray_n_unref(env, ca);
} }
JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_searchMsgs(JNIEnv *env, jclass cls, jint chat_id, jstring query) JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_searchMsgs(JNIEnv *env, jobject obj, jint chat_id, jstring query)
{ {
CHAR_REF(query); CHAR_REF(query);
dc_array_t* ca = dc_search_msgs(get_dc_context(env, cls), chat_id, queryPtr); dc_array_t* ca = dc_search_msgs(get_dc_context(env, obj), chat_id, queryPtr);
CHAR_UNREF(query); CHAR_UNREF(query);
return dc_array2jintArray_n_unref(env, ca); return dc_array2jintArray_n_unref(env, ca);
} }
JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getFreshMsgs(JNIEnv *env, jclass cls) JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getFreshMsgs(JNIEnv *env, jobject obj)
{ {
dc_array_t* ca = dc_get_fresh_msgs(get_dc_context(env, cls)); dc_array_t* ca = dc_get_fresh_msgs(get_dc_context(env, obj));
return dc_array2jintArray_n_unref(env, ca); return dc_array2jintArray_n_unref(env, ca);
} }
JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatContacts(JNIEnv *env, jclass cls, jint chat_id) JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatContacts(JNIEnv *env, jobject obj, jint chat_id)
{ {
dc_array_t* ca = dc_get_chat_contacts(get_dc_context(env, cls), chat_id); dc_array_t* ca = dc_get_chat_contacts(get_dc_context(env, obj), chat_id);
return dc_array2jintArray_n_unref(env, ca); return dc_array2jintArray_n_unref(env, ca);
} }
@ -934,7 +925,7 @@ static dc_msg_t* get_dc_msg(JNIEnv *env, jobject obj)
} }
JNIEXPORT void Java_com_b44t_messenger_DcMsg_DcMsgUnref(JNIEnv *env, jclass c, jlong hMsg) JNIEXPORT void Java_com_b44t_messenger_DcMsg_DcMsgUnref(JNIEnv *env, jclass cls, jlong hMsg)
{ {
dc_msg_unref((dc_msg_t*)hMsg); dc_msg_unref((dc_msg_t*)hMsg);
} }
@ -1124,7 +1115,7 @@ static dc_contact_t* get_dc_contact(JNIEnv *env, jobject obj)
} }
JNIEXPORT void Java_com_b44t_messenger_DcContact_DcContactUnref(JNIEnv *env, jclass c, jlong hContact) JNIEXPORT void Java_com_b44t_messenger_DcContact_DcContactUnref(JNIEnv *env, jclass cls, jlong hContact)
{ {
dc_contact_unref((dc_contact_t*)hContact); dc_contact_unref((dc_contact_t*)hContact);
} }
@ -1206,12 +1197,6 @@ static dc_lot_t* get_dc_lot(JNIEnv *env, jobject obj)
} }
JNIEXPORT void Java_com_b44t_messenger_DcLot_unref(JNIEnv *env, jclass cls, jlong hLot)
{
dc_lot_unref((dc_lot_t*)hLot);
}
JNIEXPORT jstring Java_com_b44t_messenger_DcLot_getText1(JNIEnv *env, jobject obj) JNIEXPORT jstring Java_com_b44t_messenger_DcLot_getText1(JNIEnv *env, jobject obj)
{ {
char* temp = dc_lot_get_text1(get_dc_lot(env, obj)); char* temp = dc_lot_get_text1(get_dc_lot(env, obj));
@ -1254,7 +1239,7 @@ JNIEXPORT jint Java_com_b44t_messenger_DcLot_getId(JNIEnv *env, jobject obj)
} }
JNIEXPORT void Java_com_b44t_messenger_DcLot_DcLotUnref(JNIEnv *env, jclass c, jlong hLot) JNIEXPORT void Java_com_b44t_messenger_DcLot_DcLotUnref(JNIEnv *env, jclass cls, jlong hLot)
{ {
dc_lot_unref((dc_lot_t*)hLot); dc_lot_unref((dc_lot_t*)hLot);
} }
@ -1265,7 +1250,7 @@ JNIEXPORT void Java_com_b44t_messenger_DcLot_DcLotUnref(JNIEnv *env, jclass c, j
******************************************************************************/ ******************************************************************************/
JNIEXPORT jstring Java_com_b44t_messenger_DcContext_CPtr2String(JNIEnv *env, jclass c, jlong hStr) JNIEXPORT jstring Java_com_b44t_messenger_DcContext_CPtr2String(JNIEnv *env, jclass cls, jlong hStr)
{ {
/* the callback may return a long that represents a pointer to a C-String; this function creates a Java-string from such values. */ /* the callback may return a long that represents a pointer to a C-String; this function creates a Java-string from such values. */
if( hStr == 0 ) { if( hStr == 0 ) {
@ -1276,7 +1261,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_DcContext_CPtr2String(JNIEnv *env, jcl
} }
JNIEXPORT jlong Java_com_b44t_messenger_DcContext_String2CPtr(JNIEnv *env, jclass c, jstring str) JNIEXPORT jlong Java_com_b44t_messenger_DcContext_String2CPtr(JNIEnv *env, jclass cls, jstring str)
{ {
char* hStr = NULL; char* hStr = NULL;
if( str ) { if( str ) {

View file

@ -1,6 +1,6 @@
/******************************************************************************* /*******************************************************************************
* *
* Delta Chat Android * Delta Chat Java Adapter
* (C) 2017 Björn Petersen * (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com * Contact: r10s@b44t.com, http://b44t.com
* *

View file

@ -1,6 +1,6 @@
/******************************************************************************* /*******************************************************************************
* *
* Delta Chat Android * Delta Chat Java Adapter
* (C) 2017 Björn Petersen * (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com * Contact: r10s@b44t.com, http://b44t.com
* *

View file

@ -1,6 +1,6 @@
/******************************************************************************* /*******************************************************************************
* *
* Delta Chat Android * Delta Chat Java Adapter
* (C) 2017 Björn Petersen * (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com * Contact: r10s@b44t.com, http://b44t.com
* *

View file

@ -1,6 +1,6 @@
/******************************************************************************* /*******************************************************************************
* *
* Delta Chat Android * Delta Chat Java Adapter
* (C) 2017 Björn Petersen * (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com * Contact: r10s@b44t.com, http://b44t.com
* *
@ -23,16 +23,8 @@
package com.b44t.messenger; package com.b44t.messenger;
import android.util.Log;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class DcContext { public class DcContext {
public final static int DC_EVENT_INFO = 100; public final static int DC_EVENT_INFO = 100;
public final static int DC_EVENT_WARNING = 300; public final static int DC_EVENT_WARNING = 300;
public final static int DC_EVENT_ERROR = 400; public final static int DC_EVENT_ERROR = 400;
@ -75,153 +67,93 @@ public class DcContext {
public final static int DC_QR_URL = 332; public final static int DC_QR_URL = 332;
public final static int DC_QR_ERROR = 400; public final static int DC_QR_ERROR = 400;
public static void init () { public DcContext(String osName) {
m_hContext = DcContextNew(); handleEvent(0,0,0);
m_hContext = DcContextNew(osName);
} }
public native static int open(String dbfile); public native int open(String dbfile);
public native static void close(); public native void close();
public native static String getBlobdir(); public native String getBlobdir();
public native static void configure(); public native void configure();
public native static void stopOngoingProcess(); public native void stopOngoingProcess();
public native static int isConfigured(); public native int isConfigured();
public native static void performJobs(); public native void performJobs();
public native static void fetch(); public native void fetch();
public native static void idle(); public native void idle();
public native static void interruptIdle(); public native void interruptIdle();
public native static void performSmtpJobs(); public native void performSmtpJobs();
public native static void performSmtpIdle(); public native void performSmtpIdle();
public native static void interruptSmtpIdle(); public native void interruptSmtpIdle();
public native static void setConfig(String key, String value); public native void setConfig(String key, String value);
public native static void setConfigInt(String key, int value); public native void setConfigInt(String key, int value);
public native static String getConfig(String key, String def); public native String getConfig(String key, String def);
public native static int getConfigInt(String key, int def); public native int getConfigInt(String key, int def);
public native static String getInfo(); public native String getInfo();
public native static String cmdline(String cmd); public native String cmdline(String cmd);
public native static String initiateKeyTransfer(); public native String initiateKeyTransfer();
public native static boolean continueKeyTransfer(int msg_id, String setup_code); public native boolean continueKeyTransfer(int msg_id, String setup_code);
public native static void imex(int what, String dir); public native void imex(int what, String dir);
public native static String imexHasBackup(String dir); public native String imexHasBackup(String dir);
public native static int checkPassword(String pw); public native int checkPassword(String pw);
public native static int[] getContacts(int flags, String query); public native int[] getContacts(int flags, String query);
public native static int getBlockedCount(); public native int getBlockedCount();
public native static int[] getBlockedContacts(); public native int[] getBlockedContacts();
public static DcContact getContact(int contact_id) { return new DcContact(DcContextGetContact(m_hContext, contact_id)); } public DcContact getContact(int contact_id) { return new DcContact(DcContextGetContact(m_hContext, contact_id)); }
public native static int createContact(String name, String addr); public native int createContact(String name, String addr);
public native static void blockContact(int id, int block); public native void blockContact(int id, int block);
public native static String getContactEncrInfo(int contact_id); public native String getContactEncrInfo(int contact_id);
public native static int deleteContact(int id); public native int deleteContact(int id);
public native static int addAddressBook(String adrbook); public native int addAddressBook(String adrbook);
public static DcChatlist getChatlist(int listflags, String query, int queryId) { return new DcChatlist(DcContextGetChatlist(m_hContext, listflags, query, queryId)); } public DcChatlist getChatlist(int listflags, String query, int queryId) { return new DcChatlist(DcContextGetChatlist(m_hContext, listflags, query, queryId)); }
public static DcChat getChat(int chat_id) { return new DcChat(DcContextGetChat(m_hContext, chat_id)); } public DcChat getChat(int chat_id) { return new DcChat(DcContextGetChat(m_hContext, chat_id)); }
public native static void markseenMsgs(int msg_ids[]); public native void markseenMsgs(int msg_ids[]);
public native static void marknoticedChat(int chat_id); public native void marknoticedChat(int chat_id);
public native static void marknoticedContact(int contact_id); public native void marknoticedContact(int contact_id);
public native static void archiveChat(int chat_id, int archive); public native void archiveChat(int chat_id, int archive);
public native static int getChatIdByContactId(int contact_id); public native int getChatIdByContactId(int contact_id);
public native static int createChatByContactId(int contact_id); public native int createChatByContactId(int contact_id);
public native static int createChatByMsgId(int msg_id); public native int createChatByMsgId(int msg_id);
public native static int createGroupChat(boolean verified, String name); public native int createGroupChat(boolean verified, String name);
public native static int isContactInChat(int chat_id, int contact_id); public native int isContactInChat(int chat_id, int contact_id);
public native static int addContactToChat(int chat_id, int contact_id); public native int addContactToChat(int chat_id, int contact_id);
public native static int removeContactFromChat(int chat_id, int contact_id); public native int removeContactFromChat(int chat_id, int contact_id);
public native static void setDraft(int chat_id, String draft/*NULL=delete*/); public native void setDraft(int chat_id, String draft/*NULL=delete*/);
public native static int setChatName(int chat_id, String name); public native int setChatName(int chat_id, String name);
public native static int setChatProfileImage(int chat_id, String name); public native int setChatProfileImage(int chat_id, String name);
public native static int[] getChatMsgs(int chat_id, int flags, int marker1before); public native int[] getChatMsgs(int chat_id, int flags, int marker1before);
public native static int[] searchMsgs(int chat_id, String query); public native int[] searchMsgs(int chat_id, String query);
public native static int[] getFreshMsgs(); public native int[] getFreshMsgs();
public native static int[] getChatMedia(int chat_id, int msg_type, int or_msg_type); public native int[] getChatMedia(int chat_id, int msg_type, int or_msg_type);
public native static int getNextMedia(int msg_id, int dir); public native int getNextMedia(int msg_id, int dir);
public native static int[] getChatContacts(int chat_id); public native int[] getChatContacts(int chat_id);
public native static void deleteChat(int chat_id); public native void deleteChat(int chat_id);
public static DcMsg getMsg(int msg_id) { return new DcMsg(DcContextGetMsg(m_hContext, msg_id)); } public DcMsg getMsg(int msg_id) { return new DcMsg(DcContextGetMsg(m_hContext, msg_id)); }
public native static String getMsgInfo(int id); public native String getMsgInfo(int id);
public native static int getFreshMsgCount(int chat_id); public native int getFreshMsgCount(int chat_id);
public native static void deleteMsgs(int msg_ids[]); public native void deleteMsgs(int msg_ids[]);
public native static void forwardMsgs(int msg_ids[], int chat_ids); public native void forwardMsgs(int msg_ids[], int chat_ids);
public native static int sendTextMsg(int chat_id, String text); public native int sendTextMsg(int chat_id, String text);
public native static int sendVcardMsg(int chat_id, int contact_id); public native int sendVcardMsg(int chat_id, int contact_id);
public native static int sendMediaMsg(int chat_id, int type, String file, String mime, int w, int h, int time_ms, String author, String trackname); public native int sendMediaMsg(int chat_id, int type, String file, String mime, int w, int h, int time_ms, String author, String trackname);
public native static int checkQrCPtr(String qr); public native int checkQrCPtr(String qr);
public static DcLot checkQr(String qr) { return new DcLot(checkQrCPtr(qr)); } public DcLot checkQr(String qr) { return new DcLot(checkQrCPtr(qr)); }
public native static String getSecurejoinQr(int chat_id); public native String getSecurejoinQr(int chat_id);
public native static int joinSecurejoin(String qr); public native int joinSecurejoin(String qr);
// event handling
public static long handleEvent(final int event, final long data1, final long data2) // this function is called from within the C-wrapper
{
return 0;
}
// working with raw c-data // working with raw c-data
private static long m_hContext = 0; // must not be renamed as referenced by JNI private long m_hContext = 0; // must not be renamed as referenced by JNI
private native static long DcContextNew(); private native long DcContextNew(String osName);
private native static long DcContextGetChatlist(long hContext, int listflags, String query, int queryId); private native static long DcContextGetChatlist(long hContext, int listflags, String query, int queryId);
private native static long DcContextGetChat(long hContext, int chat_id); private native static long DcContextGetChat(long hContext, int chat_id);
private native static long DcContextGetMsg(long hMailbox, int id); private native static long DcContextGetMsg(long hMailbox, int id);
private native static long DcContextGetContact(long hContext, int id); private native static long DcContextGetContact(long hContext, int id);
public native static String CPtr2String(long hString); // get strings eg. from data1 from the callback public native static String CPtr2String(long hString);
public native static long String2CPtr(String str); public native static long String2CPtr(String str);
// event handling
public static final Object m_lastErrorLock = new Object();
public static int m_lastErrorCode = 0;
public static String m_lastErrorString = "";
public static boolean m_showNextErrorAsToast = true;
public static long DcCallback(final int event, final long data1, final long data2) // this function is called from within the C-wrapper
{
switch(event) {
case DC_EVENT_INFO:
Log.i("DeltaChat", CPtr2String(data2));
break;
case DC_EVENT_WARNING:
Log.w("DeltaChat", CPtr2String(data2));
break;
case DC_EVENT_ERROR:
Log.e("DeltaChat", CPtr2String(data2));
synchronized (m_lastErrorLock) {
m_lastErrorCode = (int)data1;
m_lastErrorString = CPtr2String(data2);
}
/*AndroidUtilities.runOnUIThread(new Runnable() {
@Override
public void run() {
synchronized (m_lastErrorLock) {
if( m_showNextErrorAsToast ) {
if(ForegroundDetector.getInstance().isForeground()) {
AndroidUtilities.showHint(ApplicationLoader.applicationContext, m_lastErrorString);
}
}
m_showNextErrorAsToast = true;
}
}
});*/
return 0;
case DC_EVENT_HTTP_GET:
String httpContent = null;
try {
URL url = new URL(CPtr2String(data1));
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
try {
urlConnection.setConnectTimeout(10*1000);
InputStream inputStream = new BufferedInputStream(urlConnection.getInputStream());
BufferedReader r = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line).append('\n');
}
httpContent = total.toString();
} finally {
urlConnection.disconnect();
}
}
catch(Exception e) {
e.printStackTrace();
}
return String2CPtr(httpContent);
}
return 0;
}
} }

View file

@ -1,6 +1,6 @@
/******************************************************************************* /*******************************************************************************
* *
* Delta Chat Android * Delta Chat Java Adapter
* (C) 2017 Björn Petersen * (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com * Contact: r10s@b44t.com, http://b44t.com
* *

View file

@ -1,6 +1,6 @@
/******************************************************************************* /*******************************************************************************
* *
* Delta Chat Android * Delta Chat Java Adapter
* (C) 2017 Björn Petersen * (C) 2017 Björn Petersen
* Contact: r10s@b44t.com, http://b44t.com * Contact: r10s@b44t.com, http://b44t.com
* *
@ -71,11 +71,9 @@ public class DcMsg {
public native int getBytes(); public native int getBytes();
public DcLot getSummary(DcChat chat) { return new DcLot(getSummaryCPtr(chat.getCPtr())); } public DcLot getSummary(DcChat chat) { return new DcLot(getSummaryCPtr(chat.getCPtr())); }
private native long getSummaryCPtr(long hChat);
public native String getSummarytext(int approx_characters); public native String getSummarytext(int approx_characters);
public native int showPadlock(); public native int showPadlock();
public DcLot getMediainfo() { return new DcLot(getMediainfoCPtr()); } public DcLot getMediainfo() { return new DcLot(getMediainfoCPtr()); }
private native long getMediainfoCPtr();
public native String getFile(); public native String getFile();
public native String getFilemime(); public native String getFilemime();
public native String getFilename(); public native String getFilename();
@ -88,5 +86,6 @@ public class DcMsg {
// working with raw c-data // working with raw c-data
private long m_hMsg; // must not be renamed as referenced by JNI private long m_hMsg; // must not be renamed as referenced by JNI
private native static void DcMsgUnref(long hMsg); private native static void DcMsgUnref(long hMsg);
private native long getSummaryCPtr(long hChat);
private native long getMediainfoCPtr();
}; };

View file

@ -82,6 +82,8 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc
private volatile boolean isAppVisible; private volatile boolean isAppVisible;
public DcContext dcContext;
public static ApplicationContext getInstance(Context context) { public static ApplicationContext getInstance(Context context) {
return (ApplicationContext)context.getApplicationContext(); return (ApplicationContext)context.getApplicationContext();
} }
@ -91,8 +93,7 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc
super.onCreate(); super.onCreate();
System.loadLibrary("native-utils"); System.loadLibrary("native-utils");
DcContext.DcCallback(0, 0, 0); // do not remove this call; this makes sure, the function is not removed from build or warnings are printed! dcContext = new DcContext("Android");
DcContext.init();
initializeRandomNumberFix(); initializeRandomNumberFix();
initializeLogging(); initializeLogging();