[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[SCM] GNU Mailutils branch, master, updated. release-2.2-329-g29a5598
From: |
Sergey Poznyakoff |
Subject: |
[SCM] GNU Mailutils branch, master, updated. release-2.2-329-g29a5598 |
Date: |
Tue, 28 Dec 2010 15:52:44 +0000 |
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU Mailutils".
http://git.savannah.gnu.org/cgit/mailutils.git/commit/?id=29a5598ab4ccdb0c9a6646f26932cc37889a781d
The branch, master has been updated
via 29a5598ab4ccdb0c9a6646f26932cc37889a781d (commit)
from d85540094f0df7258af1cae7c61cc6d45c2a4f53 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
commit 29a5598ab4ccdb0c9a6646f26932cc37889a781d
Author: Sergey Poznyakoff <address@hidden>
Date: Tue Dec 28 17:30:37 2010 +0200
imap4d: speed up asynchronous mailbox notifications.
* imap4d/imap4d.h (util_format_attribute_flags): New prototype.
* imap4d/sync.c: Rewrite using flag table to keep attribute flags,
mu_mailbox_translate to convert uids to message numbers and
MU_EVT_MAILBOX_MESSAGE_EXPUNGE event to report expunged messages.
* imap4d/util.c (_imap4d_attrlist): Remove \Recent
(util_attribute_to_type): Handle \Recent separately.
(util_format_attribute_flags): New function.
(util_print_flags): Rewrite as an extra entry point to the above.
mailboxes: New event MU_EVT_MAILBOX_MESSAGE_EXPUNGE.
* include/mailutils/observer.h: Rearrange and partially rename
event constants (all uses updated):
MU_EVT_MESSAGE_APPEND => MU_EVT_MAILBOX_MESSAGE_APPEND
MU_EVT_AUTHORITY_FAILED => MU_EVT_FOLDER_AUTHORITY_FAILED
(MU_EVT_MAILBOX_MESSAGE_EXPUNGE): New event.
* libproto/mbox/mbox.c: Generate MU_EVT_MAILBOX_MESSAGE_EXPUNGE.
* libproto/pop/mbox.c: Likewise.
* libmailutils/base/amd.c: Likewise.
-----------------------------------------------------------------------
Summary of changes:
imap4d/imap4d.h | 1 +
imap4d/sync.c | 261 +++++++++++-----------------------------
imap4d/util.c | 68 ++++-------
include/mailutils/observer.h | 31 +++--
libmailutils/base/amd.c | 10 ++-
libmailutils/mailbox/message.c | 4 +-
libproto/imap/folder.c | 2 +-
libproto/mbox/mbox.c | 11 ++-
libproto/pop/mbox.c | 6 +
maidag/deliver.c | 5 +-
10 files changed, 141 insertions(+), 258 deletions(-)
diff --git a/imap4d/imap4d.h b/imap4d/imap4d.h
index 5026812..08575f1 100644
--- a/imap4d/imap4d.h
+++ b/imap4d/imap4d.h
@@ -370,6 +370,7 @@ extern char *util_localname (void);
extern int util_wcard_match (const char *string, const char *pattern,
const char *delim);
+int util_format_attribute_flags (mu_stream_t str, int flags);
void util_print_flags (mu_attribute_t attr);
int util_attribute_to_type (const char *item, int *type);
int util_type_to_attribute (int type, char **attr_str);
diff --git a/imap4d/sync.c b/imap4d/sync.c
index 5901a53..1f2f8e2 100644
--- a/imap4d/sync.c
+++ b/imap4d/sync.c
@@ -21,163 +21,24 @@
/*
*/
-struct _uid_table
-{
- size_t uid;
- size_t msgno;
- int notify;
- mu_attribute_t attr;
-};
-
-static struct _uid_table *uid_table;
-static size_t uid_table_count;
-static int uid_table_loaded;
-
-static void
-add_flag (char **pbuf, const char *f)
-{
- char *abuf = *pbuf;
- abuf = realloc (abuf, strlen (abuf) + strlen (f) + 2);
- if (abuf == NULL)
- imap4d_bye (ERR_NO_MEM);
- if (*abuf)
- strcat (abuf, " ");
- strcat (abuf, "\\Seen");
- *pbuf = abuf;
-}
-
-static void
-notify_flag (size_t msgno, mu_attribute_t oattr)
-{
- mu_message_t msg = NULL;
- mu_attribute_t nattr = NULL;
- int status ;
- mu_mailbox_get_message (mbox, msgno, &msg);
- mu_message_get_attribute (msg, &nattr);
- status = mu_attribute_is_equal (oattr, nattr);
-
- if (status == 0)
- {
- char *abuf = malloc (1);;
- if (!abuf)
- imap4d_bye (ERR_NO_MEM);
- *abuf = '\0';
- if (mu_attribute_is_seen (nattr) && mu_attribute_is_read (nattr))
- if (!mu_attribute_is_seen (oattr) && !mu_attribute_is_read (oattr))
- {
- mu_attribute_set_seen (oattr);
- mu_attribute_set_read (oattr);
- add_flag (&abuf, "\\Seen");
- }
- if (mu_attribute_is_answered (nattr))
- if (!mu_attribute_is_answered (oattr))
- {
- mu_attribute_set_answered (oattr);
- add_flag (&abuf, "\\Answered");
- }
- if (mu_attribute_is_flagged (nattr))
- if (!mu_attribute_is_flagged (oattr))
- {
- mu_attribute_set_flagged (oattr);
- add_flag (&abuf, "\\Flagged");
- }
- if (mu_attribute_is_deleted (nattr))
- if (!mu_attribute_is_deleted (oattr))
- {
- mu_attribute_set_deleted (oattr);
- add_flag (&abuf, "\\Deleted");
- }
- if (mu_attribute_is_draft (nattr))
- if (!mu_attribute_is_draft (oattr))
- {
- mu_attribute_set_draft (oattr);
- add_flag (&abuf, "\\Draft");
- }
- if (mu_attribute_is_recent (nattr))
- if (!mu_attribute_is_recent (oattr))
- {
- mu_attribute_set_recent (oattr);
- add_flag (&abuf, "\\Recent");
- }
- if (*abuf)
- io_untagged_response (RESP_NONE, "%lu FETCH FLAGS (%s)",
- (unsigned long) msgno, abuf);
- free (abuf);
- }
-}
-
-/* The EXPUNGE response reports that the specified message sequence
- number has been permanently removed from the mailbox. The message
- sequence number for each successive message in the mailbox is
- immediately decremented by 1, and this decrement is reflected in
- message sequence numbers in subsequent responses (including other
- untagged EXPUNGE responses). */
-static void
-notify_deleted (void)
-{
- if (uid_table)
- {
- size_t i;
- size_t decr = 0;
- for (i = 0; i < uid_table_count; i++)
- {
- if (!(uid_table[i].notify))
- {
- io_untagged_response (RESP_NONE, "%lu EXPUNGED",
- (unsigned long) uid_table[i].msgno-decr);
- uid_table[i].notify = 1;
- decr++;
- }
- }
- }
-}
-
-
-static int
-notify_uid (size_t uid)
-{
- if (uid_table)
- {
- size_t i;
- for (i = 0; i < uid_table_count; i++)
- {
- if (uid_table[i].uid == uid)
- {
- notify_flag (uid_table[i].msgno, uid_table[i].attr);
- uid_table[i].notify = 1;
- return 1;
- }
- }
- }
- return 0;
-}
+static int *attr_table;
+static size_t attr_table_count;
+static int attr_table_loaded;
static void
free_uids (void)
{
- if (uid_table)
+ if (attr_table)
{
- size_t i;
- for (i = 0; i < uid_table_count; i++)
- mu_attribute_destroy (&(uid_table[i].attr), NULL);
- free (uid_table);
- uid_table = NULL;
+ free (attr_table);
+ attr_table = NULL;
}
- uid_table_count = 0;
- uid_table_loaded = 0;
-}
-
-static void
-reset_notify (void)
-{
- size_t i;
-
- for (i = 0; i < uid_table_count; i++)
- uid_table[i].notify = 0;
+ attr_table_count = 0;
+ attr_table_loaded = 0;
}
static void
-reset_uids (void)
+reread_attributes (void)
{
size_t total = 0;
size_t i;
@@ -185,26 +46,24 @@ reset_uids (void)
free_uids ();
mu_mailbox_messages_count (mbox, &total);
+ if (total > attr_table_count)
+ {
+ attr_table = realloc (attr_table, sizeof (*attr_table) * total);
+ if (!attr_table)
+ imap4d_bye (ERR_NO_MEM);
+ attr_table_count = total;
+ }
+
for (i = 1; i <= total; i++)
{
mu_message_t msg = NULL;
mu_attribute_t attr = NULL;
- size_t uid = 0;
- uid_table = realloc (uid_table, sizeof (*uid_table) *
- (uid_table_count + 1));
- if (!uid_table)
- imap4d_bye (ERR_NO_MEM);
+
mu_mailbox_get_message (mbox, i, &msg);
mu_message_get_attribute (msg, &attr);
- mu_message_get_uid (msg, &uid);
- uid_table[uid_table_count].uid = uid;
- uid_table[uid_table_count].msgno = i;
- uid_table[uid_table_count].notify = 0;
- mu_attribute_create (&(uid_table[uid_table_count].attr), NULL);
- mu_attribute_copy (uid_table[uid_table_count].attr, attr);
- uid_table_count++;
+ mu_attribute_get_flags (attr, &attr_table[i-1]);
}
- uid_table_loaded = 1;
+ attr_table_loaded = 1;
}
static void
@@ -216,25 +75,34 @@ notify (void)
mu_mailbox_messages_count (mbox, &total);
- if (!uid_table)
+ if (!attr_table)
{
reset = 1;
- reset_uids ();
+ reread_attributes ();
+ mu_mailbox_messages_recent (mbox, &recent);
}
-
- if (uid_table)
+ else if (attr_table)
{
size_t i;
for (i = 1; i <= total; i++)
{
mu_message_t msg = NULL;
- size_t uid = 0;
+ mu_attribute_t nattr = NULL;
+ int nflags;
+
mu_mailbox_get_message (mbox, i, &msg);
- mu_message_get_uid (msg, &uid);
- notify_uid (uid);
+ mu_message_get_attribute (msg, &nattr);
+ mu_attribute_get_flags (nattr, &nflags);
+
+ if (nflags != attr_table[i-1])
+ {
+ io_sendf ("* %lu FETCH FLAGS (", (unsigned long) i);
+ util_format_attribute_flags (iostream, nflags);
+ io_sendf (")\n");
+ attr_table[i-1] = nflags;
+ }
}
- notify_deleted ();
mu_mailbox_messages_recent (mbox, &recent);
}
@@ -242,35 +110,28 @@ notify (void)
io_untagged_response (RESP_NONE, "%lu RECENT", (unsigned long) recent);
if (!reset)
- reset_uids ();
- else
- reset_notify ();
+ reread_attributes ();
}
size_t
uid_to_msgno (size_t uid)
{
- size_t i;
- for (i = 0; i < uid_table_count; i++)
- if (uid_table[i].uid == uid)
- return uid_table[i].msgno;
- return 0;
+ size_t msgno;
+ mu_mailbox_translate (mbox, MU_MAILBOX_UID_TO_MSGNO, uid, &msgno);
+ return msgno;
}
int
imap4d_sync_flags (size_t msgno)
{
- size_t i;
- for (i = 0; i < uid_table_count; i++)
- if (uid_table[i].msgno == msgno)
- {
- mu_message_t msg = NULL;
- mu_attribute_t attr = NULL;
- mu_mailbox_get_message (mbox, msgno, &msg);
- mu_message_get_attribute (msg, &attr);
- mu_attribute_copy (uid_table[i].attr, attr);
- break;
- }
+ if (attr_table)
+ {
+ mu_message_t msg = NULL;
+ mu_attribute_t attr = NULL;
+ mu_mailbox_get_message (mbox, msgno, &msg);
+ mu_message_get_attribute (msg, &attr);
+ mu_attribute_get_flags (attr, &attr_table[msgno-1]);
+ }
return 0;
}
@@ -288,6 +149,19 @@ action (mu_observer_t observer, size_t type, void *data,
void *action_data)
case MU_EVT_MAILBOX_DESTROY:
mailbox_corrupt = 0;
break;
+
+ case MU_EVT_MAILBOX_MESSAGE_EXPUNGE:
+ /* The EXPUNGE response reports that the specified message sequence
+ number has been permanently removed from the mailbox. The message
+ sequence number for each successive message in the mailbox is
+ immediately decremented by 1, and this decrement is reflected in
+ message sequence numbers in subsequent responses (including other
+ untagged EXPUNGE responses). */
+ {
+ size_t *exp = data;
+ io_untagged_response (RESP_NONE, "%lu EXPUNGED",
+ (unsigned long) (exp[0] - exp[1]));
+ }
}
return 0;
}
@@ -301,8 +175,11 @@ imap4d_set_observer (mu_mailbox_t mbox)
mu_observer_create (&observer, mbox);
mu_observer_set_action (observer, action, mbox);
mu_mailbox_get_observable (mbox, &observable);
- mu_observable_attach (observable,
MU_EVT_MAILBOX_CORRUPT|MU_EVT_MAILBOX_DESTROY,
- observer);
+ mu_observable_attach (observable,
+ MU_EVT_MAILBOX_CORRUPT|
+ MU_EVT_MAILBOX_DESTROY|
+ MU_EVT_MAILBOX_MESSAGE_EXPUNGE,
+ observer);
mailbox_corrupt = 0;
}
@@ -314,7 +191,7 @@ imap4d_sync (void)
If it was a close we do not send any notification. */
if (mbox == NULL)
free_uids ();
- else if (!uid_table_loaded || !mu_mailbox_is_updated (mbox))
+ else if (!attr_table_loaded || !mu_mailbox_is_updated (mbox))
{
if (mailbox_corrupt)
{
@@ -338,7 +215,7 @@ imap4d_sync (void)
{
size_t count = 0;
mu_mailbox_messages_count (mbox, &count);
- if (count != uid_table_count)
+ if (count != attr_table_count)
notify ();
}
return 0;
diff --git a/imap4d/util.c b/imap4d/util.c
index 95a46d9..9c819e9 100644
--- a/imap4d/util.c
+++ b/imap4d/util.c
@@ -402,8 +402,7 @@ _imap4d_attrlist[] =
{ "\\Flagged", MU_ATTRIBUTE_FLAGGED },
{ "\\Deleted", MU_ATTRIBUTE_DELETED },
{ "\\Draft", MU_ATTRIBUTE_DRAFT },
- { "\\Seen", MU_ATTRIBUTE_READ },
- { "\\Recent", MU_ATTRIBUTE_RECENT },
+ { "\\Seen", MU_ATTRIBUTE_SEEN|MU_ATTRIBUTE_READ },
};
#define NATTR sizeof(_imap4d_attrlist)/sizeof(_imap4d_attrlist[0])
@@ -414,6 +413,13 @@ int
util_attribute_to_type (const char *item, int *type)
{
int i;
+
+ if (mu_c_strcasecmp (item, "\\Recent") == 0)
+ {
+ *type = MU_ATTRIBUTE_RECENT;
+ return 0;
+ }
+
for (i = 0; i < _imap4d_nattr; i++)
if (mu_c_strcasecmp (item, _imap4d_attrlist[i].name) == 0)
{
@@ -423,68 +429,38 @@ util_attribute_to_type (const char *item, int *type)
return 1;
}
-/* Note: currently unused. Not needed, possibly? */
int
-util_type_to_attribute (int type, char **attr_str)
+util_format_attribute_flags (mu_stream_t str, int flags)
{
- char *attr_list[NATTR];
- int nattr = 0;
int i;
- size_t len = 0;
-
- if (MU_ATTRIBUTE_IS_UNSEEN (type))
- *attr_str = strdup ("\\Recent");
- else
- *attr_str = NULL;
-
+ int delim = 0;
+
for (i = 0; i < _imap4d_nattr; i++)
- if (type & _imap4d_attrlist[i].flag)
+ if (flags & _imap4d_attrlist[i].flag)
{
- attr_list[nattr++] = _imap4d_attrlist[i].name;
- len += 1 + strlen (_imap4d_attrlist[i].name);
+ if (delim)
+ mu_stream_printf (str, " ");
+ mu_stream_printf (str, "%s", _imap4d_attrlist[i].name);
+ delim = 1;
}
- *attr_str = malloc (len + 1);
- (*attr_str)[0] = 0;
- if (*attr_str)
+ if (MU_ATTRIBUTE_IS_UNSEEN (flags))
{
- for (i = 0; i < nattr; i++)
- {
- strcat (*attr_str, attr_list[i]);
- if (i != nattr - 1)
- strcat (*attr_str, " ");
- }
+ if (delim)
+ mu_stream_printf (str, " ");
+ mu_stream_printf (str, "\\Recent");
}
-
- if (!*attr_str)
- imap4d_bye (ERR_NO_MEM);
+
return 0;
}
void
util_print_flags (mu_attribute_t attr)
{
- int i;
int flags = 0;
- int space = 0;
mu_attribute_get_flags (attr, &flags);
- for (i = 0; i < _imap4d_nattr; i++)
- if (flags & _imap4d_attrlist[i].flag)
- {
- if (space)
- io_sendf (" ");
- else
- space = 1;
- io_sendf (_imap4d_attrlist[i].name);
- }
-
- if (MU_ATTRIBUTE_IS_UNSEEN (flags))
- {
- if (space)
- io_sendf (" ");
- io_sendf ("\\Recent");
- }
+ util_format_attribute_flags (iostream, flags);
}
int
diff --git a/include/mailutils/observer.h b/include/mailutils/observer.h
index f4d6dc9..f1abe20 100644
--- a/include/mailutils/observer.h
+++ b/include/mailutils/observer.h
@@ -24,17 +24,26 @@
#ifdef __cplusplus
extern "C" {
#endif
- /* Call data type: */
-#define MU_EVT_MAILBOX_DESTROY 0x001 /* mu_mailbox_t */
-#define MU_EVT_FOLDER_DESTROY 0x002 /* mu_folder_t */
-#define MU_EVT_MAILER_DESTROY 0x004 /* mu_mailer_t */
-#define MU_EVT_MESSAGE_DESTROY 0x008 /* mu_message_t */
-#define MU_EVT_MESSAGE_ADD 0x010 /* size_t *: FIXME */
-#define MU_EVT_MAILBOX_PROGRESS 0x020 /* NULL: FIXME? */
-#define MU_EVT_AUTHORITY_FAILED 0x030 /* NULL */
-#define MU_EVT_MAILBOX_CORRUPT 0x040 /* mu_mailbox_t */
-#define MU_EVT_MAILER_MESSAGE_SENT 0x080 /* mu_message_t */
-#define MU_EVT_MESSAGE_APPEND 0x100 /* mu_message_qid_t: FIXME */
+ /* Mailbox events */
+ /* Call data type: */
+#define MU_EVT_MAILBOX_DESTROY 0x001 /* mu_mailbox_t */
+#define MU_EVT_MAILBOX_PROGRESS 0x002 /* NULL: FIXME? */
+#define MU_EVT_MAILBOX_CORRUPT 0x004 /* mu_mailbox_t */
+#define MU_EVT_MAILBOX_MESSAGE_APPEND 0x008 /* mu_message_qid_t: FIXME */
+#define MU_EVT_MAILBOX_MESSAGE_EXPUNGE 0x010 /* size_t [2]
+ (message number/number of
+ messages removed so far) */
+ /* Folder events */
+#define MU_EVT_FOLDER_DESTROY 0x020 /* mu_folder_t */
+#define MU_EVT_FOLDER_AUTHORITY_FAILED 0x040 /* NULL */
+
+ /* Message events */
+#define MU_EVT_MESSAGE_DESTROY 0x080 /* mu_message_t */
+#define MU_EVT_MESSAGE_ADD 0x100 /* size_t *: FIXME */
+
+ /* Mailer events */
+#define MU_EVT_MAILER_DESTROY 0x200 /* mu_mailer_t */
+#define MU_EVT_MAILER_MESSAGE_SENT 0x400 /* mu_message_t */
#define MU_OBSERVER_NO_CHECK 1
diff --git a/libmailutils/base/amd.c b/libmailutils/base/amd.c
index 96d55cc..0bda673 100644
--- a/libmailutils/base/amd.c
+++ b/libmailutils/base/amd.c
@@ -900,7 +900,8 @@ amd_append_message (mu_mailbox_t mailbox, mu_message_t msg)
char *qid;
if (amd->cur_msg_file_name (mhm, &qid) == 0)
{
- mu_observable_notify (mailbox->observable, MU_EVT_MESSAGE_APPEND,
+ mu_observable_notify (mailbox->observable,
+ MU_EVT_MAILBOX_MESSAGE_APPEND,
qid);
free (qid);
}
@@ -1148,6 +1149,7 @@ amd_expunge (mu_mailbox_t mailbox)
struct _amd_message *mhm;
size_t i;
int updated = amd->has_new_msg;
+ size_t expcount = 0;
if (amd == NULL)
return EINVAL;
@@ -1175,9 +1177,15 @@ amd_expunge (mu_mailbox_t mailbox)
if (amd->delete_msg)
{
+ size_t expevt[2] = { i + 1, expcount };
rc = amd->delete_msg (amd, mhm);
if (rc)
return rc;
+
+ mu_observable_notify (mailbox->observable,
+ MU_EVT_MAILBOX_MESSAGE_EXPUNGE,
+ expevt);
+ ++expcount;
}
else
{
diff --git a/libmailutils/mailbox/message.c b/libmailutils/mailbox/message.c
index 644cd00..684fe39 100644
--- a/libmailutils/mailbox/message.c
+++ b/libmailutils/mailbox/message.c
@@ -534,9 +534,7 @@ mu_message_destroy (mu_message_t *pmsg, void *owner)
is very unfortunate.
The `owner' stuff is a leftover from older mailutils versions.
- There is an ongoing attempt to remove it in the stream-cleanup
- branch. When it is ready, it will be merged to the HEAD and this
- will finally resolve this issue. */
+ We are heading to removing it altogether. */
if (msg->ref > 0)
msg->ref--;
if ((msg->owner && msg->owner == owner)
diff --git a/libproto/imap/folder.c b/libproto/imap/folder.c
index ce15084..8f750b3 100644
--- a/libproto/imap/folder.c
+++ b/libproto/imap/folder.c
@@ -2589,7 +2589,7 @@ imap_parse (f_imap_t f_imap)
{
mu_observable_t observable = NULL;
mu_folder_get_observable (f_imap->folder, &observable);
- mu_observable_notify (observable, MU_EVT_AUTHORITY_FAILED,
+ mu_observable_notify (observable,
MU_EVT_FOLDER_AUTHORITY_FAILED,
NULL);
status = MU_ERR_AUTH_FAILURE;
}
diff --git a/libproto/mbox/mbox.c b/libproto/mbox/mbox.c
index 6e7cbed..4b1028c 100644
--- a/libproto/mbox/mbox.c
+++ b/libproto/mbox/mbox.c
@@ -1143,7 +1143,8 @@ mbox_append_message (mu_mailbox_t mailbox, mu_message_t
msg)
{
char *buf = NULL;
mu_asprintf (&buf, "%lu", (unsigned long) size);
- mu_observable_notify (mailbox->observable, MU_EVT_MESSAGE_APPEND, buf);
+ mu_observable_notify (mailbox->observable,
+ MU_EVT_MAILBOX_MESSAGE_APPEND, buf);
free (buf);
}
@@ -1184,7 +1185,8 @@ mbox_expunge_unlocked (mu_mailbox_t mailbox, size_t
dirty, int remove_deleted,
size_t save_imapbase = 0; /* uidvalidity is save in the first message. */
mu_off_t start_off;
mu_off_t size;
-
+ size_t expcount = 0;
+
/* Set the marker position. */
start_off = mud->umessages[dirty]->envel_from;
@@ -1194,6 +1196,11 @@ mbox_expunge_unlocked (mu_mailbox_t mailbox, size_t
dirty, int remove_deleted,
if (remove_deleted && ATTRIBUTE_IS_DELETED (mum->attr_flags))
{
+ size_t expevt[2] = { i + 1, expcount };
+ mu_observable_notify (mailbox->observable,
+ MU_EVT_MAILBOX_MESSAGE_EXPUNGE,
+ expevt);
+ expcount++;
mu_message_destroy (&mum->message, mum);
/* We save the uidvalidity in the first message, if it is being
deleted we need to move the uidvalidity to the first available
diff --git a/libproto/pop/mbox.c b/libproto/pop/mbox.c
index 30570f1..8311152 100644
--- a/libproto/pop/mbox.c
+++ b/libproto/pop/mbox.c
@@ -864,6 +864,7 @@ pop_expunge (mu_mailbox_t mbox)
struct _pop3_mailbox *mpd = mbox->data;
int status = 0;
size_t i;
+ size_t expcount = 0;
if (mpd == NULL)
return EINVAL;
@@ -879,9 +880,14 @@ pop_expunge (mu_mailbox_t mbox)
(mpm->flags & _POP3_MSG_ATTRSET) &&
(mpm->attr_flags & MU_ATTRIBUTE_DELETED))
{
+ size_t expevt[2] = { i + 1, expcount };
status = mu_pop3_dele (mpd->pop3, mpm->num);
if (status)
break;
+ mu_observable_notify (mbox->observable,
+ MU_EVT_MAILBOX_MESSAGE_EXPUNGE,
+ &expevt);
+ ++expcount;
}
}
return 0;
diff --git a/maidag/deliver.c b/maidag/deliver.c
index 568ec51..057bf11 100644
--- a/maidag/deliver.c
+++ b/maidag/deliver.c
@@ -132,7 +132,7 @@ static const char *biff_user_name;
static int
notify_action (mu_observer_t obs, size_t type, void *data, void *action_data)
{
- if (type == MU_EVT_MESSAGE_APPEND && biff_user_name)
+ if (type == MU_EVT_MAILBOX_MESSAGE_APPEND && biff_user_name)
{
mu_message_qid_t qid = data;
mu_mailbox_t mbox = mu_observer_get_owner (obs);
@@ -183,7 +183,8 @@ attach_notify (mu_mailbox_t mbox)
mu_observer_create (&observer, mbox);
mu_observer_set_action (observer, notify_action, mbox);
mu_mailbox_get_observable (mbox, &observable);
- mu_observable_attach (observable, MU_EVT_MESSAGE_APPEND, observer);
+ mu_observable_attach (observable, MU_EVT_MAILBOX_MESSAGE_APPEND,
+ observer);
}
}
hooks/post-receive
--
GNU Mailutils
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [SCM] GNU Mailutils branch, master, updated. release-2.2-329-g29a5598,
Sergey Poznyakoff <=