mail-search.h revision cb8d97555cc3e686aa1f446bc32d0213486d38fb
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen /* sequence sets */
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen SEARCH_ON, /* time must point to beginning of the day */
5e327e031d1591f8bff17b67eba7139afbd36cddTimo Sirainen SEARCH_SENTON, /* time must point to beginning of the day */
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen /* headers */
1e11a94ec50fc9b57eb2c859771c6a326ccaf86fAki Tuomi /* extensions */
45ead232666a47819e89dc71dec57767340d0b62Timo Sirainen /* For (SENT)BEFORE/SINCE/ON searches: Don't drop timezone from
45ead232666a47819e89dc71dec57767340d0b62Timo Sirainen comparisons */
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen const char *str;
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen const char *hdr_field_name; /* for SEARCH_HEADER* */
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen unsigned int match_always:1; /* result = 1 always */
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen int result; /* -1 = unknown, 0 = unmatched, 1 = matched */
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainentypedef void mail_search_foreach_callback_t(struct mail_search_arg *arg,
2d1892aaeb63b9774237b6e60d6bb04bf6f8259cTimo Sirainen/* Allocate keywords for search arguments. If change_uidsets is TRUE,
107659c01b2359b0ee426bde020c8d4e29ede30dTimo Sirainen change uidsets to seqsets. */
107659c01b2359b0ee426bde020c8d4e29ede30dTimo Sirainenvoid mail_search_args_init(struct mail_search_args *args,
107659c01b2359b0ee426bde020c8d4e29ede30dTimo Sirainen const ARRAY_TYPE(seq_range) *search_saved_uidset);
107659c01b2359b0ee426bde020c8d4e29ede30dTimo Sirainen/* Free keywords. The args can initialized afterwards again if needed. */
107659c01b2359b0ee426bde020c8d4e29ede30dTimo Sirainenvoid mail_search_args_deinit(struct mail_search_args *args);
107659c01b2359b0ee426bde020c8d4e29ede30dTimo Sirainen/* Convert sequence sets in args to UIDs. */
107659c01b2359b0ee426bde020c8d4e29ede30dTimo Sirainenvoid mail_search_args_seq2uid(struct mail_search_args *args);
107659c01b2359b0ee426bde020c8d4e29ede30dTimo Sirainen/* Returns TRUE if the two search arguments are fully compatible.
107659c01b2359b0ee426bde020c8d4e29ede30dTimo Sirainen Always returns FALSE if there are seqsets, since they may point to different
107659c01b2359b0ee426bde020c8d4e29ede30dTimo Sirainen messages depending on when the search is run. */
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainenbool mail_search_args_equal(const struct mail_search_args *args1,
c1fc5a97a15332f1253ee13a9cab65a7b4b6cd5fTimo Sirainenvoid mail_search_args_ref(struct mail_search_args *args);
c1fc5a97a15332f1253ee13a9cab65a7b4b6cd5fTimo Sirainenvoid mail_search_args_unref(struct mail_search_args **args);
c1fc5a97a15332f1253ee13a9cab65a7b4b6cd5fTimo Sirainen/* Reset the results in search arguments. match_always is reset only if
c1fc5a97a15332f1253ee13a9cab65a7b4b6cd5fTimo Sirainen full_reset is TRUE. */
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainenvoid mail_search_args_reset(struct mail_search_arg *args, bool full_reset);
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen/* goes through arguments in list that don't have a result yet.
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen Returns 1 = search matched, 0 = search unmatched, -1 = don't know yet */
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainenint mail_search_args_foreach(struct mail_search_arg *args,
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen# define mail_search_args_foreach(args, callback, context) \
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen ({(void)(1 ? 0 : callback((struct mail_search_arg *)NULL, context)); \
71df09024cea5f2faa93da3bb9513ee96ba6bf22Timo Sirainen (mail_search_foreach_callback_t *)callback, context); })