aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Herb Hrowal <hhrowal@gmail.com>2016-04-16 10:36:17 -0700
committerGravatar HoĆ  V. DINH <dinh.viet.hoa@gmail.com>2016-04-16 10:36:17 -0700
commit19b4b8e47145fa611f8022eb35d1d31f4b8f96a1 (patch)
tree78c181ef575ae7e56ef6db6c33efee5616cbd78e /src
parent7932a9159aa6748ffdc53f434942992de8ad77a5 (diff)
More android fixes and additions (#1400)
* Fixed templateForMessage to get the correct method. * Fixed hashmapJavaToObjectConverter to correctly convert from java.util.HashMap to mailcore::HashMap * * Fixed fetchArticleByMessageIDOperation to correctly reflect changes in the core * Fixed com_libmailcore_IMAPSession_folderStatusOperation to call folderStatusOperation instead of folderInfoOperation * Added calls to PushLocalFrame and PushLocalFrame to prevent the local reference table from filling up. * Changed signature of templateValuesForHeader and templateValuesForPart to return Map<String, Object> instead of Map<String, String> to better reflect the core methods. * Renamed cleanHTML to cleanHTMLForPart to reflect the core method. * Added mimeType() and setMimeType(). * Made LOCAL_FRAME_CAPACITY constant to use in calls to PushLocalFrame. Fixed indents.
Diffstat (limited to 'src')
-rw-r--r--src/java/TypesUtils.cpp19
-rw-r--r--src/java/com/libmailcore/HTMLRendererTemplateCallback.java6
-rw-r--r--src/java/com/libmailcore/HTMLRendererTemplateCallbackUtils.java6
-rw-r--r--src/java/native/com_libmailcore_AbstractPart.h16
-rw-r--r--src/java/native/com_libmailcore_HTMLRendererTemplateCallbackUtils.h4
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 &lt;html&gt;, &lt;body&gt; 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);
/*