diff --git a/src/message_cache.cc b/src/message_cache.cc
index b8cfaf3..e83bad3 100644
--- a/src/message_cache.cc
+++ b/src/message_cache.cc
@@ -196,7 +196,7 @@ namespace pEp {
return false;
}
- static ::message *empty_message_copy(const ::message *src, std::string _id = "")
+ static ::message *empty_message_copy(const ::message *src, std::string _id = "", bool get_longmsg = false)
{
if (!src)
return nullptr;
@@ -207,12 +207,32 @@ namespace pEp {
dst->id = dup(src->id);
- if (!emptystr(src->shortmsg))
- dst->shortmsg = dup(src->shortmsg);
- else if (!emptystr(src->longmsg))
- dst->longmsg = dup("pEp");
- else if (!emptystr(src->longmsg_formatted))
- dst->longmsg_formatted = dup("");
+ if (get_longmsg) {
+ if (!emptystr(src->shortmsg)) {
+ dst->shortmsg = dup(src->shortmsg);
+ }
+ // We need either longmsg or longmsg_formatted for a "message preview".
+ if (!emptystr(src->longmsg)) {
+ dst->longmsg = dup(src->longmsg);
+ } else {
+ if (!emptystr(src->longmsg_formatted)) {
+ dst->longmsg_formatted = dup(src->longmsg_formatted);
+ }
+ }
+ } else {
+ // It is a pEp convention to return at least one of shortmsg, longmsg or longmsg_formatted.
+ if (!emptystr(src->shortmsg)) {
+ dst->shortmsg = dup(src->shortmsg);
+ } else {
+ if (!emptystr(src->longmsg)) {
+ dst->longmsg = dup("pEp");
+ } else {
+ if (!emptystr(src->longmsg_formatted)) {
+ dst->longmsg_formatted = dup("");
+ }
+ }
+ }
+ }
// attachments are never copied
@@ -313,7 +333,7 @@ namespace pEp {
::message *_dst = nullptr;
PEP_STATUS status = ::decrypt_message(session, src, &_dst, keylist, rating, flags);
- *dst = empty_message_copy(_dst, _id);
+ *dst = empty_message_copy(_dst, _id, true);
{
std::lock_guard l(_mtx);