Changeset 3104

Show
Ignore:
Timestamp:
12/12/07 20:39:13
Author:
jdapena
Message:

* libtinymail-camel/tny-camel-folder.c: load camel folder before

getting the url string of it.
* libtinymail-camel/tny-camel-msg-header.c: now the decorated header
can be added with g_object_ref or a weak reference.
* libtinymail-camel/tny-camel-folder.c: now the TnyCamelHeader? we
use to retrieve the message in find_msg is constructed from summary.
This is created in a way it's persistent, and then, we can access
properly to the summary flags. We also eturn null and set error if
message is not in summary.
* libtinymail-camel/tny-camel-full-msg-receive-strategy.c
libtinymail-camel/tny-camel-partial-msg-receive-strategy.c:
use the new TnyCamelMsgHeader? decorator api.
* Fixed minor build issues

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/ChangeLog

    r3103 r3104  
     12007-12-12  Jose Dapena Paz  <jdapena@igalia.com> 
     2 
     3        * libtinymail-camel/tny-camel-folder.c: load camel folder before 
     4        getting the url string of it. 
     5        * libtinymail-camel/tny-camel-msg-header.c: now the decorated header 
     6        can be added with g_object_ref or a weak reference. 
     7        * libtinymail-camel/tny-camel-folder.c: now the TnyCamelHeader we 
     8        use to retrieve the message in find_msg is constructed from summary.  
     9        This is created in a way it's persistent, and then, we can access 
     10        properly to the summary flags. We also eturn null and set error if 
     11        message is not in summary. 
     12        * libtinymail-camel/tny-camel-full-msg-receive-strategy.c 
     13        libtinymail-camel/tny-camel-partial-msg-receive-strategy.c: 
     14        use the new TnyCamelMsgHeader decorator api. 
     15        * Fixed minor build issues. 
     16 
    1172007-12-12  Philip Van Hoof <pvanhoof@gnome.org> 
    218 
  • trunk/libtinymail-camel/tny-camel-folder.c

    r3102 r3104  
    177177        TnyCamelFolderPriv *priv = TNY_CAMEL_FOLDER_GET_PRIVATE (self); 
    178178        TnyCamelAccountPriv *apriv = TNY_CAMEL_ACCOUNT_GET_PRIVATE (priv->account); 
    179         TnyIterator *iter; 
    180179        GList *list, *list_iter; 
    181180 
     
    210209        notify_folder_observers_about (TNY_FOLDER (info->self),  
    211210                TNY_FOLDER_CHANGE (info->change)); 
     211 
    212212        return FALSE; 
    213213} 
     
    24662466        if (uid && uid[0] != '/' && strlen (uid) > 0) 
    24672467        { 
    2468                 info = camel_message_info_new_uid (NULL, uid); 
    2469                 hdr = _tny_camel_header_new (); 
    2470  
    2471                 /* This adds a reason to live to self */ 
    2472                 _tny_camel_header_set_folder (TNY_CAMEL_HEADER (hdr),  
    2473                         TNY_CAMEL_FOLDER (self), priv); 
    2474                 /* hdr will take care of the freeup */ 
    2475                 _tny_camel_header_set_as_memory (TNY_CAMEL_HEADER (hdr), info); 
    2476                 retval = tny_msg_receive_strategy_perform_get_msg (priv->receive_strat, self, hdr, err); 
    2477                 g_object_unref (hdr); 
    2478                 reset_local_size (priv); 
     2468                TnyHeader *nhdr; 
     2469                info = camel_folder_get_message_info (priv->folder, uid); 
     2470                if (info == NULL) { 
     2471                        g_set_error (err, TNY_FOLDER_ERROR, TNY_FOLDER_ERROR_GET_MSG, 
     2472                                     "Message uid not found in folder"); 
     2473                        retval = NULL; 
     2474                } else { 
     2475                        hdr = _tny_camel_header_new (); 
     2476                        _tny_camel_header_set_folder ((TnyCamelHeader *) hdr, (TnyCamelFolder *) self, priv); 
     2477                        _tny_camel_header_set_camel_message_info ((TnyCamelHeader *) hdr, info, FALSE); 
     2478                         
     2479                        retval = tny_msg_receive_strategy_perform_get_msg (priv->receive_strat, self, hdr, err); 
     2480                        if (retval) { 
     2481                                nhdr = tny_msg_get_header (retval); 
     2482                                /* This trick is for forcing owning a TnyCamelHeader reference */ 
     2483                                _tny_camel_msg_header_set_decorated (nhdr, hdr, TRUE); 
     2484                                g_object_unref (nhdr); 
     2485                        } 
     2486                        g_object_unref (hdr); 
     2487                        reset_local_size (priv); 
     2488                } 
    24792489 
    24802490        } else { 
     
    44174427        TnyFolderStoreChange *change; 
    44184428        CamelException subex = CAMEL_EXCEPTION_INITIALISER; 
    4419         TnyCamelFolderPriv *rpriv = NULL; 
    44204429        gboolean was_new = FALSE; 
    44214430 
     
    52925301                { 
    52935302                        char *urls = camel_service_get_url (apriv->service); 
     5303                        if (!priv->folder) 
     5304                                load_folder_no_lock (priv); 
    52945305                        const char *foln = camel_folder_get_full_name (priv->folder); 
    52955306                        retval = g_strdup_printf ("%s/%s", urls, foln); 
  • trunk/libtinymail-camel/tny-camel-full-msg-receive-strategy.c

    r2896 r3104  
    9393                        nheader = _tny_camel_msg_header_new (CAMEL_MIME_MESSAGE (camel_message),  
    9494                                folder, tny_header_get_date_received (header)); 
    95                         _tny_camel_msg_header_set_decorated (TNY_CAMEL_MSG_HEADER (nheader), header); 
     95                        _tny_camel_msg_header_set_decorated (TNY_CAMEL_MSG_HEADER (nheader), header, FALSE); 
    9696 
    9797                        message = tny_camel_msg_new (); 
  • trunk/libtinymail-camel/tny-camel-msg-header-priv.h

    r3076 r3104  
    5555        gboolean partial; 
    5656        TnyHeader *decorated; 
     57        gboolean decorated_has_ref; 
    5758}; 
    5859 
     
    6566TnyHeader* _tny_camel_msg_header_new (CamelMimeMessage *msg, TnyFolder *folder, time_t received); 
    6667 
    67 void _tny_camel_msg_header_set_decorated (TnyCamelMsgHeader *header, TnyHeader *decorated); 
     68void _tny_camel_msg_header_set_decorated (TnyCamelMsgHeader *header, TnyHeader *decorated, gboolean add_reference); 
    6869 
    6970G_END_DECLS 
  • trunk/libtinymail-camel/tny-camel-msg-header.c

    r3096 r3104  
    465465        TnyCamelMsgHeader *me = (TnyCamelMsgHeader *) user_data; 
    466466        me->decorated = NULL; 
     467        me->decorated_has_ref = FALSE; 
    467468} 
    468469 
     
    489490 
    490491        if (me->decorated) { 
    491                 g_object_weak_unref (G_OBJECT (me->decorated), notify_decorated_del, me); 
     492                if (me->decorated_has_ref) 
     493                        g_object_unref (me->decorated); 
     494                else 
     495                        g_object_weak_unref (G_OBJECT (me->decorated), notify_decorated_del, me); 
    492496                me->decorated = NULL; 
    493497        } 
     
    528532        self->partial = FALSE; 
    529533        self->decorated = NULL; 
     534        self->decorated_has_ref = FALSE; 
    530535        self->to = NULL; 
    531536        self->from = NULL; 
     
    541546void  
    542547_tny_camel_msg_header_set_decorated (TnyCamelMsgHeader *header,  
    543                                      TnyHeader *decorated) 
     548                                     TnyHeader *decorated, 
     549                                     gboolean add_reference) 
    544550{ 
    545551        g_assert (TNY_IS_HEADER (decorated)); 
    546552        if (header->decorated) { 
    547                 g_object_weak_unref (G_OBJECT (decorated), notify_decorated_del, header); 
    548         } 
    549  
    550         g_object_weak_ref (G_OBJECT (decorated), notify_decorated_del, header); 
     553                if (header->decorated_has_ref) 
     554                        g_object_unref (header->decorated); 
     555                else 
     556                        g_object_weak_unref (G_OBJECT (header->decorated), notify_decorated_del, header); 
     557        } 
     558        header->decorated_has_ref = add_reference; 
     559 
     560        if (add_reference) 
     561                g_object_ref (decorated); 
     562        else 
     563                g_object_weak_ref (G_OBJECT (decorated), notify_decorated_del, header); 
    551564 
    552565        header->decorated = decorated; 
  • trunk/libtinymail-camel/tny-camel-partial-msg-receive-strategy.c

    r2896 r3104  
    9494                        nheader = _tny_camel_msg_header_new (CAMEL_MIME_MESSAGE (camel_message), folder, 
    9595                                tny_header_get_date_received (header)); 
    96                         _tny_camel_msg_header_set_decorated (TNY_CAMEL_MSG_HEADER (nheader), header); 
     96                        _tny_camel_msg_header_set_decorated (TNY_CAMEL_MSG_HEADER (nheader), header, FALSE); 
    9797                        message = tny_camel_msg_new (); 
    9898                        _tny_camel_msg_set_received (TNY_CAMEL_MSG (message),  
  • trunk/libtinymail/tny-merge-folder.c

    r3100 r3104  
    5252{ 
    5353        TnyMergeFolderPriv *priv = TNY_MERGE_FOLDER_GET_PRIVATE (self); 
    54         TnyIterator *iter; 
    5554        GList *list, *list_iter; 
    5655 
     
    10161015tny_merge_folder_transfer_msgs (TnyFolder *self, TnyList *header_list, TnyFolder *folder_dst, gboolean delete_originals, GError **err) 
    10171016{ 
    1018         TnyMergeFolderPriv *priv = TNY_MERGE_FOLDER_GET_PRIVATE (self); 
    10191017        TnyIterator *iter; 
    10201018 
     
    11011099{ 
    11021100        TransferMsgsInfo *info = thr_user_data; 
    1103         TnyFolder *self = info->self; 
    1104         TnyMergeFolderPriv *priv = TNY_MERGE_FOLDER_GET_PRIVATE (self); 
    11051101 
    11061102        tny_merge_folder_transfer_msgs (info->self, info->header_list, info->folder_dst, info->delete_originals, &info->err);