diff options
Diffstat (limited to 'src')
5 files changed, 37 insertions, 14 deletions
diff --git a/src/java/TypesUtils.cpp b/src/java/TypesUtils.cpp index 961bed1a..92efe4e9 100644 --- a/src/java/TypesUtils.cpp +++ b/src/java/TypesUtils.cpp @@ -12,6 +12,7 @@ static chash * cppClassHash = NULL; static chash * javaClassHash = NULL; #define RANGE_MAX (1ULL >> 63ULL - 1ULL) +#define LOCAL_FRAME_CAPACITY 32 static void init(void); static void real_init(void); @@ -220,7 +221,7 @@ static jobject hashmapObjectToJavaConverter(JNIEnv * env, Object * obj) jmethodID method = env->GetMethodID(cls, "put", "(Ljava/lang/Object;Ljava/lang/Object;)V"); Array * keys = hashMap->allKeys(); for(unsigned int i = 0 ; i < keys->count() ; i ++) { - env->PushLocalFrame(32); + env->PushLocalFrame(LOCAL_FRAME_CAPACITY); Object * key = keys->objectAtIndex(i); jobject javaKey = mcObjectToJava(env, key); Object * value = hashMap->objectForKey(key); @@ -240,7 +241,7 @@ static jobject arrayObjectToJavaConverter(JNIEnv * env, Object * obj) jmethodID method = env->GetMethodID(cls, "add", "(Ljava/lang/Object;)Z"); MCLog("add method %p", method); for(unsigned int i = 0 ; i < array->count() ; i ++) { - env->PushLocalFrame(32); + env->PushLocalFrame(LOCAL_FRAME_CAPACITY); MCLog("converting object %s", MCUTF8(array->objectAtIndex(i))); jobject javaObject = mcObjectToJava(env, array->objectAtIndex(i)); MCLog("add object %p", javaObject); @@ -342,6 +343,7 @@ static bool isJavaMap(JNIEnv * env, jobject obj) static Object * hashmapJavaToObjectConverter(JNIEnv * env, jobject obj) { + env->PushLocalFrame(LOCAL_FRAME_CAPACITY); HashMap * result = HashMap::hashMap(); jclass javaClass = env->GetObjectClass(obj); jmethodID method = env->GetMethodID(javaClass, "entrySet", "()Ljava/util/Set;"); @@ -351,6 +353,7 @@ static Object * hashmapJavaToObjectConverter(JNIEnv * env, jobject obj) jobjectArray array = (jobjectArray) env->CallObjectMethod(entrySet, method); int count = (int) env->GetArrayLength(array); for(int i = 0 ; i < count ; i ++) { + env->PushLocalFrame(LOCAL_FRAME_CAPACITY); jobject entry = env->GetObjectArrayElement(array, i); javaClass = env->GetObjectClass(entry); method = env->GetMethodID(javaClass, "getKey", "()Ljava/lang/Object;"); @@ -360,7 +363,9 @@ static Object * hashmapJavaToObjectConverter(JNIEnv * env, jobject obj) jobject value = env->CallObjectMethod(entry, method); Object * mcValue = javaToMCObject(env, value); result->setObjectForKey(mcKey, mcValue); + env->PopLocalFrame(NULL); } + env->PopLocalFrame(NULL); return result; } @@ -372,6 +377,7 @@ static bool isJavaList(JNIEnv * env, jobject obj) static Object * arrayJavaToObjectConverter(JNIEnv * env, jobject obj) { + env->PushLocalFrame(LOCAL_FRAME_CAPACITY); Array * result = Array::array(); jclass javaClass = env->GetObjectClass(obj); jmethodID method = env->GetMethodID(javaClass, "toArray", "()[Ljava/lang/Object;"); @@ -380,8 +386,10 @@ static Object * arrayJavaToObjectConverter(JNIEnv * env, jobject obj) for(int i = 0 ; i < count ; i ++) { jobject item = env->GetObjectArrayElement(array, i); Object * mcItem = javaToMCObject(env, item); + env->DeleteLocalRef(item); result->addObject(mcItem); } + env->PopLocalFrame(NULL); return result; } @@ -438,13 +446,11 @@ Object * mailcore::javaToMCObject(JNIEnv * env, jobject obj) else if (isJavaMap(env, obj)) { return hashmapJavaToObjectConverter(env, obj); } - else if (isJavaMap(env, obj)) { - return arrayJavaToObjectConverter(env, obj); - } else if (isJavaList(env, obj)) { return arrayJavaToObjectConverter(env, obj); } else { + env->PushLocalFrame(LOCAL_FRAME_CAPACITY); Object * result = NULL; jclass javaClass = env->GetObjectClass(obj); @@ -468,7 +474,8 @@ Object * mailcore::javaToMCObject(JNIEnv * env, jobject obj) MCAssert(0); } env->ReleaseStringUTFChars(strObj, str); - + env->PopLocalFrame(NULL); + return result; } } diff --git a/src/java/com/libmailcore/HTMLRendererTemplateCallback.java b/src/java/com/libmailcore/HTMLRendererTemplateCallback.java index 57caebb1..d5840e2d 100644 --- a/src/java/com/libmailcore/HTMLRendererTemplateCallback.java +++ b/src/java/com/libmailcore/HTMLRendererTemplateCallback.java @@ -12,9 +12,9 @@ public interface HTMLRendererTemplateCallback { /** Returns true if an attachment should (such as an image) be shown. */ boolean shouldShowPart(AbstractPart part); /** Returns the values used in the header template for a given template. */ - Map<String, String> templateValuesForHeader(MessageHeader header); + Map<String, Object> templateValuesForHeader(MessageHeader header); /** Returns the values used in the attachment template for a given attachment. */ - Map<String, String> templateValuesForPart(AbstractPart part); + Map<String, Object> templateValuesForPart(AbstractPart part); /** Returns the template for the main header of the message. */ String templateForMainHeader(MessageHeader header); /** Returns the template to render an image. */ @@ -39,7 +39,7 @@ public interface HTMLRendererTemplateCallback { Clean a HTML string. The default implementation fixes broken tags, add missing <html>, <body> tags. */ - String cleanHTML(String html); + String cleanHTMLForPart(String html); /** Filter the HTML when rendering a given part. For example, it could filter out dangerous HTML tags or CSS style. diff --git a/src/java/com/libmailcore/HTMLRendererTemplateCallbackUtils.java b/src/java/com/libmailcore/HTMLRendererTemplateCallbackUtils.java index 0cb44a33..8649e909 100644 --- a/src/java/com/libmailcore/HTMLRendererTemplateCallbackUtils.java +++ b/src/java/com/libmailcore/HTMLRendererTemplateCallbackUtils.java @@ -6,8 +6,8 @@ import java.util.Map; public class HTMLRendererTemplateCallbackUtils { native static boolean canPreviewPart(AbstractPart part); native static boolean shouldShowPart(AbstractPart part); - native static Map<String, String> templateValuesForHeader(MessageHeader header); - native static Map<String, String> templateValuesForPart(AbstractPart part); + native static Map<String, Object> templateValuesForHeader(MessageHeader header); + native static Map<String, Object> templateValuesForPart(AbstractPart part); native static String templateForMainHeader(MessageHeader header); native static String templateForImage(AbstractPart part); native static String templateForAttachment(AbstractPart part); @@ -15,7 +15,7 @@ public class HTMLRendererTemplateCallbackUtils { native static String templateForEmbeddedMessage(AbstractMessagePart messagePart); native static String templateForEmbeddedMessageHeader(MessageHeader header); native static String templateForAttachmentSeparator(); - native static String cleanHTML(String html); + native static String cleanHTMLForPart(String html); native static String filterHTMLForPart(String html); native static String filterHTMLForMessage(String html); } diff --git a/src/java/native/com_libmailcore_AbstractPart.h b/src/java/native/com_libmailcore_AbstractPart.h index eeb076af..92fd9e47 100644 --- a/src/java/native/com_libmailcore_AbstractPart.h +++ b/src/java/native/com_libmailcore_AbstractPart.h @@ -43,6 +43,22 @@ JNIEXPORT void JNICALL Java_com_libmailcore_AbstractPart_setFilename /* * Class: com_libmailcore_AbstractPart + * Method: mimeType + * Signature: ()Ljava/lang/String; + */ +JNIEXPORT jstring JNICALL Java_com_libmailcore_AbstractPart_mimeType + (JNIEnv *, jobject); + +/* + * Class: com_libmailcore_AbstractPart + * Method: setMimeType + * Signature: (Ljava/lang/String;)V + */ +JNIEXPORT void JNICALL Java_com_libmailcore_AbstractPart_setMimeType + (JNIEnv *, jobject, jstring); + +/* + * Class: com_libmailcore_AbstractPart * Method: charset * Signature: ()Ljava/lang/String; */ diff --git a/src/java/native/com_libmailcore_HTMLRendererTemplateCallbackUtils.h b/src/java/native/com_libmailcore_HTMLRendererTemplateCallbackUtils.h index 4ff2321c..51128e11 100644 --- a/src/java/native/com_libmailcore_HTMLRendererTemplateCallbackUtils.h +++ b/src/java/native/com_libmailcore_HTMLRendererTemplateCallbackUtils.h @@ -97,10 +97,10 @@ JNIEXPORT jstring JNICALL Java_com_libmailcore_HTMLRendererTemplateCallbackUtils /* * Class: com_libmailcore_HTMLRendererTemplateCallbackUtils - * Method: cleanHTML + * Method: cleanHTMLForPart * Signature: (Ljava/lang/String;)Ljava/lang/String; */ -JNIEXPORT jstring JNICALL Java_com_libmailcore_HTMLRendererTemplateCallbackUtils_cleanHTML +JNIEXPORT jstring JNICALL Java_com_libmailcore_HTMLRendererTemplateCallbackUtils_cleanHTMLForPart (JNIEnv *, jclass, jstring); /* |