Enlightenment CVS committal Author : moom16 Project : e17 Module : apps/eclair
Dir : e17/apps/eclair/src Modified Files: eclair.c eclair.h eclair_callbacks.c eclair_cover.c eclair_cover.h eclair_media_file.c eclair_meta_tag.c eclair_playlist.c eclair_private.h Log Message: * Edje: Use a clip to change the alpha of the swallowed cover instead of using send_message * Fix cover transition bugs * Some default theme improvement * Synchronize the cover and the meta tag threads with the main thread to avoid aving files that have not been scanned for meta tags or cover * Many cleanups and framework =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- eclair.c 3 May 2005 08:57:36 -0000 1.7 +++ eclair.c 3 May 2005 20:36:33 -0000 1.8 @@ -60,10 +60,10 @@ _eclair_gui_create_window(eclair); _eclair_video_create_window(eclair); eclair_playlist_init(&eclair->playlist, eclair); - eclair_current_file_set(eclair, NULL); eclair_subtitles_init(&eclair->subtitles); eclair_meta_tag_init(&eclair->meta_tag_manager, eclair); eclair_cover_init(&eclair->cover_manager, eclair); + eclair_update_current_file_info(eclair, NULL); for (l = filenames; l; l = l->next) eclair_playlist_add_media_file(&eclair->playlist, (char *)l->data); @@ -129,8 +129,8 @@ eclair_subtitles_display_current_subtitle(&eclair->subtitles, position, eclair->subtitles_object); } -//Set the file as current -void eclair_current_file_set(Eclair *eclair, Eclair_Media_File *file) +//Update the gui infos about the current media file +void eclair_update_current_file_info(Eclair *eclair, Eclair_Media_File *current_file) { char *window_title; char *artist_title_string; @@ -139,16 +139,17 @@ if (!eclair) return; + //Update the name of the current file if (eclair->gui_object) { - if (file) + if (current_file) { - if ((artist_title_string = eclair_utils_mediafile_to_artist_title_string(file))) + if ((artist_title_string = eclair_utils_mediafile_to_artist_title_string(current_file))) { edje_object_part_text_set(eclair->gui_object, "current_media_name", artist_title_string); free(artist_title_string); } - else if ((filename = eclair_utils_path_to_filename(file->path))) + else if ((filename = eclair_utils_path_to_filename(current_file->path))) edje_object_part_text_set(eclair->gui_object, "current_media_name", filename); else edje_object_part_text_set(eclair->gui_object, "current_media_name", "No media opened"); @@ -157,14 +158,15 @@ edje_object_part_text_set(eclair->gui_object, "current_media_name", "No media opened"); } + //Update the title of the video window if (eclair->video_window) { - if (file) + if (current_file) { - if (file->path) + if (current_file->path) { - window_title = (char *)malloc(strlen(file->path) + strlen("eclair: ") + 1); - sprintf(window_title, "eclair: %s", file->path); + window_title = (char *)malloc(strlen(current_file->path) + strlen("eclair: ") + 1); + sprintf(window_title, "eclair: %s", current_file->path); ecore_evas_title_set(eclair->video_window, window_title); free(window_title); } @@ -174,8 +176,10 @@ else ecore_evas_title_set(eclair->video_window, "eclair"); } - if (file) - eclair_gui_cover_set(eclair, file->cover_path); + + //Update the current cover + if (current_file) + eclair_gui_cover_set(eclair, current_file->cover_path); else eclair_gui_cover_set(eclair, NULL); } @@ -184,26 +188,22 @@ //Remove it if cover_path == NULL void eclair_gui_cover_set(Eclair *eclair, const char *cover_path) { - char *previous_path = NULL; - - printf("Cover: Set: %s\n", cover_path); + char *current_path = NULL; if (!eclair) return; if (!eclair->gui_object || !eclair->gui_cover) return; - evas_object_image_file_get(eclair->gui_cover, &previous_path, NULL); - if (!previous_path && !cover_path) + evas_object_image_file_get(eclair->gui_cover, ¤t_path, NULL); + if (!current_path && !cover_path) return; - if (previous_path && cover_path) + if (current_path && cover_path) { - if (strcmp(previous_path, cover_path) == 0) + if (strcmp(current_path, cover_path) == 0) return; } - printf("Cover: Really Set: %s\n", cover_path); - if (eclair->gui_previous_cover) { Evas_Object *tmp; @@ -217,18 +217,20 @@ edje_object_part_swallow(eclair->gui_object, "previous_cover", eclair->gui_previous_cover); } - if (!cover_path) - edje_object_signal_emit(eclair->gui_object, "signal_cover_unset", "eclair_bin"); + evas_object_image_file_set(eclair->gui_cover, cover_path, NULL); if (cover_path) { - evas_object_image_file_set(eclair->gui_cover, cover_path, NULL); edje_object_signal_emit(eclair->gui_object, "signal_cover_set", "eclair_bin"); + evas_object_show(eclair->gui_cover); + } + else + { + edje_object_signal_emit(eclair->gui_object, "signal_cover_unset", "eclair_bin"); + evas_object_hide(eclair->gui_cover); } - evas_object_image_file_get(eclair->gui_cover, &previous_path, NULL); - printf("Cover: Cover: %s\n", previous_path); - evas_object_image_file_get(eclair->gui_previous_cover, &previous_path, NULL); - printf("Cover: Previous Cover: %s\n", previous_path); + evas_object_image_file_get(eclair->gui_cover, ¤t_path, NULL); + evas_object_image_file_get(eclair->gui_previous_cover, ¤t_path, NULL); } //Set the scroll percent of the playlist container @@ -556,7 +558,7 @@ edje_object_part_swallow(eclair->gui_object, "cover", eclair->gui_cover); edje_object_part_geometry_get(eclair->gui_object, "cover", NULL, NULL, &cover_width, &cover_height); evas_object_image_fill_set(eclair->gui_cover, 0, 0, cover_width, cover_height); - evas_object_show(eclair->gui_cover); + evas_object_hide(eclair->gui_cover); } if (edje_object_part_exists(eclair->gui_object, "previous_cover")) { =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair.h,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- eclair.h 2 May 2005 16:06:50 -0000 1.4 +++ eclair.h 3 May 2005 20:36:33 -0000 1.5 @@ -8,7 +8,7 @@ void eclair_shutdown(Eclair *eclair); void eclair_update(Eclair *eclair); void *eclair_file_chooser_thread(void *param); -void eclair_current_file_set(Eclair *eclair, Eclair_Media_File *file); +void eclair_update_current_file_info(Eclair *eclair, Eclair_Media_File *file); void eclair_playlist_container_scroll(Eclair *eclair, int num_entries); void eclair_playlist_container_scroll_percent_set(Eclair *eclair, double percent); void eclair_gui_cover_set(Eclair *eclair, const char *cover_path); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_callbacks.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- eclair_callbacks.c 2 May 2005 16:06:50 -0000 1.6 +++ eclair_callbacks.c 3 May 2005 20:36:33 -0000 1.7 @@ -2,6 +2,7 @@ #include <string.h> #include <Emotion.h> #include <Edje.h> +#include <Ecore.h> #include <Ecore_Evas.h> #include <Esmart/Esmart_Container.h> #include <gtk/gtk.h> @@ -9,11 +10,6 @@ #include "eclair.h" #include "eclair_playlist.h" -typedef enum _Eclair_Gui_Message_Id -{ - COVER_ALPHA_CHANGED = 0 -} Eclair_Gui_Message_Id; - //Called when eclair is closed int eclair_exit_cb(void *data, int type, void *event) { @@ -341,19 +337,6 @@ switch (id) { - case COVER_ALPHA_CHANGED: - { - Edje_Message_Int_Set *message; - if (type != EDJE_MESSAGE_INT_SET || !(message = (Edje_Message_Int_Set *)msg)) - break; - if (message->count != 2) - break; - if (eclair->gui_cover) - evas_object_color_set(eclair->gui_cover, 255, 255, 255, message->val[0]); - if (eclair->gui_previous_cover) - evas_object_color_set(eclair->gui_previous_cover, 255, 255, 255, message->val[1]); - break; - } default: break; } =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_cover.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -3 -r1.4 -r1.5 --- eclair_cover.c 3 May 2005 08:57:36 -0000 1.4 +++ eclair_cover.c 3 May 2005 20:36:33 -0000 1.5 @@ -53,6 +53,8 @@ if (!cover_manager) return; + cover_manager->cover_add_state = ECLAIR_IDLE; + cover_manager->cover_files_to_add = NULL; cover_manager->cover_files_to_treat = NULL; cover_manager->not_in_amazon_db = NULL; cover_manager->eclair = eclair; @@ -92,15 +94,18 @@ } //Add a media file to the list of files to treat -void eclair_cover_add_file_to_treat(Eclair_Cover_Manager *cover_manager, Eclair_Media_File *media_file, Evas_Bool high_priority) +void eclair_cover_add_file_to_treat(Eclair_Cover_Manager *cover_manager, Eclair_Media_File *media_file) { if (!cover_manager || !media_file) return; - - if (high_priority) - cover_manager->cover_files_to_treat = evas_list_prepend(cover_manager->cover_files_to_treat, media_file); - else - cover_manager->cover_files_to_treat = evas_list_append(cover_manager->cover_files_to_treat, media_file); + if (cover_manager->cover_delete_thread) + return; + + while (cover_manager->cover_add_state != ECLAIR_IDLE); + cover_manager->cover_add_state = ECLAIR_ADDING_FILE_TO_ADD; + cover_manager->cover_files_to_add = evas_list_append(cover_manager->cover_files_to_add, media_file); + cover_manager->cover_add_state = ECLAIR_IDLE; + pthread_cond_broadcast(&cover_manager->cover_cond); } @@ -108,37 +113,52 @@ static void *_eclair_cover_thread(void *param) { Eclair_Cover_Manager *cover_manager = (Eclair_Cover_Manager *)param; + Eclair *eclair; Evas_List *l, *next; Eclair_Media_File *current_file; if (!cover_manager) return NULL; + if (!(eclair = cover_manager->eclair)) + return NULL; pthread_mutex_lock(&cover_manager->cover_mutex); for (;;) { pthread_cond_wait(&cover_manager->cover_cond, &cover_manager->cover_mutex); - while (cover_manager->cover_files_to_treat || cover_manager->cover_delete_thread) + while (cover_manager->cover_files_to_treat || cover_manager->cover_files_to_add || cover_manager->cover_delete_thread) { - for (l = cover_manager->cover_files_to_treat; l || cover_manager->cover_delete_thread; l = next) + if (cover_manager->cover_delete_thread) { - if (cover_manager->cover_delete_thread) + cover_manager->cover_files_to_treat = evas_list_free(cover_manager->cover_files_to_treat); + cover_manager->cover_files_to_add = evas_list_free(cover_manager->cover_files_to_add); + cover_manager->cover_delete_thread = 0; + return NULL; + } + //Add the new files to the list of files to treat + if (cover_manager->cover_files_to_add) + { + while (cover_manager->cover_add_state != ECLAIR_IDLE); + cover_manager->cover_add_state = ECLAIR_ADDING_FILE_TO_TREAT; + for (l = cover_manager->cover_files_to_add; l; l = next) { - cover_manager->cover_files_to_treat = evas_list_free(cover_manager->cover_files_to_treat); - cover_manager->cover_delete_thread = 0; - return NULL; + next = l->next; + current_file = (Eclair_Media_File *)l->data; + cover_manager->cover_files_to_add = evas_list_remove_list(cover_manager->cover_files_to_add, l); + cover_manager->cover_files_to_treat = evas_list_append(cover_manager->cover_files_to_treat, current_file); } - + cover_manager->cover_add_state = ECLAIR_IDLE; + } + //Treat the files in the list + for (l = cover_manager->cover_files_to_treat; l || cover_manager->cover_delete_thread; l = next) + { + if (cover_manager->cover_delete_thread || cover_manager->cover_files_to_add) + break; next = l->next; current_file = (Eclair_Media_File *)l->data; cover_manager->cover_files_to_treat = evas_list_remove_list(cover_manager->cover_files_to_treat, l); - current_file->cover_path = eclair_cover_file_get(cover_manager, current_file->artist, current_file->album, current_file->path); - if (cover_manager->eclair) - { - if (current_file == evas_list_data(cover_manager->eclair->playlist.current)) - eclair_gui_cover_set(cover_manager->eclair, current_file->cover_path); - } + eclair_media_file_update(eclair, current_file); } } } =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_cover.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- eclair_cover.h 2 May 2005 16:06:50 -0000 1.3 +++ eclair_cover.h 3 May 2005 20:36:33 -0000 1.4 @@ -5,7 +5,7 @@ void eclair_cover_init(Eclair_Cover_Manager *cover_manager, Eclair *eclair); void eclair_cover_shutdown(Eclair_Cover_Manager *cover_manager); -void eclair_cover_add_file_to_treat(Eclair_Cover_Manager *cover_manager, Eclair_Media_File *media_file, Evas_Bool high_priority); +void eclair_cover_add_file_to_treat(Eclair_Cover_Manager *cover_manager, Eclair_Media_File *media_file); char *eclair_cover_file_get(Eclair_Cover_Manager *cover_manager, const char *artist, const char *album, const char *file_path); char *eclair_cover_file_get_from_local(Eclair_Cover_Manager *cover_manager, const char *artist, const char *album, const char *file_path); char *eclair_cover_file_get_from_amazon(Eclair_Cover_Manager *cover_manager, const char *artist, const char *album); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_media_file.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- eclair_media_file.c 3 May 2005 08:57:36 -0000 1.3 +++ eclair_media_file.c 3 May 2005 20:36:33 -0000 1.4 @@ -1,6 +1,7 @@ #include "eclair_media_file.h" #include <Edje.h> #include "eclair.h" +#include "eclair_playlist.h" #include "eclair_cover.h" #include "eclair_utils.h" @@ -26,7 +27,7 @@ free(media_file); } -//Update the entry of the media file in the playlist with tag infos +//Update the media file with tag and cover infos void eclair_media_file_update(Eclair *eclair, Eclair_Media_File *media_file) { char length[10] = ""; @@ -36,16 +37,9 @@ if (!media_file) return; + //Update playlist entry if (media_file->playlist_entry) - { - if (media_file->length >= 0) - { - eclair_utils_second_to_string(media_file->length, media_file->length, length); - edje_object_part_text_set(media_file->playlist_entry, "playlist_entry_length", length); - } - else - edje_object_part_text_set(media_file->playlist_entry, "playlist_entry_length", ""); - + { if ((artist_title_string = eclair_utils_mediafile_to_artist_title_string(media_file))) { edje_object_part_text_set(media_file->playlist_entry, "playlist_entry_name", artist_title_string); @@ -55,12 +49,20 @@ edje_object_part_text_set(media_file->playlist_entry, "playlist_entry_name", filename); else edje_object_part_text_set(media_file->playlist_entry, "playlist_entry_name", "Media"); + + if (media_file->length >= 0) + { + eclair_utils_second_to_string(media_file->length, media_file->length, length); + edje_object_part_text_set(media_file->playlist_entry, "playlist_entry_length", length); + } + else + edje_object_part_text_set(media_file->playlist_entry, "playlist_entry_length", ""); } if (!eclair) return; - if (media_file == evas_list_data(eclair->playlist.current)) - eclair_current_file_set(eclair, media_file); - eclair_cover_add_file_to_treat(&eclair->cover_manager, media_file, 0); + //If the media file is the current, we also update gui infos + if (media_file == eclair_playlist_current_media_file(&eclair->playlist)) + eclair_update_current_file_info(eclair, media_file); } =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_meta_tag.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- eclair_meta_tag.c 2 May 2005 16:06:50 -0000 1.3 +++ eclair_meta_tag.c 3 May 2005 20:36:33 -0000 1.4 @@ -3,6 +3,7 @@ #include <string.h> #include <Evas.h> #include "eclair.h" +#include "eclair_cover.h" #include "eclair_media_file.h" static void *_eclair_meta_tag_thread(void *param); @@ -13,6 +14,8 @@ if (!meta_tag_manager || !eclair) return; + meta_tag_manager->meta_tag_add_state = ECLAIR_IDLE; + meta_tag_manager->meta_tag_files_to_add = NULL; meta_tag_manager->meta_tag_files_to_scan = NULL; meta_tag_manager->meta_tag_delete_thread = 0; pthread_cond_init(&meta_tag_manager->meta_tag_cond, NULL); @@ -38,9 +41,14 @@ { if (!meta_tag_manager || !media_file) return; + if (meta_tag_manager->meta_tag_delete_thread) + return; - meta_tag_manager->meta_tag_files_to_scan = evas_list_append(meta_tag_manager->meta_tag_files_to_scan, media_file); - pthread_cond_broadcast(&meta_tag_manager->meta_tag_cond); + while (meta_tag_manager->meta_tag_add_state != ECLAIR_IDLE); + meta_tag_manager->meta_tag_add_state = ECLAIR_ADDING_FILE_TO_ADD; + meta_tag_manager->meta_tag_files_to_add = evas_list_append(meta_tag_manager->meta_tag_files_to_add, media_file); + meta_tag_manager->meta_tag_add_state = ECLAIR_IDLE; + pthread_cond_broadcast(&meta_tag_manager->meta_tag_cond); } //Read the meta tags of media_file and update eclair with the new data @@ -73,7 +81,12 @@ taglib_tag_free_strings(); taglib_file_free(tag_file); - eclair_media_file_update(eclair, media_file); + //Try to load the cover + if (tag) + { + if (!(media_file->cover_path = eclair_cover_file_get_from_local(&eclair->cover_manager, media_file->artist, media_file->album, media_file->path))) + eclair_cover_add_file_to_treat(&eclair->cover_manager, media_file); + } } //Scan the files stored in the list of files to scan @@ -92,21 +105,39 @@ for (;;) { pthread_cond_wait(&meta_tag_manager->meta_tag_cond, &meta_tag_manager->meta_tag_mutex); - while (meta_tag_manager->meta_tag_files_to_scan || meta_tag_manager->meta_tag_delete_thread) + while (meta_tag_manager->meta_tag_files_to_scan || meta_tag_manager->meta_tag_files_to_add || meta_tag_manager->meta_tag_delete_thread) { - for (l = meta_tag_manager->meta_tag_files_to_scan; l || meta_tag_manager->meta_tag_delete_thread; l = next) + if (meta_tag_manager->meta_tag_delete_thread) { - if (meta_tag_manager->meta_tag_delete_thread) + meta_tag_manager->meta_tag_files_to_scan = evas_list_free(meta_tag_manager->meta_tag_files_to_scan); + meta_tag_manager->meta_tag_files_to_add = evas_list_free(meta_tag_manager->meta_tag_files_to_add); + meta_tag_manager->meta_tag_delete_thread = 0; + return NULL; + } + //Add the new files to the list of files to treat + if (meta_tag_manager->meta_tag_files_to_add) + { + while (meta_tag_manager->meta_tag_add_state != ECLAIR_IDLE); + meta_tag_manager->meta_tag_add_state = ECLAIR_ADDING_FILE_TO_TREAT; + for (l = meta_tag_manager->meta_tag_files_to_add; l; l = next) { - meta_tag_manager->meta_tag_files_to_scan = evas_list_free(meta_tag_manager->meta_tag_files_to_scan); - meta_tag_manager->meta_tag_delete_thread = 0; - return NULL; + next = l->next; + current_file = (Eclair_Media_File *)l->data; + meta_tag_manager->meta_tag_files_to_add = evas_list_remove_list(meta_tag_manager->meta_tag_files_to_add, l); + meta_tag_manager->meta_tag_files_to_scan = evas_list_append(meta_tag_manager->meta_tag_files_to_scan, current_file); } - + meta_tag_manager->meta_tag_add_state = ECLAIR_IDLE; + } + //Treat the files in the list + for (l = meta_tag_manager->meta_tag_files_to_scan; l || meta_tag_manager->meta_tag_delete_thread; l = next) + { + if (meta_tag_manager->meta_tag_delete_thread || meta_tag_manager->meta_tag_files_to_add) + break; next = l->next; current_file = (Eclair_Media_File *)l->data; meta_tag_manager->meta_tag_files_to_scan = evas_list_remove_list(meta_tag_manager->meta_tag_files_to_scan, l); eclair_meta_tag_read(eclair, current_file); + eclair_media_file_update(eclair, current_file); } } } =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_playlist.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- eclair_playlist.c 30 Apr 2005 12:11:16 -0000 1.3 +++ eclair_playlist.c 3 May 2005 20:36:33 -0000 1.4 @@ -5,6 +5,7 @@ #include <Evas.h> #include <Edje.h> #include "eclair.h" +#include "eclair_cover.h" #include "eclair_media_file.h" #include "eclair_meta_tag.h" #include "eclair_callbacks.h" @@ -157,7 +158,7 @@ eclair_playlist_current_set_list(playlist, evas_list_find_list(playlist->playlist, media_file)); } -//Set the media file pointed by the list as the active media file +//Set the media file stored in the list as the active media file void eclair_playlist_current_set_list(Eclair_Playlist *playlist, Evas_List *list) { Eclair_Media_File *media_file; @@ -178,18 +179,16 @@ edje_object_signal_emit(media_file->playlist_entry, "signal_set_current", "eclair_bin"); if (playlist->eclair) { + //TODO: doesn't work? if (playlist->eclair->playlist_container) esmart_container_scroll_to(playlist->eclair->playlist_container, media_file->playlist_entry); } } if (playlist->eclair) - eclair_current_file_set(playlist->eclair, media_file); - } - else - { - if (playlist->eclair) - eclair_current_file_set(playlist->eclair, NULL); + eclair_update_current_file_info(playlist->eclair, media_file); } + else if (playlist->eclair) + eclair_update_current_file_info(playlist->eclair, NULL); playlist->current = list; } =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_private.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- eclair_private.h 3 May 2005 08:57:36 -0000 1.6 +++ eclair_private.h 3 May 2005 20:36:33 -0000 1.7 @@ -15,6 +15,7 @@ typedef struct _Eclair_Playlist Eclair_Playlist; typedef struct _Eclair_Subtitle Eclair_Subtitle; typedef struct _Eclair_Subtitles Eclair_Subtitles; +typedef enum _Eclair_Add_File_State Eclair_Add_File_State; typedef struct _Eclair_Meta_Tag_Manager Eclair_Meta_Tag_Manager; typedef struct _Eclair_Cover_Manager Eclair_Cover_Manager; typedef struct _Eclair_Config Eclair_Config; @@ -27,13 +28,22 @@ FILE *config_file; }; +enum _Eclair_Add_File_State +{ + ECLAIR_IDLE = 0, + ECLAIR_ADDING_FILE_TO_ADD, + ECLAIR_ADDING_FILE_TO_TREAT +}; + struct _Eclair_Cover_Manager { + Eclair_Add_File_State cover_add_state; + Evas_List *cover_files_to_add; Evas_List *cover_files_to_treat; Evas_List *not_in_amazon_db; - struct hostent *amazon_he; - Eclair *eclair; Evas_Bool cover_delete_thread; + Eclair *eclair; + struct hostent *amazon_he; pthread_cond_t cover_cond; pthread_mutex_t cover_mutex; pthread_t cover_thread; @@ -41,6 +51,8 @@ struct _Eclair_Meta_Tag_Manager { + Eclair_Add_File_State meta_tag_add_state; + Evas_List *meta_tag_files_to_add; Evas_List *meta_tag_files_to_scan; Evas_Bool meta_tag_delete_thread; pthread_cond_t meta_tag_cond; ------------------------------------------------------- This SF.Net email is sponsored by: NEC IT Guy Games. Get your fingers limbered up and give it your best shot. 4 great events, 4 opportunities to win big! Highest score wins.NEC IT Guy Games. Play to win an NEC 61 plasma display. Visit http://www.necitguy.com/?r=20 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs