1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */ 2 /* 3 * Copyright (C) 1999-2008 Novell, Inc. (www.novell.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 * Authors: Michael Zucchi <notzed@ximian.com> 18 */ 19 20 #if !defined (__CAMEL_H_INSIDE__) && !defined (CAMEL_COMPILATION) 21 #error "Only <camel/camel.h> can be included directly." 22 #endif 23 24 #ifndef CAMEL_FOLDER_SUMMARY_H 25 #define CAMEL_FOLDER_SUMMARY_H 26 27 #include <stdio.h> 28 #include <time.h> 29 30 #include <camel/camel-index.h> 31 #include <camel/camel-message-info.h> 32 #include <camel/camel-mime-message.h> 33 #include <camel/camel-mime-parser.h> 34 35 /* Standard GObject macros */ 36 #define CAMEL_TYPE_FOLDER_SUMMARY \ 37 (camel_folder_summary_get_type ()) 38 #define CAMEL_FOLDER_SUMMARY(obj) \ 39 (G_TYPE_CHECK_INSTANCE_CAST \ 40 ((obj), CAMEL_TYPE_FOLDER_SUMMARY, CamelFolderSummary)) 41 #define CAMEL_FOLDER_SUMMARY_CLASS(cls) \ 42 (G_TYPE_CHECK_CLASS_CAST \ 43 ((cls), CAMEL_TYPE_FOLDER_SUMMARY, CamelFolderSummaryClass)) 44 #define CAMEL_IS_FOLDER_SUMMARY(obj) \ 45 (G_TYPE_CHECK_INSTANCE_TYPE \ 46 ((obj), CAMEL_TYPE_FOLDER_SUMMARY)) 47 #define CAMEL_IS_FOLDER_SUMMARY_CLASS(cls) \ 48 (G_TYPE_CHECK_CLASS_TYPE \ 49 ((cls), CAMEL_TYPE_FOLDER_SUMMARY)) 50 #define CAMEL_FOLDER_SUMMARY_GET_CLASS(obj) \ 51 (G_TYPE_INSTANCE_GET_CLASS \ 52 ((obj), CAMEL_TYPE_FOLDER_SUMMARY, CamelFolderSummaryClass)) 53 54 G_BEGIN_DECLS 55 56 struct _CamelFolder; 57 struct _CamelStore; 58 59 typedef struct _CamelFolderSummary CamelFolderSummary; 60 typedef struct _CamelFolderSummaryClass CamelFolderSummaryClass; 61 typedef struct _CamelFolderSummaryPrivate CamelFolderSummaryPrivate; 62 63 /** 64 * CamelFolderSummaryFlags: 65 * @CAMEL_FOLDER_SUMMARY_DIRTY: 66 * There are changes in summary, which should be saved. 67 * @CAMEL_FOLDER_SUMMARY_IN_MEMORY_ONLY: 68 * Summary with this flag doesn't use DB for storing its content, 69 * it is always created on the fly. 70 **/ 71 typedef enum { 72 CAMEL_FOLDER_SUMMARY_DIRTY = 1 << 0, 73 CAMEL_FOLDER_SUMMARY_IN_MEMORY_ONLY = 1 << 1 74 } CamelFolderSummaryFlags; 75 76 struct _CamelFolderSummary { 77 GObject parent; 78 CamelFolderSummaryPrivate *priv; 79 }; 80 81 struct _CamelMIRecord; 82 struct _CamelFIRecord; 83 84 struct _CamelFolderSummaryClass { 85 GObjectClass parent_class; 86 87 GType message_info_type; 88 const gchar *collate; 89 const gchar *sort_by; 90 91 /* Load/Save folder summary*/ 92 gboolean (*summary_header_load) 93 (CamelFolderSummary *summary, 94 struct _CamelFIRecord *fir); 95 struct _CamelFIRecord * 96 (*summary_header_save) 97 (CamelFolderSummary *summary, 98 GError **error); 99 100 /* create an individual message info */ 101 CamelMessageInfo * 102 (*message_info_new_from_headers) 103 (CamelFolderSummary *summary, 104 const CamelNameValueArray *headers); 105 CamelMessageInfo * 106 (*message_info_new_from_parser) 107 (CamelFolderSummary *summary, 108 CamelMimeParser *parser); 109 CamelMessageInfo * 110 (*message_info_new_from_message) 111 (CamelFolderSummary *summary, 112 CamelMimeMessage *message); 113 114 CamelMessageInfo * 115 (*message_info_from_uid) 116 (CamelFolderSummary *summary, 117 const gchar *uid); 118 119 /* get the next uid */ 120 gchar * (*next_uid_string) 121 (CamelFolderSummary *summary); 122 123 void (* prepare_fetch_all) 124 (CamelFolderSummary *summary); 125 126 /* Padding for future expansion */ 127 gpointer reserved[19]; 128 }; 129 130 GType camel_folder_summary_get_type (void); 131 CamelFolderSummary * 132 camel_folder_summary_new (struct _CamelFolder *folder); 133 134 struct _CamelFolder * 135 camel_folder_summary_get_folder (CamelFolderSummary *summary); 136 guint32 camel_folder_summary_get_flags (CamelFolderSummary *summary); 137 void camel_folder_summary_set_flags (CamelFolderSummary *summary, 138 guint32 flags); 139 gint64 camel_folder_summary_get_timestamp 140 (CamelFolderSummary *summary); 141 void camel_folder_summary_set_timestamp 142 (CamelFolderSummary *summary, 143 gint64 timestamp); 144 guint32 camel_folder_summary_get_version 145 (CamelFolderSummary *summary); 146 void camel_folder_summary_set_version 147 (CamelFolderSummary *summary, 148 guint32 version); 149 guint32 camel_folder_summary_get_saved_count 150 (CamelFolderSummary *summary); 151 guint32 camel_folder_summary_get_unread_count 152 (CamelFolderSummary *summary); 153 guint32 camel_folder_summary_get_deleted_count 154 (CamelFolderSummary *summary); 155 guint32 camel_folder_summary_get_junk_count 156 (CamelFolderSummary *summary); 157 guint32 camel_folder_summary_get_junk_not_deleted_count 158 (CamelFolderSummary *summary); 159 guint32 camel_folder_summary_get_visible_count 160 (CamelFolderSummary *summary); 161 162 void camel_folder_summary_set_index (CamelFolderSummary *summary, 163 CamelIndex *index); 164 CamelIndex * camel_folder_summary_get_index (CamelFolderSummary *summary); 165 guint32 camel_folder_summary_next_uid (CamelFolderSummary *summary); 166 void camel_folder_summary_set_next_uid 167 (CamelFolderSummary *summary, 168 guint32 uid); 169 guint32 camel_folder_summary_get_next_uid 170 (CamelFolderSummary *summary); 171 gchar * camel_folder_summary_next_uid_string 172 (CamelFolderSummary *summary); 173 174 /* load/save the full summary */ 175 gboolean camel_folder_summary_save (CamelFolderSummary *summary, 176 GError **error); 177 gboolean camel_folder_summary_load (CamelFolderSummary *summary, 178 GError **error); 179 180 /* only load the header */ 181 gboolean camel_folder_summary_header_load 182 (CamelFolderSummary *summary, 183 struct _CamelStore *store, 184 const gchar *folder_name, 185 GError **error); 186 gboolean camel_folder_summary_header_save 187 (CamelFolderSummary *summary, 188 GError **error); 189 190 /* set the dirty bit on the summary */ 191 void camel_folder_summary_touch (CamelFolderSummary *summary); 192 193 /* Just build raw summary items */ 194 CamelMessageInfo * 195 camel_folder_summary_info_new_from_headers 196 (CamelFolderSummary *summary, 197 const CamelNameValueArray *headers); 198 CamelMessageInfo * 199 camel_folder_summary_info_new_from_parser 200 (CamelFolderSummary *summary, 201 CamelMimeParser *parser); 202 CamelMessageInfo * 203 camel_folder_summary_info_new_from_message 204 (CamelFolderSummary *summary, 205 CamelMimeMessage *message); 206 207 /* add a new raw summary item */ 208 void camel_folder_summary_add (CamelFolderSummary *summary, 209 CamelMessageInfo *info, 210 gboolean force_keep_uid); 211 212 gboolean camel_folder_summary_remove (CamelFolderSummary *summary, 213 CamelMessageInfo *info); 214 215 gboolean camel_folder_summary_remove_uid (CamelFolderSummary *summary, 216 const gchar *uid); 217 gboolean camel_folder_summary_remove_uids 218 (CamelFolderSummary *summary, 219 GList *uids); 220 221 /* remove all items */ 222 gboolean camel_folder_summary_clear (CamelFolderSummary *summary, 223 GError **error); 224 225 /* lookup functions */ 226 guint camel_folder_summary_count (CamelFolderSummary *summary); 227 228 gboolean camel_folder_summary_check_uid (CamelFolderSummary *summary, 229 const gchar *uid); 230 CamelMessageInfo * 231 camel_folder_summary_get (CamelFolderSummary *summary, 232 const gchar *uid); 233 guint32 camel_folder_summary_get_info_flags 234 (CamelFolderSummary *summary, 235 const gchar *uid); 236 GPtrArray * camel_folder_summary_get_array (CamelFolderSummary *summary); 237 void camel_folder_summary_free_array (GPtrArray *array); 238 239 GHashTable * camel_folder_summary_get_hash (CamelFolderSummary *summary); 240 241 gboolean camel_folder_summary_replace_flags 242 (CamelFolderSummary *summary, 243 CamelMessageInfo *info); 244 245 /* Peek from mem only */ 246 CamelMessageInfo * 247 camel_folder_summary_peek_loaded 248 (CamelFolderSummary *summary, 249 const gchar *uid); 250 251 /* Get only the uids of dirty/changed things to sync to server/db */ 252 GPtrArray * camel_folder_summary_get_changed 253 (CamelFolderSummary *summary); 254 255 /* reload the summary at any required point if required */ 256 void camel_folder_summary_prepare_fetch_all 257 (CamelFolderSummary *summary, 258 GError **error); 259 260 /* summary locking */ 261 void camel_folder_summary_lock (CamelFolderSummary *summary); 262 void camel_folder_summary_unlock (CamelFolderSummary *summary); 263 264 CamelMessageFlags 265 camel_system_flag (const gchar *name); 266 gboolean camel_system_flag_get (CamelMessageFlags flags, 267 const gchar *name); 268 269 CamelMessageInfo * 270 camel_message_info_new_from_headers 271 (CamelFolderSummary *summary, 272 const CamelNameValueArray *headers); 273 G_END_DECLS 274 275 #endif /* CAMEL_FOLDER_SUMMARY_H */ 276