lib/mu-msg: update to use mu-message-fields

Remove mu-msg-fields.[ch] and update sources to use mu-message-fields.
This commit is contained in:
Dirk-Jan C. Binnema
2022-03-04 00:04:30 +02:00
parent c3ae3da0de
commit 7c185590e4
8 changed files with 190 additions and 899 deletions

View File

@ -40,6 +40,7 @@
#include "mu-maildir.hh"
using namespace Mu;
using namespace Mu::Message;
/* note, we do the gmime initialization here rather than in
* mu-runtime, because this way we don't need mu-runtime for simple
@ -101,8 +102,8 @@ Mu::mu_msg_new_from_file(const char* path, const char* mdir, GError** err)
self->_file = msgfile;
g_debug("created message from %s in %" G_GINT64_FORMAT " μs",
path,
g_get_monotonic_time() - start);
path,
g_get_monotonic_time() - start);
return self;
}
@ -197,12 +198,12 @@ get_path(MuMsg* self)
val = NULL;
if (self->_doc)
val = mu_msg_doc_get_str_field(self->_doc, MU_MSG_FIELD_ID_PATH);
val = mu_msg_doc_get_str_field(self->_doc, Field::Id::Path);
/* not in the cache yet? try to get it from the file backend,
* in case we are using that */
if (!val && self->_file)
val = mu_msg_file_get_str_field(self->_file, MU_MSG_FIELD_ID_PATH, &do_free);
val = mu_msg_file_get_str_field(self->_file, Field::Id::Path, &do_free);
/* shouldn't happen */
if (!val)
@ -242,27 +243,28 @@ Mu::mu_msg_unload_msg_file(MuMsg* msg)
}
static const GSList*
get_str_list_field(MuMsg* self, MuMsgFieldId mfid)
get_str_list_field(MuMsg* self, Field::Id field_id)
{
GSList* val;
val = NULL;
if (self->_doc && mu_msg_field_xapian_value(mfid))
val = mu_msg_doc_get_str_list_field(self->_doc, mfid);
else if (mu_msg_field_gmime(mfid)) {
if (self->_doc &&
any_of(message_field(field_id).flags & Field::Flag::Value))
val = mu_msg_doc_get_str_list_field(self->_doc, field_id);
else if (any_of(message_field(field_id).flags & Field::Flag::GMime)) {
/* if we don't have a file object yet, we need to
* create it from the file on disk */
if (!mu_msg_load_msg_file(self, NULL))
return NULL;
val = mu_msg_file_get_str_list_field(self->_file, mfid);
val = mu_msg_file_get_str_list_field(self->_file, field_id);
}
return free_later_lst(self, val);
}
static const char*
get_str_field(MuMsg* self, MuMsgFieldId mfid)
get_str_field(MuMsg* self, Field::Id field_id)
{
char* val;
gboolean do_free;
@ -270,15 +272,16 @@ get_str_field(MuMsg* self, MuMsgFieldId mfid)
do_free = TRUE;
val = NULL;
if (self->_doc && mu_msg_field_xapian_value(mfid))
val = mu_msg_doc_get_str_field(self->_doc, mfid);
if (self->_doc &&
any_of(message_field(field_id).flags & Field::Flag::Value))
val = mu_msg_doc_get_str_field(self->_doc, field_id);
else if (mu_msg_field_gmime(mfid)) {
else if (any_of(message_field(field_id).flags & Field::Flag::GMime)) {
/* if we don't have a file object yet, we need to
* create it from the file on disk */
if (!mu_msg_load_msg_file(self, NULL))
return NULL;
val = mu_msg_file_get_str_field(self->_file, mfid, &do_free);
val = mu_msg_file_get_str_field(self->_file, field_id, &do_free);
} else
val = NULL;
@ -286,17 +289,18 @@ get_str_field(MuMsg* self, MuMsgFieldId mfid)
}
static gint64
get_num_field(MuMsg* self, MuMsgFieldId mfid)
get_num_field(MuMsg* self, Field::Id field_id)
{
if (self->_doc && mu_msg_field_xapian_value(mfid))
return mu_msg_doc_get_num_field(self->_doc, mfid);
if (self->_doc &&
any_of(message_field(field_id).flags & Field::Flag::Value))
return mu_msg_doc_get_num_field(self->_doc, field_id);
/* if we don't have a file object yet, we need to
* create it from the file on disk */
if (!mu_msg_load_msg_file(self, NULL))
return -1;
return mu_msg_file_get_num_field(self->_file, mfid);
return mu_msg_file_get_num_field(self->_file, field_id);
}
const char*
@ -312,7 +316,7 @@ Mu::mu_msg_get_header(MuMsg* self, const char* header)
err = NULL;
if (!mu_msg_load_msg_file(self, &err)) {
g_warning("failed to load message file: %s",
err ? err->message : "something went wrong");
err ? err->message : "something went wrong");
return NULL;
}
@ -341,21 +345,21 @@ const char*
Mu::mu_msg_get_path(MuMsg* self)
{
g_return_val_if_fail(self, NULL);
return get_str_field(self, MU_MSG_FIELD_ID_PATH);
return get_str_field(self, Field::Id::Path);
}
const char*
Mu::mu_msg_get_subject(MuMsg* self)
{
g_return_val_if_fail(self, NULL);
return get_str_field(self, MU_MSG_FIELD_ID_SUBJECT);
return get_str_field(self, Field::Id::Subject);
}
const char*
Mu::mu_msg_get_msgid(MuMsg* self)
{
g_return_val_if_fail(self, NULL);
return get_str_field(self, MU_MSG_FIELD_ID_MSGID);
return get_str_field(self, Field::Id::MessageId);
}
const char*
@ -366,7 +370,7 @@ Mu::mu_msg_get_mailing_list(MuMsg* self)
g_return_val_if_fail(self, NULL);
ml = get_str_field(self, MU_MSG_FIELD_ID_MAILING_LIST);
ml = get_str_field(self, Field::Id::MailingList);
if (!ml)
return NULL;
@ -381,56 +385,56 @@ const char*
Mu::mu_msg_get_maildir(MuMsg* self)
{
g_return_val_if_fail(self, NULL);
return get_str_field(self, MU_MSG_FIELD_ID_MAILDIR);
return get_str_field(self, Field::Id::Maildir);
}
const char*
Mu::mu_msg_get_from(MuMsg* self)
{
g_return_val_if_fail(self, NULL);
return get_str_field(self, MU_MSG_FIELD_ID_FROM);
return get_str_field(self, Field::Id::From);
}
const char*
Mu::mu_msg_get_to(MuMsg* self)
{
g_return_val_if_fail(self, NULL);
return get_str_field(self, MU_MSG_FIELD_ID_TO);
return get_str_field(self, Field::Id::To);
}
const char*
Mu::mu_msg_get_cc(MuMsg* self)
{
g_return_val_if_fail(self, NULL);
return get_str_field(self, MU_MSG_FIELD_ID_CC);
return get_str_field(self, Field::Id::Cc);
}
const char*
Mu::mu_msg_get_bcc(MuMsg* self)
{
g_return_val_if_fail(self, NULL);
return get_str_field(self, MU_MSG_FIELD_ID_BCC);
return get_str_field(self, Field::Id::Bcc);
}
time_t
Mu::mu_msg_get_date(MuMsg* self)
{
g_return_val_if_fail(self, (time_t)-1);
return (time_t)get_num_field(self, MU_MSG_FIELD_ID_DATE);
return (time_t)get_num_field(self, Field::Id::Date);
}
MessageFlags
Mu::mu_msg_get_flags(MuMsg* self)
{
g_return_val_if_fail(self, MessageFlags::None);
return static_cast<MessageFlags>(get_num_field(self, MU_MSG_FIELD_ID_FLAGS));
return static_cast<MessageFlags>(get_num_field(self, Field::Id::Flags));
}
size_t
Mu::mu_msg_get_size(MuMsg* self)
{
g_return_val_if_fail(self, (size_t)-1);
return (size_t)get_num_field(self, MU_MSG_FIELD_ID_SIZE);
return (size_t)get_num_field(self, Field::Id::Size);
}
Mu::MessagePriority
@ -439,7 +443,7 @@ Mu::mu_msg_get_prio(MuMsg* self)
g_return_val_if_fail(self, MessagePriority{});
return message_priority_from_char(
static_cast<char>(get_num_field(self, MU_MSG_FIELD_ID_PRIO)));
static_cast<char>(get_num_field(self, Field::Id::Priority)));
}
struct _BodyData {
@ -514,7 +518,7 @@ find_content_type(MuMsg* msg, MuMsgPart* mpart, ContentTypeData* cdata)
if (!cdata->want_html && (mpart->part_type & MU_MSG_PART_TYPE_TEXT_PLAIN))
wanted = (GMimePart*)mpart->data;
else if (!(mpart->part_type & MU_MSG_PART_TYPE_ATTACHMENT) && cdata->want_html &&
(mpart->part_type & MU_MSG_PART_TYPE_TEXT_HTML))
(mpart->part_type & MU_MSG_PART_TYPE_TEXT_HTML))
wanted = (GMimePart*)mpart->data;
else
wanted = NULL;
@ -583,35 +587,35 @@ const GSList*
Mu::mu_msg_get_references(MuMsg* self)
{
g_return_val_if_fail(self, NULL);
return get_str_list_field(self, MU_MSG_FIELD_ID_REFS);
return get_str_list_field(self, Field::Id::References);
}
const GSList*
Mu::mu_msg_get_tags(MuMsg* self)
{
g_return_val_if_fail(self, NULL);
return get_str_list_field(self, MU_MSG_FIELD_ID_TAGS);
return get_str_list_field(self, Field::Id::Tags);
}
const char*
Mu::mu_msg_get_field_string(MuMsg* self, MuMsgFieldId mfid)
Mu::mu_msg_get_field_string(MuMsg* self, Field::Id field_id)
{
g_return_val_if_fail(self, NULL);
return get_str_field(self, mfid);
return get_str_field(self, field_id);
}
const GSList*
Mu::mu_msg_get_field_string_list(MuMsg* self, MuMsgFieldId mfid)
Mu::mu_msg_get_field_string_list(MuMsg* self, Field::Id field_id)
{
g_return_val_if_fail(self, NULL);
return get_str_list_field(self, mfid);
return get_str_list_field(self, field_id);
}
gint64
Mu::mu_msg_get_field_numeric(MuMsg* self, MuMsgFieldId mfid)
Mu::mu_msg_get_field_numeric(MuMsg* self, Field::Id field_id)
{
g_return_val_if_fail(self, -1);
return get_num_field(self, mfid);
return get_num_field(self, field_id);
}
@ -624,14 +628,14 @@ get_all_contacts(MuMsg *self)
MessageContact::Type::Cc, MessageContact::Type::ReplyTo,
MessageContact::Type::Bcc}) {
auto type_contacts{mu_msg_get_contacts(self, mtype)};
contacts.reserve(contacts.size() + type_contacts.size());
contacts.insert(contacts.end(), type_contacts.begin(), type_contacts.end());
}
return contacts;
}
Mu::MessageContacts
Mu::mu_msg_get_contacts(MuMsg *self, MessageContact::Type mtype)
{
@ -642,7 +646,7 @@ Mu::mu_msg_get_contacts(MuMsg *self, MessageContact::Type mtype)
if (mtype == MessageContact::Type::Unknown)
return get_all_contacts(self);
const auto info = std::invoke([&]()->AddressInfo {
switch (mtype) {
case MessageContact::Type::From:
@ -666,12 +670,12 @@ Mu::mu_msg_get_contacts(MuMsg *self, MessageContact::Type mtype)
self->_file->_mime_msg, info.first)}; lst)
return make_message_contacts(lst, mtype, mdate);
} else if (info.second) {
if (auto&& lst_str{info.second(self)}; lst_str)
if (auto&& lst_str{info.second(self)}; lst_str)
return make_message_contacts(lst_str, mtype, mdate);
}
return {};
}
@ -692,11 +696,11 @@ Mu::mu_msg_is_readable(MuMsg* self)
bool
Mu::mu_msg_move_to_maildir(MuMsg* self,
const std::string& root_maildir_path,
const std::string& target_maildir,
const std::string& target_maildir,
MessageFlags flags,
bool ignore_dups,
bool new_name,
GError** err)
bool ignore_dups,
bool new_name,
GError** err)
{
g_return_val_if_fail(self, false);
@ -763,7 +767,7 @@ Mu::mu_str_display_contact_s(const char* str)
for (c2 = contact; c2 < c && !(isalnum(*c2)); ++c2)
;
if (c2 != c) /* apparently, there was something,
* so we can remove the <... part*/
* so we can remove the <... part*/
*c = '\0';
}