1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ 2 /* 3 * Copyright (C) 2016 Red Hat, Inc. (www.redhat.com) 4 * 5 * This library is free software: you can redistribute it and/or modify it 6 * under the terms of the GNU Lesser General Public License as published by 7 * the Free Software Foundation. 8 * 9 * This library is distributed in the hope that it will be useful, but 10 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 11 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License 12 * for more details. 13 * 14 * You should have received a copy of the GNU Lesser General Public License 15 * along with this library. If not, see <http://www.gnu.org/licenses/>. 16 */ 17 18 #if !defined (__CAMEL_H_INSIDE__) && !defined (CAMEL_COMPILATION) 19 #error "Only <camel/camel.h> can be included directly." 20 #endif 21 22 #ifndef CAMEL_MESSAGE_INFO_H 23 #define CAMEL_MESSAGE_INFO_H 24 25 #include <glib-object.h> 26 27 #include <camel/camel-named-flags.h> 28 #include <camel/camel-name-value-array.h> 29 30 /* Standard GObject macros */ 31 #define CAMEL_TYPE_MESSAGE_INFO \ 32 (camel_message_info_get_type ()) 33 #define CAMEL_MESSAGE_INFO(obj) \ 34 (G_TYPE_CHECK_INSTANCE_CAST \ 35 ((obj), CAMEL_TYPE_MESSAGE_INFO, CamelMessageInfo)) 36 #define CAMEL_MESSAGE_INFO_CLASS(cls) \ 37 (G_TYPE_CHECK_CLASS_CAST \ 38 ((cls), CAMEL_TYPE_MESSAGE_INFO, CamelMessageInfoClass)) 39 #define CAMEL_IS_MESSAGE_INFO(obj) \ 40 (G_TYPE_CHECK_INSTANCE_TYPE \ 41 ((obj), CAMEL_TYPE_MESSAGE_INFO)) 42 #define CAMEL_IS_MESSAGE_INFO_CLASS(cls) \ 43 (G_TYPE_CHECK_CLASS_TYPE \ 44 ((cls), CAMEL_TYPE_MESSAGE_INFO)) 45 #define CAMEL_MESSAGE_INFO_GET_CLASS(obj) \ 46 (G_TYPE_INSTANCE_GET_CLASS \ 47 ((obj), CAMEL_TYPE_MESSAGE_INFO, CamelMessageInfoClass)) 48 49 G_BEGIN_DECLS 50 51 /* Forward declarations */ 52 struct _CamelFolderSummary; 53 struct _CamelMIRecord; 54 55 /* A summary messageid is a 64 bit identifier (partial md5 hash) */ 56 typedef struct _CamelSummaryMessageID { 57 union { 58 guint64 id; 59 guchar hash[8]; 60 struct { 61 guint32 hi; 62 guint32 lo; 63 } part; 64 } id; 65 } CamelSummaryMessageID; 66 67 /* system flag bits */ 68 typedef enum _CamelMessageFlags { 69 CAMEL_MESSAGE_ANSWERED = 1 << 0, 70 CAMEL_MESSAGE_DELETED = 1 << 1, 71 CAMEL_MESSAGE_DRAFT = 1 << 2, 72 CAMEL_MESSAGE_FLAGGED = 1 << 3, 73 CAMEL_MESSAGE_SEEN = 1 << 4, 74 75 /* these aren't really system flag bits, but are convenience flags */ 76 CAMEL_MESSAGE_ATTACHMENTS = 1 << 5, 77 CAMEL_MESSAGE_ANSWERED_ALL = 1 << 6, 78 CAMEL_MESSAGE_JUNK = 1 << 7, 79 CAMEL_MESSAGE_SECURE = 1 << 8, 80 CAMEL_MESSAGE_NOTJUNK = 1 << 9, 81 CAMEL_MESSAGE_FORWARDED = 1 << 10, 82 83 /* following flags are for the folder, and are not really permanent flags */ 84 CAMEL_MESSAGE_FOLDER_FLAGGED = 1 << 16, /* for use by the folder implementation */ 85 /* flags after 1 << 16 are used by camel providers, 86 * if adding non permanent flags, add them to the end */ 87 88 CAMEL_MESSAGE_JUNK_LEARN = 1 << 30, /* used when setting CAMEL_MESSAGE_JUNK flag 89 * to say that we request junk plugin 90 * to learn that message as junk/non junk */ 91 CAMEL_MESSAGE_USER = 1u << 31 /* supports user flags */ 92 } CamelMessageFlags; 93 94 /* Changes to system flags will NOT trigger a folder changed event */ 95 #define CAMEL_MESSAGE_SYSTEM_MASK (0xffff << 16) 96 97 typedef struct _CamelMessageInfo CamelMessageInfo; 98 typedef struct _CamelMessageInfoClass CamelMessageInfoClass; 99 typedef struct _CamelMessageInfoPrivate CamelMessageInfoPrivate; 100 101 struct _CamelMessageInfo { 102 GObject parent; 103 CamelMessageInfoPrivate *priv; 104 }; 105 106 struct _CamelMessageInfoClass { 107 GObjectClass parent_class; 108 109 CamelMessageInfo * (* clone) (const CamelMessageInfo *mi, 110 struct _CamelFolderSummary *assign_summary); 111 gboolean (* load) (CamelMessageInfo *mi, 112 const struct _CamelMIRecord *record, 113 /* const */ gchar **bdata_ptr); 114 gboolean (* save) (const CamelMessageInfo *mi, 115 struct _CamelMIRecord *record, 116 GString *bdata_str); 117 guint32 (* get_flags) (const CamelMessageInfo *mi); 118 gboolean (* set_flags) (CamelMessageInfo *mi, 119 guint32 mask, 120 guint32 set); 121 gboolean (* get_user_flag) 122 (const CamelMessageInfo *mi, 123 const gchar *name); 124 gboolean (* set_user_flag) 125 (CamelMessageInfo *mi, 126 const gchar *name, 127 gboolean state); 128 const CamelNamedFlags * (* get_user_flags) 129 (const CamelMessageInfo *mi); 130 CamelNamedFlags * (* dup_user_flags) 131 (const CamelMessageInfo *mi); 132 gboolean (* take_user_flags) 133 (CamelMessageInfo *mi, 134 CamelNamedFlags *user_flags); 135 const gchar * (* get_user_tag)(const CamelMessageInfo *mi, 136 const gchar *name); 137 gboolean (* set_user_tag)(CamelMessageInfo *mi, 138 const gchar *name, 139 const gchar *value); 140 const CamelNameValueArray * 141 (* get_user_tags) 142 (const CamelMessageInfo *mi); 143 CamelNameValueArray * (* dup_user_tags) 144 (const CamelMessageInfo *mi); 145 gboolean (* take_user_tags) 146 (CamelMessageInfo *mi, 147 CamelNameValueArray *user_tags); 148 const gchar * (* get_subject) (const CamelMessageInfo *mi); 149 gboolean (* set_subject) (CamelMessageInfo *mi, 150 const gchar *subject); 151 const gchar * (* get_from) (const CamelMessageInfo *mi); 152 gboolean (* set_from) (CamelMessageInfo *mi, 153 const gchar *from); 154 const gchar * (* get_to) (const CamelMessageInfo *mi); 155 gboolean (* set_to) (CamelMessageInfo *mi, 156 const gchar *to); 157 const gchar * (* get_cc) (const CamelMessageInfo *mi); 158 gboolean (* set_cc) (CamelMessageInfo *mi, 159 const gchar *cc); 160 const gchar * (* get_mlist) (const CamelMessageInfo *mi); 161 gboolean (* set_mlist) (CamelMessageInfo *mi, 162 const gchar *mlist); 163 guint32 (* get_size) (const CamelMessageInfo *mi); 164 gboolean (* set_size) (CamelMessageInfo *mi, 165 guint32 size); 166 gint64 (* get_date_sent) 167 (const CamelMessageInfo *mi); 168 gboolean (* set_date_sent) 169 (CamelMessageInfo *mi, 170 gint64 date_sent); 171 gint64 (* get_date_received) 172 (const CamelMessageInfo *mi); 173 gboolean (* set_date_received) 174 (CamelMessageInfo *mi, 175 gint64 date_received); 176 guint64 (* get_message_id) 177 (const CamelMessageInfo *mi); 178 gboolean (* set_message_id) 179 (CamelMessageInfo *mi, 180 guint64 message_id); 181 const GArray * (* get_references) 182 (const CamelMessageInfo *mi); 183 gboolean (* take_references) 184 (CamelMessageInfo *mi, 185 GArray *references); 186 const CamelNameValueArray * 187 (* get_headers) (const CamelMessageInfo *mi); 188 gboolean (* take_headers)(CamelMessageInfo *mi, 189 CamelNameValueArray *headers); 190 const gchar * (* get_user_header) 191 (const CamelMessageInfo *mi, 192 const gchar *name); 193 gboolean (* set_user_header) 194 (CamelMessageInfo *mi, 195 const gchar *name, 196 const gchar *value); 197 const CamelNameValueArray * 198 (* get_user_headers) 199 (const CamelMessageInfo *mi); 200 gboolean (* take_user_headers) 201 (CamelMessageInfo *mi, 202 CamelNameValueArray *headers); 203 const gchar * (* get_preview) (const CamelMessageInfo *mi); 204 gboolean (* set_preview) (CamelMessageInfo *mi, 205 const gchar *preview); 206 207 /* Padding for future expansion */ 208 gpointer reserved[14]; 209 }; 210 211 GType camel_message_info_get_type (void); 212 CamelMessageInfo * 213 camel_message_info_new (struct _CamelFolderSummary *summary); 214 CamelMessageInfo * 215 camel_message_info_clone (const CamelMessageInfo *mi, 216 struct _CamelFolderSummary *assign_summary); 217 gboolean camel_message_info_load (CamelMessageInfo *mi, 218 const struct _CamelMIRecord *record, 219 /* const */ gchar **bdata_ptr); 220 gboolean camel_message_info_save (const CamelMessageInfo *mi, 221 struct _CamelMIRecord *record, 222 GString *bdata_str); 223 struct _CamelFolderSummary * 224 camel_message_info_ref_summary (const CamelMessageInfo *mi); 225 void camel_message_info_property_lock 226 (const CamelMessageInfo *mi); 227 void camel_message_info_property_unlock 228 (const CamelMessageInfo *mi); 229 gboolean camel_message_info_get_dirty (const CamelMessageInfo *mi); 230 void camel_message_info_set_dirty (CamelMessageInfo *mi, 231 gboolean dirty); 232 gboolean camel_message_info_get_folder_flagged 233 (const CamelMessageInfo *mi); 234 gboolean camel_message_info_set_folder_flagged 235 (CamelMessageInfo *mi, 236 gboolean folder_flagged); 237 guint camel_message_info_get_folder_flagged_stamp 238 (const CamelMessageInfo *mi); 239 gboolean camel_message_info_get_abort_notifications 240 (const CamelMessageInfo *mi); 241 void camel_message_info_set_abort_notifications 242 (CamelMessageInfo *mi, 243 gboolean abort_notifications); 244 void camel_message_info_freeze_notifications 245 (CamelMessageInfo *mi); 246 void camel_message_info_thaw_notifications 247 (CamelMessageInfo *mi); 248 gboolean camel_message_info_get_notifications_frozen 249 (const CamelMessageInfo *mi); 250 const gchar * camel_message_info_get_uid (const CamelMessageInfo *mi); 251 const gchar * camel_message_info_pooldup_uid (const CamelMessageInfo *mi); 252 gboolean camel_message_info_set_uid (CamelMessageInfo *mi, 253 const gchar *uid); 254 guint32 camel_message_info_get_flags (const CamelMessageInfo *mi); 255 gboolean camel_message_info_set_flags (CamelMessageInfo *mi, 256 guint32 mask, 257 guint32 set); 258 gboolean camel_message_info_get_user_flag 259 (const CamelMessageInfo *mi, 260 const gchar *name); 261 gboolean camel_message_info_set_user_flag 262 (CamelMessageInfo *mi, 263 const gchar *name, 264 gboolean state); 265 const CamelNamedFlags * 266 camel_message_info_get_user_flags 267 (const CamelMessageInfo *mi); 268 CamelNamedFlags * 269 camel_message_info_dup_user_flags 270 (const CamelMessageInfo *mi); 271 gboolean 272 camel_message_info_take_user_flags 273 (CamelMessageInfo *mi, 274 CamelNamedFlags *user_flags); 275 const gchar * camel_message_info_get_user_tag (const CamelMessageInfo *mi, 276 const gchar *name); 277 gchar * camel_message_info_dup_user_tag (const CamelMessageInfo *mi, 278 const gchar *name); 279 gboolean camel_message_info_set_user_tag (CamelMessageInfo *mi, 280 const gchar *name, 281 const gchar *value); 282 const CamelNameValueArray * 283 camel_message_info_get_user_tags 284 (const CamelMessageInfo *mi); 285 CamelNameValueArray * 286 camel_message_info_dup_user_tags 287 (const CamelMessageInfo *mi); 288 gboolean camel_message_info_take_user_tags 289 (CamelMessageInfo *mi, 290 CamelNameValueArray *user_tags); 291 const gchar * camel_message_info_get_subject (const CamelMessageInfo *mi); 292 gboolean camel_message_info_set_subject (CamelMessageInfo *mi, 293 const gchar *subject); 294 const gchar * camel_message_info_get_from (const CamelMessageInfo *mi); 295 gboolean camel_message_info_set_from (CamelMessageInfo *mi, 296 const gchar *from); 297 const gchar * camel_message_info_get_to (const CamelMessageInfo *mi); 298 gboolean camel_message_info_set_to (CamelMessageInfo *mi, 299 const gchar *to); 300 const gchar * camel_message_info_get_cc (const CamelMessageInfo *mi); 301 gboolean camel_message_info_set_cc (CamelMessageInfo *mi, 302 const gchar *cc); 303 const gchar * camel_message_info_get_mlist (const CamelMessageInfo *mi); 304 gboolean camel_message_info_set_mlist (CamelMessageInfo *mi, 305 const gchar *mlist); 306 guint32 camel_message_info_get_size (const CamelMessageInfo *mi); 307 gboolean camel_message_info_set_size (CamelMessageInfo *mi, 308 guint32 size); 309 gint64 camel_message_info_get_date_sent 310 (const CamelMessageInfo *mi); 311 gboolean camel_message_info_set_date_sent 312 (CamelMessageInfo *mi, 313 gint64 date_sent); 314 gint64 camel_message_info_get_date_received 315 (const CamelMessageInfo *mi); 316 gboolean camel_message_info_set_date_received 317 (CamelMessageInfo *mi, 318 gint64 date_received); 319 guint64 camel_message_info_get_message_id 320 (const CamelMessageInfo *mi); 321 gboolean camel_message_info_set_message_id 322 (CamelMessageInfo *mi, 323 guint64 message_id); 324 const GArray * camel_message_info_get_references 325 (const CamelMessageInfo *mi); 326 GArray * camel_message_info_dup_references 327 (const CamelMessageInfo *mi); 328 gboolean camel_message_info_take_references 329 (CamelMessageInfo *mi, 330 GArray *references); 331 const CamelNameValueArray * 332 camel_message_info_get_headers (const CamelMessageInfo *mi); 333 CamelNameValueArray * 334 camel_message_info_dup_headers (const CamelMessageInfo *mi); 335 gboolean camel_message_info_take_headers (CamelMessageInfo *mi, 336 CamelNameValueArray *headers); 337 const gchar * camel_message_info_get_user_header 338 (const CamelMessageInfo *mi, 339 const gchar *name); 340 gchar * camel_message_info_dup_user_header 341 (const CamelMessageInfo *mi, 342 const gchar *name); 343 gboolean camel_message_info_set_user_header 344 (CamelMessageInfo *mi, 345 const gchar *name, 346 const gchar *value); 347 const CamelNameValueArray * 348 camel_message_info_get_user_headers 349 (const CamelMessageInfo *mi); 350 CamelNameValueArray * 351 camel_message_info_dup_user_headers 352 (const CamelMessageInfo *mi); 353 gboolean camel_message_info_take_user_headers 354 (CamelMessageInfo *mi, 355 CamelNameValueArray *headers); 356 const gchar * camel_message_info_get_preview (const CamelMessageInfo *mi); 357 gchar * camel_message_info_dup_preview (const CamelMessageInfo *mi); 358 gboolean camel_message_info_set_preview (CamelMessageInfo *mi, 359 const gchar *preview); 360 361 /* Debugging functions */ 362 void camel_message_info_dump (CamelMessageInfo *mi); 363 364 G_END_DECLS 365 366 #endif /* CAMEL_MESSAGE_INFO_H */ 367