diff options
Diffstat (limited to 'src/java/JavaIMAPOperationCallback.cpp')
-rw-r--r-- | src/java/JavaIMAPOperationCallback.cpp | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/src/java/JavaIMAPOperationCallback.cpp b/src/java/JavaIMAPOperationCallback.cpp new file mode 100644 index 00000000..fba857b8 --- /dev/null +++ b/src/java/JavaIMAPOperationCallback.cpp @@ -0,0 +1,45 @@ +#include "JavaIMAPOperationCallback.h" + +using namespace mailcore; + +static bool isIMAPOperationProgressListener(JNIEnv * env, jobject obj) +{ + jclass cls = env->FindClass("com/libmailcore/IMAPOperationProgressListener"); + return env->IsInstanceOf(obj, cls); +} + +static bool isIMAPOperationItemProgressListener(JNIEnv * env, jobject obj) +{ + jclass cls = env->FindClass("com/libmailcore/IMAPOperationItemProgressListener"); + return env->IsInstanceOf(obj, cls); +} + +JavaIMAPOperationCallback::JavaIMAPOperationCallback(JNIEnv * env, jobject listener) +{ + mEnv = env; + mListener = listener; +} + +void JavaIMAPOperationCallback::bodyProgress(IMAPOperation * session, unsigned int current, unsigned int maximum) +{ + if (!isIMAPOperationProgressListener(mEnv, mListener)) { + return; + } + + JNIEnv * env = mEnv; + jclass cls = mEnv->GetObjectClass(mListener); + jmethodID mid = mEnv->GetMethodID(cls, "bodyProgress", "(JJ)V"); + mEnv->CallVoidMethod(mListener, mid); +} + +void JavaIMAPOperationCallback::itemProgress(IMAPOperation * session, unsigned int current, unsigned int maximum) +{ + if (!isIMAPOperationItemProgressListener(mEnv, mListener)) { + return; + } + + JNIEnv * env = mEnv; + jclass cls = mEnv->GetObjectClass(mListener); + jmethodID mid = mEnv->GetMethodID(cls, "itemProgress", "(JJ)V"); + mEnv->CallVoidMethod(mListener, mid); +} |