Index: src/trackerd/tracker-email-modest.c =================================================================== --- src/trackerd/tracker-email-modest.c (revision 1264) +++ src/trackerd/tracker-email-modest.c (working copy) @@ -168,7 +168,42 @@ static void check_summary_file (DBConnection *db_con, const gchar *filename, MailStore *store); +static void +load_current_dynamic_folders (ModestConfig *modest_config) +{ + /* TODO: Load and add existing dynamic-found dirs to modest_config->dynamic_dirs */ + email_watch_directories (modest_config->dynamic_dirs, "ModestEmails"); +} + +#if 0 + +unused + +static void +add_dynamic_folder (ModestConfig *modest_config, const gchar *dir_name) +{ + char *dirn = g_strdup (dir_name); + modest_config->dynamic_dirs = g_slist_prepend (modest_config->dynamic_dirs, dirn); + email_watch_directory (dirn, "ModestEmails"); +} + +static void +del_dynamic_folder (ModestConfig *modest_config, const gchar *dir_name) +{ + GSList *found = g_slist_find_custom (modest_config->dynamic_dirs, dir_name, (GCompareFunc) strcmp); + if (found) { + gchar *rem_name = found->data; + /* */ + email_unwatch_directory (rem_name, "ModestEmails"); + g_free (rem_name); + modest_config->dynamic_dirs = g_slist_remove_link (modest_config->dynamic_dirs, found); + g_slist_free (found); + } +} + +#endif + static gboolean modest_module_is_running (void) { @@ -268,8 +303,8 @@ tracker_db_free_result (res); } - g_slist_foreach (modest_config->dirs, (GFunc) email_watch_directory, "ModestEmails"); - g_slist_foreach (modest_config->dynamic_dirs, (GFunc) email_watch_directory, "ModestEmails"); + email_watch_directories (modest_config->dirs, "ModestEmails"); + load_current_dynamic_folders (modest_config); } static gboolean @@ -504,10 +539,7 @@ m_conf->dirs = moredir (dir_maildir, dir_maildir, m_conf->dirs); g_free (dir_maildir); - - /* TODO: Future support - * m_conf->dynamic_dirs must be updated whenever an MMC card gets inserted */ - + /* Init to NULL here */ m_conf->dynamic_dirs = NULL; return TRUE; Index: src/trackerd/tracker-utils.c =================================================================== --- src/trackerd/tracker-utils.c (revision 1264) +++ src/trackerd/tracker-utils.c (working copy) @@ -1400,12 +1400,26 @@ char *dir_path = g_strdup (path); char *service_type = g_strdup (service); - tracker->service_directory_list = g_slist_prepend (tracker->service_directory_list, dir_path); - + tracker->service_directory_list = g_slist_prepend (tracker->service_directory_list, g_strdup (path)); g_hash_table_insert (tracker->service_directory_table, dir_path, service_type); } +void +tracker_del_service_path (const char *service, const char *path) +{ + if (!service || !path) { + return; + } + GSList *found = g_slist_find_custom (tracker->service_directory_list, path, (GCompareFunc) strcmp); + if (found) { + g_free (found->data); + tracker->service_directory_list = g_slist_remove_link (tracker->service_directory_list, found); + g_slist_free (found); + } + g_hash_table_remove (tracker->service_directory_table, path); +} + char * tracker_get_service_for_uri (const char *uri) { Index: src/trackerd/tracker-utils.h =================================================================== --- src/trackerd/tracker-utils.h (revision 1264) +++ src/trackerd/tracker-utils.h (working copy) @@ -470,6 +470,8 @@ GSList * tracker_get_service_dirs (const char *service); void tracker_add_service_path (const char *service, const char *path); +void tracker_del_service_path (const char *service, const char *path); + char * tracker_get_service_for_uri (const char *uri); gboolean tracker_is_service_file (const char *uri); Index: src/trackerd/tracker-email-utils.c =================================================================== --- src/trackerd/tracker-email-utils.c (revision 1264) +++ src/trackerd/tracker-email-utils.c (working copy) @@ -56,6 +56,13 @@ Public functions *********************************************************************************************/ +void +email_unwatch_directory (const gchar *dir, const gchar *service) +{ + tracker_log ("Registering path %s as belonging to service %s", dir, service); + tracker_del_service_path (service, dir); +} + void email_watch_directory (const gchar *dir, const gchar *service) { Index: src/trackerd/tracker-email-utils.h =================================================================== --- src/trackerd/tracker-email-utils.h (revision 1264) +++ src/trackerd/tracker-email-utils.h (working copy) @@ -126,6 +126,7 @@ } MailMessage; +void email_unwatch_directory (const gchar *dir, const gchar *service); void email_watch_directory (const gchar *dir, const gchar *service); void email_watch_directories (const GSList *dirs, const gchar *service); Index: src/trackerd/trackerd.c =================================================================== --- src/trackerd/trackerd.c (revision 1264) +++ src/trackerd/trackerd.c (working copy) @@ -717,8 +717,8 @@ NULL); tracker->service_directory_table = g_hash_table_new_full (g_str_hash, g_str_equal, - NULL, - NULL); + g_free, + g_free); } static void