aboutsummaryrefslogtreecommitdiffstats
path: root/mail
diff options
context:
space:
mode:
Diffstat (limited to 'mail')
-rw-r--r--mail/mail-ops.c43
-rw-r--r--mail/mail-tools.c12
2 files changed, 46 insertions, 9 deletions
diff --git a/mail/mail-ops.c b/mail/mail-ops.c
index bd080d7f01..555fd53ec9 100644
--- a/mail/mail-ops.c
+++ b/mail/mail-ops.c
@@ -45,6 +45,10 @@ typedef struct fetch_mail_input_s
}
fetch_mail_input_t;
+typedef struct fetch_mail_data_s {
+ gboolean empty;
+} fetch_mail_data_t;
+
static gchar *describe_fetch_mail (gpointer in_data, gboolean gerund);
static void setup_fetch_mail (gpointer in_data, gpointer op_data,
CamelException * ex);
@@ -70,6 +74,7 @@ static void
setup_fetch_mail (gpointer in_data, gpointer op_data, CamelException * ex)
{
fetch_mail_input_t *input = (fetch_mail_input_t *) in_data;
+ fetch_mail_data_t *data = (fetch_mail_data_t *) op_data;
if (!input->source_url) {
camel_exception_set (ex, CAMEL_EXCEPTION_INVALID_PARAM,
@@ -87,16 +92,17 @@ setup_fetch_mail (gpointer in_data, gpointer op_data, CamelException * ex)
return;
}
+ data->empty = FALSE;
camel_object_ref (CAMEL_OBJECT (input->destination));
}
static void
do_fetch_mail (gpointer in_data, gpointer op_data, CamelException * ex)
{
- fetch_mail_input_t *input;
- CamelFolder *search_folder = NULL;
+ fetch_mail_input_t *input = (fetch_mail_input_t *) in_data;
+ fetch_mail_data_t *data = (fetch_mail_data_t *) op_data;
- input = (fetch_mail_input_t *) in_data;
+ CamelFolder *search_folder = NULL;
if (input->destination == NULL) {
input->destination = mail_tool_get_local_inbox (ex);
@@ -110,16 +116,27 @@ do_fetch_mail (gpointer in_data, gpointer op_data, CamelException * ex)
input->keep_on_server, ex);
if (search_folder == NULL) {
- /* This happens with an IMAP source and on error */
+ /* This happens with an IMAP source and on error
+ * and on "no new mail"
+ */
camel_object_unref (CAMEL_OBJECT (input->destination));
input->destination = NULL;
+ data->empty = TRUE;
return;
}
- mail_tool_filter_contents_into (search_folder, input->destination,
- TRUE,
- input->hook_func, input->hook_data,
- ex);
+ mail_tool_camel_lock_up ();
+ if (camel_folder_get_message_count (search_folder) == 0) {
+ data->empty = TRUE;
+ } else {
+ mail_tool_filter_contents_into (search_folder, input->destination,
+ TRUE,
+ input->hook_func, input->hook_data,
+ ex);
+ data->empty = FALSE;
+ }
+ mail_tool_camel_lock_down ();
+
camel_object_unref (CAMEL_OBJECT (search_folder));
}
@@ -127,6 +144,14 @@ static void
cleanup_fetch_mail (gpointer in_data, gpointer op_data, CamelException * ex)
{
fetch_mail_input_t *input = (fetch_mail_input_t *) in_data;
+ fetch_mail_data_t *data = (fetch_mail_data_t *) op_data;
+
+ if (data->empty && !camel_exception_is_set (ex)) {
+ GtkWidget *dialog;
+
+ dialog = gnome_ok_dialog ("There is no new mail.");
+ gnome_dialog_run_and_close (GNOME_DIALOG (dialog));
+ }
g_free (input->source_url);
if (input->destination)
@@ -135,7 +160,7 @@ cleanup_fetch_mail (gpointer in_data, gpointer op_data, CamelException * ex)
static const mail_operation_spec op_fetch_mail = {
describe_fetch_mail,
- 0,
+ sizeof (fetch_mail_data_t),
setup_fetch_mail,
do_fetch_mail,
cleanup_fetch_mail
diff --git a/mail/mail-tools.c b/mail/mail-tools.c
index 10e70a6a6f..2ae83229ef 100644
--- a/mail/mail-tools.c
+++ b/mail/mail-tools.c
@@ -156,6 +156,7 @@ mail_tool_do_movemail (const gchar *source_url, CamelException *ex)
gchar *dest_path;
const gchar *source;
CamelFolder *ret;
+ struct stat sb;
#ifndef MOVEMAIL_PATH
int tmpfd;
#endif
@@ -195,6 +196,13 @@ mail_tool_do_movemail (const gchar *source_url, CamelException *ex)
mail_tool_camel_lock_up();
camel_movemail (source, dest_path, ex);
mail_tool_camel_lock_down();
+
+ if (stat (dest_path, &sb) < 0 || sb.st_size == 0) {
+ g_free (dest_path);
+ g_free (dest_url);
+ return NULL;
+ }
+
g_free (dest_path);
if (camel_exception_is_set (ex)) {
@@ -423,6 +431,10 @@ mail_tool_fetch_mail_into_searchable (const char *source_url, gboolean keep_on_s
else
spool_folder = mail_tool_get_inbox (source_url, ex);
+ /* No new mail */
+ if (spool_folder == NULL)
+ return NULL;
+
if (camel_exception_is_set (ex))
goto cleanup;