mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-28 13:44:12 +01:00
lib: add notmuch_message_has_maildir_flag_st
Initially the new function is mainly tested indirectly via the wrapper.
This commit is contained in:
parent
b21f0fcb6a
commit
b7572ceb14
3 changed files with 73 additions and 7 deletions
|
@ -1717,7 +1717,7 @@ _filename_is_in_maildir (const char *filename)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static notmuch_status_t
|
||||||
_ensure_maildir_flags (notmuch_message_t *message, bool force)
|
_ensure_maildir_flags (notmuch_message_t *message, bool force)
|
||||||
{
|
{
|
||||||
const char *flags;
|
const char *flags;
|
||||||
|
@ -1732,9 +1732,10 @@ _ensure_maildir_flags (notmuch_message_t *message, bool force)
|
||||||
message->maildir_flags = NULL;
|
message->maildir_flags = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* n_m_get_filenames returns NULL for errors, which terminates the
|
filenames = notmuch_message_get_filenames (message);
|
||||||
* loop */
|
if (! filenames)
|
||||||
for (filenames = notmuch_message_get_filenames (message);
|
return NOTMUCH_STATUS_XAPIAN_EXCEPTION;
|
||||||
|
for (;
|
||||||
notmuch_filenames_valid (filenames);
|
notmuch_filenames_valid (filenames);
|
||||||
notmuch_filenames_move_to_next (filenames)) {
|
notmuch_filenames_move_to_next (filenames)) {
|
||||||
filename = notmuch_filenames_get (filenames);
|
filename = notmuch_filenames_get (filenames);
|
||||||
|
@ -1760,13 +1761,37 @@ _ensure_maildir_flags (notmuch_message_t *message, bool force)
|
||||||
}
|
}
|
||||||
if (seen_maildir_info)
|
if (seen_maildir_info)
|
||||||
message->maildir_flags = combined_flags;
|
message->maildir_flags = combined_flags;
|
||||||
|
return NOTMUCH_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
notmuch_bool_t
|
notmuch_bool_t
|
||||||
notmuch_message_has_maildir_flag (notmuch_message_t *message, char flag)
|
notmuch_message_has_maildir_flag (notmuch_message_t *message, char flag)
|
||||||
{
|
{
|
||||||
_ensure_maildir_flags (message, false);
|
notmuch_status_t status;
|
||||||
return message->maildir_flags && (strchr (message->maildir_flags, flag) != NULL);
|
notmuch_bool_t ret;
|
||||||
|
status = notmuch_message_has_maildir_flag_st (message, flag, &ret);
|
||||||
|
if (status)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
notmuch_status_t
|
||||||
|
notmuch_message_has_maildir_flag_st (notmuch_message_t *message,
|
||||||
|
char flag,
|
||||||
|
notmuch_bool_t *is_set)
|
||||||
|
{
|
||||||
|
notmuch_status_t status;
|
||||||
|
|
||||||
|
if (! is_set)
|
||||||
|
return NOTMUCH_STATUS_NULL_POINTER;
|
||||||
|
|
||||||
|
status = _ensure_maildir_flags (message, false);
|
||||||
|
if (status)
|
||||||
|
return status;
|
||||||
|
|
||||||
|
*is_set = message->maildir_flags && (strchr (message->maildir_flags, flag) != NULL);
|
||||||
|
return NOTMUCH_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
notmuch_status_t
|
notmuch_status_t
|
||||||
|
@ -1775,7 +1800,9 @@ notmuch_message_maildir_flags_to_tags (notmuch_message_t *message)
|
||||||
notmuch_status_t status;
|
notmuch_status_t status;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
_ensure_maildir_flags (message, true);
|
status = _ensure_maildir_flags (message, true);
|
||||||
|
if (status)
|
||||||
|
return status;
|
||||||
/* If none of the filenames have any maildir info field (not even
|
/* If none of the filenames have any maildir info field (not even
|
||||||
* an empty info with no flags set) then there's no information to
|
* an empty info with no flags set) then there's no information to
|
||||||
* go on, so do nothing. */
|
* go on, so do nothing. */
|
||||||
|
|
|
@ -1680,10 +1680,32 @@ notmuch_message_maildir_flags_to_tags (notmuch_message_t *message);
|
||||||
* return TRUE if any filename of 'message' has maildir flag 'flag',
|
* return TRUE if any filename of 'message' has maildir flag 'flag',
|
||||||
* FALSE otherwise.
|
* FALSE otherwise.
|
||||||
*
|
*
|
||||||
|
* Deprecated wrapper for notmuch_message_has_maildir_flag_st
|
||||||
|
*
|
||||||
|
* @returns FALSE in case of error
|
||||||
|
* @deprecated libnotmuch 5.3 (notmuch 0.31)
|
||||||
*/
|
*/
|
||||||
|
NOTMUCH_DEPRECATED(5, 3)
|
||||||
notmuch_bool_t
|
notmuch_bool_t
|
||||||
notmuch_message_has_maildir_flag (notmuch_message_t *message, char flag);
|
notmuch_message_has_maildir_flag (notmuch_message_t *message, char flag);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* check message for maildir flag
|
||||||
|
*
|
||||||
|
* @param [in,out] message message to check
|
||||||
|
* @param [in] flag flag to check for
|
||||||
|
* @param [out] is_set pointer to boolean
|
||||||
|
*
|
||||||
|
* @retval #NOTMUCH_STATUS_SUCCESS
|
||||||
|
* @retval #NOTMUCH_STATUS_NULL_POINTER is_set is NULL
|
||||||
|
* @retval #NOTMUCH_STATUS_XAPIAN_EXCEPTION Accessing the database
|
||||||
|
* triggered an exception.
|
||||||
|
*/
|
||||||
|
notmuch_status_t
|
||||||
|
notmuch_message_has_maildir_flag_st (notmuch_message_t *message,
|
||||||
|
char flag,
|
||||||
|
notmuch_bool_t *is_set);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Rename message filename(s) to encode tags as maildir flags.
|
* Rename message filename(s) to encode tags as maildir flags.
|
||||||
*
|
*
|
||||||
|
|
|
@ -549,4 +549,21 @@ cat <<EOF > EXPECTED
|
||||||
EOF
|
EOF
|
||||||
test_expect_equal_file EXPECTED OUTPUT
|
test_expect_equal_file EXPECTED OUTPUT
|
||||||
|
|
||||||
|
test_begin_subtest "Handle checking maildir flag with closed db (new API)"
|
||||||
|
cat c_head2 - c_tail <<'EOF' | test_C ${MAIL_DIR}
|
||||||
|
{
|
||||||
|
notmuch_status_t status;
|
||||||
|
notmuch_bool_t out;
|
||||||
|
status = notmuch_message_has_maildir_flag_st (message, 'S', &out);
|
||||||
|
printf("%d\n%d\n", message != NULL, status == NOTMUCH_STATUS_XAPIAN_EXCEPTION);
|
||||||
|
}
|
||||||
|
EOF
|
||||||
|
cat <<EOF > EXPECTED
|
||||||
|
== stdout ==
|
||||||
|
1
|
||||||
|
1
|
||||||
|
== stderr ==
|
||||||
|
EOF
|
||||||
|
test_expect_equal_file EXPECTED OUTPUT
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
Loading…
Reference in a new issue