aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/java/JavaIMAPOperationCallback.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/java/JavaIMAPOperationCallback.cpp')
-rw-r--r--src/java/JavaIMAPOperationCallback.cpp45
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);
+}