Changeset 491

Show
Ignore:
Timestamp:
06/06/06 00:00:27
Author:
pvanhoof
Message:

Deleting messages

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/libtinymail-camel/tny-msg-folder.c

    r490 r491  
    147147} 
    148148 
     149 
     150static void  
     151tny_msg_folder_remove_message (TnyMsgFolderIface *self, TnyMsgHeaderIface *header) 
     152{ 
     153        TnyMsgFolderPriv *priv = TNY_MSG_FOLDER_GET_PRIVATE (TNY_MSG_FOLDER (self)); 
     154        const gchar *id; 
     155 
     156        g_mutex_lock (priv->folder_lock); 
     157 
     158        if (!priv->folder || !priv->loaded) 
     159                load_folder_no_lock (priv); 
     160 
     161        id = tny_msg_header_iface_get_uid (TNY_MSG_HEADER_IFACE (header)); 
     162        camel_folder_delete_message (priv->folder, id); 
     163 
     164        g_mutex_unlock (priv->folder_lock); 
     165 
     166        return; 
     167} 
     168 
     169static void  
     170tny_msg_folder_expunge (TnyMsgFolderIface *self) 
     171{ 
     172        TnyMsgFolderPriv *priv = TNY_MSG_FOLDER_GET_PRIVATE (TNY_MSG_FOLDER (self)); 
     173        CamelException ex = CAMEL_EXCEPTION_INITIALISER; 
     174 
     175        g_mutex_lock (priv->folder_lock); 
     176 
     177        if (!priv->folder || !priv->loaded) 
     178                load_folder_no_lock (priv); 
     179         
     180        camel_folder_sync (priv->folder, TRUE, &ex); 
     181 
     182        g_mutex_unlock (priv->folder_lock); 
     183 
     184        return; 
     185} 
     186 
     187 
    149188CamelFolder* 
    150189_tny_msg_folder_get_camel_folder (TnyMsgFolderIface *self) 
     
    156195 
    157196        if (!priv->folder || !priv->loaded) 
    158                 load_folder (priv); 
     197                load_folder_no_lock (priv); 
    159198        retval = priv->folder; 
    160199 
     
    908947        klass->refresh_async_func = tny_msg_folder_refresh_async; 
    909948        klass->refresh_func = tny_msg_folder_refresh; 
     949        klass->remove_message_func = tny_msg_folder_remove_message; 
     950        klass->expunge_func = tny_msg_folder_expunge; 
    910951 
    911952        return; 
  • trunk/libtinymail/tny-list-iface.c

    r458 r491  
    6868 * @item: the item to remove 
    6969 * 
    70  * 
     70 * Removing a item might invalidate all existing iterators or put them in an 
     71 * unknown and unspecified state. You'll need to recreate the iterator(s) if you 
     72 * remove an item to be certain. 
    7173 **/ 
    7274void  
  • trunk/libtinymail/tny-msg-folder-iface.c

    r488 r491  
    2525guint *tny_msg_folder_iface_signals; 
    2626 
     27 
     28/** 
     29 * tny_msg_folder_iface_expunge: 
     30 * @self: a TnyMsgFolderIface object 
     31 * 
     32 * Sync changes made to a folder to its backing store,  
     33 * expunging deleted messages as well. 
     34 **/ 
     35void  
     36tny_msg_folder_iface_expunge (TnyMsgFolderIface *self) 
     37{ 
     38        TNY_MSG_FOLDER_IFACE_GET_CLASS (self)->expunge_func (self); 
     39        return; 
     40} 
     41 
     42/** 
     43 * tny_msg_folder_iface_remove_message: 
     44 * @self: a TnyMsgFolderIface object 
     45 * @header: the header of the message to remove 
     46 * 
     47 * Remove a message from a folder 
     48 **/ 
     49void  
     50tny_msg_folder_iface_remove_message (TnyMsgFolderIface *self, TnyMsgHeaderIface *header) 
     51{ 
     52        TNY_MSG_FOLDER_IFACE_GET_CLASS (self)->remove_message_func (self, header); 
     53        return; 
     54} 
    2755 
    2856 
  • trunk/libtinymail/tny-msg-folder-iface.h

    r488 r491  
    7878 
    7979        /* Methods */ 
     80        void (*remove_message_func) (TnyMsgFolderIface *self, TnyMsgHeaderIface *header); 
     81        void (*expunge_func)        (TnyMsgFolderIface *self); 
     82 
    8083        const TnyListIface* 
    8184                      (*get_folders_func)  (TnyMsgFolderIface *self); 
     
    111114GType          tny_msg_folder_iface_get_type     (void); 
    112115 
     116void tny_msg_folder_iface_remove_message (TnyMsgFolderIface *self, TnyMsgHeaderIface *header); 
     117void tny_msg_folder_iface_expunge (TnyMsgFolderIface *self); 
     118 
    113119const TnyListIface* 
    114120               tny_msg_folder_iface_get_folders  (TnyMsgFolderIface *self); 
  • trunk/tinymail/tny-summary-window.c

    r483 r491  
    2626#include <string.h> 
    2727#include <gtk/gtk.h> 
     28#include <gdk/gdkkeysyms.h> 
    2829 
    2930#include <tny-platform-factory-iface.h> 
     
    206207 
    207208static void 
     209on_header_view_key_press_event (GtkTreeView *header_view, GdkEventKey *event, gpointer user_data) 
     210{ 
     211        if (event->keyval == GDK_Delete) 
     212        { 
     213                TnySummaryWindow *self  = user_data; 
     214                TnySummaryWindowPriv *priv = TNY_SUMMARY_WINDOW_GET_PRIVATE (self); 
     215                GtkTreeSelection *selection = gtk_tree_view_get_selection (header_view); 
     216                GtkTreeModel *model, *mymodel, *sortable; 
     217                GtkTreeIter iter; 
     218 
     219                if (G_LIKELY (gtk_tree_selection_get_selected (selection, &model, &iter))) 
     220                { 
     221                        TnyMsgHeaderIface *header; 
     222 
     223                        gtk_tree_model_get (model, &iter,  
     224                                TNY_MSG_HEADER_LIST_MODEL_INSTANCE_COLUMN,  
     225                                &header, -1); 
     226 
     227                        if (G_LIKELY (header)) 
     228                        { 
     229                                GtkWidget *dialog = gtk_message_dialog_new (NULL,  
     230                                        GTK_DIALOG_MODAL, 
     231                                        GTK_MESSAGE_WARNING, GTK_BUTTONS_YES_NO,  
     232                                        _("This will remove the message with subject \"%s\""), 
     233                                        tny_msg_header_iface_get_subject (header)); 
     234 
     235                                if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_YES) 
     236                                { 
     237                                        TnyMsgFolderIface *folder; 
     238                                        const TnyMsgIface *msg; 
     239 
     240                                        if (GTK_IS_TREE_MODEL_SORT (model)) 
     241                                        { 
     242                                                mymodel = gtk_tree_model_sort_get_model  
     243                                                        (GTK_TREE_MODEL_SORT (model)); 
     244                                        } else mymodel = model; 
     245 
     246                                        tny_list_iface_remove (TNY_LIST_IFACE (mymodel), header); 
     247 
     248                                        folder = (TnyMsgFolderIface*)tny_msg_header_iface_get_folder (header); 
     249                                        tny_msg_folder_iface_remove_message (folder, header); 
     250 
     251                                        /* This demo-ui does not support hiding marked-as-deleted  
     252                                           messages. A normal deletion will only *mark* a message 
     253                                           as deleted. That way undeletion is still possible. 
     254 
     255                                           You shouldn't *use* this demo-ui, so I'm doing destructive 
     256                                           irreversible deletes: I immediately expunge the folder! */ 
     257 
     258                                        tny_msg_folder_iface_expunge (folder); 
     259                                } 
     260 
     261                                gtk_widget_destroy (dialog); 
     262                        } 
     263                } 
     264                 
     265        } 
     266 
     267        return; 
     268} 
     269 
     270static void 
    208271on_header_view_tree_selection_changed (GtkTreeSelection *selection,  
    209272                gpointer user_data) 
     
    227290                        const TnyMsgFolderIface *folder; 
    228291                        const TnyMsgIface *msg; 
    229                         /* const TnyMsgHeaderIface *nheader; */ 
    230  
    231                         folder = tny_msg_header_iface_get_folder (TNY_MSG_HEADER_IFACE (header)); 
    232                         msg = tny_msg_folder_iface_get_message (TNY_MSG_FOLDER_IFACE (folder), header); 
    233                         /* nheader = tny_msg_iface_get_header (TNY_MSG_IFACE (msg)); */ 
     292 
     293                        folder = tny_msg_header_iface_get_folder (header); 
     294                        msg = tny_msg_folder_iface_get_message ((TnyMsgFolderIface*)folder, header); 
    234295 
    235296                        tny_msg_view_iface_set_msg (priv->msg_view, TNY_MSG_IFACE (msg));        
     
    388449                if (G_LIKELY (header)) 
    389450                { 
    390 /* Debugging/testing purposes  
    391                         GtkTreeModel *oldmodel = gtk_tree_model_sort_get_model  
    392                                 (GTK_TREE_MODEL_SORT (model)); 
    393                         tny_list_iface_remove (TNY_LIST_IFACE (oldmodel), header); 
    394  
    395 */ 
    396451                        const TnyMsgFolderIface *folder; 
    397452                        const TnyMsgIface *msg; 
     
    591646        g_signal_connect(G_OBJECT (priv->header_view), "row-activated",  
    592647                G_CALLBACK (on_header_view_tree_row_activated), priv->header_view); 
     648 
     649        g_signal_connect(G_OBJECT (priv->header_view), "key-press-event",  
     650                G_CALLBACK (on_header_view_key_press_event), self); 
     651 
    593652        g_signal_connect (G_OBJECT (select), "changed", 
    594653                G_CALLBACK (on_header_view_tree_selection_changed), self);