Index: src/trackerd/tracker-mbox-evolution.c =================================================================== RCS file: /cvs/gnome/tracker/src/trackerd/tracker-mbox-evolution.c,v retrieving revision 1.1 diff -u -p -r1.1 tracker-mbox-evolution.c --- src/trackerd/tracker-mbox-evolution.c 20 Sep 2006 23:46:54 -0000 1.1 +++ src/trackerd/tracker-mbox-evolution.c 21 Sep 2006 00:49:01 -0000 @@ -18,6 +18,7 @@ * Boston, MA 02111-1307, USA. */ +#include #include #include #include @@ -38,6 +39,18 @@ extern Tracker *tracker; #define EVOLUTION_MAIL_DIR ".evolution/mail" +enum { + EVOLUTION_MESSAGE_ANSWERED = 1 << 0, + EVOLUTION_MESSAGE_DELETED = 1 << 1, + EVOLUTION_MESSAGE_DRAFT = 1 << 2, + EVOLUTION_MESSAGE_FLAGGED = 1 << 3, + EVOLUTION_MESSAGE_SEEN = 1 << 4, + EVOLUTION_MESSAGE_ATTACHMENTS = 1 << 5, + EVOLUTION_MESSAGE_ANSWERED_ALL = 1 << 6, + EVOLUTION_MESSAGE_JUNK = 1 << 7, + EVOLUTION_MESSAGE_SECURE = 1 << 8 +}; + static GSList * find_evolution_mboxes (const char *evolution_dir) @@ -118,18 +131,57 @@ watch_emails_of_evolution (DBConnection } +void +tracker_get_status_of_evolution_email (GMimeMessage *g_m_message, MailMessage *msg) +{ + const char *field; + char **parts; + guint32 flags; + + if (!g_m_message || !msg) { + return; + } + + field = g_mime_message_get_header (g_m_message, "X-Evolution"); + + if (!field) { + return; + } + + parts = g_strsplit (field, "-", -1); + + /* we want to split lines with that form: 00001fd3-0100 into 00001fd3 and 0100 */ + if (!parts || !parts[0] || !parts[1]) { + g_strfreev (parts); + return; + } + + msg->deleted = FALSE; + msg->junk = FALSE; + + flags = atoi (parts[1]); + + if ((flags & EVOLUTION_MESSAGE_DELETED) == EVOLUTION_MESSAGE_DELETED) { + msg->deleted = TRUE; + } + + if ((flags & EVOLUTION_MESSAGE_JUNK) == EVOLUTION_MESSAGE_JUNK) { + msg->junk = TRUE; + } + + g_strfreev (parts); +} + + gboolean is_in_a_evolution_mail_dir (const char *uri) { char *path; - int len; gboolean ret; path = g_build_filename (g_get_home_dir (), EVOLUTION_MAIL_DIR, NULL); - len = strlen (path); - - ret = (strncmp (uri, path, len) == 0); + ret = g_str_has_prefix (uri, path); g_free (path); Index: src/trackerd/tracker-mbox-evolution.h =================================================================== RCS file: /cvs/gnome/tracker/src/trackerd/tracker-mbox-evolution.h,v retrieving revision 1.1 diff -u -p -r1.1 tracker-mbox-evolution.h --- src/trackerd/tracker-mbox-evolution.h 20 Sep 2006 23:46:54 -0000 1.1 +++ src/trackerd/tracker-mbox-evolution.h 21 Sep 2006 00:49:01 -0000 @@ -22,6 +22,9 @@ #define _TRACKER_MBOX_EVOLUTION_H_ #include +#include + +#include "tracker-mbox.h" #include "config.h" @@ -37,7 +40,8 @@ * */ -GSList * watch_emails_of_evolution (DBConnection *db_con); -gboolean is_in_a_evolution_mail_dir (const char *uri); +GSList * watch_emails_of_evolution (DBConnection *db_con); +void tracker_get_status_of_evolution_email (GMimeMessage *g_m_message, MailMessage *msg); +gboolean is_in_a_evolution_mail_dir (const char *uri); #endif Index: src/trackerd/tracker-mbox.c =================================================================== RCS file: /cvs/gnome/tracker/src/trackerd/tracker-mbox.c,v retrieving revision 1.1 diff -u -p -r1.1 tracker-mbox.c --- src/trackerd/tracker-mbox.c 20 Sep 2006 23:46:54 -0000 1.1 +++ src/trackerd/tracker-mbox.c 21 Sep 2006 00:49:01 -0000 @@ -302,8 +302,38 @@ tracker_mbox_parse_next (MailBox *mb) msg->mbox_uri = g_strdup (mb->mbox_uri); msg->offset = msg_offset; msg->message_id = g_strdup (g_mime_message_get_message_id (message)); + + + /* we try to obtain email status (deleted, junk...) and it needs to read special fields in headers */ + switch (mb->mail_app) { + + case MAIL_APP_EVOLUTION: + tracker_get_status_of_evolution_email (message, msg); + break; + + case MAIL_APP_KMAIL: + /* FIXME */ + + break; + + case MAIL_APP_THUNDERBIRD: + /* FIXME */ + + break; + + case MAIL_APP_UNKNOWN: + /* we don't know anything about this email so we will be nice with it */ + msg->deleted = FALSE; + msg->junk = FALSE; + + break; + } + + + /* FIXME */ msg->references = NULL; + /* In-Reply-To header looks like , we want string directly */ tmp = g_mime_message_get_header (message, "In-Reply-To"); if (tmp) { @@ -467,15 +497,11 @@ tracker_free_person (Person *p) gboolean tracker_is_an_email_attachment (const char *uri) { - int len; - if (!uri || !base_path_for_attachments) { return FALSE; } - len = strlen (base_path_for_attachments); - - return (strncmp (uri, base_path_for_attachments, len) == 0); + return g_str_has_prefix (uri, base_path_for_attachments); } Index: src/trackerd/tracker-mbox.h =================================================================== RCS file: /cvs/gnome/tracker/src/trackerd/tracker-mbox.h,v retrieving revision 1.1 diff -u -p -r1.1 tracker-mbox.h --- src/trackerd/tracker-mbox.h 20 Sep 2006 23:46:54 -0000 1.1 +++ src/trackerd/tracker-mbox.h 21 Sep 2006 00:49:01 -0000 @@ -59,21 +59,23 @@ typedef struct { typedef struct { - char *mbox_uri; - guint64 offset; /* start address of the email */ - char *message_id; - char **references; /* array of message_ids */ - char *reply_to_id; /* message_id of email that it replies to */ - long date; - char *mail_from; - GSList *mail_to; - GSList *mail_cc; - GSList *mail_bcc; - char *subject; - char *content_type; /* text/plain or text/html etc. */ - char *body; - char *path_to_attachments; - GSList *attachments; /* names of all attachments */ + char *mbox_uri; + guint64 offset; /* start address of the email */ + char *message_id; + gboolean deleted; + gboolean junk; + char **references; /* array of message_ids */ + char *reply_to_id; /* message_id of email that it replies to */ + long date; + char *mail_from; + GSList *mail_to; + GSList *mail_cc; + GSList *mail_bcc; + char *subject; + char *content_type; /* text/plain or text/html etc. */ + char *body; + char *path_to_attachments; + GSList *attachments; /* names of all attachments */ } MailMessage;