summaryrefslogtreecommitdiff
path: root/src/trackerd/tracker-email-thunderbird.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/trackerd/tracker-email-thunderbird.c')
-rw-r--r--src/trackerd/tracker-email-thunderbird.c441
1 files changed, 0 insertions, 441 deletions
diff --git a/src/trackerd/tracker-email-thunderbird.c b/src/trackerd/tracker-email-thunderbird.c
deleted file mode 100644
index 7d66be1af..000000000
--- a/src/trackerd/tracker-email-thunderbird.c
+++ /dev/null
@@ -1,441 +0,0 @@
-/* Tracker
- * routines for emails with Thunderbird
- * Copyright (C) 2006, Laurent Aguerreche (laurent.aguerreche@free.fr)
- * Copyright (C) 2007, Michal Pryc (Michal.Pryc@Sun.Com)
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
-
-#include <string.h>
-#include <stdlib.h>
-
-#include <glib/gstdio.h>
-
-#include <libtracker-common/tracker-log.h>
-#include <libtracker-common/tracker-config.h>
-
-#include "tracker-db-email.h"
-#include "tracker-watch.h"
-
-typedef enum
-{
- TAG_NONE = 0,
- TAG_FOLDER_FILE,
- TAG_FEED_URL,
- TAG_AUTHOR,
- TAG_DATE,
- TAG_FOLDER,
- TAG_HAS_OFFLINE,
- TAG_MESSAGE_ID,
- TAG_MESSAGE_SIZE,
- TAG_MESSAGE_OFFSET,
- TAG_OFFLINE_SIZE,
- TAG_RECIPIENTS,
- TAG_SUBJECT,
- TAG_MESSAGE_KEY,
- TAG_URI,
-} TmsParserTag;
-
-typedef struct
-{
- TmsParserTag tag;
- GString *buffer;
- MailMessage *mail_message;
-} TmsParserData;
-
-typedef struct {
- GSList *mail_dirs;
-} ThunderbirdPrefs;
-
-#define THUNDERBIRD_MAIL_DIR_S ".xesam/ThunderbirdEmails/ToIndex"
-
-
-extern Tracker *tracker;
-
-static gchar *thunderbird_mail_dir = NULL;
-static GMarkupParser tms_file_parser;
-
-
-static GSList * add_persons_from_internet_address_list_string_parsing (GSList *list, const gchar *s);
-static gboolean email_parse_mail_tms_file_and_save_new_emails (DBConnection *db_con, MailApplication mail_app,
- const gchar *path);
-static MailMessage * email_parse_mail_tms_file_by_path (MailApplication mail_app, const gchar *path);
-static void text_handler (GMarkupParseContext *context, const gchar *text,
- gsize text_len, gpointer user_data, GError **error);
-static void start_element_handler (GMarkupParseContext *context, const gchar *element_name,
- const gchar **attribute_names, const gchar **attribute_values,
- gpointer user_data, GError **error);
-static void end_element_handler (GMarkupParseContext *context, const gchar *element_name,
- gpointer user_data, GError **error);
-static glong get_date_from_string (const gchar *date_string);
-static void free_parser_data (gpointer user_data);
-
-
-static gboolean
-thunderbird_module_is_running (void)
-{
- return thunderbird_mail_dir != NULL;
-}
-
-static gboolean
-thunderbird_file_is_interesting (FileInfo *info)
-{
- //Filename should be objectX.tms (Thunderbird Message Summary)
- return g_str_has_suffix (info->uri, ".tms") ;
-}
-
-/********************************************************************************************
- Public functions
-*********************************************************************************************/
-
-gboolean
-tracker_email_init (void)
-{
- if (!thunderbird_mail_dir) {
- thunderbird_mail_dir = g_build_filename (g_get_home_dir (), THUNDERBIRD_MAIL_DIR_S, NULL);
- }
-
- return thunderbird_module_is_running();
-}
-
-
-gboolean
-tracker_email_finalize (void)
-{
- if (thunderbird_mail_dir) {
- g_free (thunderbird_mail_dir);
- thunderbird_mail_dir = NULL;
- }
-
- return !thunderbird_module_is_running();
-}
-
-
-void
-tracker_email_watch_emails (DBConnection *db_con)
-{
- if( thunderbird_mail_dir != NULL ) {
- tracker_log("Thunderbird directory lookup: \"%s\"", thunderbird_mail_dir);
- email_watch_directory(thunderbird_mail_dir, "ThunderbirdEmails");
- }
-}
-
-
-gboolean
-tracker_email_index_file (DBConnection *db_con, FileInfo *info)
-{
- g_return_val_if_fail (db_con, FALSE);
- g_return_val_if_fail (info, FALSE);
-
- if (!thunderbird_file_is_interesting (info))
- return FALSE;
-
- tracker_log ("Thunderbird file index: \"%s\"\n",info->uri);
- if (email_parse_mail_tms_file_and_save_new_emails (db_con, MAIL_APP_THUNDERBIRD, info->uri)) {
- unlink(info->uri);
- }
-
- return TRUE;
-}
-
-const gchar *
-tracker_email_get_name (void)
-{
- return "ThunderbirdEmails";
-}
-
-/********************************************************************************************
- Private functions
-*********************************************************************************************/
-
-static gboolean
-email_parse_mail_tms_file_and_save_new_emails (DBConnection *db_con, MailApplication mail_app, const gchar *path)
-{
- MailMessage *mail_msg;
-
- g_return_val_if_fail (db_con, FALSE);
- g_return_val_if_fail (path, FALSE);
-
- mail_msg = email_parse_mail_tms_file_by_path (mail_app, path);
-
- if (!mail_msg) {
- return FALSE;
- }
- //Check if it is valid mail message
-
- if (mail_msg->parent_mail_file->mail_app == MAIL_APP_THUNDERBIRD ) {
-// || mail_msg->parent_mail_file->mail_app == MAIL_APP_THUNDERBIRD_FEED) {
- tracker_db_email_save_email (db_con, mail_msg, mail_app);
- email_free_mail_file(mail_msg->parent_mail_file);
- email_free_mail_message (mail_msg);
- return TRUE;
- }
-
- email_free_mail_file(mail_msg->parent_mail_file);
- email_free_mail_message (mail_msg);
-
- return FALSE;
-}
-
-
-static MailMessage *
-email_parse_mail_tms_file_by_path (MailApplication mail_app, const gchar *path)
-{
- MailMessage *mail_msg;
- gsize length;
- gchar *contents = NULL;
- GMarkupParseContext *context;
- GError *error = NULL;
- TmsParserData *parser_data;
-
- g_return_val_if_fail (path, NULL);
-
- parser_data = g_slice_new0 (TmsParserData);
- parser_data->mail_message = email_allocate_mail_message ();
- mail_msg = parser_data->mail_message;
- mail_msg->parent_mail_file = g_slice_new0 (MailFile);
-
- mail_msg->parent_mail_file->path = g_strdup (path);
-
- if (!g_file_get_contents(path, &contents, &length, &error)) {
- tracker_log ("Error reading Thunderbird message summary %s\n", error->message);
- g_error_free (error);
- return mail_msg;
- }
-
- context = g_markup_parse_context_new (&tms_file_parser, G_MARKUP_TREAT_CDATA_AS_TEXT,
- parser_data, free_parser_data);
-
- if (!g_markup_parse_context_parse(context, contents, length, NULL)) {
- tracker_log ("Error parsing context with length \n");
- goto end;
- }
-
- if (!g_markup_parse_context_end_parse(context, NULL)) {
- tracker_log ("Error parsing context \n");
- goto end;
- }
-
- end:
- g_markup_parse_context_free (context);
- g_free (contents);
- return mail_msg;
-}
-
-
-static void
-text_handler (GMarkupParseContext *context, const gchar *text,
- gsize text_len, gpointer user_data, GError **error)
-{
- TmsParserData *data = user_data;
-
- if (data->buffer == NULL) {
- data->buffer = g_string_new_len (text, text_len);
- } else {
- g_string_append_len (data->buffer, text, text_len);
- }
-}
-
-
-static void
-start_element_handler (GMarkupParseContext *context,
- const gchar *element_name,
- const gchar **attribute_names,
- const gchar **attribute_values,
- gpointer user_data, GError **error)
-{
- TmsParserData *data = user_data;
-
- if (data->buffer != NULL) {
- g_string_free (data->buffer, TRUE);
- data->buffer = NULL;
- }
-
- if (!strcmp (element_name, "MailMessage")) {
- data->mail_message->parent_mail_file->mail_app = MAIL_APP_THUNDERBIRD;
- } else if (!strcmp (element_name, "DeleteFolder")) {
- //data->mail_message->tms_type = TYPE_DELETE_FOLDER;
- } else if (!strcmp (element_name, "FeedItem")) {
- data->mail_message->parent_mail_file->mail_app = MAIL_APP_THUNDERBIRD_FEED;
- } else if (!strcmp (element_name, "FolderFile")) {
- data->tag = TAG_FOLDER_FILE;
- } else if (!strcmp (element_name, "Author")) {
- data->tag = TAG_AUTHOR;
- } else if (!strcmp (element_name, "Date")) {
- data->tag = TAG_DATE;
- } else if (!strcmp (element_name, "Folder")) {
- data->tag = TAG_FOLDER;
- } else if (!strcmp (element_name, "FolderFile")) {
- data->tag = TAG_FOLDER_FILE;
- } else if (!strcmp (element_name, "HasOffline")) {
- data->tag = TAG_HAS_OFFLINE;
- } else if (!strcmp (element_name, "MessageId")) {
- data->tag = TAG_MESSAGE_ID;
- } else if (!strcmp (element_name, "MessageSize")) {
- data->tag = TAG_MESSAGE_SIZE;
- } else if (!strcmp (element_name, "MessageOffset")) {
- data->tag = TAG_MESSAGE_OFFSET;
- } else if (!strcmp (element_name, "OfflineSize")) {
- data->tag = TAG_OFFLINE_SIZE;
- } else if (!strcmp (element_name, "Recipients")) {
- data->tag = TAG_RECIPIENTS;
- } else if (!strcmp (element_name, "Subject")) {
- data->tag = TAG_SUBJECT;
- } else if (!strcmp (element_name, "MessageKey")) {
- data->tag = TAG_MESSAGE_KEY;
- } else if (!strcmp (element_name, "Uri")) {
- data->tag = TAG_URI;
- } else if (!strcmp (element_name, "FeedURL")) {
- data->tag = TAG_FEED_URL;
- }
-}
-
-
-static void
-end_element_handler (GMarkupParseContext *context, const gchar *element_name,
- gpointer user_data, GError **error)
-{
- TmsParserData *data = user_data;
- MailMessage *msg = data->mail_message;
- gchar *buffer;
-
- if (data->buffer == NULL) {
- return;
- }
-
- buffer = g_string_free (data->buffer, FALSE);
- data->buffer = NULL;
-
- if (*buffer != '\0') {
- switch (data->tag) {
- case TAG_AUTHOR:
- msg->from = g_strdup (buffer);
- break;
- case TAG_DATE:
- msg->date = get_date_from_string (g_strdup (buffer));
- break;
- case TAG_FOLDER:
- //msg->folder = g_strdup (buffer);
- break;
- case TAG_FOLDER_FILE:
- //msg->folder_file = g_strdup (buffer);
- break;
- case TAG_HAS_OFFLINE:
- //msg->has_offline = get_boolean_from_string (g_strdup (buffer));
- break;
- case TAG_MESSAGE_ID:
- msg->message_id = g_strdup (buffer);
- break;
- case TAG_MESSAGE_SIZE:
- //Value should be uint
- //msg->message_size = atoi (g_strdup (buffer));
- break;
- case TAG_MESSAGE_OFFSET:
- msg->offset = atoi (g_strdup (buffer));
- break;
- case TAG_OFFLINE_SIZE:
- //msg->offline_size = atoi (g_strdup (buffer));
- break;
- case TAG_RECIPIENTS:
- //Should be function to parse recipients
- //
- //g_slist_prepend (msg->to,g_strdup (buffer));
- msg->to = add_persons_from_internet_address_list_string_parsing (NULL, g_strdup (buffer));
- break;
- case TAG_SUBJECT:
- msg->subject = g_strdup (buffer);
- break;
- case TAG_MESSAGE_KEY:
- //msg->message_key = g_strdup (buffer);
- break;
- case TAG_URI:
- msg->uri = g_strdup (buffer);
- break;
- case TAG_FEED_URL:
- //msg->url = g_strdup (buffer);
- break;
- default:
- break;
- }
- }
-
- data->tag = TAG_NONE;
-
- g_free (buffer);
-}
-
-
-static GMarkupParser tms_file_parser =
-{
- start_element_handler,
- end_element_handler,
- text_handler,
- NULL,
- NULL
-};
-
-
-static glong
-get_date_from_string (const gchar *date_string)
-{
- gchar *char_date = NULL;
- glong date;
-
- date = strtol (date_string, &char_date, 10);
-
- return *char_date ? 0 : date;
-}
-
-
-static void
-free_parser_data (gpointer user_data)
-{
- TmsParserData *data = user_data;
-
- if (data->buffer != NULL) {
- g_string_free (data->buffer, TRUE);
- }
-
- g_slice_free (TmsParserData, data);
-}
-
-
-static GSList *
-add_persons_from_internet_address_list_string_parsing (GSList *list, const gchar *s)
-{
- InternetAddressList *addrs_list, *tmp;
-
- g_return_val_if_fail (s, NULL);
-
- addrs_list = internet_address_parse_string (s);
-
- for (tmp = addrs_list; tmp; tmp = tmp->next) {
- MailPerson *mp = email_allocate_mail_person ();
-
- mp->addr = g_strdup (tmp->address->value.addr);
- if(tmp->address->name) {
- mp->name = g_strdup (tmp->address->name);
- } else {
- mp->name = g_strdup (tmp->address->value.addr);
- }
-
- list = g_slist_prepend (list, mp);
- }
-
- internet_address_list_destroy (addrs_list);
-
- return list;
-}