| | 50 | static void |
|---|
| | 51 | status_update (GObject *sender, TnyStatus *status, gpointer user_data) |
|---|
| | 52 | { |
|---|
| | 53 | TMutFolderViewPriv *priv = TMUT_FOLDER_VIEW_GET_PRIVATE (user_data); |
|---|
| | 54 | |
|---|
| | 55 | if (priv->shell) |
|---|
| | 56 | gtk_progress_set_percentage (tmut_shell_window_get_progress (priv->shell), |
|---|
| | 57 | tny_status_get_fraction (status)); |
|---|
| | 58 | |
|---|
| | 59 | return; |
|---|
| | 60 | } |
|---|
| | 61 | |
|---|
| | 62 | |
|---|
| | 63 | |
|---|
| | 64 | static void |
|---|
| | 65 | on_move_done (TnyFolder *folder, gboolean canceled, GError *err, gpointer user_data) |
|---|
| | 66 | { |
|---|
| | 67 | TMutFolderView *self = TMUT_FOLDER_VIEW (user_data); |
|---|
| | 68 | TMutFolderViewPriv *priv = TMUT_FOLDER_VIEW_GET_PRIVATE (self); |
|---|
| | 69 | gchar *msg = ""; |
|---|
| | 70 | |
|---|
| | 71 | if (canceled) |
|---|
| | 72 | msg = "User canceled the operation"; |
|---|
| | 73 | else if (err) |
|---|
| | 74 | msg = err->message; |
|---|
| | 75 | |
|---|
| | 76 | if (err || canceled) |
|---|
| | 77 | { |
|---|
| | 78 | GtkWidget *dialog = gtk_message_dialog_new ( |
|---|
| | 79 | GTK_WINDOW (gtk_widget_get_parent (GTK_WIDGET (priv->shell))), |
|---|
| | 80 | GTK_DIALOG_DESTROY_WITH_PARENT, |
|---|
| | 81 | GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, msg); |
|---|
| | 82 | g_signal_connect_swapped (dialog, "response", |
|---|
| | 83 | G_CALLBACK (gtk_widget_destroy), dialog); |
|---|
| | 84 | gtk_widget_show_all (dialog); |
|---|
| | 85 | } |
|---|
| | 86 | |
|---|
| | 87 | if (err) |
|---|
| | 88 | g_error_free (err); |
|---|
| | 89 | |
|---|
| | 90 | g_object_unref (user_data); |
|---|
| | 91 | |
|---|
| | 92 | return; |
|---|
| | 93 | } |
|---|
| | 94 | |
|---|
| | 95 | typedef struct { |
|---|
| | 96 | TMutFolderView *self; |
|---|
| | 97 | gboolean delete_originals; |
|---|
| | 98 | TnyList *items; |
|---|
| | 99 | } OnMoveSelectedInfo; |
|---|
| | 100 | |
|---|
| | 101 | static void |
|---|
| | 102 | on_folder_selected_for_move (GtkWidget *widget, gpointer user_data) |
|---|
| | 103 | { |
|---|
| | 104 | OnMoveSelectedInfo *info = (OnMoveSelectedInfo *) user_data; |
|---|
| | 105 | TMutFolderViewPriv *priv = TMUT_FOLDER_VIEW_GET_PRIVATE (info->self); |
|---|
| | 106 | TnyFolderStore *into = tmut_folder_selector_get_current (TMUT_FOLDER_SELECTOR (widget)); |
|---|
| | 107 | |
|---|
| | 108 | if (into) |
|---|
| | 109 | { |
|---|
| | 110 | if (into != (TnyFolderStore *) priv->folder && TNY_IS_FOLDER (into)) |
|---|
| | 111 | tny_folder_transfer_msgs_async (priv->folder, |
|---|
| | 112 | info->items, TNY_FOLDER (into), info->delete_originals, |
|---|
| | 113 | on_move_done, status_update, |
|---|
| | 114 | g_object_ref (info->self)); |
|---|
| | 115 | |
|---|
| | 116 | g_object_unref (into); |
|---|
| | 117 | } |
|---|
| | 118 | |
|---|
| | 119 | tmut_shell_window_back (priv->shell); |
|---|
| | 120 | |
|---|
| | 121 | return; |
|---|
| | 122 | } |
|---|
| | 123 | |
|---|
| | 124 | static void |
|---|
| | 125 | on_folder_selected_for_move_destroy (GtkWidget *widget, gpointer user_data) |
|---|
| | 126 | { |
|---|
| | 127 | OnMoveSelectedInfo *info = (OnMoveSelectedInfo *) user_data; |
|---|
| | 128 | |
|---|
| | 129 | g_object_unref (info->self); |
|---|
| | 130 | g_object_unref (info->items); |
|---|
| | 131 | |
|---|
| | 132 | g_slice_free (OnMoveSelectedInfo, info); |
|---|
| | 133 | |
|---|
| | 134 | return; |
|---|
| | 135 | } |
|---|
| | 136 | |
|---|
| | 137 | void |
|---|
| | 138 | tmut_folder_view_on_message_move_activated (GObject *sender, TMutFolderView *self) |
|---|
| | 139 | { |
|---|
| | 140 | TMutFolderViewPriv *priv = TMUT_FOLDER_VIEW_GET_PRIVATE (self); |
|---|
| | 141 | GtkTreeSelection *selection = gtk_tree_view_get_selection (priv->headers_treeview); |
|---|
| | 142 | GtkTreeModel *model; |
|---|
| | 143 | GtkTreeIter iter; |
|---|
| | 144 | |
|---|
| | 145 | if (gtk_tree_selection_get_selected (selection, &model, &iter)) |
|---|
| | 146 | { |
|---|
| | 147 | TnyHeader *header = NULL; |
|---|
| | 148 | |
|---|
| | 149 | gtk_tree_model_get (model, &iter, |
|---|
| | 150 | TNY_GTK_HEADER_LIST_MODEL_INSTANCE_COLUMN, |
|---|
| | 151 | &header, -1); |
|---|
| | 152 | |
|---|
| | 153 | if (header) |
|---|
| | 154 | { |
|---|
| | 155 | TnyFolder *folder; |
|---|
| | 156 | TMutFolderSelector *view; |
|---|
| | 157 | OnMoveSelectedInfo *info; |
|---|
| | 158 | gboolean del_originals = TRUE; |
|---|
| | 159 | |
|---|
| | 160 | info = g_slice_new0 (OnMoveSelectedInfo); |
|---|
| | 161 | info->self = TMUT_FOLDER_VIEW (g_object_ref (self)); |
|---|
| | 162 | info->items = tny_simple_list_new (); |
|---|
| | 163 | |
|---|
| | 164 | tny_list_prepend (info->items, G_OBJECT (header)); |
|---|
| | 165 | |
|---|
| | 166 | /* TODO: make this choosable */ |
|---|
| | 167 | info->delete_originals = TRUE; |
|---|
| | 168 | |
|---|
| | 169 | view = tmut_folder_selector_new (); |
|---|
| | 170 | |
|---|
| | 171 | tny_account_store_view_set_account_store (TNY_ACCOUNT_STORE_VIEW (view), |
|---|
| | 172 | priv->account_store); |
|---|
| | 173 | |
|---|
| | 174 | g_signal_connect (G_OBJECT (view), "folder-selected", |
|---|
| | 175 | G_CALLBACK (on_folder_selected_for_move), info); |
|---|
| | 176 | g_signal_connect (G_OBJECT (view), "destroy", |
|---|
| | 177 | G_CALLBACK (on_folder_selected_for_move_destroy), info); |
|---|
| | 178 | gtk_widget_show (GTK_WIDGET (view)); |
|---|
| | 179 | |
|---|
| | 180 | tmut_shell_window_set_child ( |
|---|
| | 181 | tmut_shell_child_get_window (TMUT_SHELL_CHILD (self)), |
|---|
| | 182 | TMUT_SHELL_CHILD (view), "Select destination"); |
|---|
| | 183 | |
|---|
| | 184 | g_object_unref (folder); |
|---|
| | 185 | } |
|---|
| | 186 | } |
|---|
| | 187 | |
|---|
| | 188 | return; |
|---|
| | 189 | } |
|---|
| | 190 | |
|---|
| | 191 | |
|---|