GtkWidget *toolbar;
GtkWidget *menubar;
GtkWidget *msg_view;
+
+ gchar *msg_uid;
};
#define MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
ModestMsgViewWindowPrivate *priv;
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(obj);
- priv->toolbar = NULL;
- priv->menubar = NULL;
- priv->msg_view = NULL;
+ priv->toolbar = NULL;
+ priv->menubar = NULL;
+ priv->msg_view = NULL;
+ priv->msg_uid = NULL;
}
static void
modest_msg_view_window_finalize (GObject *obj)
-{
+{
+ ModestMsgViewWindowPrivate *priv;
+
+ priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(obj);
+
+ if (priv->msg_uid) {
+ g_free (priv->msg_uid);
+ msg_uid = NULL;
+ }
+
G_OBJECT_CLASS(parent_class)->finalize (obj);
}
ModestWindow *
-modest_msg_view_window_new (TnyMsg *msg, const gchar *account)
+modest_msg_view_window_new (TnyMsg *msg,
+ const gchar *account,
+ const gchar *msg_uid)
{
GObject *obj;
ModestMsgViewWindowPrivate *priv;
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(obj);
parent_priv = MODEST_WINDOW_GET_PRIVATE(obj);
+ priv->msg_uid = g_strdup (msg_uid);
+
modest_window_set_active_account (MODEST_WINDOW(obj), account);
parent_priv->ui_manager = gtk_ui_manager_new();
ModestWindow*
modest_msg_view_window_new_with_header_model (TnyMsg *msg,
const gchar *account,
+ const gchar *msg_uid,
GtkTreeModel *model,
GtkTreeRowReference *row_reference)
{
guint queue_change_handler;
guint progress_bar_timeout;
+
+ gchar *msg_uid;
};
#define MODEST_MSG_VIEW_WINDOW_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \
priv->optimized_view = FALSE;
priv->progress_bar_timeout = 0;
+ priv->msg_uid = NULL;
}
priv->row_reference = NULL;
}
+ if (priv->msg_uid) {
+ g_free (priv->msg_uid);
+ priv->msg_uid = NULL;
+ }
+
G_OBJECT_CLASS(parent_class)->finalize (obj);
}
}
ModestWindow *
-modest_msg_view_window_new_with_header_model (TnyMsg *msg, const gchar *account_name,
- GtkTreeModel *model, GtkTreeRowReference *row_reference)
+modest_msg_view_window_new_with_header_model (TnyMsg *msg,
+ const gchar *account_name,
+ const gchar *msg_uid,
+ GtkTreeModel *model,
+ GtkTreeRowReference *row_reference)
{
ModestMsgViewWindow *window = NULL;
ModestMsgViewWindowPrivate *priv = NULL;
- window = MODEST_MSG_VIEW_WINDOW(modest_msg_view_window_new (msg, account_name));
+ window = MODEST_MSG_VIEW_WINDOW(modest_msg_view_window_new (msg, account_name, msg_uid));
g_return_val_if_fail (MODEST_IS_MSG_VIEW_WINDOW (window), NULL);
priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (window);
ModestWindow *
-modest_msg_view_window_new (TnyMsg *msg, const gchar *account_name)
+modest_msg_view_window_new (TnyMsg *msg,
+ const gchar *account_name,
+ const gchar *msg_uid)
{
ModestMsgViewWindow *self = NULL;
GObject *obj = NULL;
parent_priv = MODEST_WINDOW_GET_PRIVATE(obj);
self = MODEST_MSG_VIEW_WINDOW (obj);
+ priv->msg_uid = g_strdup (msg_uid);
+
parent_priv->ui_manager = gtk_ui_manager_new();
parent_priv->ui_dimming_manager = modest_ui_dimming_manager_new();
const gchar*
modest_msg_view_window_get_message_uid (ModestMsgViewWindow *self)
{
- TnyMsg *msg;
- TnyHeader *header;
- const gchar *retval = NULL;
-
- msg = modest_msg_view_window_get_message (self);
-
- if (!msg)
- return NULL;
-
- header = tny_msg_get_header (msg);
- if (header) {
- retval = tny_header_get_uid (header);
- g_object_unref (header);
- }
- g_object_unref (msg);
-
- return retval;
+ ModestMsgViewWindowPrivate *priv = MODEST_MSG_VIEW_WINDOW_GET_PRIVATE (self);
+ return (const gchar*) priv->msg_uid;
}
static void
/* message attachment */
TnyHeader *header = NULL;
ModestWindowMgr *mgr;
- ModestWindow *msg_win;
+ ModestWindow *msg_win = NULL;
header = tny_msg_get_header (TNY_MSG (mime_part));
mgr = modest_runtime_get_window_mgr ();
- /* TODO: this is not getting any uid */
- msg_win = modest_window_mgr_find_window_by_msguid (mgr, tny_header_get_uid (header));
+ msg_win = modest_window_mgr_find_window_by_header (mgr, header);
if (!msg_win) {
gchar *account = g_strdup (modest_window_get_active_account (MODEST_WINDOW (window)));
if (!account)
account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr ());
- msg_win = modest_msg_view_window_new (TNY_MSG (mime_part), account);
+ msg_win = modest_msg_view_window_new (TNY_MSG (mime_part), account, NULL);
modest_window_mgr_register_window (mgr, msg_win);
gtk_window_set_transient_for (GTK_WINDOW (msg_win), GTK_WINDOW (window));
}
#endif
}
+gchar*
+modest_tny_folder_get_header_unique_id (TnyHeader *header)
+{
+ TnyFolder *folder;
+ gchar *url, *retval;
+ const gchar *uid;
+
+ g_return_val_if_fail (TNY_IS_HEADER (header), NULL);
+
+ folder = tny_header_get_folder (header);
+ if (!folder)
+ return NULL;
+
+ url = tny_folder_get_url_string (folder);
+ uid = tny_header_get_uid (header);
+
+ retval = g_strjoin ("/", url, uid, NULL);
+
+ g_free (url);
+ g_object_unref (folder);
+
+ return retval;
+}
* Returns: TRUE if this folder is the per-account outbox for the account.
*/
gboolean modest_tny_folder_is_outbox_for_account (TnyFolder *folder,
- TnyAccount *account);
+ TnyAccount *account);
+
+/**
+ * modest_tny_msg_get_header_unique_id:
+ * @header: a #TnyHeader
+ *
+ * this function returns a unique id for a message summary, that's it
+ * a TnyHeader retrieved with tny_folder_get_headers (you can not use
+ * the TnyHeader returned by tny_msg_get_header because it has not an
+ * uid).
+ *
+ * This uid is built from the folder URL string and the header uid,
+ * the caller of the function must free the unique id when no longer
+ * needed
+ *
+ * Returns: a unique identificator for a header object
+ **/
+gchar* modest_tny_folder_get_header_unique_id (TnyHeader *header);
G_END_DECLS
#endif /*HAVE_CONFIG_H*/
#include <glib/gi18n.h>
+#include <glib/gprintf.h>
#include <string.h>
#include <modest-runtime.h>
#include <modest-tny-folder.h>
gchar *message = NULL;
gchar *desc = NULL;
gint response;
+ gboolean found;
+ ModestWindowMgr *mgr;
g_return_if_fail (MODEST_IS_WINDOW(win));
header_list = get_selected_headers (win);
if (!header_list) return;
+ /* Check if any of the headers is already opened */
+ iter = tny_list_create_iterator (header_list);
+ found = FALSE;
+ mgr = modest_runtime_get_window_mgr ();
+ while (!tny_iterator_is_done (iter) && !found) {
+ header = TNY_HEADER (tny_iterator_get_current (iter));
+ if (modest_window_mgr_find_window_by_header (mgr, header))
+ found = TRUE;
+ g_object_unref (header);
+ tny_iterator_next (iter);
+ }
+ g_object_unref (iter);
+
+ if (found) {
+ gchar *num, *msg;
+
+ num = g_strdup_printf ("%d", tny_list_get_length (header_list));
+ msg = g_strdup_printf (_("mcen_nc_unable_to_delete_n_messages"), num);
+
+ modest_platform_run_information_dialog (GTK_WINDOW (win), (const gchar *) msg);
+
+ g_free (msg);
+ g_free (num);
+ g_object_unref (header_list);
+ return;
+ }
+
/* Select message */
if (tny_list_get_length(header_list) > 1)
message = g_strdup(_("emev_nc_delete_messages"));
header = TNY_HEADER (tny_iterator_get_current (iter));
desc = g_strdup_printf ("%s", tny_header_get_subject (header));
message = g_strdup_printf(_("emev_nc_delete_message"), desc);
+ g_object_unref (header);
+ g_object_unref (iter);
}
/* Confirmation dialog */
g_free(message);
g_free(desc);
g_object_unref (header_list);
- g_object_unref (iter);
}
if (folder_type == TNY_FOLDER_TYPE_DRAFTS) {
win = modest_msg_edit_window_new (msg, account);
} else {
+ gchar *uid = modest_tny_folder_get_header_unique_id (header);
+
if (MODEST_IS_MAIN_WINDOW (parent_win)) {
GtkWidget *header_view;
GtkTreeSelection *sel;
g_list_free (sel_list);
win = modest_msg_view_window_new_with_header_model (msg,
- account,
+ account,
+ (const gchar*) uid,
model,
row_reference);
gtk_tree_row_reference_free (row_reference);
} else {
- win = modest_msg_view_window_new (msg, account);
+ win = modest_msg_view_window_new (msg, account, (const gchar*) uid);
}
} else {
- win = modest_msg_view_window_new (msg, account);
+ win = modest_msg_view_window_new (msg, account, (const gchar*) uid);
}
+ g_free (uid);
}
/* Register and show new window */
TnyHeader *header;
header = TNY_HEADER (tny_iterator_get_current (iter));
- window = modest_window_mgr_find_window_by_msguid (mgr, tny_header_get_uid (header));
- if (window)
+ window = modest_window_mgr_find_window_by_header (mgr, header);
+ if (window) {
+ /* Do not open again the message and present
+ the window to the user */
tny_list_remove (headers, G_OBJECT (header));
+ gtk_window_present (GTK_WINDOW (window));
+ }
g_object_unref (header);
tny_iterator_next (iter);
/* Check dimmed rule (TODO: check focus on widgets */
mgr = modest_runtime_get_window_mgr ();
iter = tny_list_create_iterator (selected_headers);
- while (!tny_iterator_is_done (iter) && result) {
+ while (!tny_iterator_is_done (iter) && result) {
header = TNY_HEADER (tny_iterator_get_current (iter));
- window = modest_window_mgr_find_window_by_msguid (mgr, tny_header_get_uid (header));
+ window = modest_window_mgr_find_window_by_header (mgr, header);
result = result && (window != NULL);
g_object_unref (header);
*
* Returns: a new #ModestMsgViewWindow, or NULL in case of error
*/
-ModestWindow* modest_msg_view_window_new (TnyMsg *msg, const gchar *account);
+ModestWindow* modest_msg_view_window_new (TnyMsg *msg,
+ const gchar *account,
+ const gchar *msg_uid);
/**
* modest_msg_view_window_new_with_header_model:
*/
ModestWindow* modest_msg_view_window_new_with_header_model (TnyMsg *msg,
const gchar *account,
+ const gchar *msg_uid,
GtkTreeModel *model,
GtkTreeRowReference *row_reference);
} else {
gtk_widget_hide_all (priv->attachments_box);
}
+
+/* g_print ("---\nfilename %s\ncontent_location %s\ncontent_id%s\ncontent_type%s\n", */
+/* tny_mime_part_get_filename (body), */
+/* tny_mime_part_get_content_location (body), */
+/* tny_mime_part_get_content_id (body), */
+/* tny_mime_part_get_content_type (body)); */
} else
set_empty_message (self);
#include <string.h>
#include "modest-window-mgr.h"
#include "modest-runtime.h"
+#include "modest-tny-folder.h"
#include "widgets/modest-main-window.h"
#include "widgets/modest-msg-edit-window.h"
#include "widgets/modest-msg-view-window.h"
/* Get message uid from msg window */
msg_uid = modest_msg_view_window_get_message_uid (MODEST_MSG_VIEW_WINDOW (win));
+
if (msg_uid && !strcmp (msg_uid, uid))
return 0;
else
}
ModestWindow*
-modest_window_mgr_find_window_by_msguid (ModestWindowMgr *self,
- const gchar *msguid)
+modest_window_mgr_find_window_by_header (ModestWindowMgr *self,
+ TnyHeader *header)
{
ModestWindowMgrPrivate *priv;
GList *win = NULL;
+ gchar *msg_uid;
g_return_val_if_fail (MODEST_IS_WINDOW_MGR (self), NULL);
- g_return_val_if_fail (msguid != NULL, NULL);
+ g_return_val_if_fail (TNY_IS_HEADER (header), NULL);
priv = MODEST_WINDOW_MGR_GET_PRIVATE (self);
+ msg_uid = modest_tny_folder_get_header_unique_id (header);
/* Look for the window */
if (priv->window_list)
win = g_list_find_custom (priv->window_list,
- msguid,
+ msg_uid,
(GCompareFunc) compare_msguids);
+ /* Free */
+ g_free (msg_uid);
+ /* Return the window */
if (win)
return win->data;
else
win = g_list_next (win);
}
}
-
-
/**
- * modest_window_mgr_find_window_by_msguid:
+ * modest_window_mgr_find_window_by_header:
* @self: the #ModestWindowMgr
* @msgid: the message uid
*
- * Looks for a #ModestWindow that shows the message specified by the
- * message uid passed as argument
+ * Looks for a #ModestWindow that shows the message whose header is
+ * passed as argument
*
* Return value: the #ModestWindow if found, else NULL
**/
-ModestWindow* modest_window_mgr_find_window_by_msguid (ModestWindowMgr *self,
- const gchar *msguid);
+ModestWindow* modest_window_mgr_find_window_by_header (ModestWindowMgr *self,
+ TnyHeader *header);
/**
* modest_window_mgr_set_fullscreen_mode: