Changeset 1293
- Timestamp:
- 12/01/06 11:35:04
- Files:
-
- trunk/ChangeLog (modified) (1 diff)
- trunk/libtinymail-camel/tny-camel-mime-part-priv.h (modified) (1 diff)
- trunk/libtinymail-camel/tny-camel-mime-part.c (modified) (7 diffs)
- trunk/libtinymail-camel/tny-camel-mime-part.h (modified) (1 diff)
- trunk/libtinymail/tny-mime-part.c (modified) (1 diff)
- trunk/libtinymail/tny-mime-part.h (modified) (2 diffs)
- trunk/libtinymailui-gtk/tny-gtk-msg-view.c (modified) (12 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/ChangeLog
r1291 r1293 1 2006-12-01 Philip Van Hoof <pvanhoof@gnome.org> 2 3 * Support for content-objects in RFC822 messages 4 5 * This was a major API change 6 1 7 2006-11-30 Sergio Villar Senin <svillar@igalia.com> 2 8 * libtinymail-camel/tny-camel-common.c: a store query with no items trunk/libtinymail-camel/tny-camel-mime-part-priv.h
r1240 r1293 32 32 CamelMimePart *part; 33 33 gchar *cached_content_type; 34 TnyMimePart *content_object; 34 35 }; 35 36 trunk/libtinymail-camel/tny-camel-mime-part.c
r1276 r1293 96 96 } 97 97 98 static void 99 _tny_camel_mime_part_set_content_object (TnyCamelMimePart *self, TnyMimePart *part) 100 { 101 TnyCamelMimePartPriv *priv = TNY_CAMEL_MIME_PART_GET_PRIVATE (self); 102 priv->content_object = part; 103 } 98 104 99 105 /** … … 116 122 if (camel_content_type_is (type, "message", "rfc822")) 117 123 { 118 CamelMimePart *mypart; 119 124 CamelMimePart *mypart = part; 120 125 CamelDataWrapper *rfc822cont = camel_medium_get_content_object (CAMEL_MEDIUM (part)); 121 122 if (rfc822cont)123 mypart = CAMEL_MIME_PART (rfc822cont);124 else125 mypart = part;126 127 126 TnyCamelHeader *nheader = TNY_CAMEL_HEADER (tny_camel_header_new ()); 128 127 tpart = TNY_MIME_PART (tny_camel_msg_new ()); 129 128 _tny_camel_mime_part_set_part (TNY_CAMEL_MIME_PART (tpart), mypart); 129 130 if (rfc822cont) 131 { 132 TnyMimePart *prt = TNY_MIME_PART (tny_camel_msg_new ()); 133 _tny_camel_mime_part_set_part (TNY_CAMEL_MIME_PART (prt), CAMEL_MIME_PART (rfc822cont)); 134 _tny_camel_mime_part_set_content_object (TNY_CAMEL_MIME_PART (tpart), prt); 135 } else 136 _tny_camel_mime_part_set_content_object (TNY_CAMEL_MIME_PART (tpart), NULL); 137 130 138 if (CAMEL_IS_MIME_MESSAGE (mypart)) 131 139 _tny_camel_header_set_camel_mime_message (nheader, mypart); … … 784 792 } 785 793 794 static TnyMimePart* 795 tny_camel_mime_part_get_content_object (TnyMimePart *self) 796 { 797 return TNY_CAMEL_MIME_PART_GET_CLASS (self)->get_content_object_func (self); 798 } 799 800 static TnyMimePart* 801 tny_camel_mime_part_get_content_object_default (TnyMimePart *self) 802 { 803 TnyCamelMimePartPriv *priv = TNY_CAMEL_MIME_PART_GET_PRIVATE (self); 804 TnyMimePart *retval = NULL; 805 if (priv->content_object) 806 retval = TNY_MIME_PART (g_object_ref (G_OBJECT (priv->content_object))); 807 return retval; 808 } 809 786 810 static void 787 811 tny_camel_mime_part_set_content_type (TnyMimePart *self, const gchar *content_type) … … 822 846 if (G_LIKELY (priv->part) && CAMEL_IS_OBJECT (priv->part)) 823 847 camel_object_unref (CAMEL_OBJECT (priv->part)); 848 849 if (priv->content_object) 850 g_object_unref (G_OBJECT (priv->content_object)); 824 851 825 852 g_mutex_unlock (priv->part_lock); … … 877 904 klass->add_part_func = tny_camel_mime_part_add_part; 878 905 klass->del_part_func = tny_camel_mime_part_del_part; 906 klass->get_content_object_func = tny_camel_mime_part_get_content_object; 879 907 880 908 return; … … 909 937 class->add_part_func = tny_camel_mime_part_add_part_default; 910 938 class->del_part_func = tny_camel_mime_part_del_part_default; 939 class->get_content_object_func = tny_camel_mime_part_get_content_object_default; 911 940 912 941 object_class->finalize = tny_camel_mime_part_finalize; … … 923 952 TnyCamelMimePartPriv *priv = TNY_CAMEL_MIME_PART_GET_PRIVATE (self); 924 953 954 priv->content_object = NULL; 925 955 priv->part_lock = g_mutex_new (); 926 956 trunk/libtinymail-camel/tny-camel-mime-part.h
r1240 r1293 69 69 void (*del_part_func) (TnyMimePart *self, TnyMimePart *part); 70 70 gint (*add_part_func) (TnyMimePart *self, TnyMimePart *part); 71 TnyMimePart* (*get_content_object_func) (TnyMimePart *self); 71 72 }; 72 73 trunk/libtinymail/tny-mime-part.c
r1199 r1293 22 22 #include <tny-mime-part.h> 23 23 24 25 /** 26 * tny_mime_part_get_content_object: 27 * @self: a #TnyMimePart object 28 * 29 * Get the content-object in case @self is a RFC822 mime part. If the mime part 30 * isn't a RFC822 one, it will return NULL. Else the return value must be 31 * unreferenced after use. 32 * 33 * Return value: a #TnyMimePart instance or NULL 34 **/ 35 TnyMimePart* 36 tny_mime_part_get_content_object (TnyMimePart *self) 37 { 38 #ifdef DEBUG 39 if (!TNY_MIME_PART_GET_IFACE (self)->get_content_object_func) 40 g_critical ("You must implement tny_mime_part_get_content_object\n"); 41 #endif 42 43 return TNY_MIME_PART_GET_IFACE (self)->get_content_object_func (self); 44 } 24 45 25 46 /** trunk/libtinymail/tny-mime-part.h
r1194 r1293 62 62 void (*del_part_func) (TnyMimePart *self, TnyMimePart *part); 63 63 gint (*add_part_func) (TnyMimePart *self, TnyMimePart *part); 64 TnyMimePart* (*get_content_object_func) (TnyMimePart *self); 64 65 }; 65 66 … … 85 86 gint tny_mime_part_add_part (TnyMimePart *self, TnyMimePart *part); 86 87 void tny_mime_part_del_part (TnyMimePart *self, TnyMimePart *part); 88 TnyMimePart* tny_mime_part_get_content_object (TnyMimePart *self); 87 89 88 90 G_END_DECLS trunk/libtinymailui-gtk/tny-gtk-msg-view.c
r1277 r1293 61 61 struct _TnyGtkMsgViewPriv 62 62 { 63 TnyMimePart *part , *root_part;63 TnyMimePart *part; 64 64 TnyHeaderView *headerview; 65 65 GtkIconView *attachview; … … 79 79 { 80 80 gulong signal; 81 TnyMimePart *part , *root_part;81 TnyMimePart *part; 82 82 } RealizePriv; 83 83 … … 88 88 static void tny_gtk_msg_view_display_parts (TnyMsgView *self, TnyList *parts); 89 89 static void remove_mime_part_viewer (TnyMimePartView *mpview, GtkContainer *mpviewers); 90 static void tny_gtk_msg_view_display_part (TnyMsgView *self, TnyMimePart *part); 90 91 91 92 /** … … 434 435 **/ 435 436 static void 436 tny_mime_part_view_proxy_func_set_part (TnyMimePartView *mpview, TnyMimePart *part , TnyMimePart *root_part)437 tny_mime_part_view_proxy_func_set_part (TnyMimePartView *mpview, TnyMimePart *part) 437 438 { 438 439 if (tny_mime_part_content_type_is (part, "message/rfc822") && TNY_IS_GTK_MSG_VIEW (mpview)) 439 440 { 441 TnyMimePart *content_part = tny_mime_part_get_content_object (part); 442 443 if (!content_part) 444 { 445 TnyList *list = tny_simple_list_new (); 446 447 if (TNY_IS_MSG (part) && TNY_IS_GTK_MSG_VIEW (mpview)) 448 { 449 TnyGtkMsgViewPriv *mppriv = TNY_GTK_MSG_VIEW_GET_PRIVATE (mpview); 450 TnyHeader *header = TNY_HEADER (tny_msg_get_header (TNY_MSG (part))); 451 if (header && TNY_IS_HEADER (header)) 452 { 453 tny_header_view_set_header (mppriv->headerview, header); 454 g_object_unref (G_OBJECT (header)); 455 gtk_widget_show (GTK_WIDGET (mppriv->headerview)); 456 } 457 } 458 459 tny_mime_part_get_parts (part, list); 460 tny_gtk_msg_view_display_parts (TNY_MSG_VIEW (mpview), list); 461 g_object_unref (G_OBJECT (list)); 462 } else { 463 tny_mime_part_view_set_part (mpview, content_part); 464 } 465 } else if (tny_mime_part_content_type_is (part, "multipart/*") && TNY_IS_GTK_MSG_VIEW (mpview)) 466 { 440 467 TnyList *list = tny_simple_list_new (); 441 if (TNY_IS_MSG (part) && TNY_IS_GTK_MSG_VIEW (mpview))442 {443 TnyGtkMsgViewPriv *mppriv = TNY_GTK_MSG_VIEW_GET_PRIVATE (mpview);444 TnyHeader *header = TNY_HEADER (tny_msg_get_header (TNY_MSG (part)));445 if (header && TNY_IS_HEADER (header))446 {447 tny_header_view_set_header (mppriv->headerview, header);448 g_object_unref (G_OBJECT (header));449 gtk_widget_show (GTK_WIDGET (mppriv->headerview));450 }451 }452 453 468 tny_mime_part_get_parts (part, list); 454 469 tny_gtk_msg_view_display_parts (TNY_MSG_VIEW (mpview), list); 455 470 g_object_unref (G_OBJECT (list)); 456 } else if (tny_mime_part_content_type_is (part, "multipart/*") && TNY_IS_GTK_MSG_VIEW (mpview))457 {458 if (part != root_part)459 {460 TnyList *list = tny_simple_list_new ();461 tny_mime_part_get_parts (part, list);462 tny_gtk_msg_view_display_parts (TNY_MSG_VIEW (mpview), list);463 g_object_unref (G_OBJECT (list));464 }465 471 466 472 } else … … 473 479 RealizePriv *prv = user_data; 474 480 475 tny_mime_part_view_proxy_func_set_part (TNY_MIME_PART_VIEW (widget), prv->part , prv->root_part);481 tny_mime_part_view_proxy_func_set_part (TNY_MIME_PART_VIEW (widget), prv->part); 476 482 g_signal_handler_disconnect (widget, prv->signal); 477 483 g_object_unref (prv->part); 478 if (prv->root_part)479 g_object_unref (G_OBJECT (prv->root_part));480 481 484 g_slice_free (RealizePriv, prv); 482 485 } … … 532 535 } 533 536 534 535 537 if (!mpview) 536 538 mpview = tny_msg_view_create_mime_part_view_for (TNY_MSG_VIEW (self), part); … … 544 546 if (TNY_IS_GTK_MSG_VIEW (mpview) && !GTK_IS_WINDOW (mpview)) 545 547 { 546 GtkWidget *expander = gtk_expander_new (_("Email message attachment")); 548 const gchar *label = tny_mime_part_get_description (part); 549 GtkWidget *expander; 550 551 printf ("for %s\n", tny_mime_part_get_content_type (part)); 552 if (label == NULL || strlen (label) <= 0) 553 label = _("Email message attachment"); 554 expander = gtk_expander_new (label); 547 555 gtk_expander_set_expanded (GTK_EXPANDER (expander), FALSE); 548 556 gtk_expander_set_spacing (GTK_EXPANDER (expander), 7); … … 564 572 RealizePriv *prv = g_slice_new (RealizePriv); 565 573 prv->part = g_object_ref (part); 566 prv->root_part = priv->part?g_object_ref (G_OBJECT (priv->part)):NULL;567 574 prv->signal = g_signal_connect (G_OBJECT (mpview), 568 575 "realize", G_CALLBACK (on_mpview_realize), prv); 569 576 } else 570 tny_mime_part_view_proxy_func_set_part (mpview, part , priv->part);577 tny_mime_part_view_proxy_func_set_part (mpview, part); 571 578 572 579 } else if (TNY_IS_GTK_ATTACHMENT_MIME_PART_VIEW (mpview)) 573 tny_mime_part_view_proxy_func_set_part (mpview, part , priv->part);580 tny_mime_part_view_proxy_func_set_part (mpview, part); 574 581 else if (!TNY_IS_GTK_ATTACHMENT_MIME_PART_VIEW (mpview)) 575 582 { 576 583 priv->unattached_views = g_list_prepend (priv->unattached_views, mpview); 577 tny_mime_part_view_proxy_func_set_part (mpview, part , priv->root_part);584 tny_mime_part_view_proxy_func_set_part (mpview, part); 578 585 } 579 586 } else if (!tny_mime_part_content_type_is (part, "multipart/*") && … … 583 590 tny_mime_part_get_content_type (part)); 584 591 } 592 585 593 } 586 594 … … 702 710 if (part) 703 711 { 704 TnyIterator *iterator;705 TnyList *list;706 707 712 g_assert (TNY_IS_MIME_PART (part)); 708 713 … … 718 723 } 719 724 720 list = tny_simple_list_new ();721 725 priv->part = g_object_ref (G_OBJECT (part)); 722 726 723 tny_gtk_msg_view_display_part (TNY_MSG_VIEW (self), part); 724 tny_mime_part_get_parts (part, list); 725 tny_gtk_msg_view_display_parts (TNY_MSG_VIEW (self), list); 726 g_object_unref (G_OBJECT (list)); 727 if (!tny_mime_part_content_type_is (part, "multipart/*")) 728 tny_gtk_msg_view_display_part (TNY_MSG_VIEW (self), part); 729 else 730 { 731 TnyIterator *iterator; 732 TnyList *list; 733 list = tny_simple_list_new (); 734 735 tny_mime_part_get_parts (part, list); 736 tny_gtk_msg_view_display_parts (TNY_MSG_VIEW (self), list); 737 738 g_object_unref (G_OBJECT (list)); 739 } 727 740 } 728 741 … … 785 798 priv->unattached_views = NULL; 786 799 priv->part = NULL; 787 priv->root_part = NULL;788 800 789 801 priv->headerview = tny_gtk_header_view_new ();
