Enlightenment CVS committal

Author  : moom16
Project : e17
Module  : apps/eclair

Dir     : e17/apps/eclair/src


Modified Files:
        eclair.c eclair_args.c eclair_callbacks.c eclair_callbacks.h 
        eclair_config.c eclair_cover.c eclair_cover.h 
        eclair_playlist.c eclair_playlist.h eclair_private.h 
        eclair_subtitles.c eclair_utils.c eclair_utils.h 
Added Files:
        .cvsignore 


Log Message:

* Add .cvsignore files
* Drop files on playlist now add the files to the playlist
* Drop files on the cover will change the cover of the file/album (still need 
fixes)
* Modify the theme to support drag and drop
* Can change the theme with the -t option
* We can also now play uris (e.g. dvd://)
* Add also a lot of bugs ;)
* Update TODO file


===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -3 -r1.12 -r1.13
--- eclair.c    7 May 2005 14:07:32 -0000       1.12
+++ eclair.c    7 May 2005 20:58:58 -0000       1.13
@@ -2,6 +2,7 @@
 #include "../config.h"
 #include <Ecore.h>
 #include <Ecore_X.h>
+#include <Ecore_File.h>
 #include <Ecore_Evas.h>
 #include <Edje.h>
 #include <Emotion.h>
@@ -35,6 +36,7 @@
       return 0;
 
        ecore_init();
+   ecore_file_init();
    ecore_evas_init();
    edje_init();
    gtk_init(argc, &argv);
@@ -43,7 +45,6 @@
    eclair->video_object = NULL;
    eclair->black_background = NULL;
    eclair->subtitles_object = NULL;
-
    eclair->gui_window = NULL;
    eclair->gui_object = NULL;
    eclair->gui_draggies = NULL;
@@ -59,6 +60,8 @@
    eclair->file_chooser_th_created = 0;
    eclair->video_engine = ECLAIR_SOFTWARE;
    eclair->gui_engine = ECLAIR_SOFTWARE;
+   eclair->gui_theme_file = strdup(PACKAGE_DATA_DIR "/themes/default.edj");
+   eclair->gui_drop_object = ECLAIR_DROP_NONE;
 
    if (!eclair_args_parse(eclair, *argc, argv, &filenames))
       return 0;
@@ -73,7 +76,7 @@
    eclair_update_current_file_info(eclair);
    
    for (l = filenames; l; l = l->next)
-      eclair_playlist_add_media_file(&eclair->playlist, (char *)l->data);
+      eclair_playlist_add_uri(&eclair->playlist, (char *)l->data);
    evas_list_free(filenames);
 
    edje_object_part_drag_value_set(eclair->gui_object, "volume_bar_drag", 1.0, 
0.0);
@@ -94,12 +97,10 @@
       eclair_cover_shutdown(&eclair->cover_manager);
       eclair_playlist_empty(&eclair->playlist);
       eclair_config_shutdown(&eclair->config);
+      free(eclair->gui_theme_file);
    }
 
    ecore_main_loop_quit();
-
-   edje_shutdown();
-   ecore_evas_shutdown();
 }
 
 //Update text objects, progress bar...
@@ -295,7 +296,7 @@
    {
       filenames = 
gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(eclair->file_chooser_widget));
       for (l = filenames; l; l = l->next)
-         eclair_playlist_add_media_file(&eclair->playlist, (char *)l->data);
+         eclair_playlist_add_uri(&eclair->playlist, (char *)l->data);
 
       g_slist_foreach(filenames, (GFunc)g_free, NULL);
       g_slist_free(filenames);
@@ -525,7 +526,7 @@
 
    evas = ecore_evas_get(eclair->gui_window);
    eclair->gui_object = edje_object_add(evas);
-   edje_object_file_set(eclair->gui_object, PACKAGE_DATA_DIR 
"/themes/default.edj", "eclair_body");
+   edje_object_file_set(eclair->gui_object, eclair->gui_theme_file, 
"eclair_body");
    edje_object_size_min_get(eclair->gui_object, &gui_width, &gui_height);
    evas_object_resize(eclair->gui_object, (int)gui_width, (int)gui_height);
    evas_object_show(eclair->gui_object);
@@ -654,7 +655,6 @@
    return NULL; 
 }
 
-
 //Handle segvs
 static void _eclair_sig_pregest()
 {
@@ -693,5 +693,10 @@
    
    ecore_main_loop_begin();
 
+   edje_shutdown();
+   ecore_file_shutdown();
+   ecore_evas_shutdown();
+   ecore_shutdown();
+
    return 0;
 }
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_args.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- eclair_args.c       7 May 2005 14:07:32 -0000       1.3
+++ eclair_args.c       7 May 2005 20:58:58 -0000       1.4
@@ -17,6 +17,9 @@
       { NULL,           0,                      NULL,    0 }
    };
 
+   if (!eclair)
+      return 0;
+
    while ((c = getopt_long(argc, argv, "ht:g:v:", long_options, NULL)) != -1)
    {
       switch (c)
@@ -28,8 +31,8 @@
             return 0;
             break;
          case 't':
-            //TODO
-            fprintf(stderr, "Not yet implemented...\n");
+            free(eclair->gui_theme_file);
+            eclair->gui_theme_file = strdup(optarg);
             break;
          case 'g':
             if (strcmp(optarg, "software") == 0) 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_callbacks.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- eclair_callbacks.c  7 May 2005 12:42:17 -0000       1.9
+++ eclair_callbacks.c  7 May 2005 20:58:58 -0000       1.10
@@ -9,6 +9,7 @@
 #include <pthread.h>
 #include "eclair.h"
 #include "eclair_playlist.h"
+#include "eclair_cover.h"
 
 //Called when eclair is closed
 int eclair_exit_cb(void *data, int type, void *event)
@@ -325,7 +326,6 @@
 {
    Evas *evas;
    Evas_Coord gui_window_x, gui_window_y, x, y;
-   Evas_Object *top_object;
    Ecore_X_Rectangle rect;
    Ecore_X_Event_Xdnd_Position *ev = (Ecore_X_Event_Xdnd_Position *)event;
    Eclair *eclair = (Eclair *)data;
@@ -337,54 +337,77 @@
    ecore_evas_geometry_get(eclair->gui_window, &gui_window_x, &gui_window_y, 
NULL, NULL);
    x = ev->position.x - gui_window_x;
    y = ev->position.y - gui_window_y;
-   top_object = evas_object_top_at_xy_get(evas, x, y, 1, 1);
-   if (top_object &&
-      (top_object == eclair->gui_cover || top_object == 
eclair->gui_previous_cover || top_object == eclair->playlist_container))
-   {
-      evas_object_geometry_get(top_object, &rect.x, &rect.y, &rect.width, 
&rect.height);
-      rect.x += gui_window_x;
-      rect.y += gui_window_y;
-      ecore_x_dnd_send_status(1, 1, rect, ECORE_X_DND_ACTION_PRIVATE);
-      return 1;
+
+   if (eclair->playlist_container && 
evas_object_visible_get(eclair->playlist_container))
+   {
+      evas_object_geometry_get(eclair->playlist_container, &rect.x, &rect.y, 
&rect.width, &rect.height);
+      if (x >= rect.x && x <= (rect.x + rect.width) && y >= rect.y && y <= 
(rect.y + rect.height))
+      {
+         rect.x += gui_window_x;
+         rect.y += gui_window_y;
+         ecore_x_dnd_send_status(1, 1, rect, ECORE_X_DND_ACTION_PRIVATE);
+         eclair->gui_drop_object = ECLAIR_DROP_PLAYLIST;
+         return 1;
+      }
    }
+   if (eclair->gui_cover && evas_object_visible_get(eclair->gui_cover))
+   {
+      evas_object_geometry_get(eclair->gui_cover, &rect.x, &rect.y, 
&rect.width, &rect.height);
+      if (x >= rect.x && x <= (rect.x + rect.width) && y >= rect.y && y <= 
(rect.y + rect.height))
+      {
+         rect.x += gui_window_x;
+         rect.y += gui_window_y;
+         ecore_x_dnd_send_status(1, 1, rect, ECORE_X_DND_ACTION_PRIVATE);
+         eclair->gui_drop_object = ECLAIR_DROP_COVER;
+         return 1;
+      }
+   }  
 
    ecore_evas_geometry_get(eclair->gui_window, &rect.x, &rect.y, &rect.width, 
&rect.height);
    rect.x += gui_window_x;
    rect.y += gui_window_y;
    ecore_x_dnd_send_status(0, 1, rect, ECORE_X_DND_ACTION_PRIVATE);
+   eclair->gui_drop_object = ECLAIR_DROP_NONE;
    return 1;
 }
 
-int eclair_gui_dnd_selection_cb(void *data, int type, void *event)
+//Called when an object is dropped on the gui
+int eclair_gui_dnd_drop_cb(void *data, int type, void *event)
 {
    Eclair *eclair = (Eclair *)data;
-   Ecore_X_Event_Selection_Notify *ev = (Ecore_X_Event_Selection_Notify 
*)event;
-   Ecore_X_Selection_Data_Files *files;
-   int i;
-
-   if (!eclair || ev->selection != ECORE_X_SELECTION_XDND)
-     return 1;
 
-   files = ev->data;
-   for (i = 0; i < files->num_files; i++)
-   {
-      printf("%s\n", files->files[i]);
-   }
-
-   ecore_x_dnd_send_finished();
+   if (!eclair)
+      return 1;
 
+   ecore_x_selection_xdnd_request(eclair->gui_x_window, "text/uri-list");
    return 1;
 }
 
-//Called when an object is dropped on the gui
-int eclair_gui_dnd_drop_cb(void *data, int type, void *event)
+//Treat the files dropped
+int eclair_gui_dnd_selection_cb(void *data, int type, void *event)
 {
+   Ecore_X_Event_Selection_Notify *ev = (Ecore_X_Event_Selection_Notify 
*)event;
    Eclair *eclair = (Eclair *)data;
+   Ecore_X_Selection_Data_Files *files;
+   int i;
 
-   if (!eclair)
+   if (!eclair || !eclair->gui_window || eclair->gui_drop_object == 
ECLAIR_DROP_NONE
+      || ev->selection != ECORE_X_SELECTION_XDND || !(files = ev->data) || 
files->num_files <= 0)
+   {
+      ecore_x_dnd_send_finished();
       return 1;
+   }
+
+   if (eclair->gui_drop_object == ECLAIR_DROP_PLAYLIST)
+   {
+      for (i = 0; i < files->num_files; i++)
+         eclair_playlist_add_uri(&eclair->playlist, files->files[i]);
+   }
+   else if (eclair->gui_drop_object == ECLAIR_DROP_COVER)
+      eclair_cover_current_set(&eclair->cover_manager, files->files[0]);
+
+   ecore_x_dnd_send_finished();
 
-   ecore_x_selection_xdnd_request(eclair->gui_x_window, "text/uri-list");
    return 1;
 }
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_callbacks.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- eclair_callbacks.h  7 May 2005 12:42:17 -0000       1.5
+++ eclair_callbacks.h  7 May 2005 20:58:59 -0000       1.6
@@ -27,8 +27,8 @@
 void eclair_gui_playlist_container_wheel_cb(void *data, Evas *evas, 
Evas_Object *playlist_container, void *event_info);
 void eclair_gui_playlist_scroll_cb(void *data, Evas_Object *edje_object, const 
char *emission, const char *source);
 int eclair_gui_dnd_position_cb(void *data, int type, void *event);
-int eclair_gui_dnd_selection_cb(void *data, int type, void *event);
 int eclair_gui_dnd_drop_cb(void *data, int type, void *event);
+int eclair_gui_dnd_selection_cb(void *data, int type, void *event);
 void eclair_gui_message_cb(void *data, Evas_Object *obj, Edje_Message_Type 
type, int id, void *msg);
 
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_config.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- eclair_config.c     30 Apr 2005 12:11:16 -0000      1.3
+++ eclair_config.c     7 May 2005 20:58:59 -0000       1.4
@@ -1,5 +1,7 @@
 #include "eclair_config.h"
-#include <stdlib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <stdio.h>
 
 Evas_Bool eclair_config_init(Eclair_Config *config)
 {
@@ -17,7 +19,7 @@
    mkdir(config->config_dir_path, 0755);
 
    sprintf(config->covers_dir_path, "%scovers/", config->config_dir_path);
-   mkdir(config->covers_dir_path, 0755);
+   mkdir(config->config_dir_path, 0755);
 
    sprintf(config->config_file_path, "%seclair.cfg", config->config_dir_path);
    config->config_file = fopen(config->config_file_path, "a+t");
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_cover.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- eclair_cover.c      7 May 2005 12:42:17 -0000       1.9
+++ eclair_cover.c      7 May 2005 20:58:59 -0000       1.10
@@ -8,7 +8,9 @@
 #include <netdb.h>
 #include <libxml/parser.h>
 #include <libxml/tree.h>
+#include <Ecore_File.h>
 #include "eclair.h"
+#include "eclair_playlist.h"
 #include "eclair_media_file.h"
 #include "eclair_utils.h"
 
@@ -662,3 +664,52 @@
    new_album->album = strdup(album);
    *list = evas_list_prepend(*list, new_album);
 }
+
+//Set the cover of the file
+void eclair_cover_current_set(Eclair_Cover_Manager *cover_manager, const char 
*uri)
+{
+   char *clean_uri, *cover_path, *new_path;
+   Eclair_Media_File *current_file;
+
+   if (!cover_manager || !cover_manager->eclair || !uri)
+      return;
+
+   if (!(current_file = 
eclair_playlist_current_media_file(&cover_manager->eclair->playlist)))
+      return;
+
+   if (strstr(uri, "://"))
+   {
+      if (!(clean_uri = eclair_utils_remove_uri_special_chars(uri)))
+         return;
+   
+      if ((strlen(uri) <= 7) || (strncmp(uri, "file://", 7) != 0))
+      {
+         free(clean_uri);
+         return;
+      }
+      cover_path = strdup(&clean_uri[7]);
+      free(clean_uri);
+   }
+   else
+      cover_path = strdup(uri);
+
+   //TODO: extract extension
+   if (!(new_path = _eclair_cover_build_path_from_artist_album(cover_manager, 
current_file->artist, current_file->album, "jpg")))
+   {
+      //TODO:
+      //if (!(new_path = 
_eclair_cover_build_path_from_filepath(cover_manager)))
+      free(cover_path);
+      free(new_path);
+      return;
+   }
+   if (!ecore_file_cp(cover_path, new_path))
+   {
+      free(cover_path);
+      free(new_path);
+      return;
+   }
+
+   free(cover_path);
+   current_file->cover_path = new_path;
+   eclair_update_current_file_info(cover_manager->eclair);
+}
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_cover.h,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- eclair_cover.h      3 May 2005 20:36:33 -0000       1.4
+++ eclair_cover.h      7 May 2005 20:58:59 -0000       1.5
@@ -9,5 +9,6 @@
 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);
+void eclair_cover_current_set(Eclair_Cover_Manager *cover_manager, const char 
*uri);
 
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_playlist.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- eclair_playlist.c   4 May 2005 21:36:50 -0000       1.5
+++ eclair_playlist.c   7 May 2005 20:58:59 -0000       1.6
@@ -67,17 +67,33 @@
    return (Eclair_Media_File 
*)evas_list_data(evas_list_next(playlist->current));
 }
 
-//Add a new media file to the playlist
-Eclair_Media_File *eclair_playlist_add_media_file(Eclair_Playlist *playlist, 
char *path)
+Eclair_Media_File *eclair_playlist_add_uri(Eclair_Playlist *playlist, char 
*uri)
 {
    Eclair_Media_File *new_media_file;
    Evas_Coord min_height;
    Eclair *eclair;
+   char *clean_uri;
 
-   if (!playlist || !path)
+   if (!playlist || !uri)
       return NULL;
+
    new_media_file = eclair_media_file_new();
-   new_media_file->path = strdup(path);
+
+   if (strstr(uri, "://"))
+   {
+      if (!(clean_uri = eclair_utils_remove_uri_special_chars(uri)))
+         return NULL;
+
+      if ((strlen(clean_uri) <= 7) || (strncmp(clean_uri, "file://", 7) != 0))
+         new_media_file->path = clean_uri;
+      else
+      {
+         new_media_file->path = strdup(&clean_uri[7]);
+         free(clean_uri);
+      }
+   }
+   else
+      new_media_file->path = strdup(uri);
 
    if ((eclair = playlist->eclair))
    {
@@ -92,14 +108,15 @@
             eclair->playlist_entry_height = (int)min_height;
          }
          evas_object_resize(new_media_file->playlist_entry, 1, 
eclair->playlist_entry_height);
-         edje_object_part_text_set(new_media_file->playlist_entry, 
"playlist_entry_name", eclair_utils_path_to_filename(path));
+         edje_object_part_text_set(new_media_file->playlist_entry, 
"playlist_entry_name", eclair_utils_path_to_filename(new_media_file->path));
          edje_object_part_text_set(new_media_file->playlist_entry, 
"playlist_entry_length", "");
          edje_object_signal_callback_add(new_media_file->playlist_entry, 
"eclair_play_entry", "*", eclair_gui_play_entry_cb, eclair);
          esmart_container_element_append(eclair->playlist_container, 
new_media_file->playlist_entry);
          evas_object_show(new_media_file->playlist_entry);
       }
       
-      eclair_meta_tag_add_file_to_scan(&eclair->meta_tag_manager, 
new_media_file);
+      if (!strstr(new_media_file->path, "://"))
+         eclair_meta_tag_add_file_to_scan(&eclair->meta_tag_manager, 
new_media_file);
    }
 
    playlist->playlist = evas_list_append(playlist->playlist, new_media_file);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_playlist.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- eclair_playlist.h   30 Apr 2005 12:11:16 -0000      1.3
+++ eclair_playlist.h   7 May 2005 20:58:59 -0000       1.4
@@ -10,7 +10,7 @@
 Eclair_Media_File *eclair_playlist_prev_media_file(Eclair_Playlist *playlist);
 Eclair_Media_File *eclair_playlist_next_media_file(Eclair_Playlist *playlist);
 
-Eclair_Media_File *eclair_playlist_add_media_file(Eclair_Playlist *playlist, 
char *filename);
+Eclair_Media_File *eclair_playlist_add_uri(Eclair_Playlist *playlist, char 
*uri);
 void eclair_playlist_remove_media_file(Eclair_Playlist *playlist, 
Eclair_Media_File *media_file);
 Evas_List *eclair_playlist_remove_media_file_list(Eclair_Playlist *playlist, 
Evas_List *list);
 
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_private.h,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -3 -r1.10 -r1.11
--- eclair_private.h    7 May 2005 12:42:17 -0000       1.10
+++ eclair_private.h    7 May 2005 20:58:59 -0000       1.11
@@ -20,6 +20,7 @@
 typedef struct _Eclair_Meta_Tag_Manager Eclair_Meta_Tag_Manager;
 typedef struct _Eclair_Cover_Manager Eclair_Cover_Manager;
 typedef struct _Eclair_Config Eclair_Config;
+typedef enum _Eclair_Drop_Object Eclair_Drop_Object;
 
 struct _Eclair_Config
 {
@@ -108,6 +109,13 @@
    Evas_Bool enable;
 };
 
+enum _Eclair_Drop_Object
+{
+   ECLAIR_DROP_NONE = 0,
+   ECLAIR_DROP_COVER,
+   ECLAIR_DROP_PLAYLIST
+};
+
 struct _Eclair
 {
    //Video related vars
@@ -130,6 +138,8 @@
    Evas_Bool use_progress_bar_drag_for_time;
    Evas_Bool dont_update_progressbar;
    Eclair_Engine gui_engine;
+   char *gui_theme_file;
+   Eclair_Drop_Object gui_drop_object;
 
    //File chooser related vars
    GtkWidget *file_chooser_widget;
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_subtitles.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- eclair_subtitles.c  30 Apr 2005 12:11:16 -0000      1.2
+++ eclair_subtitles.c  7 May 2005 20:58:59 -0000       1.3
@@ -47,7 +47,7 @@
 
    for (l = subtitles->subtitles; l; l = l->next)
    {
-      if (!(subtitle = (Eclair_Subtitle *)evas_list_data(l)))
+      if (!(subtitle = (Eclair_Subtitle *)l->data))
          continue;
 
       if (subtitle->start <= current_time && subtitle->end >= current_time)
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_utils.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- eclair_utils.c      30 Apr 2005 12:11:16 -0000      1.2
+++ eclair_utils.c      7 May 2005 20:58:59 -0000       1.3
@@ -30,6 +30,43 @@
       return path;
 }
 
+//Remove uri special chars (e.g. "%20" -> ' ')
+//The returned string has to be freed
+char *eclair_utils_remove_uri_special_chars(const char *uri)
+{
+   int uri_length;
+   char *clean_uri;
+   int i, j;
+   char hex_code[3];
+   int hex_to_char;
+
+   if (!uri)
+      return NULL;
+
+   uri_length = strlen(uri);
+   clean_uri = (char *)malloc(strlen(uri) + 1);
+   for (i = 0, j = 0; i < uri_length; i++, j++)
+   {
+      if ((uri[i] == '%') && (i < (uri_length - 2)))
+      {
+         strncpy(hex_code, &uri[i + 1], 2);
+         hex_code[2] = 0;
+         if (sscanf(hex_code, "%x", &hex_to_char) == 1)
+         {
+            clean_uri[j] = hex_to_char;
+            i += 2;
+         }
+         else
+            clean_uri[j] = uri[i];
+      }
+      else
+         clean_uri[j] = uri[i];
+   }
+   clean_uri[j] = 0;
+
+   return clean_uri;
+}
+
 //Return the string "artist - title"
 //NULL if the media file doesn't have tag
 //This string has to be freed
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_utils.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- eclair_utils.h      30 Apr 2005 12:11:16 -0000      1.2
+++ eclair_utils.h      7 May 2005 20:58:59 -0000       1.3
@@ -5,6 +5,7 @@
 
 void eclair_utils_second_to_string(double position, double length, char 
*string);
 const char *eclair_utils_path_to_filename(const char *path);
+char *eclair_utils_remove_uri_special_chars(const char *uri);
 char *eclair_utils_mediafile_to_artist_title_string(const Eclair_Media_File 
*media_file);
 
 #endif




-------------------------------------------------------
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

Reply via email to