Changeset 2
- Timestamp:
- 02/02/06 01:43:34
- Files:
-
- trunk/libtinymail-camel/Makefile.am (modified) (1 diff)
- trunk/libtinymail-camel/tny-msg-folder.c (modified) (6 diffs)
- trunk/libtinymail-camel/tny-msg-header-priv.h (added)
- trunk/libtinymail-camel/tny-msg-header.c (modified) (9 diffs)
- trunk/libtinymail-camel/tny-msg-priv.h (added)
- trunk/libtinymail-camel/tny-msg.c (modified) (2 diffs)
- trunk/libtinymail/tny-msg-folder-iface.c (modified) (2 diffs)
- trunk/libtinymail/tny-msg-folder-iface.h (modified) (3 diffs)
- trunk/libtinymail/tny-msg-header-iface.c (modified) (2 diffs)
- trunk/libtinymail/tny-msg-header-iface.h (modified) (2 diffs)
- trunk/libtinymail/tny-msg-header-proxy.c (modified) (2 diffs)
- trunk/tinymail/tny-main.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/libtinymail-camel/Makefile.am
r1 r2 15 15 libtinymail_camel_1_0_la_SOURCES = \ 16 16 tny-msg-account-priv.h \ 17 tny-msg-priv.h \ 18 tny-msg-header-priv.h \ 17 19 $(libtinymail_camel_1_0_headers) \ 18 20 tny-msg.c \ trunk/libtinymail-camel/tny-msg-folder.c
r1 r2 46 46 struct _TnyMsgFolderPriv 47 47 { 48 GList *cached_hdrs; 49 GHashTable *cached_msgs; 50 48 51 CamelFolder *folder; 49 52 gchar *folder_name; … … 119 122 } 120 123 124 static void 125 add_message_with_uid (gpointer data, gpointer user_data) 126 { 127 CamelMessageInfo *msginfo = data; 128 TnyMsgFolderIface *self = user_data; 129 TnyMsgFolderPriv *priv = TNY_MSG_FOLDER_GET_PRIVATE (TNY_MSG_FOLDER (self)); 130 TnyMsgHeaderIface *header = TNY_MSG_HEADER_IFACE ( 131 tny_msg_header_new ()); 132 133 134 _tny_msg_header_set_camel_message_info (TNY_MSG_HEADER (header), msginfo); 135 tny_msg_header_iface_set_folder (header, self); 136 137 priv->cached_hdrs = g_list_append (priv->cached_hdrs, header); 138 139 return; 140 } 141 121 142 static const GList* 122 143 tny_msg_folder_get_headers (TnyMsgFolderIface *self) 123 144 { 124 145 TnyMsgFolderPriv *priv = TNY_MSG_FOLDER_GET_PRIVATE (TNY_MSG_FOLDER (self)); 125 126 146 load_folder (priv); 127 147 128 /* TODO: Implement */ 129 130 return NULL; 131 } 132 133 static const GList* 134 tny_msg_folder_get_messages (TnyMsgFolderIface *self) 135 { 136 TnyMsgFolderPriv *priv = TNY_MSG_FOLDER_GET_PRIVATE (TNY_MSG_FOLDER (self)); 148 /* TODO: Cache this on disk, compare it. Don't just cache in memory */ 149 150 if (!priv->cached_hdrs) 151 { 152 GPtrArray *uids = camel_folder_get_summary (priv->folder); 153 g_ptr_array_foreach (uids, add_message_with_uid, self); 154 camel_folder_free_uids (priv->folder, uids); 155 } 156 157 return priv->cached_hdrs; 158 } 159 160 static void 161 destroy_cached_key (gpointer data) 162 { 163 /* data is a const */ 164 return; 165 } 166 167 168 static void 169 destroy_cached_value (gpointer data) 170 { 171 /* Data is a TnyMsgIface or a TnyMsgHeaderIface */ 172 g_object_unref (G_OBJECT (data)); 173 return; 174 } 175 176 177 static const TnyMsgIface* 178 tny_msg_folder_get_message (TnyMsgFolderIface *self, TnyMsgHeaderIface *header) 179 { 180 TnyMsgFolderPriv *priv = TNY_MSG_FOLDER_GET_PRIVATE (TNY_MSG_FOLDER (self)); 181 TnyMsgIface *message = NULL; 182 const gchar *id = tny_msg_header_iface_get_id (header); 137 183 138 184 load_folder (priv); 139 185 140 /* TODO: Implement */ 141 142 return NULL; 186 if (!priv->cached_msgs) 187 { 188 priv->cached_msgs = g_hash_table_new_full 189 (g_str_hash, g_str_equal, destroy_cached_key, 190 destroy_cached_value); 191 } else { 192 message = g_hash_table_lookup (priv->cached_msgs, id); 193 } 194 195 if (!message) 196 { 197 CamelException ex; 198 CamelMimeMessage *camel_message = camel_folder_get_message 199 (priv->folder, (const char *) id, &ex); 200 201 if (camel_exception_get_id (&ex) == CAMEL_EXCEPTION_NONE) 202 { 203 message = TNY_MSG_IFACE (tny_msg_new ()); 204 _tny_msg_set_camel_mime_message (TNY_MSG (message), camel_message); 205 g_hash_table_insert (priv->cached_msgs, (gpointer)id, message); 206 } 207 } 208 209 return message; 143 210 } 144 211 … … 237 304 } 238 305 306 239 307 static void 240 308 tny_msg_folder_finalize (GObject *object) … … 246 314 camel_object_unref (priv->folder); 247 315 316 if (priv->cached_msgs) 317 g_hash_table_destroy (priv->cached_msgs); 318 319 if (priv->cached_hdrs) 320 g_list_foreach (priv->cached_hdrs, (GFunc)g_object_unref, NULL); 321 248 322 (*parent_class->finalize) (object); 249 323 … … 258 332 259 333 klass->get_headers_func = tny_msg_folder_get_headers; 260 klass->get_message s_func = tny_msg_folder_get_messages;334 klass->get_message_func = tny_msg_folder_get_message; 261 335 262 336 klass->set_id_func = tny_msg_folder_set_id; … … 301 375 priv->folder = NULL; 302 376 priv->folders = NULL; 377 priv->cached_hdrs = NULL; 378 priv->cached_msgs = NULL; 303 379 304 380 return; trunk/libtinymail-camel/tny-msg-header.c
r1 r2 22 22 #include <tny-msg-header-iface.h> 23 23 #include <tny-msg-header.h> 24 #include <tny-msg-folder-iface.h> 24 25 25 26 static GObjectClass *parent_class = NULL; 26 27 27 typedef struct _TnyMsgHeaderPriv TnyMsgHeaderPriv; 28 29 struct _TnyMsgHeaderPriv 30 { 31 gchar *from; 32 gchar *to; 33 gchar *subject; 34 gint id; 35 }; 28 #include "tny-msg-header-priv.h" 36 29 37 30 #define TNY_MSG_HEADER_GET_PRIVATE(o) \ 38 31 (G_TYPE_INSTANCE_GET_PRIVATE ((o), TNY_MSG_HEADER_TYPE, TnyMsgHeaderPriv)) 39 32 33 34 void 35 _tny_msg_header_set_camel_message_info (TnyMsgHeader *self, CamelMessageInfo *camel_message_info) 36 { 37 TnyMsgHeaderPriv *priv = TNY_MSG_HEADER_GET_PRIVATE (self); 38 39 if (priv->message_info) 40 camel_object_unref (priv->message_info); 41 42 camel_object_ref (camel_message_info); 43 44 priv->message_info = camel_message_info; 45 46 return; 47 } 48 49 const TnyMsgFolderIface* 50 tny_msg_header_get_folder (TnyMsgHeaderIface *self) 51 { 52 TnyMsgHeaderPriv *priv = TNY_MSG_HEADER_GET_PRIVATE (TNY_MSG_HEADER (self)); 53 54 return priv->folder; 55 } 56 57 58 void 59 tny_msg_header_set_folder (TnyMsgHeaderIface *self, const TnyMsgFolderIface *folder) 60 { 61 TnyMsgHeaderPriv *priv = TNY_MSG_HEADER_GET_PRIVATE (TNY_MSG_HEADER (self)); 62 63 if (priv->folder) 64 g_object_unref (G_OBJECT (priv->folder)); 65 66 g_object_ref (G_OBJECT (folder)); 67 68 priv->folder = (TnyMsgFolderIface*)folder; 69 70 return; 71 } 40 72 41 73 static const gchar* … … 44 76 TnyMsgHeaderPriv *priv = TNY_MSG_HEADER_GET_PRIVATE (TNY_MSG_HEADER (self)); 45 77 46 return priv->from;78 return camel_message_info_from (priv->message_info); 47 79 } 48 80 … … 52 84 TnyMsgHeaderPriv *priv = TNY_MSG_HEADER_GET_PRIVATE (TNY_MSG_HEADER (self)); 53 85 54 return priv->subject;86 return camel_message_info_subject (priv->message_info); 55 87 } 56 88 … … 61 93 TnyMsgHeaderPriv *priv = TNY_MSG_HEADER_GET_PRIVATE (TNY_MSG_HEADER (self)); 62 94 63 return priv->to;64 } 65 66 static const g int95 return camel_message_info_to (priv->message_info); 96 } 97 98 static const gchar* 67 99 tny_msg_header_get_id (TnyMsgHeaderIface *self) 68 100 { 69 101 TnyMsgHeaderPriv *priv = TNY_MSG_HEADER_GET_PRIVATE (TNY_MSG_HEADER (self)); 70 102 71 return priv->id; 72 } 73 74 static void 75 tny_msg_header_set_id (TnyMsgHeaderIface *self, gint id) 76 { 77 TnyMsgHeaderPriv *priv = TNY_MSG_HEADER_GET_PRIVATE (TNY_MSG_HEADER (self)); 78 79 priv->id = id; 80 103 return camel_message_info_uid (priv->message_info); 104 } 105 106 static void 107 tny_msg_header_set_id (TnyMsgHeaderIface *self, const gchar *id) 108 { 81 109 return; 82 110 } … … 85 113 tny_msg_header_set_from (TnyMsgHeaderIface *self, const gchar *from) 86 114 { 87 TnyMsgHeaderPriv *priv = TNY_MSG_HEADER_GET_PRIVATE (TNY_MSG_HEADER (self));88 89 if (priv->from)90 g_free (priv->from);91 92 priv->from = g_strdup (from);93 94 115 return; 95 116 } … … 98 119 tny_msg_header_set_to (TnyMsgHeaderIface *self, const gchar *to) 99 120 { 100 TnyMsgHeaderPriv *priv = TNY_MSG_HEADER_GET_PRIVATE (TNY_MSG_HEADER (self));101 102 if (priv->to)103 g_free (priv->to);104 105 priv->to = g_strdup (to);106 107 121 return; 108 122 } … … 111 125 tny_msg_header_set_subject (TnyMsgHeaderIface *self, const gchar *subject) 112 126 { 113 TnyMsgHeaderPriv *priv = TNY_MSG_HEADER_GET_PRIVATE (TNY_MSG_HEADER (self));114 115 if (priv->subject)116 g_free (priv->subject);117 118 priv->subject = g_strdup (subject);119 120 127 return; 121 128 } … … 127 134 TnyMsgHeaderPriv *priv = TNY_MSG_HEADER_GET_PRIVATE (self); 128 135 129 if (priv->from) 130 g_free (priv->from); 131 132 if (priv->to) 133 g_free (priv->to); 134 135 if (priv->subject) 136 g_free (priv->subject); 136 if (priv->folder) 137 g_object_unref (G_OBJECT (priv->folder)); 138 139 if (priv->message_info) 140 camel_object_unref (priv->message_info); 137 141 138 142 (*parent_class->finalize) (object); … … 191 195 { 192 196 TnyMsgHeader *self = (TnyMsgHeader *)instance; 193 TnyMsgHeaderIface *iface = TNY_MSG_HEADER_IFACE (self); 194 /* TnyMsgHeaderPriv *priv = TNY_MSG_HEADER_GET_PRIVATE (self); */ 195 196 /* TODO: Remove these default values */ 197 198 tny_msg_header_set_from (iface, "From"); 199 tny_msg_header_set_to (iface, "To"); 200 tny_msg_header_set_subject (iface, "Subject"); 201 197 TnyMsgHeaderPriv *priv = TNY_MSG_HEADER_GET_PRIVATE (self); 198 199 priv->folder = NULL; 200 priv->message_info = NULL; 201 202 202 return; 203 203 } trunk/libtinymail-camel/tny-msg.c
r1 r2 28 28 static GObjectClass *parent_class = NULL; 29 29 30 typedef struct _TnyMsgPriv TnyMsgPriv; 31 32 struct _TnyMsgPriv 33 { 34 TnyMsgHeaderIface *header; 35 TnyMsgBodyIface *body; 36 GList *attachments; 37 }; 30 #include "tny-msg-priv.h" 38 31 39 32 #define TNY_MSG_GET_PRIVATE(o) \ 40 33 (G_TYPE_INSTANCE_GET_PRIVATE ((o), TNY_MSG_TYPE, TnyMsgPriv)) 34 35 void 36 _tny_msg_set_camel_mime_message (TnyMsg *self, CamelMimeMessage *message) 37 { 38 TnyMsgPriv *priv = TNY_MSG_GET_PRIVATE (self); 39 40 if (priv->message) 41 camel_object_unref (priv->message); 42 43 camel_object_ref (message); 44 45 priv->message = message; 46 47 return; 48 } 41 49 42 50 static const GList* … … 229 237 { 230 238 TnyMsg *self = (TnyMsg *)instance; 239 TnyMsgPriv *priv = TNY_MSG_GET_PRIVATE (self); 240 241 priv->message = NULL; 242 priv->body = NULL; 243 priv->attachments = NULL; 244 priv->header = NULL; 231 245 232 246 return; trunk/libtinymail/tny-msg-folder-iface.c
r1 r2 19 19 20 20 #include <tny-msg-folder-iface.h> 21 #include <tny-msg-header-iface.h> 21 22 22 23 … … 49 50 } 50 51 51 const GList*52 tny_msg_folder_iface_get_message s (TnyMsgFolderIface *self)52 const TnyMsgIface* 53 tny_msg_folder_iface_get_message (TnyMsgFolderIface *self, TnyMsgHeaderIface *header) 53 54 { 54 return TNY_MSG_FOLDER_IFACE_GET_CLASS (self)->get_message s_func (self);55 return TNY_MSG_FOLDER_IFACE_GET_CLASS (self)->get_message_func (self, header); 55 56 } 56 57 trunk/libtinymail/tny-msg-folder-iface.h
r1 r2 23 23 #include <glib.h> 24 24 25 #include <tny-msg-iface.h> 25 26 #include <tny-msg-header-iface.h> 26 #include <tny-msg-iface.h>27 27 #include <tny-msg-account-iface.h> 28 28 … … 46 46 void (*add_folder_func) (TnyMsgFolderIface *self, TnyMsgFolderIface *folder); 47 47 48 const GList* (*get_messages_func) (TnyMsgFolderIface *self); 49 const GList* (*get_headers_func) (TnyMsgFolderIface *self); 48 const TnyMsgIface* 49 (*get_message_func) (TnyMsgFolderIface *self, TnyMsgHeaderIface *header); 50 const GList* (*get_headers_func) (TnyMsgFolderIface *self); 50 51 51 52 const gchar* (*get_name_func) (TnyMsgFolderIface *self); … … 62 63 }; 63 64 64 GType tny_msg_folder_iface_get_type (void);65 GType tny_msg_folder_iface_get_type (void); 65 66 66 67 const GList* tny_msg_folder_iface_get_folders (TnyMsgFolderIface *self); 67 68 void tny_msg_folder_iface_add_folder (TnyMsgFolderIface *self, TnyMsgFolderIface *folder); 68 69 69 const GList* tny_msg_folder_iface_get_messages (TnyMsgFolderIface *self); 70 const TnyMsgIface* 71 tny_msg_folder_iface_get_message (TnyMsgFolderIface *self, TnyMsgHeaderIface *header); 70 72 const GList* tny_msg_folder_iface_get_headers (TnyMsgFolderIface *self); 71 73 trunk/libtinymail/tny-msg-header-iface.c
r1 r2 19 19 20 20 #include <tny-msg-header-iface.h> 21 #include <tny-msg-folder-iface.h> 21 22 22 23 const gchar* … … 43 44 { 44 45 return TNY_MSG_HEADER_IFACE_GET_CLASS (self)->get_to_func (self); 46 } 47 48 gconstpointer 49 tny_msg_header_iface_get_folder (TnyMsgHeaderIface *self) 50 { 51 return TNY_MSG_HEADER_IFACE_GET_CLASS (self)->get_folder_func (self); 52 } 53 54 55 void 56 tny_msg_header_iface_set_folder (TnyMsgHeaderIface *self, gconstpointer folder) 57 { 58 TNY_MSG_HEADER_IFACE_GET_CLASS (self)->set_folder_func (self, folder); 59 return; 45 60 } 46 61 trunk/libtinymail/tny-msg-header-iface.h
r1 r2 46 46 const gchar* (*get_id_func) (TnyMsgHeaderIface *self); 47 47 48 49 gconstpointer (*get_folder_func) (TnyMsgHeaderIface *self); 50 void (*set_folder_func) (TnyMsgHeaderIface *self, gconstpointer folder); 48 51 49 52 void (*set_subject_func) (TnyMsgHeaderIface *self, const gchar *subject); … … 68 71 void tny_msg_header_iface_set_subject (TnyMsgHeaderIface *self, const gchar *subject); 69 72 73 74 gconstpointer tny_msg_header_iface_get_folder (TnyMsgHeaderIface *self); 75 void tny_msg_header_iface_set_folder (TnyMsgHeaderIface *self, gconstpointer folder); 76 70 77 void tny_msg_header_iface_uncache (TnyMsgHeaderIface *self); 71 78 const gboolean tny_msg_header_iface_has_cache (TnyMsgHeaderIface *self); trunk/libtinymail/tny-msg-header-proxy.c
r1 r2 21 21 #include <tny-msg-header.h> 22 22 #include <tny-msg-header-iface.h> 23 #include <tny-msg-folder-iface.h> 23 24 24 25 static GObjectClass *parent_class = NULL; … … 30 31 31 32 return tny_msg_header_new (); 33 } 34 35 const TnyMsgFolderIface* 36 tny_msg_header_proxy_get_folder (TnyMsgHeaderIface *self) 37 { 38 TnyMsgHeader *real = TNY_MSG_HEADER_PROXY (self)->real; 39 40 if (real == NULL) 41 { 42 real = tny_msg_header_proxy_get_real (TNY_MSG_HEADER_PROXY (self)); 43 TNY_MSG_HEADER_PROXY (self)->real = real; 44 } 45 46 return tny_msg_header_iface_get_folder (TNY_MSG_HEADER_IFACE(real)); 47 } 48 49 50 void 51 tny_msg_header_proxy_set_folder (TnyMsgHeaderIface *self, const TnyMsgFolderIface *folder) 52 { 53 TnyMsgHeader *real = TNY_MSG_HEADER_PROXY (self)->real; 54 55 if (real == NULL) 56 { 57 real = tny_msg_header_proxy_get_real (TNY_MSG_HEADER_PROXY (self)); 58 TNY_MSG_HEADER_PROXY (self)->real = real; 59 } 60 61 tny_msg_header_iface_set_folder (TNY_MSG_HEADER_IFACE (real), folder); 62 63 return; 32 64 } 33 65 trunk/tinymail/tny-main.c
r1 r2 31 31 gpointer user_data) 32 32 { 33 /* 33 34 34 GtkTreeView *header_view = GTK_TREE_VIEW (user_data); 35 35 GtkTreeIter iter; … … 60 60 61 61 } 62 */ 62 63 63 } 64 64
