Improvements to the new mail hook.
svn path=/trunk/; revision=33470
This commit is contained in:
@ -1,3 +1,14 @@
|
||||
2007-05-03 Srinivasa Ragavan <sragavan@novell.com>
|
||||
|
||||
** Added code to improve the new mail hook to provide the number of
|
||||
new mails received and if the folder is an INBOX.
|
||||
|
||||
* em-event.c: (em_event_target_new_folder):
|
||||
* em-event.h:
|
||||
* em-folder-tree-model.c: (em_folder_tree_model_is_type_inbox):
|
||||
* em-folder-tree-model.h:
|
||||
* mail-folder-cache.c: (real_flush_updates), (update_1folder):
|
||||
|
||||
2007-04-20 Matthew Barnes <mbarnes@redhat.com>
|
||||
|
||||
** Fixes part of bug #426812
|
||||
|
||||
@ -136,12 +136,14 @@ EMEvent *em_event_peek(void)
|
||||
}
|
||||
|
||||
EMEventTargetFolder *
|
||||
em_event_target_new_folder (EMEvent *eme, const char *uri, guint32 flags)
|
||||
em_event_target_new_folder (EMEvent *eme, const char *uri, unsigned int new)
|
||||
{
|
||||
EMEventTargetFolder *t = e_event_target_new(&eme->popup, EM_EVENT_TARGET_FOLDER, sizeof(*t));
|
||||
guint32 flags = new ? EM_EVENT_FOLDER_NEWMAIL : 0;
|
||||
|
||||
t->uri = g_strdup(uri);
|
||||
t->target.mask = ~flags;
|
||||
t->new = new;
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
@ -66,6 +66,8 @@ typedef struct _EMEventTargetFolder EMEventTargetFolder;
|
||||
struct _EMEventTargetFolder {
|
||||
EEventTarget target;
|
||||
char *uri;
|
||||
guint new;
|
||||
gboolean is_inbox;
|
||||
};
|
||||
|
||||
typedef struct _EMEventTargetMessage EMEventTargetMessage;
|
||||
|
||||
@ -1108,6 +1108,47 @@ em_folder_tree_model_expand_foreach (EMFolderTreeModel *model, EMFTModelExpandFu
|
||||
expand_foreach_r (model, root, NULL, func, user_data);
|
||||
}
|
||||
|
||||
gboolean
|
||||
em_folder_tree_model_is_type_inbox (EMFolderTreeModel *model, CamelStore *store, const char *full)
|
||||
{
|
||||
struct _EMFolderTreeModelStoreInfo *si;
|
||||
GtkTreeRowReference *row;
|
||||
GtkTreePath *tree_path;
|
||||
GtkTreeIter iter;
|
||||
guint32 flags;
|
||||
|
||||
g_return_if_fail (EM_IS_FOLDER_TREE_MODEL (model));
|
||||
g_return_if_fail (CAMEL_IS_STORE (store));
|
||||
g_return_if_fail (full != NULL);
|
||||
|
||||
u(printf("Checking if the folder is an INBOX type %p '%s' %d\n", store, full, unread));
|
||||
|
||||
if (!(si = g_hash_table_lookup (model->store_hash, store))) {
|
||||
u(printf(" can't find store\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
if (!(row = g_hash_table_lookup (si->full_hash, full))) {
|
||||
u(printf(" can't find row\n"));
|
||||
return;
|
||||
}
|
||||
|
||||
tree_path = gtk_tree_row_reference_get_path (row);
|
||||
if (!gtk_tree_model_get_iter ((GtkTreeModel *) model, &iter, tree_path)) {
|
||||
gtk_tree_path_free (tree_path);
|
||||
return;
|
||||
}
|
||||
|
||||
gtk_tree_path_free (tree_path);
|
||||
|
||||
gtk_tree_model_get (model, &iter, COL_UINT_FLAGS, &flags, -1);
|
||||
|
||||
if ((flags & CAMEL_FOLDER_TYPE_MASK) == CAMEL_FOLDER_TYPE_INBOX)
|
||||
return TRUE;
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void
|
||||
em_folder_tree_model_set_unread_count (EMFolderTreeModel *model, CamelStore *store, const char *full, int unread)
|
||||
{
|
||||
|
||||
@ -143,6 +143,7 @@ typedef void (* EMFTModelExpandFunc) (EMFolderTreeModel *model, const char *path
|
||||
void em_folder_tree_model_expand_foreach (EMFolderTreeModel *model, EMFTModelExpandFunc func, void *user_data);
|
||||
|
||||
void em_folder_tree_model_set_unread_count (EMFolderTreeModel *model, CamelStore *store, const char *path, int unread);
|
||||
gboolean em_folder_tree_model_is_type_inbox (EMFolderTreeModel *model, CamelStore *store, const char *full);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@ -95,7 +95,7 @@ struct _folder_update {
|
||||
unsigned int delete:1; /* deleting as well? */
|
||||
unsigned int add:1; /* add to vfolder */
|
||||
unsigned int unsub:1; /* unsubcribing? */
|
||||
unsigned int new:1; /* new mail arrived? */
|
||||
unsigned int new; /* new mail arrived? */
|
||||
|
||||
char *full_name;
|
||||
char *uri;
|
||||
@ -230,7 +230,6 @@ real_flush_updates(void *o, void *event_data, void *data)
|
||||
|
||||
/* update unread counts */
|
||||
em_folder_tree_model_set_unread_count (model, up->store, up->full_name, up->unread);
|
||||
|
||||
/* new mail notification */
|
||||
if (notify_type == -1) {
|
||||
/* need to track the user's new-mail-notification settings... */
|
||||
@ -250,13 +249,15 @@ real_flush_updates(void *o, void *event_data, void *data)
|
||||
|
||||
if (up->uri) {
|
||||
EMEvent *e = em_event_peek();
|
||||
EMEventTargetFolder *t = em_event_target_new_folder(e, up->uri, up->new?EM_EVENT_FOLDER_NEWMAIL:0);
|
||||
EMEventTargetFolder *t = em_event_target_new_folder(e, up->uri, up->new);
|
||||
|
||||
t->is_inbox = em_folder_tree_model_is_type_inbox (model, up->store, up->full_name);
|
||||
/** @Event: folder.changed
|
||||
* @Title: Folder changed
|
||||
* @Target: EMEventTargetFolder
|
||||
*
|
||||
* folder.changed is emitted whenever a folder changes. There is no detail on how the folder has changed.
|
||||
* UPDATE: We tell the number of new UIDs added rather than the new mails received
|
||||
*/
|
||||
e_event_emit((EEvent *)e, "folder.changed", (EEventTarget *)t);
|
||||
}
|
||||
@ -377,7 +378,7 @@ update_1folder(struct _folder_info *mfi, int new, CamelFolderInfo *info)
|
||||
up = g_malloc0(sizeof(*up));
|
||||
up->full_name = g_strdup(mfi->full_name);
|
||||
up->unread = unread;
|
||||
up->new = new ? 1 : 0;
|
||||
up->new = new;
|
||||
up->store = mfi->store_info->store;
|
||||
up->uri = g_strdup(mfi->uri);
|
||||
camel_object_ref(up->store);
|
||||
|
||||
Reference in New Issue
Block a user