Changeset 1299
- Timestamp:
- 12/06/06 18:06:03
- Files:
-
- trunk/ChangeLog (modified) (1 diff)
- trunk/bindings/python/tinymail.override (modified) (1 diff)
- trunk/libtinymail-camel/tny-camel-folder.c (modified) (3 diffs)
- trunk/libtinymail-camel/tny-camel-folder.h (modified) (1 diff)
- trunk/libtinymail-camel/tny-camel-mime-part.c (modified) (3 diffs)
- trunk/libtinymail/tny-folder.c (modified) (2 diffs)
- trunk/libtinymail/tny-folder.h (modified) (1 diff)
- trunk/libtinymail/tny-shared.h (modified) (1 diff)
- trunk/libtinymailui-gtk/tny-gtk-msg-view.c (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/ChangeLog
r1293 r1299 1 2006-12-06 Philip Van Hoof <pvanhoof@gnome.org> 2 3 * Added the tny_folder_get_msg_async API 4 5 * This was a major API change in libtinymail 6 1 7 2006-12-01 Philip Van Hoof <pvanhoof@gnome.org> 2 8 trunk/bindings/python/tinymail.override
r1272 r1299 93 93 } 94 94 %% 95 override tny_folder_get_msg_async kwargs 96 97 static void 98 tny_get_msg_cb (TnyFolder *self, TnyHeader *header, TnyGetMsgCallback callback, gpointer user_data) 99 { 100 PyObject *callback, *args, *ret; 101 PyGILState_STATE state; 102 103 state = pyg_gil_state_ensure(); 104 callback = PyTuple_GetItem((PyObject *)user_data, 1); 105 args = Py_BuildValue("(NO)", 106 pygobject_new((GObject *)self), 107 PyTuple_GetItem((PyObject *)user_data, 2)); 108 ret = PyObject_CallObject(callback, args); 109 if (!ret) 110 PyErr_Print(); 111 112 pyg_error_check(err); 113 Py_XDECREF(ret); 114 Py_DECREF(args); 115 Py_DECREF ((PyObject *)user_data); 116 pyg_gil_state_release(state); 117 } 118 119 static PyObject * 120 _wrap_tny_folder_get_msg_async (PyGObject *self, PyObject *args, PyObject *kwargs) 121 { 122 static char *kwlist[] = { "header", "get_msg_func", "user_data", NULL }; 123 PyObject *get_msg_func, *user_data = Py_None; 124 TnyHeader *header; 125 PyObject *data; 126 127 if (!PyArg_ParseTupleAndKeywords(args, kwargs, 128 "OO|O:TnyFolder.get_msg_async",kwlist, 129 &header, &get_msg_func, &user_data)) 130 return NULL; 131 if (!PyCallable_Check(get_msg_func)) { 132 PyErr_SetString(PyExc_TypeError, "get_msg_func must be callable"); 133 return NULL; 134 } 135 136 data = Py_BuildValue("(OOO)", header, get_msg_func, user_data); 137 138 tny_folder_get_msg_async (TNY_FOLDER (self->obj), header, 139 tny_get_msg_cb, data); 140 return Py_None; 141 } 142 143 %% 95 144 override tny_folder_refresh_async kwargs 96 145 trunk/libtinymail-camel/tny-camel-folder.c
r1287 r1299 911 911 } 912 912 913 914 static void 915 tny_camel_folder_get_msg_async (TnyFolder *self, TnyHeader *header, TnyGetMsgCallback callback, gpointer user_data) 916 { 917 return TNY_CAMEL_FOLDER_GET_CLASS (self)->get_msg_async_func (self, header, callback, user_data); 918 } 919 920 static void 921 tny_camel_folder_get_msg_async_default (TnyFolder *self, TnyHeader *header, TnyGetMsgCallback callback, gpointer user_data) 922 { 923 g_critical ("Not implemented!"); 924 } 913 925 914 926 static TnyMsg* … … 1755 1767 klass->get_headers_func = tny_camel_folder_get_headers; 1756 1768 klass->get_msg_func = tny_camel_folder_get_msg; 1769 klass->get_msg_async_func = tny_camel_folder_get_msg_async; 1757 1770 klass->get_id_func = tny_camel_folder_get_id; 1758 1771 klass->set_name_func = tny_camel_folder_set_name; … … 1799 1812 class->get_headers_func = tny_camel_folder_get_headers_default; 1800 1813 class->get_msg_func = tny_camel_folder_get_msg_default; 1814 class->get_msg_async_func = tny_camel_folder_get_msg_async_default; 1801 1815 class->get_id_func = tny_camel_folder_get_id_default; 1802 1816 class->set_name_func = tny_camel_folder_set_name_default; trunk/libtinymail-camel/tny-camel-folder.h
r1287 r1299 57 57 void (*set_msg_remove_strategy_func) (TnyFolder *self, TnyMsgRemoveStrategy *st); 58 58 TnyMsg* (*get_msg_func) (TnyFolder *self, TnyHeader *header, GError **err); 59 void (*get_msg_async_func) (TnyFolder *self, TnyHeader *header, TnyGetMsgCallback callback, gpointer user_data); 59 60 void (*get_headers_func) (TnyFolder *self, TnyList *headers, gboolean refresh, GError **err); 60 61 const gchar* (*get_name_func) (TnyFolder *self); trunk/libtinymail-camel/tny-camel-mime-part.c
r1295 r1299 64 64 int go = TRUE; 65 65 66 if (!firstpart && callback (msg, part, data) == FALSE)67 return FALSE; 66 /* if (!firstpart && callback (msg, part, data) == FALSE) 67 return FALSE; */ 68 68 69 69 containee = camel_medium_get_content_object (CAMEL_MEDIUM (part)); 70 70 71 71 if (G_UNLIKELY (containee == NULL)) 72 72 return go; 73 73 74 74 75 if (G_LIKELY (CAMEL_IS_MULTIPART (containee))) … … 77 78 for (i = 0; go && i < parts; i++) 78 79 { 79 CamelMimePart * part = camel_multipart_get_part (CAMEL_MULTIPART (containee), i);80 if ( part)81 callback (msg, part, data);80 CamelMimePart *tpart = camel_multipart_get_part (CAMEL_MULTIPART (containee), i); 81 if (tpart) 82 callback (msg, tpart, data); 82 83 83 84 /* if (part) … … 88 89 89 90 } else if (G_LIKELY (CAMEL_IS_MIME_MESSAGE (containee))) 90 callback (msg, part, data);91 callback (msg, (CamelMimePart*) containee, data); 91 92 92 93 /* else if (G_LIKELY (CAMEL_IS_MIME_MESSAGE (containee))) trunk/libtinymail/tny-folder.c
r1287 r1299 395 395 /** 396 396 * tny_folder_get_msg: 397 * @self: a TnyFolder object397 * @self: a #TnyFolder object 398 398 * @header: the header of the message to get 399 399 * @err: a #GError object or NULL … … 426 426 } 427 427 428 429 430 431 /** 432 * tny_folder_get_msg_async: 433 * @self: a #TnyFolder object 434 * @header: a #TnyHeader object 435 * @callback: The callback handler 436 * @user_data: user data for the callback 437 * 438 * Get a message in @self identified by @header. You must unreference the 439 * return value after use. 440 * 441 * If you want to use this functionality, it's advised to let your application 442 * use the #GMainLoop. All Gtk+ applications have this once gtk_main () is 443 * called. 444 * 445 * When using a #GMainLoop this method will callback using g_idle_add_full. 446 * Without a #GMainLoop, which the libtinymail-camel implementation detects 447 * using (g_main_depth > 0), the callbacks will happen in a worker thread at an 448 * unknown moment in time (check your locking). 449 * 450 * When using Gtk+, the callback doesn't need the gdk_threads_enter and 451 * gdk_threads_leave guards (because it happens in the #GMainLoop). 452 * 453 * Example: 454 * <informalexample><programlisting> 455 * static void 456 * folder_get_msg_cb (TnyFolder *folder, TnyMsg *msg, GError **err, gpointer user_data) 457 * { 458 * TnyMsgView *message_view = user_data; 459 * tny_msg_view_set_msg (message_view, message); 460 * } 461 * TnyMsgView *message_view = tny_platform_factory_new_msg_view (platfact); 462 * TnyFolder *folder = ...; TnyHeader *header = ...; 463 * tny_folder_get_msg_async (folder, header, 464 * folder_get_msg_cb, message_view); 465 * </programlisting></informalexample> 466 **/ 467 void 468 tny_folder_get_msg_async (TnyFolder *self, TnyHeader *header, TnyGetMsgCallback callback, gpointer user_data) 469 { 470 #ifdef DEBUG 471 if (!TNY_FOLDER_GET_IFACE (self)->get_msg_async_func) 472 g_critical ("You must implement tny_folder_get_msg_async\n"); 473 #endif 474 475 TNY_FOLDER_GET_IFACE (self)->get_msg_async_func (self, header, callback, user_data); 476 return; 477 } 428 478 429 479 /** trunk/libtinymail/tny-folder.h
r1287 r1299 77 77 void (*set_msg_remove_strategy_func) (TnyFolder *self, TnyMsgRemoveStrategy *st); 78 78 TnyMsg* (*get_msg_func) (TnyFolder *self, TnyHeader *header, GError **err); 79 void (*get_msg_async_func) (TnyFolder *self, TnyHeader *header, TnyGetMsgCallback callback, gpointer user_data); 79 80 void (*get_headers_func) (TnyFolder *self, TnyList *headers, gboolean refresh, GError **err); 80 81 const gchar* (*get_name_func) (TnyFolder *self); trunk/libtinymail/tny-shared.h
r1262 r1299 50 50 typedef void (*TnyForgetPassFunc) (TnyAccount *self); 51 51 typedef void (*TnyRefreshFolderCallback) (TnyFolder *self, gboolean cancelled, GError **err, gpointer user_data); 52 typedef void (*TnyGetMsgCallback) (TnyFolder *folder, TnyMsg *msg, GError **err, gpointer user_data); 52 53 typedef void (*TnyRefreshFolderStatusCallback) (TnyFolder *self, const gchar *what, gint status, gpointer user_data); 53 54 typedef enum _TnyHeaderFlags TnyHeaderFlags; trunk/libtinymailui-gtk/tny-gtk-msg-view.c
r1297 r1299 397 397 tny_mime_part_view_proxy_func_set_part (TnyMimePartView *mpview, TnyMimePart *part) 398 398 { 399 if (tny_mime_part_content_type_is (part, "message/ rfc822") && TNY_IS_GTK_MSG_VIEW (mpview))399 if (tny_mime_part_content_type_is (part, "message/*") && TNY_IS_GTK_MSG_VIEW (mpview)) 400 400 { 401 401 TnyMimePart *content_part = tny_mime_part_get_content_object (part); … … 511 511 } 512 512 } else if (!tny_mime_part_content_type_is (part, "multipart/*") && 513 !tny_mime_part_content_type_is (part, "message/ rfc822"))513 !tny_mime_part_content_type_is (part, "message/*")) 514 514 { 515 515 g_warning (_("I don't have a mime part viewer for %s\n"),
