@@ -2129,6 +2129,9 @@ static int me_minst(int argc, char **argv, int sockd) try
21292129
21302130 uint8_t b_unsent = strchr (argv[4 ], midb_flag::unsent) != nullptr ;
21312131 uint8_t b_read = strchr (argv[4 ], midb_flag::seen) != nullptr ;
2132+ uint8_t b_answered = strchr (argv[4 ], midb_flag::answered) != nullptr ;
2133+ uint8_t b_flagged = strchr (argv[4 ], midb_flag::flagged) != nullptr ;
2134+ uint8_t b_forwarded = strchr (argv[4 ], midb_flag::forwarded) != nullptr ;
21322135 std::string pbuff;
21332136 if (!exmdb_client->imapfile_read (argv[1 ], " eml" , argv[3 ], &pbuff)) {
21342137 mlog (LV_ERR, " E-2071: imapfile_read %s/eml/%s failed" , argv[1 ], argv[3 ]);
@@ -2185,6 +2188,22 @@ static int me_minst(int argc, char **argv, int sockd) try
21852188 if (pmsgctnt->proplist .set (PR_MESSAGE_FLAGS, &tmp_flags) != ecSuccess)
21862189 return MIDB_E_NO_MEMORY;
21872190 }
2191+ if (b_answered) {
2192+ const uint32_t val = MAIL_ICON_REPLIED;
2193+ if (pmsgctnt->proplist .set (PR_ICON_INDEX, &val) != ecSuccess)
2194+ return MIDB_E_NO_MEMORY;
2195+ } else if (b_forwarded) {
2196+ const uint32_t val = MAIL_ICON_FORWARDED;
2197+ if (pmsgctnt->proplist .set (PR_ICON_INDEX, &val) != ecSuccess)
2198+ return MIDB_E_NO_MEMORY;
2199+ }
2200+ if (b_flagged) {
2201+ static constexpr uint32_t val = followupFlagged, icon = olRedFlagIcon;
2202+ if (pmsgctnt->proplist .set (PR_FLAG_STATUS, &val) != ecSuccess ||
2203+ pmsgctnt->proplist .set (PR_FOLLOWUP_ICON, &icon) != ecSuccess)
2204+ return MIDB_E_NO_MEMORY;
2205+ }
2206+
21882207 if (!exmdb_client->allocate_message_id (argv[1 ],
21892208 rop_util_make_eid_ex (1 , folder_id), &message_id) ||
21902209 !exmdb_client->allocate_cn (argv[1 ], &change_num))
@@ -3112,6 +3131,8 @@ static int me_psflg(int argc, char **argv, int sockd) try
31123131 /*
31133132 * The backnotification (msg_modified) arrives belatedly, so we UPDATE
31143133 * the table here already.
3134+ * (This does not integrate with msg_added at all. If msg_added arrives
3135+ * belatedly, UPDATE will update 0 rows.)
31153136 */
31163137 std::string qstr = " UPDATE messages SET " ;
31173138 bool set_answered = strchr (argv[4 ], midb_flag::answered) != nullptr ;
@@ -3589,6 +3610,11 @@ static void notif_msg_added(IDB_ITEM *pidb,
35893610 if (pstmt == nullptr )
35903611 return ;
35913612 if (pstmt.step () == SQLITE_ROW) {
3613+ /*
3614+ * Get back the flags we temporarily put down during
3615+ * M-INST, especially e.g. \Deleted which is not
3616+ * transferred to MAPI.
3617+ */
35923618 flags_buff = znul (pstmt.col_text (1 ));
35933619 gx_strlcpy (mid_string, pstmt.col_text (0 ), std::size (mid_string));
35943620 str = mid_string;
0 commit comments