From 54aa11b964f339a1de53af00c23853a8b3c827b2 Mon Sep 17 00:00:00 2001 From: "B. Petersen" Date: Sat, 18 Aug 2018 14:43:22 +0200 Subject: [PATCH] refactor MrMailbox to DcContext etc. --- jni/Android.mk | 4 +- jni/{mrwrapper.c => dc_wrapper.c} | 364 +++++++------ jni/mrjnimain.c | 77 --- jni/mrjnimain.h | 54 -- .../messenger/{MrChat.java => DcChat.java} | 51 +- src/com/b44t/messenger/DcChatlist.java | 57 ++ .../{MrContact.java => DcContact.java} | 22 +- src/com/b44t/messenger/DcContext.java | 227 ++++++++ .../b44t/messenger/{MrLot.java => DcLot.java} | 30 +- src/com/b44t/messenger/DcMsg.java | 92 ++++ src/com/b44t/messenger/MrChatlist.java | 64 --- src/com/b44t/messenger/MrMailbox.java | 485 ------------------ src/com/b44t/messenger/MrMsg.java | 102 ---- .../securesms/ApplicationContext.java | 6 +- 14 files changed, 593 insertions(+), 1042 deletions(-) rename jni/{mrwrapper.c => dc_wrapper.c} (70%) delete mode 100644 jni/mrjnimain.c delete mode 100644 jni/mrjnimain.h rename src/com/b44t/messenger/{MrChat.java => DcChat.java} (52%) create mode 100644 src/com/b44t/messenger/DcChatlist.java rename src/com/b44t/messenger/{MrContact.java => DcContact.java} (72%) create mode 100644 src/com/b44t/messenger/DcContext.java rename src/com/b44t/messenger/{MrLot.java => DcLot.java} (64%) create mode 100644 src/com/b44t/messenger/DcMsg.java delete mode 100644 src/com/b44t/messenger/MrChatlist.java delete mode 100644 src/com/b44t/messenger/MrMailbox.java delete mode 100644 src/com/b44t/messenger/MrMsg.java diff --git a/jni/Android.mk b/jni/Android.mk index c1a54d0a6..d98c79939 100644 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -867,7 +867,7 @@ $(JNI_DIR)/messenger-backend/libs/sqlite LOCAL_LDLIBS := -ljnigraphics -llog -lz -latomic LOCAL_STATIC_LIBRARIES := etpan sasl2 sqlite crypto libiconv # if you get "undefined reference" errors, the reason for this may be the _order_! Eg. libiconv as the first library does not work! -# "breakpad" was placed after "crypto", NativeLoader.cpp after mrwrapper.c +# "breakpad" was placed after "crypto", NativeLoader.cpp after dc_wrapper.c LOCAL_CFLAGS := -w -Os -DNULL=0 -DSOCKLEN_T=socklen_t -DLOCALE_NOT_USED -D_LARGEFILE_SOURCE=1 -D_FILE_OFFSET_BITS=64 LOCAL_CFLAGS += -Drestrict='' -D__EMX__ -DOPUS_BUILD -DFIXED_POINT -DUSE_ALLOCA -DHAVE_LRINT -DHAVE_LRINTF -fno-math-errno @@ -928,6 +928,6 @@ messenger-backend/src/dc_token.c \ messenger-backend/src/dc_tools.c \ messenger-backend/src/dc_uudecode.c \ messenger-backend/cmdline/cmdline.c \ -mrwrapper.c +dc_wrapper.c include $(BUILD_SHARED_LIBRARY) diff --git a/jni/mrwrapper.c b/jni/dc_wrapper.c similarity index 70% rename from jni/mrwrapper.c rename to jni/dc_wrapper.c index cfa2ac9cd..587c8188a 100644 --- a/jni/mrwrapper.c +++ b/jni/dc_wrapper.c @@ -17,12 +17,10 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see http://www.gnu.org/licenses/ . * - ******************************************************************************* - * - * File: mrwrapper.c - * Purpose: The C part of the Java<->C Wrapper, see also MrMailbox.java - * ******************************************************************************/ + + +// Purpose: The C part of the Java<->C Wrapper, see also DcContext.java #include @@ -70,12 +68,12 @@ static jstring jstring_new__(JNIEnv* env, const char* a) /* global stuff */ static JavaVM* s_jvm = NULL; -static jclass s_MrMailbox_class = NULL; -static jmethodID s_MrCallback_methodID = NULL; +static jclass s_DcContext_class = NULL; +static jmethodID s_DcCallback_methodID = NULL; static int s_global_init_done = 0; -static void s_init_globals(JNIEnv *env, jclass MrMailbox_class) +static void s_init_globals(JNIEnv *env, jclass DcContext_class) { /* make sure, the intialisation is done only once */ if( s_global_init_done ) { return; } @@ -85,8 +83,8 @@ static void s_init_globals(JNIEnv *env, jclass MrMailbox_class) __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_MrMailbox_class = (*env)->NewGlobalRef(env, MrMailbox_class); - s_MrCallback_methodID = (*env)->GetStaticMethodID(env, MrMailbox_class, "MrCallback","(IJJ)J" /*signature as "(param)ret" with I=int, J=long*/ ); + 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*/ ); } @@ -153,7 +151,7 @@ static uint32_t* jintArray2uint32Pointer(JNIEnv* env, jintArray ja, int* ret_icn /******************************************************************************* - * MrMailbox + * DcContext ******************************************************************************/ @@ -161,7 +159,7 @@ static dc_context_t* get_dc_context(JNIEnv *env, jclass cls) { static jfieldID fid = 0; if( fid == 0 ) { - fid = (*env)->GetStaticFieldID(env, cls, "m_hMailbox", "J" /*Signature, J=long*/); + fid = (*env)->GetStaticFieldID(env, cls, "m_hContext", "J" /*Signature, J=long*/); } if( fid ) { return (dc_context_t*)(*env)->GetStaticLongField(env, cls, fid); @@ -170,7 +168,7 @@ static dc_context_t* get_dc_context(JNIEnv *env, jclass cls) } -/* MrMailbox - new/delete */ +/* DcContext - new/delete */ static uintptr_t s_context_callback_(dc_context_t* context, int event, uintptr_t data1, uintptr_t data2) { @@ -188,7 +186,7 @@ static uintptr_t s_context_callback_(dc_context_t* context, int event, uintptr_t } #endif - if( s_jvm==NULL || s_MrMailbox_class==NULL || s_MrCallback_methodID==NULL ) { + if( s_jvm==NULL || s_DcContext_class==NULL || s_DcCallback_methodID==NULL ) { return 0; /* may happen on startup */ } @@ -197,21 +195,21 @@ static uintptr_t s_context_callback_(dc_context_t* context, int event, uintptr_t return 0; /* may happen on startup */ } - l = (*env)->CallStaticLongMethod(env, s_MrMailbox_class, s_MrCallback_methodID, (jint)event, (jlong)data1, (jlong)data2); + l = (*env)->CallStaticLongMethod(env, s_DcContext_class, s_DcCallback_methodID, (jint)event, (jlong)data1, (jlong)data2); return (uintptr_t)l; } -JNIEXPORT jlong Java_com_b44t_messenger_MrMailbox_MrMailboxNew(JNIEnv *env, jclass c) +JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextNew(JNIEnv *env, jclass c) { s_init_globals(env, c); return (jlong)dc_context_new(s_context_callback_, NULL, "Android"); } -/* MrMailbox - open/configure/connect/fetch */ +/* DcContext - open/configure/connect/fetch */ -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_open(JNIEnv *env, jclass cls, jstring dbfile) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_open(JNIEnv *env, jclass cls, jstring dbfile) { CHAR_REF(dbfile); jint ret = dc_open(get_dc_context(env, cls), dbfilePtr, NULL); @@ -220,13 +218,13 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_open(JNIEnv *env, jclass cls, j } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_close(JNIEnv *env, jclass cls) +JNIEXPORT void Java_com_b44t_messenger_DcContext_close(JNIEnv *env, jclass cls) { dc_close(get_dc_context(env, cls)); } -JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_getBlobdir(JNIEnv *env, jclass cls) +JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getBlobdir(JNIEnv *env, jclass cls) { char* temp = dc_get_blobdir(get_dc_context(env, cls)); jstring ret = JSTRING_NEW(temp); @@ -235,69 +233,69 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_getBlobdir(JNIEnv *env, jcla } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_configure(JNIEnv *env, jclass cls) +JNIEXPORT void Java_com_b44t_messenger_DcContext_configure(JNIEnv *env, jclass cls) { dc_configure(get_dc_context(env, cls)); } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_stopOngoingProcess(JNIEnv *env, jclass cls) +JNIEXPORT void Java_com_b44t_messenger_DcContext_stopOngoingProcess(JNIEnv *env, jclass cls) { dc_stop_ongoing_process(get_dc_context(env, cls)); } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_isConfigured(JNIEnv *env, jclass cls) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_isConfigured(JNIEnv *env, jclass cls) { return (jint)dc_is_configured(get_dc_context(env, cls)); } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_performJobs(JNIEnv *env, jclass cls) +JNIEXPORT void Java_com_b44t_messenger_DcContext_performJobs(JNIEnv *env, jclass cls) { dc_perform_imap_jobs(get_dc_context(env, cls)); } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_idle(JNIEnv *env, jclass cls) +JNIEXPORT void Java_com_b44t_messenger_DcContext_idle(JNIEnv *env, jclass cls) { dc_perform_imap_idle(get_dc_context(env, cls)); } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_interruptIdle(JNIEnv *env, jclass cls) +JNIEXPORT void Java_com_b44t_messenger_DcContext_interruptIdle(JNIEnv *env, jclass cls) { dc_interrupt_imap_idle(get_dc_context(env, cls)); } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_fetch(JNIEnv *env, jclass cls) +JNIEXPORT void Java_com_b44t_messenger_DcContext_fetch(JNIEnv *env, jclass cls) { dc_perform_imap_fetch(get_dc_context(env, cls)); } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_performSmtpJobs(JNIEnv *env, jclass cls) +JNIEXPORT void Java_com_b44t_messenger_DcContext_performSmtpJobs(JNIEnv *env, jclass cls) { dc_perform_smtp_jobs(get_dc_context(env, cls)); } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_performSmtpIdle(JNIEnv *env, jclass cls) +JNIEXPORT void Java_com_b44t_messenger_DcContext_performSmtpIdle(JNIEnv *env, jclass cls) { dc_perform_smtp_idle(get_dc_context(env, cls)); } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_interruptSmtpIdle(JNIEnv *env, jclass cls) +JNIEXPORT void Java_com_b44t_messenger_DcContext_interruptSmtpIdle(JNIEnv *env, jclass cls) { dc_interrupt_smtp_idle(get_dc_context(env, cls)); } -/* MrMailbox - handle contacts */ +/* DcContext - handle contacts */ -JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getContacts(JNIEnv *env, jclass cls, jint flags, jstring query) +JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getContacts(JNIEnv *env, jclass cls, jint flags, jstring query) { CHAR_REF(query); dc_array_t* ca = dc_get_contacts(get_dc_context(env, cls), flags, queryPtr); @@ -306,78 +304,78 @@ JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getContacts(JNIEnv *env, j } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_getBlockedCount(JNIEnv *env, jclass cls) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_getBlockedCount(JNIEnv *env, jclass cls) { return dc_get_blocked_cnt(get_dc_context(env, cls)); } -JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getBlockedContacts(JNIEnv *env, jclass cls) +JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getBlockedContacts(JNIEnv *env, jclass cls) { dc_array_t* ca = dc_get_blocked_contacts(get_dc_context(env, cls)); return dc_array2jintArray_n_unref(env, ca); } -JNIEXPORT jlong Java_com_b44t_messenger_MrMailbox_MrMailboxGetContact(JNIEnv *env, jclass c, jlong hMailbox, jint contact_id) +JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetContact(JNIEnv *env, jclass c, jlong hContext, jint contact_id) { - return (jlong)dc_get_contact((dc_context_t*)hMailbox, contact_id); + return (jlong)dc_get_contact((dc_context_t*)hContext, contact_id); } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_MrMailboxCreateContact(JNIEnv *env, jclass c, jlong hMailbox, jstring name, jstring addr) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_createContact(JNIEnv *env, jclass cls, jstring name, jstring addr) { CHAR_REF(name); CHAR_REF(addr); - jint ret = (jint)dc_create_contact((dc_context_t*)hMailbox, namePtr, addrPtr); + jint ret = (jint)dc_create_contact(get_dc_context(env, cls), namePtr, addrPtr); CHAR_UNREF(addr); CHAR_UNREF(name); return ret; } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_MrMailboxBlockContact(JNIEnv *env, jclass c, jlong hMailbox, jint contact_id, jint block) +JNIEXPORT void Java_com_b44t_messenger_DcContext_blockContact(JNIEnv *env, jclass cls, jint contact_id, jint block) { - dc_block_contact((dc_context_t*)hMailbox, contact_id, block); + dc_block_contact(get_dc_context(env, cls), contact_id, block); } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_MrMailboxDeleteContact(JNIEnv *env, jclass c, jlong hMailbox, jint contact_id) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_deleteContact(JNIEnv *env, jclass cls, jint contact_id) { - return (jint)dc_delete_contact((dc_context_t*)hMailbox, contact_id); + return (jint)dc_delete_contact(get_dc_context(env, cls), contact_id); } -/* MrMailbox - handle chats */ +/* DcContext - handle chats */ -JNIEXPORT jlong Java_com_b44t_messenger_MrMailbox_MrMailboxGetChatlist(JNIEnv *env, jclass c, jlong hMailbox, jint listflags, jstring query, jint queryId) +JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetChatlist(JNIEnv *env, jclass c, jlong hContext, jint listflags, jstring query, jint queryId) { jlong ret; if( query ) { CHAR_REF(query); - ret = (jlong)dc_get_chatlist((dc_context_t*)hMailbox, listflags, queryPtr, queryId); + ret = (jlong)dc_get_chatlist((dc_context_t*)hContext, listflags, queryPtr, queryId); CHAR_UNREF(query); } else { - ret = (jlong)dc_get_chatlist((dc_context_t*)hMailbox, listflags, NULL, queryId); + ret = (jlong)dc_get_chatlist((dc_context_t*)hContext, listflags, NULL, queryId); } return ret; } -JNIEXPORT jlong Java_com_b44t_messenger_MrMailbox_MrMailboxGetChat(JNIEnv *env, jclass c, jlong hMailbox, jint chat_id) +JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetChat(JNIEnv *env, jclass c, jlong hContext, jint chat_id) { - return (jlong)dc_get_chat((dc_context_t*)hMailbox, chat_id); + return (jlong)dc_get_chat((dc_context_t*)hContext, chat_id); } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_getChatIdByContactId(JNIEnv *env, jclass cls, jint contact_id) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_getChatIdByContactId(JNIEnv *env, jclass cls, jint contact_id) { return (jint)dc_get_chat_id_by_contact_id(get_dc_context(env, cls), contact_id); } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_markseenMsgs(JNIEnv *env, jclass cls, jintArray msg_ids) +JNIEXPORT void Java_com_b44t_messenger_DcContext_markseenMsgs(JNIEnv *env, jclass cls, jintArray msg_ids) { int msg_ids_cnt = 0; const uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt); @@ -386,37 +384,37 @@ JNIEXPORT void Java_com_b44t_messenger_MrMailbox_markseenMsgs(JNIEnv *env, jclas } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_marknoticedChat(JNIEnv *env, jclass cls, jint chat_id) +JNIEXPORT void Java_com_b44t_messenger_DcContext_marknoticedChat(JNIEnv *env, jclass cls, jint chat_id) { dc_marknoticed_chat(get_dc_context(env, cls), chat_id); } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_marknoticedContact(JNIEnv *env, jclass cls, jint contact_id) +JNIEXPORT void Java_com_b44t_messenger_DcContext_marknoticedContact(JNIEnv *env, jclass cls, jint contact_id) { dc_marknoticed_contact(get_dc_context(env, cls), contact_id); } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_archiveChat(JNIEnv *env, jclass cls, jint chat_id, jint archive) +JNIEXPORT void Java_com_b44t_messenger_DcContext_archiveChat(JNIEnv *env, jclass cls, jint chat_id, jint archive) { dc_archive_chat(get_dc_context(env, cls), chat_id, archive); } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_createChatByContactId(JNIEnv *env, jclass cls, jint contact_id) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_createChatByContactId(JNIEnv *env, jclass cls, jint contact_id) { return (jint)dc_create_chat_by_contact_id(get_dc_context(env, cls), contact_id); } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_createChatByMsgId(JNIEnv *env, jclass cls, jint msg_id) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_createChatByMsgId(JNIEnv *env, jclass cls, jint msg_id) { return (jint)dc_create_chat_by_msg_id(get_dc_context(env, cls), msg_id); } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_createGroupChat(JNIEnv *env, jclass cls, jboolean verified, jstring name) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_createGroupChat(JNIEnv *env, jclass cls, jboolean verified, jstring name) { CHAR_REF(name); jint ret = (jint)dc_create_group_chat(get_dc_context(env, cls), verified, namePtr); @@ -425,25 +423,25 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_createGroupChat(JNIEnv *env, jc } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_isContactInChat(JNIEnv *env, jclass cls, jint chat_id, jint contact_id) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_isContactInChat(JNIEnv *env, jclass cls, jint chat_id, jint contact_id) { return (jint)dc_is_contact_in_chat(get_dc_context(env, cls), chat_id, contact_id); } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_addContactToChat(JNIEnv *env, jclass cls, jint chat_id, jint contact_id) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_addContactToChat(JNIEnv *env, jclass cls, jint chat_id, jint contact_id) { return (jint)dc_add_contact_to_chat(get_dc_context(env, cls), chat_id, contact_id); } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_removeContactFromChat(JNIEnv *env, jclass cls, jint chat_id, jint contact_id) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_removeContactFromChat(JNIEnv *env, jclass cls, jint chat_id, jint contact_id) { return (jint)dc_remove_contact_from_chat(get_dc_context(env, cls), chat_id, contact_id); } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_setDraft(JNIEnv *env, jclass cls, jint chat_id, jstring draft /* NULL=delete */) +JNIEXPORT void Java_com_b44t_messenger_DcContext_setDraft(JNIEnv *env, jclass cls, jint chat_id, jstring draft /* NULL=delete */) { CHAR_REF(draft); dc_set_text_draft(get_dc_context(env, cls), chat_id, draftPtr /* NULL=delete */); @@ -451,7 +449,7 @@ JNIEXPORT void Java_com_b44t_messenger_MrMailbox_setDraft(JNIEnv *env, jclass cl } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_setChatName(JNIEnv *env, jclass cls, jint chat_id, jstring name) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_setChatName(JNIEnv *env, jclass cls, jint chat_id, jstring name) { CHAR_REF(name); jint ret = (jint)dc_set_chat_name(get_dc_context(env, cls), chat_id, namePtr); @@ -460,7 +458,7 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_setChatName(JNIEnv *env, jclass } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_setChatProfileImage(JNIEnv *env, jclass cls, jint chat_id, jstring image/*NULL=delete*/) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_setChatProfileImage(JNIEnv *env, jclass cls, 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*/); @@ -469,37 +467,37 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_setChatProfileImage(JNIEnv *env } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_deleteChat(JNIEnv *env, jclass cls, jint chat_id) +JNIEXPORT void Java_com_b44t_messenger_DcContext_deleteChat(JNIEnv *env, jclass cls, jint chat_id) { dc_delete_chat(get_dc_context(env, cls), chat_id); } -/* MrMailbox - handle messages */ +/* DcContext - handle messages */ -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_getFreshMsgCount(JNIEnv *env, jclass cls, jint chat_id) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_getFreshMsgCount(JNIEnv *env, jclass cls, jint chat_id) { return dc_get_fresh_msg_cnt(get_dc_context(env, cls), chat_id); } -JNIEXPORT jlong Java_com_b44t_messenger_MrMailbox_MrMailboxGetMsg(JNIEnv *env, jclass c, jlong hMailbox, jint id) +JNIEXPORT jlong Java_com_b44t_messenger_DcContext_DcContextGetMsg(JNIEnv *env, jclass c, jlong hContext, jint id) { - return (jlong)dc_get_msg((dc_context_t*)hMailbox, id); + return (jlong)dc_get_msg((dc_context_t*)hContext, id); } -JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_MrMailboxGetMsgInfo(JNIEnv *env, jclass c, jlong hMailbox, jint msg_id) +JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getMsgInfo(JNIEnv *env, jclass cls, jint msg_id) { - char* temp = dc_get_msg_info((dc_context_t*)hMailbox, msg_id); + char* temp = dc_get_msg_info(get_dc_context(env, cls), msg_id); jstring ret = JSTRING_NEW(temp); free(temp); return ret; } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_deleteMsgs(JNIEnv *env, jclass cls, jintArray msg_ids) +JNIEXPORT void Java_com_b44t_messenger_DcContext_deleteMsgs(JNIEnv *env, jclass cls, jintArray msg_ids) { int msg_ids_cnt = 0; const uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt); @@ -508,7 +506,7 @@ JNIEXPORT void Java_com_b44t_messenger_MrMailbox_deleteMsgs(JNIEnv *env, jclass } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_forwardMsgs(JNIEnv *env, jclass cls, jintArray msg_ids, jint chat_id) +JNIEXPORT void Java_com_b44t_messenger_DcContext_forwardMsgs(JNIEnv *env, jclass cls, jintArray msg_ids, jint chat_id) { int msg_ids_cnt = 0; const uint32_t* msg_ids_ptr = jintArray2uint32Pointer(env, msg_ids, &msg_ids_cnt); @@ -517,7 +515,7 @@ JNIEXPORT void Java_com_b44t_messenger_MrMailbox_forwardMsgs(JNIEnv *env, jclass } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_sendTextMsg(JNIEnv *env, jclass cls, jint chat_id, jstring text) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendTextMsg(JNIEnv *env, jclass cls, jint chat_id, jstring text) { CHAR_REF(text); jint msg_id = dc_send_text_msg(get_dc_context(env, cls), chat_id, textPtr); @@ -526,13 +524,13 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_sendTextMsg(JNIEnv *env, jclass } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_sendVcardMsg(JNIEnv *env, jobject obj, jint chat_id, jint contact_id) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_sendVcardMsg(JNIEnv *env, jobject obj, jint chat_id, jint contact_id) { return dc_send_vcard_msg(get_dc_context(env, obj), chat_id, contact_id); } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_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, jclass cls, 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); @@ -554,9 +552,9 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_sendMediaMsg(JNIEnv *env, jclas } -/* MrMailbox - handle config */ +/* DcContext - handle config */ -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_setConfig(JNIEnv *env, jclass cls, jstring key, jstring value /*may be NULL*/) +JNIEXPORT void Java_com_b44t_messenger_DcContext_setConfig(JNIEnv *env, jclass cls, jstring key, jstring value /*may be NULL*/) { CHAR_REF(key); CHAR_REF(value); @@ -566,7 +564,7 @@ JNIEXPORT void Java_com_b44t_messenger_MrMailbox_setConfig(JNIEnv *env, jclass c } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_setConfigInt(JNIEnv *env, jclass cls, jstring key, jint value) +JNIEXPORT void Java_com_b44t_messenger_DcContext_setConfigInt(JNIEnv *env, jclass cls, jstring key, jint value) { CHAR_REF(key); dc_set_config_int(get_dc_context(env, cls), keyPtr, value); @@ -574,7 +572,7 @@ JNIEXPORT void Java_com_b44t_messenger_MrMailbox_setConfigInt(JNIEnv *env, jclas } -JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_getConfig(JNIEnv *env, jclass cls, jstring key, jstring def/*may be NULL*/) +JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getConfig(JNIEnv *env, jclass cls, jstring key, jstring def/*may be NULL*/) { CHAR_REF(key); CHAR_REF(def); @@ -590,7 +588,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_getConfig(JNIEnv *env, jclas } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_getConfigInt(JNIEnv *env, jclass cls, jstring key, jint def) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_getConfigInt(JNIEnv *env, jclass cls, jstring key, jint def) { CHAR_REF(key); jint ret = dc_get_config_int(get_dc_context(env, cls), keyPtr, def); @@ -599,9 +597,9 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_getConfigInt(JNIEnv *env, jclas } -/* MrMailbox - out-of-band verification */ +/* DcContext - out-of-band verification */ -JNIEXPORT jlong Java_com_b44t_messenger_MrMailbox_checkQrCPtr(JNIEnv *env, jclass cls, jstring qr) +JNIEXPORT jlong Java_com_b44t_messenger_DcContext_checkQrCPtr(JNIEnv *env, jclass cls, jstring qr) { CHAR_REF(qr); jlong ret = (jlong)dc_check_qr(get_dc_context(env, cls), qrPtr); @@ -609,7 +607,7 @@ JNIEXPORT jlong Java_com_b44t_messenger_MrMailbox_checkQrCPtr(JNIEnv *env, jclas return ret; } -JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_getSecurejoinQr(JNIEnv *env, jclass cls, jint chat_id) +JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getSecurejoinQr(JNIEnv *env, jclass cls, jint chat_id) { char* temp = dc_get_securejoin_qr(get_dc_context(env, cls), chat_id); jstring ret = JSTRING_NEW(temp); @@ -617,7 +615,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_getSecurejoinQr(JNIEnv *env, return ret; } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_joinSecurejoin(JNIEnv *env, jclass cls, jstring qr) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_joinSecurejoin(JNIEnv *env, jclass cls, jstring qr) { CHAR_REF(qr); jint ret = dc_join_securejoin(get_dc_context(env, cls), qrPtr); @@ -626,9 +624,9 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_joinSecurejoin(JNIEnv *env, jcl } -/* MrMailbox - misc. */ +/* DcContext - misc. */ -JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_getInfo(JNIEnv *env, jclass cls) +JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getInfo(JNIEnv *env, jclass cls) { char* temp = dc_get_info(get_dc_context(env, cls)); jstring ret = JSTRING_NEW(temp); @@ -637,7 +635,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_getInfo(JNIEnv *env, jclass } -JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_getContactEncrInfo(JNIEnv *env, jclass cls, jint contact_id) +JNIEXPORT jstring Java_com_b44t_messenger_DcContext_getContactEncrInfo(JNIEnv *env, jclass cls, jint contact_id) { char* temp = dc_get_contact_encrinfo(get_dc_context(env, cls), contact_id); jstring ret = JSTRING_NEW(temp); @@ -646,7 +644,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_getContactEncrInfo(JNIEnv *e } -JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_cmdline(JNIEnv *env, jclass cls, jstring cmd) +JNIEXPORT jstring Java_com_b44t_messenger_DcContext_cmdline(JNIEnv *env, jclass cls, jstring cmd) { CHAR_REF(cmd); char* temp = dc_cmdline(get_dc_context(env, cls), cmdPtr); @@ -657,7 +655,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_cmdline(JNIEnv *env, jclass } -JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_initiateKeyTransfer(JNIEnv *env, jclass cls) +JNIEXPORT jstring Java_com_b44t_messenger_DcContext_initiateKeyTransfer(JNIEnv *env, jclass cls) { jstring setup_code = NULL; char* temp = dc_initiate_key_transfer(get_dc_context(env, cls)); @@ -669,7 +667,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_initiateKeyTransfer(JNIEnv * } -JNIEXPORT jboolean Java_com_b44t_messenger_MrMailbox_continueKeyTransfer(JNIEnv *env, jclass cls, jint msg_id, jstring setupCode) +JNIEXPORT jboolean Java_com_b44t_messenger_DcContext_continueKeyTransfer(JNIEnv *env, jclass cls, jint msg_id, jstring setupCode) { CHAR_REF(setupCode); jboolean ret = dc_continue_key_transfer(get_dc_context(env, cls), msg_id, setupCodePtr); @@ -678,7 +676,7 @@ JNIEXPORT jboolean Java_com_b44t_messenger_MrMailbox_continueKeyTransfer(JNIEnv } -JNIEXPORT void Java_com_b44t_messenger_MrMailbox_imex(JNIEnv *env, jclass cls, jint what, jstring dir) +JNIEXPORT void Java_com_b44t_messenger_DcContext_imex(JNIEnv *env, jclass cls, jint what, jstring dir) { CHAR_REF(dir); dc_imex(get_dc_context(env, cls), what, dirPtr, ""); @@ -686,7 +684,7 @@ JNIEXPORT void Java_com_b44t_messenger_MrMailbox_imex(JNIEnv *env, jclass cls, j } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_checkPassword(JNIEnv *env, jclass cls, jstring pw) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_checkPassword(JNIEnv *env, jclass cls, jstring pw) { CHAR_REF(pw); jint r = dc_check_password(get_dc_context(env, cls), pwPtr); @@ -695,7 +693,7 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_checkPassword(JNIEnv *env, jcla } -JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_imexHasBackup(JNIEnv *env, jclass cls, jstring dir) +JNIEXPORT jstring Java_com_b44t_messenger_DcContext_imexHasBackup(JNIEnv *env, jclass cls, jstring dir) { CHAR_REF(dir); jstring ret = NULL; @@ -709,10 +707,10 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_imexHasBackup(JNIEnv *env, j } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_MrMailboxAddAddressBook(JNIEnv *env, jclass c, jlong hMailbox, jstring adrbook) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_addAddressBook(JNIEnv *env, jclass cls, jstring adrbook) { CHAR_REF(adrbook); - int modify_count = dc_add_address_book((dc_context_t*)hMailbox, adrbookPtr); + int modify_count = dc_add_address_book(get_dc_context(env, cls), adrbookPtr); CHAR_UNREF(adrbook); return modify_count; } @@ -720,44 +718,58 @@ JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_MrMailboxAddAddressBook(JNIEnv /******************************************************************************* - * MrChatlist + * DcChatlist ******************************************************************************/ -JNIEXPORT void Java_com_b44t_messenger_MrChatlist_MrChatlistUnref(JNIEnv *env, jclass c, jlong hChatlist) +static dc_chatlist_t* get_dc_chatlist(JNIEnv *env, jobject obj) +{ + static jfieldID fid = 0; + if( fid == 0 ) { + jclass cls = (*env)->GetObjectClass(env, obj); + fid = (*env)->GetFieldID(env, cls, "m_hChatlist", "J" /*Signature, J=long*/); + } + if( fid ) { + return (dc_chatlist_t*)(*env)->GetLongField(env, obj, fid); + } + return NULL; +} + + +JNIEXPORT void Java_com_b44t_messenger_DcChatlist_DcChatlistUnref(JNIEnv *env, jclass c, jlong hChatlist) { dc_chatlist_unref((dc_chatlist_t*)hChatlist); } -JNIEXPORT jint Java_com_b44t_messenger_MrChatlist_MrChatlistGetCnt(JNIEnv *env, jclass c, jlong hChatlist) +JNIEXPORT jint Java_com_b44t_messenger_DcChatlist_getCnt(JNIEnv *env, jobject obj, jlong hChatlist) { - return dc_chatlist_get_cnt((dc_chatlist_t*)hChatlist); + return dc_chatlist_get_cnt(get_dc_chatlist(env, obj)); } -JNIEXPORT jlong Java_com_b44t_messenger_MrChatlist_MrChatlistGetChatByIndex(JNIEnv *env, jclass c, jlong hChatlist, jint index) +JNIEXPORT jlong Java_com_b44t_messenger_DcChatlist_DcChatlistGetChatByIndex(JNIEnv *env, jclass c, jlong hChatlist, jint index) { dc_chatlist_t* chatlist = (dc_chatlist_t*)hChatlist; return (jlong)dc_get_chat(dc_chatlist_get_context(chatlist), dc_chatlist_get_chat_id(chatlist, index)); } -JNIEXPORT jlong Java_com_b44t_messenger_MrChatlist_MrChatlistGetMsgByIndex(JNIEnv *env, jclass c, jlong hChatlist, jint index) +JNIEXPORT jlong Java_com_b44t_messenger_DcChatlist_DcChatlistGetMsgByIndex(JNIEnv *env, jclass c, jlong hChatlist, jint index) { dc_chatlist_t* chatlist = (dc_chatlist_t*)hChatlist; return (jlong)dc_get_msg(dc_chatlist_get_context(chatlist), dc_chatlist_get_msg_id(chatlist, index)); } -JNIEXPORT jlong Java_com_b44t_messenger_MrChatlist_MrChatlistGetSummaryByIndex(JNIEnv *env, jclass c, jlong hChatlist, jint index, jlong hChat) +JNIEXPORT jlong Java_com_b44t_messenger_DcChatlist_DcChatlistGetSummaryByIndex(JNIEnv *env, jclass c, jlong hChatlist, jint index, jlong hChat) { return (jlong)dc_chatlist_get_summary((dc_chatlist_t*)hChatlist, index, (dc_chat_t*)hChat); } /******************************************************************************* - * MrChat + * DcChat ******************************************************************************/ @@ -775,32 +787,32 @@ static dc_chat_t* get_dc_chat(JNIEnv *env, jobject obj) } -JNIEXPORT void Java_com_b44t_messenger_MrChat_MrChatUnref(JNIEnv *env, jclass c, jlong hChat) +JNIEXPORT void Java_com_b44t_messenger_DcChat_DcChatUnref(JNIEnv *env, jclass c, jlong hChat) { dc_chat_unref((dc_chat_t*)hChat); } -JNIEXPORT jint Java_com_b44t_messenger_MrChat_getId(JNIEnv *env, jobject obj) +JNIEXPORT jint Java_com_b44t_messenger_DcChat_getId(JNIEnv *env, jobject obj) { return dc_chat_get_id(get_dc_chat(env, obj)); } -JNIEXPORT jboolean Java_com_b44t_messenger_MrChat_isGroup(JNIEnv *env, jobject obj) +JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isGroup(JNIEnv *env, jobject obj) { int chat_type = dc_chat_get_type(get_dc_chat(env, obj)); return (chat_type==DC_CHAT_TYPE_GROUP || chat_type==DC_CHAT_TYPE_VERIFIED_GROUP); } -JNIEXPORT jint Java_com_b44t_messenger_MrChat_getArchived(JNIEnv *env, jobject obj) +JNIEXPORT jint Java_com_b44t_messenger_DcChat_getArchived(JNIEnv *env, jobject obj) { return dc_chat_get_archived(get_dc_chat(env, obj)); } -JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getName(JNIEnv *env, jobject obj) +JNIEXPORT jstring Java_com_b44t_messenger_DcChat_getName(JNIEnv *env, jobject obj) { const char* temp = dc_chat_get_name(get_dc_chat(env, obj)); jstring ret = JSTRING_NEW(temp); @@ -809,7 +821,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getName(JNIEnv *env, jobject ob } -JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getSubtitle(JNIEnv *env, jobject obj) +JNIEXPORT jstring Java_com_b44t_messenger_DcChat_getSubtitle(JNIEnv *env, jobject obj) { const char* temp = dc_chat_get_subtitle(get_dc_chat(env, obj)); jstring ret = JSTRING_NEW(temp); @@ -818,7 +830,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getSubtitle(JNIEnv *env, jobjec } -JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getProfileImage(JNIEnv *env, jobject obj) +JNIEXPORT jstring Java_com_b44t_messenger_DcChat_getProfileImage(JNIEnv *env, jobject obj) { const char* temp = dc_chat_get_profile_image(get_dc_chat(env, obj)); jstring ret = JSTRING_NEW(temp); @@ -827,25 +839,25 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getProfileImage(JNIEnv *env, jo } -JNIEXPORT jboolean Java_com_b44t_messenger_MrChat_isUnpromoted(JNIEnv *env, jobject obj) +JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isUnpromoted(JNIEnv *env, jobject obj) { return dc_chat_is_unpromoted(get_dc_chat(env, obj)) != 0; } -JNIEXPORT jboolean Java_com_b44t_messenger_MrChat_isSelfTalk(JNIEnv *env, jobject obj) +JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isSelfTalk(JNIEnv *env, jobject obj) { return dc_chat_is_self_talk(get_dc_chat(env, obj)) != 0; } -JNIEXPORT jboolean Java_com_b44t_messenger_MrChat_isVerified(JNIEnv *env, jobject obj) +JNIEXPORT jboolean Java_com_b44t_messenger_DcChat_isVerified(JNIEnv *env, jobject obj) { return dc_chat_is_verified(get_dc_chat(env, obj)) != 0; } -JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getDraft(JNIEnv *env, jobject obj) /* returns NULL for "no draft" */ +JNIEXPORT jstring Java_com_b44t_messenger_DcChat_getDraft(JNIEnv *env, jobject obj) /* returns NULL for "no draft" */ { const char* temp = dc_chat_get_text_draft(get_dc_chat(env, obj)); jstring ret = temp? JSTRING_NEW(temp) : NULL; @@ -854,33 +866,33 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrChat_getDraft(JNIEnv *env, jobject o } -JNIEXPORT jlong Java_com_b44t_messenger_MrChat_getDraftTimestamp(JNIEnv *env, jobject obj) +JNIEXPORT jlong Java_com_b44t_messenger_DcChat_getDraftTimestamp(JNIEnv *env, jobject obj) { return (jlong)dc_chat_get_draft_timestamp(get_dc_chat(env, obj)); } -JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_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, jclass cls, 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); return dc_array2jintArray_n_unref(env, ca); } -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_getNextMedia(JNIEnv *env, jclass cls, jint msg_id, jint dir) +JNIEXPORT jint Java_com_b44t_messenger_DcContext_getNextMedia(JNIEnv *env, jclass cls, jint msg_id, jint dir) { return dc_get_next_media(get_dc_context(env, cls), msg_id, dir); } -JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getChatMsgs(JNIEnv *env, jclass cls, jint chat_id, jint flags, jint marker1before) +JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatMsgs(JNIEnv *env, jclass cls, jint chat_id, jint flags, jint marker1before) { dc_array_t* ca = dc_get_chat_msgs(get_dc_context(env, cls), chat_id, flags, marker1before); return dc_array2jintArray_n_unref(env, ca); } -JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_searchMsgs(JNIEnv *env, jclass cls, jint chat_id, jstring query) +JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_searchMsgs(JNIEnv *env, jclass cls, jint chat_id, jstring query) { CHAR_REF(query); dc_array_t* ca = dc_search_msgs(get_dc_context(env, cls), chat_id, queryPtr); @@ -889,14 +901,14 @@ JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_searchMsgs(JNIEnv *env, jc } -JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getFreshMsgs(JNIEnv *env, jclass cls) +JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getFreshMsgs(JNIEnv *env, jclass cls) { dc_array_t* ca = dc_get_fresh_msgs(get_dc_context(env, cls)); return dc_array2jintArray_n_unref(env, ca); } -JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getChatContacts(JNIEnv *env, jclass cls, jint chat_id) +JNIEXPORT jintArray Java_com_b44t_messenger_DcContext_getChatContacts(JNIEnv *env, jclass cls, jint chat_id) { dc_array_t* ca = dc_get_chat_contacts(get_dc_context(env, cls), chat_id); return dc_array2jintArray_n_unref(env, ca); @@ -904,7 +916,7 @@ JNIEXPORT jintArray Java_com_b44t_messenger_MrMailbox_getChatContacts(JNIEnv *en /******************************************************************************* - * MrMsg + * DcMsg ******************************************************************************/ @@ -922,19 +934,19 @@ static dc_msg_t* get_dc_msg(JNIEnv *env, jobject obj) } -JNIEXPORT void Java_com_b44t_messenger_MrMsg_MrMsgUnref(JNIEnv *env, jclass c, jlong hMsg) +JNIEXPORT void Java_com_b44t_messenger_DcMsg_DcMsgUnref(JNIEnv *env, jclass c, jlong hMsg) { dc_msg_unref((dc_msg_t*)hMsg); } -JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getId(JNIEnv *env, jobject obj) +JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getId(JNIEnv *env, jobject obj) { return dc_msg_get_id(get_dc_msg(env, obj)); } -JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getText(JNIEnv *env, jobject obj) +JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getText(JNIEnv *env, jobject obj) { char* temp = dc_msg_get_text(get_dc_msg(env, obj)); jstring ret = JSTRING_NEW(temp); @@ -943,75 +955,75 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getText(JNIEnv *env, jobject obj } -JNIEXPORT jlong Java_com_b44t_messenger_MrMsg_getTimestamp(JNIEnv *env, jobject obj) +JNIEXPORT jlong Java_com_b44t_messenger_DcMsg_getTimestamp(JNIEnv *env, jobject obj) { return (jlong)dc_msg_get_timestamp(get_dc_msg(env, obj)); } -JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getType(JNIEnv *env, jobject obj) +JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getType(JNIEnv *env, jobject obj) { return dc_msg_get_type(get_dc_msg(env, obj)); } -JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getState(JNIEnv *env, jobject obj) +JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getState(JNIEnv *env, jobject obj) { return dc_msg_get_state(get_dc_msg(env, obj)); } -JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getChatId(JNIEnv *env, jobject obj) +JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getChatId(JNIEnv *env, jobject obj) { return dc_msg_get_chat_id(get_dc_msg(env, obj)); } -JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getFromId(JNIEnv *env, jobject obj) +JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getFromId(JNIEnv *env, jobject obj) { return dc_msg_get_from_id(get_dc_msg(env, obj)); } -JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getWidth(JNIEnv *env, jobject obj, jint def) +JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getWidth(JNIEnv *env, jobject obj, jint def) { jint ret = (jint)dc_msg_get_width(get_dc_msg(env, obj)); return ret? ret : def; } -JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getHeight(JNIEnv *env, jobject obj, jint def) +JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getHeight(JNIEnv *env, jobject obj, jint def) { jint ret = (jint)dc_msg_get_height(get_dc_msg(env, obj)); return ret? ret : def; } -JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getDuration(JNIEnv *env, jobject obj) +JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getDuration(JNIEnv *env, jobject obj) { return dc_msg_get_duration(get_dc_msg(env, obj)); } -JNIEXPORT void Java_com_b44t_messenger_MrMsg_lateFilingMediaSize(JNIEnv *env, jobject obj, jint width, jint height, jint duration) +JNIEXPORT void Java_com_b44t_messenger_DcMsg_lateFilingMediaSize(JNIEnv *env, jobject obj, jint width, jint height, jint duration) { dc_msg_latefiling_mediasize(get_dc_msg(env, obj), width, height, duration); } -JNIEXPORT jint Java_com_b44t_messenger_MrMsg_getBytes(JNIEnv *env, jobject obj) +JNIEXPORT jint Java_com_b44t_messenger_DcMsg_getBytes(JNIEnv *env, jobject obj) { return (jint)dc_msg_get_filebytes(get_dc_msg(env, obj)); } -JNIEXPORT jlong Java_com_b44t_messenger_MrMsg_getSummaryCPtr(JNIEnv *env, jobject obj, jlong hChat) +JNIEXPORT jlong Java_com_b44t_messenger_DcMsg_getSummaryCPtr(JNIEnv *env, jobject obj, jlong hChat) { return (jlong)dc_msg_get_summary(get_dc_msg(env, obj), (dc_chat_t*)hChat); } -JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getSummarytext(JNIEnv *env, jobject obj, jint approx_characters) +JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getSummarytext(JNIEnv *env, jobject obj, jint approx_characters) { char* temp = dc_msg_get_summarytext(get_dc_msg(env, obj), approx_characters); jstring ret = JSTRING_NEW(temp); @@ -1020,13 +1032,13 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getSummarytext(JNIEnv *env, jobj } -JNIEXPORT jint Java_com_b44t_messenger_MrMsg_showPadlock(JNIEnv *env, jobject obj) +JNIEXPORT jint Java_com_b44t_messenger_DcMsg_showPadlock(JNIEnv *env, jobject obj) { return dc_msg_get_showpadlock(get_dc_msg(env, obj)); } -JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getFile(JNIEnv *env, jobject obj) +JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getFile(JNIEnv *env, jobject obj) { char* temp = dc_msg_get_file(get_dc_msg(env, obj)); jstring ret = JSTRING_NEW(temp); @@ -1035,7 +1047,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getFile(JNIEnv *env, jobject obj } -JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getFilemime(JNIEnv *env, jobject obj) +JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getFilemime(JNIEnv *env, jobject obj) { char* temp = dc_msg_get_filemime(get_dc_msg(env, obj)); jstring ret = JSTRING_NEW(temp); @@ -1044,7 +1056,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getFilemime(JNIEnv *env, jobject } -JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getFilename(JNIEnv *env, jobject obj) +JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getFilename(JNIEnv *env, jobject obj) { char* temp = dc_msg_get_filename(get_dc_msg(env, obj)); jstring ret = JSTRING_NEW(temp); @@ -1053,37 +1065,37 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getFilename(JNIEnv *env, jobject } -JNIEXPORT jlong Java_com_b44t_messenger_MrMsg_getMediainfoCPtr(JNIEnv *env, jobject obj) +JNIEXPORT jlong Java_com_b44t_messenger_DcMsg_getMediainfoCPtr(JNIEnv *env, jobject obj) { return (jlong)dc_msg_get_mediainfo(get_dc_msg(env, obj)); } -JNIEXPORT jboolean Java_com_b44t_messenger_MrMsg_isForwarded(JNIEnv *env, jobject obj) +JNIEXPORT jboolean Java_com_b44t_messenger_DcMsg_isForwarded(JNIEnv *env, jobject obj) { return dc_msg_is_forwarded(get_dc_msg(env, obj)) != 0; } -JNIEXPORT jboolean Java_com_b44t_messenger_MrMsg_isIncreation(JNIEnv *env, jobject obj) +JNIEXPORT jboolean Java_com_b44t_messenger_DcMsg_isIncreation(JNIEnv *env, jobject obj) { return dc_msg_is_increation(get_dc_msg(env, obj)) != 0; } -JNIEXPORT jboolean Java_com_b44t_messenger_MrMsg_isInfo(JNIEnv *env, jobject obj) +JNIEXPORT jboolean Java_com_b44t_messenger_DcMsg_isInfo(JNIEnv *env, jobject obj) { return dc_msg_is_info(get_dc_msg(env, obj)) != 0; } -JNIEXPORT jboolean Java_com_b44t_messenger_MrMsg_isSetupMessage(JNIEnv *env, jobject obj) +JNIEXPORT jboolean Java_com_b44t_messenger_DcMsg_isSetupMessage(JNIEnv *env, jobject obj) { return dc_msg_is_setupmessage(get_dc_msg(env, obj)); } -JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getSetupCodeBegin(JNIEnv *env, jobject obj) +JNIEXPORT jstring Java_com_b44t_messenger_DcMsg_getSetupCodeBegin(JNIEnv *env, jobject obj) { char* temp = dc_msg_get_setupcodebegin(get_dc_msg(env, obj)); jstring ret = JSTRING_NEW(temp); @@ -1094,7 +1106,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMsg_getSetupCodeBegin(JNIEnv *env, j /******************************************************************************* - * MrContact + * DcContact ******************************************************************************/ @@ -1112,13 +1124,13 @@ static dc_contact_t* get_dc_contact(JNIEnv *env, jobject obj) } -JNIEXPORT void Java_com_b44t_messenger_MrContact_MrContactUnref(JNIEnv *env, jclass c, jlong hContact) +JNIEXPORT void Java_com_b44t_messenger_DcContact_DcContactUnref(JNIEnv *env, jclass c, jlong hContact) { dc_contact_unref((dc_contact_t*)hContact); } -JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getName(JNIEnv *env, jobject obj) +JNIEXPORT jstring Java_com_b44t_messenger_DcContact_getName(JNIEnv *env, jobject obj) { const char* temp = dc_contact_get_name(get_dc_contact(env, obj)); jstring ret = JSTRING_NEW(temp); @@ -1127,7 +1139,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getName(JNIEnv *env, jobject } -JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getDisplayName(JNIEnv *env, jobject obj) +JNIEXPORT jstring Java_com_b44t_messenger_DcContact_getDisplayName(JNIEnv *env, jobject obj) { const char* temp = dc_contact_get_display_name(get_dc_contact(env, obj)); jstring ret = JSTRING_NEW(temp); @@ -1136,7 +1148,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getDisplayName(JNIEnv *env, } -JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getFirstName(JNIEnv *env, jobject obj) +JNIEXPORT jstring Java_com_b44t_messenger_DcContact_getFirstName(JNIEnv *env, jobject obj) { const char* temp = dc_contact_get_first_name(get_dc_contact(env, obj)); jstring ret = JSTRING_NEW(temp); @@ -1145,7 +1157,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getFirstName(JNIEnv *env, jo } -JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getAddr(JNIEnv *env, jobject obj) +JNIEXPORT jstring Java_com_b44t_messenger_DcContact_getAddr(JNIEnv *env, jobject obj) { const char* temp = dc_contact_get_addr(get_dc_contact(env, obj)); jstring ret = JSTRING_NEW(temp); @@ -1154,7 +1166,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getAddr(JNIEnv *env, jobject } -JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getNameNAddr(JNIEnv *env, jobject obj) +JNIEXPORT jstring Java_com_b44t_messenger_DcContact_getNameNAddr(JNIEnv *env, jobject obj) { const char* temp = dc_contact_get_name_n_addr(get_dc_contact(env, obj)); jstring ret = JSTRING_NEW(temp); @@ -1163,20 +1175,20 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrContact_getNameNAddr(JNIEnv *env, jo } -JNIEXPORT jboolean Java_com_b44t_messenger_MrContact_isBlocked(JNIEnv *env, jobject obj) +JNIEXPORT jboolean Java_com_b44t_messenger_DcContact_isBlocked(JNIEnv *env, jobject obj) { return (jboolean)( dc_contact_is_blocked(get_dc_contact(env, obj)) != 0 ); } -JNIEXPORT jboolean Java_com_b44t_messenger_MrContact_isVerified(JNIEnv *env, jobject obj) +JNIEXPORT jboolean Java_com_b44t_messenger_DcContact_isVerified(JNIEnv *env, jobject obj) { return dc_contact_is_verified(get_dc_contact(env, obj)) == 2; } /******************************************************************************* - * MrLot + * DcLot ******************************************************************************/ @@ -1194,13 +1206,13 @@ static dc_lot_t* get_dc_lot(JNIEnv *env, jobject obj) } -JNIEXPORT void Java_com_b44t_messenger_MrLot_unref(JNIEnv *env, jclass cls, jlong hLot) +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_MrLot_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)); jstring ret = JSTRING_NEW(temp); @@ -1209,13 +1221,13 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrLot_getText1(JNIEnv *env, jobject ob } -JNIEXPORT jint Java_com_b44t_messenger_MrLot_getText1Meaning(JNIEnv *env, jobject obj) +JNIEXPORT jint Java_com_b44t_messenger_DcLot_getText1Meaning(JNIEnv *env, jobject obj) { return dc_lot_get_text1_meaning(get_dc_lot(env, obj)); } -JNIEXPORT jstring Java_com_b44t_messenger_MrLot_getText2(JNIEnv *env, jobject obj) +JNIEXPORT jstring Java_com_b44t_messenger_DcLot_getText2(JNIEnv *env, jobject obj) { char* temp = dc_lot_get_text2(get_dc_lot(env, obj)); jstring ret = JSTRING_NEW(temp); @@ -1224,25 +1236,25 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrLot_getText2(JNIEnv *env, jobject ob } -JNIEXPORT jlong Java_com_b44t_messenger_MrLot_getTimestamp(JNIEnv *env, jobject obj) +JNIEXPORT jlong Java_com_b44t_messenger_DcLot_getTimestamp(JNIEnv *env, jobject obj) { return dc_lot_get_timestamp(get_dc_lot(env, obj)); } -JNIEXPORT jint Java_com_b44t_messenger_MrLot_getState(JNIEnv *env, jobject obj) +JNIEXPORT jint Java_com_b44t_messenger_DcLot_getState(JNIEnv *env, jobject obj) { return dc_lot_get_state(get_dc_lot(env, obj)); } -JNIEXPORT jint Java_com_b44t_messenger_MrLot_getId(JNIEnv *env, jobject obj) +JNIEXPORT jint Java_com_b44t_messenger_DcLot_getId(JNIEnv *env, jobject obj) { return dc_lot_get_id(get_dc_lot(env, obj)); } -JNIEXPORT void Java_com_b44t_messenger_MrLot_MrLotUnref(JNIEnv *env, jclass c, jlong hLot) +JNIEXPORT void Java_com_b44t_messenger_DcLot_DcLotUnref(JNIEnv *env, jclass c, jlong hLot) { dc_lot_unref((dc_lot_t*)hLot); } @@ -1253,7 +1265,7 @@ JNIEXPORT void Java_com_b44t_messenger_MrLot_MrLotUnref(JNIEnv *env, jclass c, j ******************************************************************************/ -JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_CPtr2String(JNIEnv *env, jclass c, jlong hStr) +JNIEXPORT jstring Java_com_b44t_messenger_DcContext_CPtr2String(JNIEnv *env, jclass c, 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 ) { @@ -1264,7 +1276,7 @@ JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_CPtr2String(JNIEnv *env, jcl } -JNIEXPORT jlong Java_com_b44t_messenger_MrMailbox_String2CPtr(JNIEnv *env, jclass c, jstring str) +JNIEXPORT jlong Java_com_b44t_messenger_DcContext_String2CPtr(JNIEnv *env, jclass c, jstring str) { char* hStr = NULL; if( str ) { @@ -1276,24 +1288,4 @@ JNIEXPORT jlong Java_com_b44t_messenger_MrMailbox_String2CPtr(JNIEnv *env, jclas } -JNIEXPORT jstring Java_com_b44t_messenger_MrMailbox_MrGetVersionStr(JNIEnv *env, jclass c) -{ - s_init_globals(env, c); - const char* temp = dc_get_version_str(); - jstring ret = JSTRING_NEW(temp); - free(temp); - return ret; -} - - -#include -JNIEXPORT jlong Java_com_b44t_messenger_MrMailbox_getCurrentTimeMillis(JNIEnv *env, jclass c) { - struct timespec ts; - clock_gettime(CLOCK_REALTIME, &ts); - return (jlong) ts.tv_sec * 1000 + (int64_t) ts.tv_nsec / 1000000; -} -JNIEXPORT jint Java_com_b44t_messenger_MrMailbox_getCurrentTime(JNIEnv *env, jclass c) { - return (jint) (Java_com_b44t_messenger_MrMailbox_getCurrentTimeMillis(env, c) / 1000); -} - diff --git a/jni/mrjnimain.c b/jni/mrjnimain.c deleted file mode 100644 index 354dbabb8..000000000 --- a/jni/mrjnimain.c +++ /dev/null @@ -1,77 +0,0 @@ -/******************************************************************************* - * - * Delta Chat Android - * (C) 2013-2016 Nikolai Kudashov - * (C) 2017 Björn Petersen - * Contact: r10s@b44t.com, http://b44t.com - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, either version 3 of the License, or (at your option) any later - * version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see http://www.gnu.org/licenses/ . - * - ******************************************************************************/ - - -#include -#include -#include -#include -#include -#include -#include -#include -#include "mrjnimain.h" -#include "image.h" -#include "gifvideo.h" - - -jint JNI_OnLoad(JavaVM *vm, void *reserved) { /* this function is called automatically by the JNI when the library gets loaded */ - JNIEnv *env = 0; - srand(time(NULL)); - - __android_log_print(ANDROID_LOG_INFO, "DeltaChat", "JNI_OnLoad() ..."); /* please note, that __android_log_print() may not work (eg. on LG X Cam), however, we don't have an option here. */ - - if ((*vm)->GetEnv(vm, (void **) &env, JNI_VERSION_1_6) != JNI_OK) { - return -1; - } - - /*if (imageOnJNILoad(vm, reserved, env) == -1) { - return -1; - } - - if (gifvideoOnJNILoad(vm, env) == -1) { - return -1; - }*/ - - __android_log_print(ANDROID_LOG_INFO, "DeltaChat", "JNI_OnLoad() succeeded."); - - return JNI_VERSION_1_6; -} - - -void JNI_OnUnload(JavaVM *vm, void *reserved) { -} - - -/*JNIEXPORT jstring Java_com_b44t_messenger_Utilities_readlink(JNIEnv *env, jclass class, jstring path) { - static char buf[1000]; - char *fileName = (*env)->GetStringUTFChars(env, path, NULL); - int result = readlink(fileName, buf, 999); - jstring value = 0; - if (result != -1) { - buf[result] = '\0'; - value = (*env)->NewStringUTF(env, buf); - } - (*env)->ReleaseStringUTFChars(env, path, fileName); - return value; -} -*/ diff --git a/jni/mrjnimain.h b/jni/mrjnimain.h deleted file mode 100644 index 331f30ab5..000000000 --- a/jni/mrjnimain.h +++ /dev/null @@ -1,54 +0,0 @@ -/******************************************************************************* - * - * Delta Chat Android - * (C) 2013-2016 Nikolai Kudashov - * (C) 2017 Björn Petersen - * Contact: r10s@b44t.com, http://b44t.com - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, either version 3 of the License, or (at your option) any later - * version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see http://www.gnu.org/licenses/ . - * - ******************************************************************************/ - - -#ifndef __MRJNIMAIN_H__ -#define __MRJNIMAIN_H__ - - -#include -#include - - -#define LOG_TAG "DeltaChat" -#ifndef LOG_DISABLED -#define LOGI(...) __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__) -#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) -#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__) -#define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, LOG_TAG, __VA_ARGS__) -#else -#define LOGI(...) -#define LOGD(...) -#define LOGE(...) -#define LOGV(...) -#endif - -#ifndef max -#define max(x, y) ((x) > (y)) ? (x) : (y) -#endif -#ifndef min -#define min(x, y) ((x) < (y)) ? (x) : (y) -#endif - - -#endif /* __MRJNIMAIN_H__*/ - diff --git a/src/com/b44t/messenger/MrChat.java b/src/com/b44t/messenger/DcChat.java similarity index 52% rename from src/com/b44t/messenger/MrChat.java rename to src/com/b44t/messenger/DcChat.java index 21651822a..c434c493b 100644 --- a/src/com/b44t/messenger/MrChat.java +++ b/src/com/b44t/messenger/DcChat.java @@ -17,37 +17,30 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see http://www.gnu.org/licenses/ . * - ******************************************************************************* - * - * File: MrChat.java - * Purpose: Wrap around mrchat_t - * ******************************************************************************/ package com.b44t.messenger; -import android.text.TextUtils; +public class DcChat { -public class MrChat { + public final static int DC_CHAT_ID_DEADDROP = 1; + public final static int DC_CHAT_ID_STARRED = 5; + public final static int DC_CHAT_ID_ARCHIVED_LINK = 6; + public final static int DC_CHAT_ID_LAST_SPECIAL = 9; - public final static int MR_CHAT_ID_DEADDROP = 1; - public final static int MR_CHAT_ID_STARRED = 5; - public final static int MR_CHAT_ID_ARCHIVED_LINK = 6; - public final static int MR_CHAT_ID_LAST_SPECIAL = 9; - - public MrChat(long hChat) { + public DcChat(long hChat) { m_hChat = hChat; } @Override protected void finalize() throws Throwable { super.finalize(); - MrChatUnref(m_hChat); + DcChatUnref(m_hChat); m_hChat = 0; } - public native int getId(); + public native int getId(); public native boolean isGroup(); - public native int getArchived(); + public native int getArchived(); public native String getName(); public native String getSubtitle(); @@ -58,30 +51,10 @@ public class MrChat { public native String getDraft(); public native long getDraftTimestamp(); - private long m_hChat; // must not be renamed as referenced by JNI under the name "m_hChat" - private native static void MrChatUnref (long hChat); - - - /* additional functions that are not 1:1 available in the backend - **********************************************************************************************/ - + // working with raw c-data + private long m_hChat; // must not be renamed as referenced by JNI + private native static void DcChatUnref(long hChat); public long getCPtr() { return m_hChat; } - - public String getNameNAddr() - { - // returns name of group chats or name+email-address for normal chats - String name = "ErrGrpNameNAddr"; - if( isGroup() ) { - name = getName(); - } - else { - int contacts[] = MrMailbox.getChatContacts(getId()); - if( contacts.length==1 ) { - name = MrMailbox.getContact(contacts[0]).getNameNAddr(); - } - } - return name; - } } diff --git a/src/com/b44t/messenger/DcChatlist.java b/src/com/b44t/messenger/DcChatlist.java new file mode 100644 index 000000000..27f8c21be --- /dev/null +++ b/src/com/b44t/messenger/DcChatlist.java @@ -0,0 +1,57 @@ +/******************************************************************************* + * + * Delta Chat Android + * (C) 2017 Björn Petersen + * Contact: r10s@b44t.com, http://b44t.com + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later + * version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see http://www.gnu.org/licenses/ . + * + ******************************************************************************/ + + +package com.b44t.messenger; + + +public class DcChatlist { + public DcChatlist(long hChatlist) { + m_hChatlist = hChatlist; + } + + @Override protected void finalize() throws Throwable { + super.finalize(); + DcChatlistUnref(m_hChatlist); + m_hChatlist = 0; + } + + public native int getCnt(); + + public DcChat getChatByIndex(int index) { + return new DcChat(DcChatlistGetChatByIndex(m_hChatlist, index)); + } + + public DcMsg getMsgByIndex(int index) { + return new DcMsg(DcChatlistGetMsgByIndex(m_hChatlist, index)); + } + + public DcLot getSummaryByIndex(int index, DcChat chat) { + return new DcLot(DcChatlistGetSummaryByIndex(m_hChatlist, index, chat.getCPtr())); + } + + // working with raw c-data + private long m_hChatlist; // must not be renamed as referenced by JNI + private native static void DcChatlistUnref(long hChatlist); + private native static long DcChatlistGetChatByIndex(long hChatlist, int index); // returns hChat which must be unref'd after usage + private native static long DcChatlistGetMsgByIndex(long hChatlist, int index); // returns hMsg which must be unref'd after usage + private native static long DcChatlistGetSummaryByIndex(long hChatlist, int index, long hChat); +} diff --git a/src/com/b44t/messenger/MrContact.java b/src/com/b44t/messenger/DcContact.java similarity index 72% rename from src/com/b44t/messenger/MrContact.java rename to src/com/b44t/messenger/DcContact.java index 9ad568bc2..60c3c6da5 100644 --- a/src/com/b44t/messenger/MrContact.java +++ b/src/com/b44t/messenger/DcContact.java @@ -17,30 +17,25 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see http://www.gnu.org/licenses/ . * - ******************************************************************************* - * - * File: MrContact.java - * Purpose: Wrap around mrcontact_t - * ******************************************************************************/ package com.b44t.messenger; -public class MrContact { +public class DcContact { - public final static int MR_CONTACT_ID_SELF = 1; - public final static int MR_CONTACT_ID_DEVICE = 2; - public final static int MR_CONTACT_ID_LAST_SPECIAL = 9; + public final static int DC_CONTACT_ID_SELF = 1; + public final static int DC_CONTACT_ID_DEVICE = 2; + public final static int DC_CONTACT_ID_LAST_SPECIAL = 9; - public MrContact(long hContact) { + public DcContact(long hContact) { m_hContact = hContact; } @Override protected void finalize() throws Throwable { super.finalize(); - MrContactUnref(m_hContact); + DcContactUnref(m_hContact); m_hContact = 0; } @@ -52,6 +47,7 @@ public class MrContact { public native boolean isBlocked(); public native boolean isVerified(); - private long m_hContact; - private native static void MrContactUnref (long hContact); + // working with raw c-data + private long m_hContact; // must not be renamed as referenced by JNI + private native static void DcContactUnref(long hContact); } diff --git a/src/com/b44t/messenger/DcContext.java b/src/com/b44t/messenger/DcContext.java new file mode 100644 index 000000000..4389e9b33 --- /dev/null +++ b/src/com/b44t/messenger/DcContext.java @@ -0,0 +1,227 @@ +/******************************************************************************* + * + * Delta Chat Android + * (C) 2017 Björn Petersen + * Contact: r10s@b44t.com, http://b44t.com + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later + * version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see http://www.gnu.org/licenses/ . + * + ******************************************************************************/ + + +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; + public final static int DC_EVENT_MSGS_CHANGED = 2000; + public final static int DC_EVENT_INCOMING_MSG = 2005; + public final static int DC_EVENT_MSG_DELIVERED = 2010; + public final static int DC_EVENT_MSG_FAILED = 2012; + public final static int DC_EVENT_MSG_READ = 2015; + public final static int DC_EVENT_CHAT_MODIFIED = 2020; + public final static int DC_EVENT_CONTACTS_CHANGED = 2030; + public final static int DC_EVENT_CONFIGURE_PROGRESS = 2041; + public final static int DC_EVENT_IMEX_PROGRESS = 2051; + public final static int DC_EVENT_IMEX_FILE_WRITTEN = 2052; + public final static int DC_EVENT_SECUREJOIN_INVITER_PROGRESS = 2060; + public final static int DC_EVENT_SECUREJOIN_JOINER_PROGRESS = 2061; + public final static int DC_EVENT_IS_OFFLINE = 2081; + public final static int DC_EVENT_GET_STRING = 2091; + public final static int DC_EVENT_GET_QUANTITIY_STRING = 2092; + public final static int DC_EVENT_HTTP_GET = 2100; + + public final static int DC_IMEX_EXPORT_SELF_KEYS = 1; + public final static int DC_IMEX_IMPORT_SELF_KEYS = 2; + public final static int DC_IMEX_EXPORT_BACKUP = 11; + public final static int DC_IMEX_IMPORT_BACKUP = 12; + + public final static int DC_GCL_VERIFIED_ONLY = 1; + public final static int DC_GCL_ADD_SELF = 2; + public final static int DC_GCL_ARCHIVED_ONLY = 0x01; + public final static int DC_GCL_NO_SPECIALS = 0x02; + + public final static int DC_GCM_ADDDAYMARKER = 0x01; + + public final static int DC_QR_ASK_VERIFYCONTACT = 200; + public final static int DC_QR_ASK_VERIFYGROUP = 202; + public final static int DC_QR_FPR_OK = 210; + public final static int DC_QR_FPR_MISMATCH = 220; + public final static int DC_QR_FPR_WITHOUT_ADDR = 230; + public final static int DC_QR_ADDR = 320; + public final static int DC_QR_TEXT = 330; + public final static int DC_QR_URL = 332; + public final static int DC_QR_ERROR = 400; + + public static void init () { + m_hContext = DcContextNew(); + } + + 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); + + // 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 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 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; + } +} diff --git a/src/com/b44t/messenger/MrLot.java b/src/com/b44t/messenger/DcLot.java similarity index 64% rename from src/com/b44t/messenger/MrLot.java rename to src/com/b44t/messenger/DcLot.java index 1e61f7500..cec0a4794 100644 --- a/src/com/b44t/messenger/MrLot.java +++ b/src/com/b44t/messenger/DcLot.java @@ -17,40 +17,36 @@ * You should have received a copy of the GNU General Public License along with * this program. If not, see http://www.gnu.org/licenses/ . * - ******************************************************************************* - * - * File: MrLot.java - * Purpose: Wrap around mrpoortext_t - * ******************************************************************************/ package com.b44t.messenger; -public class MrLot { +public class DcLot { - public final static int MR_TEXT1_DRAFT = 1; - public final static int MR_TEXT1_USERNAME = 2; - public final static int MR_TEXT1_SELF = 3; + public final static int DC_TEXT1_DRAFT = 1; + public final static int DC_TEXT1_USERNAME = 2; + public final static int DC_TEXT1_SELF = 3; - public MrLot(long hLot) { + public DcLot(long hLot) { m_hLot = hLot; } @Override protected void finalize() throws Throwable { super.finalize(); - MrLotUnref(m_hLot); + DcLotUnref(m_hLot); m_hLot = 0; } public native String getText1(); - public native int getText1Meaning(); + public native int getText1Meaning(); public native String getText2(); - public native long getTimestamp(); - public native int getState(); - public native int getId(); + public native long getTimestamp(); + public native int getState(); + public native int getId(); - private long m_hLot; - private native static void MrLotUnref(long hLot); + // working with raw c-data + private long m_hLot; // must not be renamed as referenced by JNI + private native static void DcLotUnref(long hLot); } diff --git a/src/com/b44t/messenger/DcMsg.java b/src/com/b44t/messenger/DcMsg.java new file mode 100644 index 000000000..74c95b7ee --- /dev/null +++ b/src/com/b44t/messenger/DcMsg.java @@ -0,0 +1,92 @@ +/******************************************************************************* + * + * Delta Chat Android + * (C) 2017 Björn Petersen + * Contact: r10s@b44t.com, http://b44t.com + * + * This program is free software: you can redistribute it and/or modify it under + * the terms of the GNU General Public License as published by the Free Software + * Foundation, either version 3 of the License, or (at your option) any later + * version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more + * details. + * + * You should have received a copy of the GNU General Public License along with + * this program. If not, see http://www.gnu.org/licenses/ . + * + ******************************************************************************/ + + +package com.b44t.messenger; + +public class DcMsg { + + private static final String TAG = "DcMsg"; + + public final static int DC_MSG_UNDEFINED = 0; + public final static int DC_MSG_TEXT = 10; + public final static int DC_MSG_IMAGE = 20; + public final static int DC_MSG_GIF = 21; + public final static int DC_MSG_AUDIO = 40; + public final static int DC_MSG_VOICE = 41; + public final static int DC_MSG_VIDEO = 50; + public final static int DC_MSG_FILE = 60; + + public final static int DC_STATE_UNDEFINED = 0; + public final static int DC_STATE_IN_FRESH = 10; + public final static int DC_STATE_IN_NOTICED = 13; + public final static int DC_STATE_OUT_PENDING = 20; + public final static int DC_STATE_OUT_ERROR = 24; + public final static int DC_STATE_OUT_DELIVERED = 26; + public final static int DC_STATE_OUT_MDN_RCVD = 28; + + public final static int DC_MSG_ID_MARKER1 = 1; + public final static int DC_MSG_ID_DAYMARKER = 9; + + public DcMsg(long hMsg) { + m_hMsg = hMsg; + } + + @Override protected void finalize() throws Throwable { + super.finalize(); + DcMsgUnref(m_hMsg); + m_hMsg = 0; + } + + public native int getId(); + public native String getText(); + public native long getTimestamp(); + public native int getType(); + public native int getState(); + public native int getChatId(); + public native int getFromId(); + + public native int getWidth(int def); + public native int getHeight(int def); + public native int getDuration(); + public native void lateFilingMediaSize(int width, int height, int duration); + + 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(); + public native boolean isForwarded(); + public native boolean isInfo(); + public native boolean isSetupMessage(); + public native String getSetupCodeBegin(); + public native boolean isIncreation(); + + // working with raw c-data + private long m_hMsg; // must not be renamed as referenced by JNI + private native static void DcMsgUnref(long hMsg); + +}; diff --git a/src/com/b44t/messenger/MrChatlist.java b/src/com/b44t/messenger/MrChatlist.java deleted file mode 100644 index c9194e707..000000000 --- a/src/com/b44t/messenger/MrChatlist.java +++ /dev/null @@ -1,64 +0,0 @@ -/******************************************************************************* - * - * Delta Chat Android - * (C) 2017 Björn Petersen - * Contact: r10s@b44t.com, http://b44t.com - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, either version 3 of the License, or (at your option) any later - * version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see http://www.gnu.org/licenses/ . - * - ******************************************************************************* - * - * File: MrChatlist.java - * Purpose: Wrap around mrchatlist_t - * - ******************************************************************************/ - - -package com.b44t.messenger; - - -public class MrChatlist { - public MrChatlist(long hChatlist) { - m_hChatlist = hChatlist; - } - - @Override protected void finalize() throws Throwable { - super.finalize(); - MrChatlistUnref(m_hChatlist); - m_hChatlist = 0; - } - - public int getCnt() { - return MrChatlistGetCnt(m_hChatlist); - } - - public MrChat getChatByIndex(int index) { - return new MrChat(MrChatlistGetChatByIndex(m_hChatlist, index)); - } - - public MrMsg getMsgByIndex(int index) { - return new MrMsg(MrChatlistGetMsgByIndex(m_hChatlist, index)); - } - - public MrLot getSummaryByIndex(int index, MrChat chat) { - return new MrLot(MrChatlistGetSummaryByIndex(m_hChatlist, index, chat.getCPtr())); - } - - private long m_hChatlist; - private native static void MrChatlistUnref (long hChatlist); - private native static int MrChatlistGetCnt (long hChatlist); - private native static long MrChatlistGetChatByIndex (long hChatlist, int index); // returns hChat which must be unref'd after usage - private native static long MrChatlistGetMsgByIndex (long hChatlist, int index); // returns hMsg which must be unref'd after usage - private native static long MrChatlistGetSummaryByIndex(long hChatlist, int index, long hChat); -} diff --git a/src/com/b44t/messenger/MrMailbox.java b/src/com/b44t/messenger/MrMailbox.java deleted file mode 100644 index be11d6769..000000000 --- a/src/com/b44t/messenger/MrMailbox.java +++ /dev/null @@ -1,485 +0,0 @@ -/******************************************************************************* - * - * Delta Chat Android - * (C) 2017 Björn Petersen - * Contact: r10s@b44t.com, http://b44t.com - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, either version 3 of the License, or (at your option) any later - * version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see http://www.gnu.org/licenses/ . - * - ******************************************************************************* - * - * File: MrMailbox.java - * Purpose: Wrap around mrmailbox_t - * - ******************************************************************************/ - - -package com.b44t.messenger; - - -import android.app.Activity; -import android.content.SharedPreferences; -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 MrMailbox { - - public static void init () { - m_hMailbox = MrMailboxNew(); - } - - 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 final static int MR_IMEX_EXPORT_SELF_KEYS = 1; - public final static int MR_IMEX_IMPORT_SELF_KEYS = 2; - public final static int MR_IMEX_EXPORT_BACKUP = 11; - public final static int MR_IMEX_IMPORT_BACKUP = 12; - public native static void imex(int what, String dir); - public native static String imexHasBackup(String dir); - public native static int checkPassword(String pw); - - private static long m_hMailbox = 0; // do not rename this, is used in C-part - private native static long MrMailboxNew(); // returns hMailbox which must be unref'd after usage (Names as mrmailbox_new don't work due to the additional underscore) - - // contacts - public final static int MR_GCL_VERIFIED_ONLY = 1; - public final static int MR_GCL_ADD_SELF = 2; - public native static int[] getContacts(int flags, String query); - public native static int getBlockedCount(); - public native static int[] getBlockedContacts(); - - public static MrContact getContact(int contact_id) { - return new MrContact(MrMailboxGetContact(m_hMailbox, contact_id)); - } - - public static int createContact(String name, String addr) { - return MrMailboxCreateContact(m_hMailbox, name, addr); - } - - public static void blockContact(int id, int block) { - MrMailboxBlockContact(m_hMailbox, id, block); - } - - public native static String getContactEncrInfo(int contact_id); - - public static int deleteContact(int id) { - return MrMailboxDeleteContact(m_hMailbox, id); - } - - public static int addAddressBook(String adrbook) { - return MrMailboxAddAddressBook(m_hMailbox, adrbook); - } - - private native static long MrMailboxGetContact (long hMailbox, int id);// returns hContact which must be unref'd after usage - private native static int MrMailboxCreateContact (long hMailbox, String name, String addr); - private native static void MrMailboxBlockContact (long hMailbox, int id, int block); - private native static int MrMailboxDeleteContact (long hMailbox, int id); // returns 0 if the contact could not be deleted (eg. it is in use, maybe by deaddrop) - private native static int MrMailboxAddAddressBook (long hMailbox, String adrbook); - - - // chats - public final static int MR_GCL_ARCHIVED_ONLY = 0x01; - public final static int MR_GCL_NO_SPECIALS = 0x02; - public static MrChatlist getChatlist(int listflags, String query, int queryId) { - return new MrChatlist(MrMailboxGetChatlist(m_hMailbox, listflags, query, queryId)); - } - - public static MrChat getChat(int chat_id) { - return new MrChat(MrMailboxGetChat(m_hMailbox, 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 final static int MR_GCM_ADDDAYMARKER = 0x01; - 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); - - private native static long MrMailboxGetChatlist (long hMailbox, int listflags, String query, int queryId); // returns hChatlist which must be unref'd after usage - private native static long MrMailboxGetChat (long hMailbox, int chat_id); // return hChat which must be unref'd after usage - - - // msgs - public static MrMsg getMsg(int msg_id) { - return new MrMsg(MrMailboxGetMsg(m_hMailbox, msg_id)); - } - - public static String getMsgInfo(int id) { - return MrMailboxGetMsgInfo(m_hMailbox, id); - } - - public static native 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); - - private native static long MrMailboxGetMsg (long hMailbox, int id); // return hMsg which must be unref'd after usage - private native static String MrMailboxGetMsgInfo (long hMailbox, int id); - - // out-of-band verification - public final static int MR_QR_ASK_VERIFYCONTACT = 200; - public final static int MR_QR_ASK_VERIFYGROUP = 202; - public final static int MR_QR_FPR_OK = 210; - public final static int MR_QR_FPR_MISMATCH = 220; - public final static int MR_QR_FPR_WITHOUT_ADDR = 230; - public final static int MR_QR_ADDR = 320; - public final static int MR_QR_TEXT = 330; - public final static int MR_QR_URL = 332; - public final static int MR_QR_ERROR = 400; - public native static int checkQrCPtr(String qr); - public static MrLot checkQr(String qr) { return new MrLot(checkQrCPtr(qr)); } - - public native static String getSecurejoinQr(int chat_id); - public native static int joinSecurejoin(String qr); - - // static - public native static String MrGetVersionStr (); - public native static String CPtr2String (long hString); // get strings eg. from data1 from the callback - public native static long String2CPtr (String str); - - /* receive events - **********************************************************************************************/ - - public final static int MR_EVENT_INFO = 100; - public final static int MR_EVENT_WARNING = 300; - public final static int MR_EVENT_ERROR = 400; // INFO and WARNING are blocked in the mrwrapper.c - - public final static int MR_EVENT_MSGS_CHANGED = 2000; - public final static int MR_EVENT_INCOMING_MSG = 2005; - public final static int MR_EVENT_MSG_DELIVERED = 2010; - public final static int DC_EVENT_MSG_FAILED = 2012; - public final static int MR_EVENT_MSG_READ = 2015; - - public final static int MR_EVENT_CHAT_MODIFIED = 2020; - - public final static int MR_EVENT_CONTACTS_CHANGED = 2030; - - public final static int MR_EVENT_CONFIGURE_PROGRESS = 2041; - - public final static int MR_EVENT_IMEX_PROGRESS = 2051; - public final static int MR_EVENT_IMEX_FILE_WRITTEN = 2052; - - public final static int MR_EVENT_SECUREJOIN_INVITER_PROGRESS = 2060; - public final static int MR_EVENT_SECUREJOIN_JOINER_PROGRESS = 2061; - - public final static int MR_EVENT_IS_OFFLINE = 2081; - public final static int MR_EVENT_GET_STRING = 2091; - public final static int MR_EVENT_GET_QUANTITIY_STRING = 2092; - public final static int MR_EVENT_HTTP_GET = 2100; - - 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 MrCallback(final int event, final long data1, final long data2) // this function is called from within the C-wrapper - { - switch(event) { - case MR_EVENT_CONFIGURE_PROGRESS: - /*AndroidUtilities.runOnUIThread(new Runnable() { - @Override - public void run() { - if( data1 == 0 || data1 == 1000 ) { - NotificationCenter.getInstance().postNotificationName(NotificationCenter.configureEnded, (int)data1); - } - else { - NotificationCenter.getInstance().postNotificationName(NotificationCenter.configureProgress, (int)data1); - } - } - });*/ - return 0; - - case MR_EVENT_IMEX_PROGRESS: - /*AndroidUtilities.runOnUIThread(new Runnable() { - @Override - public void run() { - if (data1==0 || data1==1000) { - NotificationCenter.getInstance().postNotificationName(NotificationCenter.imexEnded, (int) data1); - } - else { - NotificationCenter.getInstance().postNotificationName(NotificationCenter.imexProgress, (int) data1); - } - } - });*/ - return 0; - - case MR_EVENT_IMEX_FILE_WRITTEN: { - /*final String fileName = CPtr2String(data1); - AndroidUtilities.runOnUIThread(new Runnable() { - @Override - public void run() { - NotificationCenter.getInstance().postNotificationName(NotificationCenter.imexFileWritten, fileName); - } - });*/ - } - return 0; - - case MR_EVENT_SECUREJOIN_INVITER_PROGRESS: - /*AndroidUtilities.runOnUIThread(new Runnable() { - @Override - public void run() { - NotificationCenter.getInstance().postNotificationName(NotificationCenter.secureJoinInviterProgress, (int)data1, (int)data2); - } - });*/ - return 0; - - case MR_EVENT_SECUREJOIN_JOINER_PROGRESS: - /*AndroidUtilities.runOnUIThread(new Runnable() { - @Override - public void run() { - NotificationCenter.getInstance().postNotificationName(NotificationCenter.secureJoinJoinerProgress, (int)data1, (int)data2); - } - });*/ - return 0; - - case MR_EVENT_MSGS_CHANGED: - case MR_EVENT_INCOMING_MSG: - /*AndroidUtilities.runOnUIThread(new Runnable() { - @Override - public void run() { - NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload, event, (int)data1, (int)data2); - if( event == MR_EVENT_INCOMING_MSG ) { - NotificationsController.getInstance().processNewMessages((int)data1, (int)data2); - } - } - });*/ - return 0; - - case MR_EVENT_MSG_DELIVERED: - case MR_EVENT_MSG_READ: - case DC_EVENT_MSG_FAILED: - /*AndroidUtilities.runOnUIThread(new Runnable() { - @Override - public void run() { - NotificationCenter.getInstance().postNotificationName(NotificationCenter.messagesSentOrRead, event, (int)data1, (int)data2); - NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload); - } - });*/ - return 0; - - case MR_EVENT_CONTACTS_CHANGED: - /*AndroidUtilities.runOnUIThread(new Runnable() { - @Override - public void run() { - NotificationCenter.getInstance().postNotificationName(NotificationCenter.contactsDidLoaded, (int)data1); - NotificationCenter.getInstance().postNotificationName(NotificationCenter.blockedUsersDidLoaded); - NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload); - } - });*/ - return 0; - - case MR_EVENT_CHAT_MODIFIED: - /*AndroidUtilities.runOnUIThread(new Runnable() { - @Override - public void run() { - NotificationCenter.getInstance().postNotificationName(NotificationCenter.dialogsNeedReload); - NotificationCenter.getInstance().postNotificationName(NotificationCenter.updateInterfaces, - UPDATE_MASK_NAME|UPDATE_MASK_CHAT_NAME| - UPDATE_MASK_CHAT_MEMBERS|UPDATE_MASK_AVATAR); - } - });*/ - return 0; - - case MR_EVENT_INFO: - Log.i("DeltaChat", CPtr2String(data2)); - break; - - case MR_EVENT_WARNING: - Log.w("DeltaChat", CPtr2String(data2)); - break; - - case MR_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 MR_EVENT_GET_STRING: - /*String s; - switch( (int)data1 ) { - // the string-IDs are defined in the backend; as this is the only place where they're used, there is no benefit in creating an enum or sth. like that. - case 1: s = ApplicationLoader.applicationContext.getString(R.string.NoMessages); break; - case 2: s = ApplicationLoader.applicationContext.getString(R.string.FromSelf); break; - case 3: s = ApplicationLoader.applicationContext.getString(R.string.Draft); break; - case 7: s = ApplicationLoader.applicationContext.getString(R.string.AttachVoiceMessage); break; - case 8: s = ApplicationLoader.applicationContext.getString(R.string.Deaddrop); break; - case 9: s = ApplicationLoader.applicationContext.getString(R.string.AttachPhoto); break; - case 10: s = ApplicationLoader.applicationContext.getString(R.string.AttachVideo); break; - case 11: s = ApplicationLoader.applicationContext.getString(R.string.Audio); break; - case 12: s = ApplicationLoader.applicationContext.getString(R.string.AttachDocument); break; - case 13: s = ApplicationLoader.applicationContext.getString(R.string.DefaultStatusText); break; - case 14: s = ApplicationLoader.applicationContext.getString(R.string.MsgNewGroupDraft); break; - case 15: s = ApplicationLoader.applicationContext.getString(R.string.MsgGroupNameChanged); break; - case 16: s = ApplicationLoader.applicationContext.getString(R.string.MsgGroupImageChanged); break; - case 17: s = ApplicationLoader.applicationContext.getString(R.string.MsgMemberAddedToGroup); break; - case 18: s = ApplicationLoader.applicationContext.getString(R.string.MsgMemberRemovedFromToGroup); break; - case 19: s = ApplicationLoader.applicationContext.getString(R.string.MsgGroupLeft); break; - case 20: s = ApplicationLoader.applicationContext.getString(R.string.Error); break; - case 21: s = ApplicationLoader.applicationContext.getString(R.string.ErrSelfNotInGroup); break; - case 22: s = ApplicationLoader.applicationContext.getString(R.string.NoNetwork); break; - case 23: s = ApplicationLoader.applicationContext.getString(R.string.AttachGif); break; - case 24: s = ApplicationLoader.applicationContext.getString(R.string.EncryptedMessage); break; - case 25: s = ApplicationLoader.applicationContext.getString(R.string.EncrinfoE2EAvailable); break; - case 27: s = ApplicationLoader.applicationContext.getString(R.string.EncrinfoTransport); break; - case 28: s = ApplicationLoader.applicationContext.getString(R.string.EncrinfoNone); break; - case 29: s = ApplicationLoader.applicationContext.getString(R.string.CannotDecryptBody); break; - case 30: s = ApplicationLoader.applicationContext.getString(R.string.EncrinfoFingerprints); break; - case 31: s = ApplicationLoader.applicationContext.getString(R.string.ReadReceipt); break; - case 32: s = ApplicationLoader.applicationContext.getString(R.string.ReadReceiptMailBody); break; - case 33: s = ApplicationLoader.applicationContext.getString(R.string.MsgGroupImageDeleted); break; - case 34: s = ApplicationLoader.applicationContext.getString(R.string.E2EEncryptionPreferred); break; - case 40: s = ApplicationLoader.applicationContext.getString(R.string.ArchivedChats); break; - case 42: s = ApplicationLoader.applicationContext.getString(R.string.AutocryptSetupMessageSubject); break; - case 43: s = ApplicationLoader.applicationContext.getString(R.string.AutocryptSetupMessageGeneralBody); break; - case 50: s = ApplicationLoader.applicationContext.getString(R.string.SelfTalkSubtitle); break; - case 60: s = ApplicationLoader.applicationContext.getString(R.string.ErrCannotLogin); break; - case 61: s = "" + ApplicationLoader.applicationContext.getString(R.string.ErrSeverResponse) + ""; break; - default: s = null; break; - } - return String2CPtr(s); - */ - return 0; - - case MR_EVENT_GET_QUANTITIY_STRING: - /*String sp = "ErrQtyStrBadId"; - switch( (int)data1 ) { - // the string-IDs are defined in the backend; as this is the only place where they're used, there is no benefit in creating an enum or sth. like that. - case 4: sp = ApplicationLoader.applicationContext.getResources().getQuantityString(R.plurals.Members, (int)data2, (int)data2); break; - case 6: sp = ApplicationLoader.applicationContext.getResources().getQuantityString(R.plurals.Contacts, (int)data2, (int)data2); break; - } - return String2CPtr(sp); - */ - return 0; - - case MR_EVENT_IS_OFFLINE: - //return ApplicationLoader.isNetworkOnline()? 0 : 1; - return 0; - - case MR_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; - } - - - /* additional functions that are not 1:1 available in the backend - **********************************************************************************************/ - - public static void log_i(String tag, String msg) - { - Log.i(tag, msg); - } - - public native static int getCurrentTime (); - - - - -} diff --git a/src/com/b44t/messenger/MrMsg.java b/src/com/b44t/messenger/MrMsg.java deleted file mode 100644 index 52a8ed26c..000000000 --- a/src/com/b44t/messenger/MrMsg.java +++ /dev/null @@ -1,102 +0,0 @@ -/******************************************************************************* - * - * Delta Chat Android - * (C) 2017 Björn Petersen - * Contact: r10s@b44t.com, http://b44t.com - * - * This program is free software: you can redistribute it and/or modify it under - * the terms of the GNU General Public License as published by the Free Software - * Foundation, either version 3 of the License, or (at your option) any later - * version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more - * details. - * - * You should have received a copy of the GNU General Public License along with - * this program. If not, see http://www.gnu.org/licenses/ . - * - ******************************************************************************* - * - * File: MrMsg.java - * Purpose: Wrap around mrmsg_t - * - ******************************************************************************/ - - -package com.b44t.messenger; - -import android.graphics.Bitmap; -import android.media.ThumbnailUtils; -import android.provider.MediaStore; - -import java.io.File; - -public class MrMsg { - - private static final String TAG = "MrMsg"; - - public final static int MR_MSG_UNDEFINED = 0; - public final static int MR_MSG_TEXT = 10; - public final static int MR_MSG_IMAGE = 20; - public final static int MR_MSG_GIF = 21; - public final static int MR_MSG_AUDIO = 40; - public final static int MR_MSG_VOICE = 41; - public final static int MR_MSG_VIDEO = 50; - public final static int MR_MSG_FILE = 60; - - public final static int MR_STATE_UNDEFINED = 0; - public final static int MR_IN_FRESH = 10; - public final static int MR_IN_NOTICED = 13; - public final static int MR_OUT_PENDING = 20; - public final static int MR_OUT_ERROR = 24; - public final static int MR_OUT_DELIVERED = 26; - public final static int MR_OUT_MDN_RCVD = 28; - - public final static int MR_MSG_ID_MARKER1 = 1; - public final static int MR_MSG_ID_DAYMARKER = 9; - - public MrMsg(long hMsg) { - m_hMsg = hMsg; - } - - @Override protected void finalize() throws Throwable { - super.finalize(); - MrMsgUnref(m_hMsg); - m_hMsg = 0; - } - - public native int getId(); - public native String getText(); - public native long getTimestamp(); - public native int getType(); - public native int getState(); - public native int getChatId(); - public native int getFromId(); - - public native int getWidth(int def); - public native int getHeight(int def); - public native int getDuration(); - public native void lateFilingMediaSize(int width, int height, int duration); - - public native int getBytes(); - public MrLot getSummary(MrChat chat) { return new MrLot(getSummaryCPtr(chat.getCPtr())); } - private native long getSummaryCPtr(long hChat); - public native String getSummarytext(int approx_characters); - public native int showPadlock(); - public MrLot getMediainfo() { return new MrLot(getMediainfoCPtr()); } - private native long getMediainfoCPtr(); - public native String getFile(); - public native String getFilemime(); - public native String getFilename(); - public native boolean isForwarded(); - public native boolean isInfo(); - public native boolean isSetupMessage(); - public native String getSetupCodeBegin(); - public native boolean isIncreation(); - - private long m_hMsg; // must not be renamed as referenced by JNI under the name "m_hMsg" - private native static void MrMsgUnref (long hMsg); - -}; diff --git a/src/org/thoughtcrime/securesms/ApplicationContext.java b/src/org/thoughtcrime/securesms/ApplicationContext.java index fa22338e4..cb55ad1ae 100644 --- a/src/org/thoughtcrime/securesms/ApplicationContext.java +++ b/src/org/thoughtcrime/securesms/ApplicationContext.java @@ -27,7 +27,7 @@ import android.support.annotation.NonNull; import android.support.multidex.MultiDexApplication; import android.util.Log; -import com.b44t.messenger.MrMailbox; +import com.b44t.messenger.DcContext; import com.google.android.gms.security.ProviderInstaller; import org.thoughtcrime.securesms.crypto.PRNGFixes; @@ -91,8 +91,8 @@ public class ApplicationContext extends MultiDexApplication implements Dependenc super.onCreate(); System.loadLibrary("native-utils"); - MrMailbox.MrCallback(0, 0, 0); // do not remove this call; this makes sure, the function is not removed from build or warnings are printed! - MrMailbox.init(); + 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(); initializeRandomNumberFix(); initializeLogging();