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
* Contact: r10s@b44t.com, http://b44t.com
*
@ -24,7 +24,6 @@
#include <jni.h>
#include <android/log.h>
#include "messenger-backend/src/deltachat.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;
/* 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 */
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;
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 ) {
return (dc_context_t*)(*env)->GetStaticLongField(env, cls, fid);
return (dc_chat_t*)(*env)->GetLongField(env, obj, fid);
}
return NULL;
}
@ -175,17 +173,6 @@ static uintptr_t s_context_callback_(dc_context_t* context, int event, uintptr_t
jlong l;
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 ) {
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);
return (jlong)dc_context_new(s_context_callback_, NULL, "Android");
jclass cls = (*env)->GetObjectClass(env, obj);
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 */
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);
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)
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);
free(temp);
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 */
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);
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);
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);
}
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);
}
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(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(name);
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 */
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;
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);
}
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;
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);
}
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);
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);
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);
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);
}
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);
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);
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);
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);
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 */
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);
}
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);
free(temp);
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;
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);
}
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;
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);
}
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);
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);
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;
CHAR_REF(file);
@ -538,11 +529,11 @@ JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendMediaMsg(JNIEnv *env, jclas
CHAR_REF(author);
CHAR_REF(trackname);
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_VIDEO: msg_id = (jint)dc_send_video_msg(get_dc_context(env, cls), 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_AUDIO: msg_id = (jint)dc_send_audio_msg(get_dc_context(env, cls), 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;
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, obj), chat_id, filePtr, mimePtr, w, h, 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, obj), chat_id, filePtr, mimePtr, ms, authorPtr, tracknamePtr); break;
default: msg_id = (jint)dc_send_file_msg (get_dc_context(env, obj), chat_id, filePtr, mimePtr); break;
}
CHAR_UNREF(trackname);
CHAR_UNREF(author);
@ -554,29 +545,29 @@ JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendMediaMsg(JNIEnv *env, jclas
/* 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(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(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);
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);
}
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(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;
if( 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);
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);
return ret;
}
@ -599,26 +590,26 @@ JNIEXPORT jint Java_com_b44t_messenger_DcContext_getConfigInt(JNIEnv *env, jclas
/* 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);
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);
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);
free(temp);
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);
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);
return ret;
}
@ -626,28 +617,28 @@ JNIEXPORT jint Java_com_b44t_messenger_DcContext_joinSecurejoin(JNIEnv *env, jcl
/* 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);
free(temp);
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);
free(temp);
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* temp = dc_cmdline(get_dc_context(env, cls), cmdPtr);
char* temp = dc_cmdline(get_dc_context(env, obj), cmdPtr);
jstring ret = JSTRING_NEW(temp);
free(temp);
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;
char* temp = dc_initiate_key_transfer(get_dc_context(env, cls));
char* temp = dc_initiate_key_transfer(get_dc_context(env, obj));
if( temp ) {
setup_code = JSTRING_NEW(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);
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);
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);
dc_imex(get_dc_context(env, cls), what, dirPtr, "");
dc_imex(get_dc_context(env, obj), what, dirPtr, "");
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);
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);
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);
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 ) {
ret = JSTRING_NEW(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);
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);
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);
}
@ -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);
}
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);
}
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);
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);
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);
}
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);
}
@ -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);
}
@ -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);
}
@ -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)
{
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);
}
@ -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. */
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;
if( str ) {

View file

@ -1,6 +1,6 @@
/*******************************************************************************
*
* Delta Chat Android
* Delta Chat Java Adapter
* (C) 2017 Björn Petersen
* 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
* 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
* 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
* Contact: r10s@b44t.com, http://b44t.com
*
@ -23,16 +23,8 @@
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 final static int DC_EVENT_INFO = 100;
public final static int DC_EVENT_WARNING = 300;
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_ERROR = 400;
public static void init () {
m_hContext = DcContextNew();
public DcContext(String osName) {
handleEvent(0,0,0);
m_hContext = DcContextNew(osName);
}
public native static int open(String dbfile);
public native static void close();
public native static String getBlobdir();
public native static void configure();
public native static void stopOngoingProcess();
public native static int isConfigured();
public native static void performJobs();
public native static void fetch();
public native static void idle();
public native static void interruptIdle();
public native static void performSmtpJobs();
public native static void performSmtpIdle();
public native static void interruptSmtpIdle();
public native static void setConfig(String key, String value);
public native static void setConfigInt(String key, int value);
public native static String getConfig(String key, String def);
public native static int getConfigInt(String key, int def);
public native static String getInfo();
public native static String cmdline(String cmd);
public native static String initiateKeyTransfer();
public native static boolean continueKeyTransfer(int msg_id, String setup_code);
public native static void imex(int what, String dir);
public native static String imexHasBackup(String dir);
public native static int checkPassword(String pw);
public native static int[] getContacts(int flags, String query);
public native static int getBlockedCount();
public native static int[] getBlockedContacts();
public static DcContact getContact(int contact_id) { return new DcContact(DcContextGetContact(m_hContext, contact_id)); }
public native static int createContact(String name, String addr);
public native static void blockContact(int id, int block);
public native static String getContactEncrInfo(int contact_id);
public native static int deleteContact(int id);
public native static int addAddressBook(String adrbook);
public static 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 native static void markseenMsgs(int msg_ids[]);
public native static void marknoticedChat(int chat_id);
public native static void marknoticedContact(int contact_id);
public native static void archiveChat(int chat_id, int archive);
public native static int getChatIdByContactId(int contact_id);
public native static int createChatByContactId(int contact_id);
public native static int createChatByMsgId(int msg_id);
public native static int createGroupChat(boolean verified, String name);
public native static int isContactInChat(int chat_id, int contact_id);
public native static int addContactToChat(int chat_id, int contact_id);
public native static int removeContactFromChat(int chat_id, int contact_id);
public native static void setDraft(int chat_id, String draft/*NULL=delete*/);
public native static int setChatName(int chat_id, String name);
public native static int setChatProfileImage(int chat_id, String name);
public native static int[] getChatMsgs(int chat_id, int flags, int marker1before);
public native static int[] searchMsgs(int chat_id, String query);
public native static int[] getFreshMsgs();
public native static int[] getChatMedia(int chat_id, int msg_type, int or_msg_type);
public native static int getNextMedia(int msg_id, int dir);
public native static int[] getChatContacts(int chat_id);
public native static void deleteChat(int chat_id);
public static DcMsg getMsg(int msg_id) { return new DcMsg(DcContextGetMsg(m_hContext, msg_id)); }
public native static String getMsgInfo(int id);
public native static int getFreshMsgCount(int chat_id);
public native static void deleteMsgs(int msg_ids[]);
public native static void forwardMsgs(int msg_ids[], int chat_ids);
public native static int sendTextMsg(int chat_id, String text);
public native static 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 static int checkQrCPtr(String qr);
public static DcLot checkQr(String qr) { return new DcLot(checkQrCPtr(qr)); }
public native static String getSecurejoinQr(int chat_id);
public native static int joinSecurejoin(String qr);
public native int open(String dbfile);
public native void close();
public native String getBlobdir();
public native void configure();
public native void stopOngoingProcess();
public native int isConfigured();
public native void performJobs();
public native void fetch();
public native void idle();
public native void interruptIdle();
public native void performSmtpJobs();
public native void performSmtpIdle();
public native void interruptSmtpIdle();
public native void setConfig(String key, String value);
public native void setConfigInt(String key, int value);
public native String getConfig(String key, String def);
public native int getConfigInt(String key, int def);
public native String getInfo();
public native String cmdline(String cmd);
public native String initiateKeyTransfer();
public native boolean continueKeyTransfer(int msg_id, String setup_code);
public native void imex(int what, String dir);
public native String imexHasBackup(String dir);
public native int checkPassword(String pw);
public native int[] getContacts(int flags, String query);
public native int getBlockedCount();
public native int[] getBlockedContacts();
public DcContact getContact(int contact_id) { return new DcContact(DcContextGetContact(m_hContext, contact_id)); }
public native int createContact(String name, String addr);
public native void blockContact(int id, int block);
public native String getContactEncrInfo(int contact_id);
public native int deleteContact(int id);
public native int addAddressBook(String adrbook);
public DcChatlist getChatlist(int listflags, String query, int queryId) { return new DcChatlist(DcContextGetChatlist(m_hContext, listflags, query, queryId)); }
public DcChat getChat(int chat_id) { return new DcChat(DcContextGetChat(m_hContext, chat_id)); }
public native void markseenMsgs(int msg_ids[]);
public native void marknoticedChat(int chat_id);
public native void marknoticedContact(int contact_id);
public native void archiveChat(int chat_id, int archive);
public native int getChatIdByContactId(int contact_id);
public native int createChatByContactId(int contact_id);
public native int createChatByMsgId(int msg_id);
public native int createGroupChat(boolean verified, String name);
public native int isContactInChat(int chat_id, int contact_id);
public native int addContactToChat(int chat_id, int contact_id);
public native int removeContactFromChat(int chat_id, int contact_id);
public native void setDraft(int chat_id, String draft/*NULL=delete*/);
public native int setChatName(int chat_id, String name);
public native int setChatProfileImage(int chat_id, String name);
public native int[] getChatMsgs(int chat_id, int flags, int marker1before);
public native int[] searchMsgs(int chat_id, String query);
public native int[] getFreshMsgs();
public native int[] getChatMedia(int chat_id, int msg_type, int or_msg_type);
public native int getNextMedia(int msg_id, int dir);
public native int[] getChatContacts(int chat_id);
public native void deleteChat(int chat_id);
public DcMsg getMsg(int msg_id) { return new DcMsg(DcContextGetMsg(m_hContext, msg_id)); }
public native String getMsgInfo(int id);
public native int getFreshMsgCount(int chat_id);
public native void deleteMsgs(int msg_ids[]);
public native void forwardMsgs(int msg_ids[], int chat_ids);
public native int sendTextMsg(int chat_id, String text);
public native int sendVcardMsg(int chat_id, int contact_id);
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 int checkQrCPtr(String qr);
public DcLot checkQr(String qr) { return new DcLot(checkQrCPtr(qr)); }
public native String getSecurejoinQr(int chat_id);
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
private static long m_hContext = 0; // must not be renamed as referenced by JNI
private native static long DcContextNew();
private long m_hContext = 0; // must not be renamed as referenced by JNI
private native long DcContextNew(String osName);
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 DcContextGetMsg(long hMailbox, 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);
// 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
* 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
* Contact: r10s@b44t.com, http://b44t.com
*
@ -71,11 +71,9 @@ public class DcMsg {
public native int getBytes();
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 int showPadlock();
public DcLot getMediainfo() { return new DcLot(getMediainfoCPtr()); }
private native long getMediainfoCPtr();
public native String getFile();
public native String getFilemime();
public native String getFilename();
@ -88,5 +86,6 @@ public class DcMsg {
// working with raw c-data
private long m_hMsg; // must not be renamed as referenced by JNI
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;
public DcContext dcContext;
public static ApplicationContext getInstance(Context context) {
return (ApplicationContext)context.getApplicationContext();
}
@ -91,8 +93,7 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc
super.onCreate();
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.init();
dcContext = new DcContext("Android");
initializeRandomNumberFix();
initializeLogging();