|
From: <enl...@li...> - 2005-05-27 20:28:39
|
Enlightenment CVS committal
Author : moom16
Project : e17
Module : apps/eclair
Dir : e17/apps/eclair/src
Modified Files:
eclair.c eclair_callbacks.c eclair_config.c eclair_cover.c
eclair_dialogs.c eclair_media_file.c eclair_meta_tag.c
eclair_playlist.c eclair_playlist_container.c
eclair_playlist_container.h eclair_private.h
eclair_subtitles.c eclair_utils.c
Log Message:
* Add a "scroll to" animation when we change the current media file
* Display more infos (bitrate, samplerate) on the gui (depending on the theme used)
* Fix segv that happened when we removed media files if these media files haven't been scanned for meta tags or cover
* Code cleanup
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair.c,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -3 -r1.18 -r1.19
--- eclair.c 21 May 2005 12:55:23 -0000 1.18
+++ eclair.c 27 May 2005 20:28:22 -0000 1.19
@@ -80,7 +80,7 @@
if ((l = filenames))
{
for (; l; l = l->next)
- eclair_playlist_add_uri(&eclair->playlist, (char *)l->data, 0, 1);
+ eclair_playlist_add_uri(&eclair->playlist, l->data, 0, 1);
evas_list_free(filenames);
eclair_playlist_container_update(eclair->playlist_container);
}
@@ -129,7 +129,7 @@
//Called when an new frame is decoded
void eclair_update(Eclair *eclair)
{
- char time_elapsed[10] = "";
+ char time_elapsed[10];
double position, length;
if (!eclair)
@@ -168,31 +168,59 @@
char *artist_title_string;
const char *filename;
Eclair_Media_File *current_file;
+ char string[10];
if (!eclair)
return;
current_file = eclair_playlist_current_media_file(&eclair->playlist);
- //Update the name of the current file only if video is created
- if (eclair->gui_object && eclair->video_object)
+ if (eclair->gui_object)
{
- if (current_file)
+ //Update the name of the current file only if video is created
+ if (eclair->video_object)
{
- if ((artist_title_string = eclair_utils_mediafile_to_artist_title_string(current_file)))
+ if (current_file)
{
- edje_object_part_text_set(eclair->gui_object, "current_media_name", artist_title_string);
- free(artist_title_string);
+ 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 (current_file->path && strstr(current_file->path, "://"))
+ edje_object_part_text_set(eclair->gui_object, "current_media_name", current_file->path);
+ else if (current_file->path && (filename = ecore_file_get_file(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");
}
- else if (current_file->path && strstr(current_file->path, "://"))
- edje_object_part_text_set(eclair->gui_object, "current_media_name", current_file->path);
- else if (current_file->path && (filename = ecore_file_get_file(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");
}
+ //Update current media file data
+ if (current_file)
+ {
+ if (current_file->samplerate > 0)
+ {
+ snprintf(string, 10, "%d", current_file->samplerate / 1000);
+ edje_object_part_text_set(eclair->gui_object, "samplerate", string);
+ }
+ else
+ edje_object_part_text_set(eclair->gui_object, "samplerate", "-");
+
+ if (current_file->bitrate > 0)
+ {
+ snprintf(string, 10, "%d", current_file->bitrate);
+ edje_object_part_text_set(eclair->gui_object, "bitrate", string);
+ }
+ else
+ edje_object_part_text_set(eclair->gui_object, "bitrate", "-");
+ }
else
- edje_object_part_text_set(eclair->gui_object, "current_media_name", "No media opened");
+ {
+ edje_object_part_text_set(eclair->gui_object, "samplerate", "-");
+ edje_object_part_text_set(eclair->gui_object, "bitrate", "-");
+ }
}
//Update the title of the video window
@@ -200,7 +228,7 @@
{
if (current_file && current_file->path)
{
- window_title = (char *)malloc(strlen(current_file->path) + strlen("eclair: ") + 1);
+ window_title = 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);
@@ -225,16 +253,17 @@
//Remove it if cover_path == NULL
void eclair_gui_cover_set(Eclair *eclair, const char *cover_path, Evas_Bool force_cover_update)
{
- char *current_path = NULL;
+ char *current_path;
if (!eclair || !eclair->gui_object || !eclair->gui_cover)
return;
+ current_path = NULL;
evas_object_image_file_get(eclair->gui_cover, ¤t_path, NULL);
if (!current_path && !cover_path)
return;
if (!force_cover_update && current_path && cover_path && (strcmp(current_path, cover_path) == 0))
- return;
+ return;
if (eclair->gui_previous_cover)
{
@@ -598,11 +627,11 @@
//Initialize the video object
static void *_eclair_create_video_object_thread(void *param)
{
- Eclair *eclair = (Eclair *)param;
+ Eclair *eclair;
Evas *evas;
Evas_Object *new_video_object;
- if (!eclair)
+ if (!(eclair = param))
return NULL;
if (eclair->gui_object)
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_callbacks.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -3 -r1.14 -r1.15
--- eclair_callbacks.c 21 May 2005 12:55:23 -0000 1.14
+++ eclair_callbacks.c 27 May 2005 20:28:22 -0000 1.15
@@ -4,7 +4,6 @@
#include <Edje.h>
#include <Ecore.h>
#include <Ecore_Evas.h>
-#include <Esmart/Esmart_Container.h>
#include <gtk/gtk.h>
#include <pthread.h>
#include "eclair.h"
@@ -16,7 +15,7 @@
//Called when eclair is closed
int eclair_exit_cb(void *data, int type, void *event)
{
- eclair_shutdown((Eclair *)data);
+ eclair_shutdown(data);
return 1;
}
@@ -24,21 +23,21 @@
//Called when a new frame is decoded
void eclair_video_frame_decode_cb(void *data, Evas_Object *obj, void *event_info)
{
- eclair_update((Eclair *)data);
+ eclair_update(data);
}
//Called when the current media playback is finished
void eclair_video_playback_finished_cb(void *data, Evas_Object *obj, void *event_info)
{
- eclair_play_next((Eclair *)data);
+ eclair_play_next(data);
}
//Called when the audio volume is changed by an external application
void eclair_video_audio_level_change_cb(void *data, Evas_Object *obj, void *event_info)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair;
- if (!eclair || !eclair->gui_object || !eclair->video_object)
+ if (!(eclair = data) || !eclair->gui_object || !eclair->video_object)
return;
edje_object_part_drag_value_set(eclair->gui_object, "volume_bar_drag", emotion_object_audio_volume_get(eclair->video_object), 0);
@@ -48,11 +47,11 @@
//Resize the video object and the black background object
void eclair_video_window_resize_cb(Ecore_Evas *window)
{
- Eclair *eclair = (Eclair *)ecore_evas_data_get(window, "eclair");
+ Eclair *eclair;
Evas_Coord window_width, window_height, video_width, video_height, X, Y;
double ratio;
- if (!eclair)
+ if (!(eclair = ecore_evas_data_get(window, "eclair")))
return;
evas_output_viewport_get(ecore_evas_get(window), NULL, NULL, &window_width, &window_height);
@@ -96,17 +95,15 @@
//Called when a key is pressed
void eclair_key_press_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
{
- Eclair *eclair = (Eclair *)data;
- Evas_Event_Key_Down *ev = (Evas_Event_Key_Down *)event_info;
+ Eclair *eclair;
+ Evas_Event_Key_Down *ev;
- if (!eclair)
+ if (!(eclair = data))
return;
- if (strcmp(ev->key, "f") == 0)
- {
- if (eclair->video_window)
- ecore_evas_fullscreen_set(eclair->video_window, !ecore_evas_fullscreen_get(eclair->video_window));
- }
+ ev = event_info;
+ if (strcmp(ev->key, "f") == 0 && eclair->video_window)
+ ecore_evas_fullscreen_set(eclair->video_window, !ecore_evas_fullscreen_get(eclair->video_window));
else if (strcmp(ev->key, "space") == 0 || strcmp(ev->key, "p") == 0)
{
if (eclair->state == ECLAIR_PLAYING)
@@ -116,16 +113,13 @@
}
else if (strcmp(ev->key, "escape") == 0 || strcmp(ev->key, "q") == 0)
eclair_shutdown(eclair);
- else if (strcmp(ev->key, "Left") == 0 || strcmp(ev->key, "Right") == 0
- || strcmp(ev->key, "Down") == 0 || strcmp(ev->key, "Up") == 0
- || strcmp(ev->key, "Prior") == 0 || strcmp(ev->key, "Next") == 0
- || strcmp(ev->key, "Home") == 0)
+ else if (eclair->video_object && (strcmp(ev->key, "Left") == 0 ||
+ strcmp(ev->key, "Right") == 0 || strcmp(ev->key, "Down") == 0 ||
+ strcmp(ev->key, "Up") == 0 || strcmp(ev->key, "Prior") == 0 ||
+ strcmp(ev->key, "Next") == 0 || strcmp(ev->key, "Home") == 0))
{
double media_position;
- if (!eclair->video_object)
- return;
-
media_position = eclair_position_get(eclair);
if (strcmp(ev->key, "Left") == 0)
media_position -= 15.0;
@@ -143,14 +137,11 @@
media_position = 0.0;
eclair_position_set(eclair, media_position);
}
- else if (strcmp(ev->key, "KP_Divide") == 0 || strcmp(ev->key, "slash") == 0
- || strcmp(ev->key, "KP_Multiply") == 0 || strcmp(ev->key, "asterisk") == 0)
+ else if (eclair->gui_object && (strcmp(ev->key, "KP_Divide") == 0 || strcmp(ev->key, "slash") == 0 ||
+ strcmp(ev->key, "KP_Multiply") == 0 || strcmp(ev->key, "asterisk") == 0))
{
double volume;
- if (!eclair->gui_object)
- return;
-
edje_object_part_drag_value_get(eclair->gui_object, "volume_bar_drag", &volume, 0);
if (strcmp(ev->key, "KP_Divide") == 0 || strcmp(ev->key, "slash") == 0)
volume -= (1.0 / 100);
@@ -164,23 +155,23 @@
eclair_audio_level_set(eclair, volume);
}
else if (strcmp(ev->key, "Delete") == 0)
- {
eclair_playlist_remove_selected_media_files(&eclair->playlist);
- }
+ else if (strcmp(ev->key, "a") == 0 && evas_key_modifier_is_set(ev->modifiers, "Control"))
+ eclair_playlist_container_select_all(eclair->playlist_container);
}
//Called when the video window is closed
void eclair_video_window_close_cb(Ecore_Evas *window)
{
- eclair_stop((Eclair *)ecore_evas_data_get(window, "eclair"));
+ eclair_stop(ecore_evas_data_get(window, "eclair"));
}
//Called when the user clicks on open button
void eclair_gui_open_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair;;
- if (!eclair)
+ if (!(eclair = data))
return;
eclair_dialogs_add_files_file_chooser(&eclair->dialogs_manager);
@@ -189,45 +180,45 @@
//Called when the user clicks on play button
void eclair_gui_play_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source)
{
- eclair_play((Eclair *)data);
+ eclair_play(data);
}
//Called when the user clicks on prev button
void eclair_gui_prev_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source)
{
- eclair_play_prev((Eclair *)data);
+ eclair_play_prev(data);
}
//Called when the user clicks on next button
void eclair_gui_next_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source)
{
- eclair_play_next((Eclair *)data);
+ eclair_play_next(data);
}
//Called when the user clicks on pause button
void eclair_gui_pause_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source)
{
- eclair_pause((Eclair *)data);
+ eclair_pause(data);
}
//Called when the user clicks on stop button
void eclair_gui_stop_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source)
{
- eclair_stop((Eclair *)data);
+ eclair_stop(data);
}
//Called when the user clicks on close button
void eclair_gui_close_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source)
{
- eclair_shutdown((Eclair *)data);
+ eclair_shutdown(data);
}
//Called when the user clicks on minimize button
void eclair_gui_minimize_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair;
- if (!eclair || !eclair->gui_window)
+ if (!(eclair = data) || !eclair->gui_window)
return;
ecore_evas_iconified_set(eclair->gui_window, 1);
@@ -236,11 +227,12 @@
//Called when the user clicks on an entry in the playlist
void eclair_gui_entry_down_cb(void *data, Evas *evas, Evas_Object *entry, void *event_info)
{
- Eclair *eclair = (Eclair *)data;
- Eclair_Media_File *media_file = evas_object_data_get(entry, "media_file");
- Evas_Event_Mouse_Down *event = (Evas_Event_Mouse_Down *)event_info;
+ Eclair *eclair;
+ Eclair_Media_File *media_file;
+ Evas_Event_Mouse_Down *event;
- if (!eclair || !media_file || event->button != 1)
+ event = event_info;
+ if (!(eclair = data) || !(media_file = evas_object_data_get(entry, "media_file")) || event->button != 1)
return;
if (event->flags == EVAS_BUTTON_NONE)
@@ -255,10 +247,10 @@
//Called when the user drag the progress bar button
void eclair_gui_progress_bar_drag_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair;
double progress_rate;
- if (!eclair)
+ if (!(eclair = data))
return;
if (strcmp(emission, "drag,start") == 0)
@@ -274,10 +266,10 @@
//Called when the user drags the volume bar button
void eclair_gui_volume_bar_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair;
double volume;
- if (!eclair)
+ if (!(eclair = data))
return;
edje_object_part_drag_value_get(eclair->gui_object, "volume_bar_drag", &volume, NULL);
@@ -287,10 +279,10 @@
//Called when the user drag the scrollbar button of the playlist
void eclair_gui_playlist_scrollbar_button_drag_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair;
double y;
- if (!eclair || !eclair->gui_object)
+ if (!(eclair = data) || !eclair->gui_object)
return;
edje_object_part_drag_value_get(eclair->gui_object, "playlist_scrollbar_button", NULL, &y);
@@ -300,9 +292,9 @@
//Called when the scroll percent of the playlist container is changed
void eclair_gui_playlist_container_scroll_percent_changed(void *data, Evas_Object *obj, void *event_info)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair;
- if (!eclair || !eclair->gui_object)
+ if (!(eclair = data) || !eclair->gui_object)
return;
edje_object_part_drag_value_set(eclair->gui_object, "playlist_scrollbar_button", 0, eclair_playlist_container_scroll_percent_get(obj));
@@ -311,9 +303,9 @@
//Called when the user wants to scroll the playlist
void eclair_gui_playlist_scroll_cb(void *data, Evas_Object *edje_object, const char *emission, const char *source)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair;
- if (!eclair || !eclair->playlist_container)
+ if (!(eclair = data) || !eclair->playlist_container)
return;
if (strcmp(emission, "playlist_scroll_down_start") == 0)
@@ -327,9 +319,13 @@
//Called when user uses wheel mouse over playlist container
void eclair_gui_playlist_container_wheel_cb(void *data, Evas *evas, Evas_Object *playlist_container, void *event_info)
{
- Eclair *eclair = (Eclair *)data;
- Evas_Event_Mouse_Wheel *event = (Evas_Event_Mouse_Wheel *)event_info;
+ Eclair *eclair;
+ Evas_Event_Mouse_Wheel *event;
+
+ if (!(eclair = data))
+ return;
+ event = event_info;
eclair_playlist_container_scroll(eclair->playlist_container, event->z);
}
@@ -339,12 +335,13 @@
Evas *evas;
Evas_Coord gui_window_x, gui_window_y, x, y;
Ecore_X_Rectangle rect;
- Ecore_X_Event_Xdnd_Position *ev = (Ecore_X_Event_Xdnd_Position *)event;
- Eclair *eclair = (Eclair *)data;
+ Ecore_X_Event_Xdnd_Position *ev;
+ Eclair *eclair;
- if (!eclair || !eclair->gui_window)
+ if (!(eclair = data) || !eclair->gui_window)
return 1;
+ ev = event;
evas = ecore_evas_get(eclair->gui_window);
ecore_evas_geometry_get(eclair->gui_window, &gui_window_x, &gui_window_y, NULL, NULL);
x = ev->position.x - gui_window_x;
@@ -386,9 +383,9 @@
//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;
+ Eclair *eclair;
- if (!eclair)
+ if (!(eclair = data))
return 1;
ecore_x_selection_xdnd_request(eclair->gui_x_window, "text/uri-list");
@@ -398,12 +395,13 @@
//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_Event_Selection_Notify *ev;
+ Eclair *eclair;
Ecore_X_Selection_Data_Files *files;
int i;
- if (!eclair || !eclair->gui_window || eclair->gui_drop_object == ECLAIR_DROP_NONE
+ ev = event;
+ if (!(eclair = data) || !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();
@@ -427,10 +425,11 @@
//Called when the user clicks on on of the ecore windows
int eclair_mouse_up_cb(void *data, int type, void *event)
{
- Eclair *eclair = (Eclair *)data;
- Ecore_X_Event_Mouse_Button_Up *mouse_event = (Ecore_X_Event_Mouse_Button_Up *)event;
+ Eclair *eclair;
+ Ecore_X_Event_Mouse_Button_Up *mouse_event;
+ mouse_event = event;
- if (!eclair || !mouse_event)
+ if (!(eclair = data) || !mouse_event)
return 1;
//TODO:Ecore event bug? mouse_event win and video x window doesn't match but they should have
@@ -443,9 +442,9 @@
//Called when the gui send a message
void eclair_gui_message_cb(void *data, Evas_Object *obj, Edje_Message_Type type, int id, void *msg)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair;
- if (!eclair)
+ if (!(eclair = data))
return;
switch (id)
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_config.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- eclair_config.c 20 May 2005 13:50:32 -0000 1.7
+++ eclair_config.c 27 May 2005 20:28:22 -0000 1.8
@@ -134,7 +134,7 @@
return 0;
if (!(value = xmlGetProp(node, prop_name)))
return 0;
- *prop_value = strdup((char *)value);
+ *prop_value = strdup(value);
xmlFree(value);
return 1;
}
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_cover.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -3 -r1.11 -r1.12
--- eclair_cover.c 8 May 2005 12:29:06 -0000 1.11
+++ eclair_cover.c 27 May 2005 20:28:22 -0000 1.12
@@ -78,12 +78,11 @@
for (l = cover_manager->not_in_amazon_db; l; l = l->next)
{
- if ((album = (Eclair_Cover_Not_In_DB_Album *)l->data))
- {
- free(album->artist);
- free(album->album);
- free(album);
- }
+ if (!(album = l->data))
+ continue;
+ free(album->artist);
+ free(album->album);
+ free(album);
}
evas_list_free(cover_manager->not_in_amazon_db);
@@ -100,6 +99,7 @@
if (!cover_manager || !media_file || cover_manager->cover_delete_thread)
return;
+ media_file->in_cover_process = 1;
while (cover_manager->cover_add_state != ECLAIR_IDLE)
usleep(10000);
cover_manager->cover_add_state = ECLAIR_ADDING_FILE_TO_ADD;
@@ -112,12 +112,12 @@
//Fetch from amazon the covers of the files stored in the list cover_files_to_treat
static void *_eclair_cover_thread(void *param)
{
- Eclair_Cover_Manager *cover_manager = (Eclair_Cover_Manager *)param;
+ Eclair_Cover_Manager *cover_manager;
Eclair *eclair;
Evas_List *l, *next;
Eclair_Media_File *current_file;
- if (!cover_manager || !(eclair = cover_manager->eclair))
+ if (!(cover_manager = param) || !(eclair = cover_manager->eclair))
return NULL;
pthread_mutex_lock(&cover_manager->cover_mutex);
@@ -139,13 +139,9 @@
while (cover_manager->cover_add_state != ECLAIR_IDLE)
usleep(10000);
cover_manager->cover_add_state = ECLAIR_ADDING_FILE_TO_TREAT;
- for (l = cover_manager->cover_files_to_add; l; l = next)
- {
- 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);
- }
+ for (l = cover_manager->cover_files_to_add; l; l = l->next)
+ cover_manager->cover_files_to_treat = evas_list_append(cover_manager->cover_files_to_treat, l->data);
+ cover_manager->cover_files_to_add = evas_list_free(cover_manager->cover_files_to_add);
cover_manager->cover_add_state = ECLAIR_IDLE;
}
//Treat the files in the list
@@ -154,10 +150,19 @@
if (cover_manager->cover_delete_thread || cover_manager->cover_files_to_add)
break;
next = l->next;
- current_file = (Eclair_Media_File *)l->data;
+ current_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);
- eclair_media_file_update(eclair, current_file);
+ if (current_file)
+ {
+ if (current_file->delete_me)
+ {
+ current_file->in_cover_process = 0;
+ continue;
+ }
+ current_file->cover_path = eclair_cover_file_get(cover_manager, current_file->artist, current_file->album, current_file->path);
+ eclair_media_file_update(eclair, current_file);
+ current_file->in_cover_process = 0;
+ }
}
}
}
@@ -242,7 +247,7 @@
}
//Get the ASIN of the album
- keywords = (char *)malloc(strlen(artist) + strlen(album) + 2);
+ keywords = malloc(strlen(artist) + strlen(album) + 2);
sprintf(keywords, "%s %s", artist, album);
converted_keywords = eclair_utils_add_uri_special_chars(keywords);
free(keywords);
@@ -276,7 +281,7 @@
//Get cover url from the ASIN
- _eclair_cover_build_url_for_item_images((char *)ASIN, url);
+ _eclair_cover_build_url_for_item_images(ASIN, url);
xmlFree(ASIN);
if (cover_manager->cover_delete_thread)
return NULL;
@@ -417,7 +422,7 @@
return -1;
}
- host = (char *)malloc(url_abs_path - host_start + 1);
+ host = malloc(url_abs_path - host_start + 1);
strncpy(host, host_start, url_abs_path - host_start);
host[url_abs_path - host_start] = 0;
if ((socket_fd = _eclair_cover_connect_to_hostname(host)) < 0)
@@ -445,8 +450,8 @@
return body_length;
}
- *data = (char *)malloc(body_length * sizeof(char));
- memcpy(*data, body, body_length * sizeof(char));
+ *data = malloc(body_length);
+ memcpy(*data, body, body_length);
free(packet);
return body_length;
}
@@ -466,9 +471,9 @@
*length = 0;
while ((num_bytes_read = read(socket_fd, packet_chunk, PACKET_CHUNK_SIZE)) > 0)
{
- chunk = (Eclair_Cover_Packet_Chunk *)malloc(sizeof(Eclair_Cover_Packet_Chunk));
+ chunk = malloc(sizeof(Eclair_Cover_Packet_Chunk));
chunk->size = num_bytes_read;
- chunk->data = (char *)malloc(num_bytes_read * sizeof(char));
+ chunk->data = malloc(num_bytes_read);
memcpy(chunk->data, packet_chunk, num_bytes_read);
chunks = evas_list_append(chunks, chunk);
*length += num_bytes_read;
@@ -482,10 +487,10 @@
}
pos = 0;
- *packet = (char *)malloc(*length * sizeof(char));
+ *packet = malloc(*length);
for (l = chunks; l; l = l->next)
{
- if (!(chunk = (Eclair_Cover_Packet_Chunk *)l->data))
+ if (!(chunk = l->data))
continue;
memcpy(*packet + pos, chunk->data, chunk->size);
free(chunk->data);
@@ -535,11 +540,12 @@
{
char *cover_path, *filename_without_ext;
- if (!cover_manager || !file_path || !cover_extension || !cover_manager->eclair)
+ if (!cover_manager || !file_path || !cover_extension || !cover_manager->eclair
+ || strlen(file_path) <= 0 || strlen(cover_extension) <= 0)
return NULL;
filename_without_ext = eclair_utils_file_get_filename_without_ext(file_path);
- cover_path = (char *)malloc(strlen(cover_manager->eclair->config.covers_dir_path) + strlen(filename_without_ext) + strlen(cover_extension) + 2);
+ cover_path = malloc(strlen(cover_manager->eclair->config.covers_dir_path) + strlen(filename_without_ext) + strlen(cover_extension) + 2);
sprintf(cover_path, "%s%s.%s", cover_manager->eclair->config.covers_dir_path, filename_without_ext, cover_extension);
free(filename_without_ext);
@@ -556,13 +562,13 @@
|| strlen(artist) <= 0 || strlen(album) <= 0 || strlen(cover_extension) <= 0)
return NULL;
- filename = (char *)malloc(strlen(artist) + strlen(album) + strlen(cover_extension) + 3);
+ filename = malloc(strlen(artist) + strlen(album) + strlen(cover_extension) + 3);
sprintf(filename, "%s_%s.%s", artist, album, cover_extension);
//Remove forbidden '/' in the filename
for (c = index(filename, '/'); c; c = index(c, '/'))
*c = '_';
- path = (char *)malloc(strlen(cover_manager->eclair->config.covers_dir_path) + strlen(filename) + 1);
+ path = malloc(strlen(cover_manager->eclair->config.covers_dir_path) + strlen(filename) + 1);
sprintf(path, "%s%s", cover_manager->eclair->config.covers_dir_path, filename);
free(filename);
@@ -590,11 +596,8 @@
for (n = root_node; n; n = n->next)
{
- if (n->type == XML_ELEMENT_NODE)
- {
- if (xmlStrcmp((const xmlChar *)prop, n->name) == 0)
- return n;
- }
+ if (n->type == XML_ELEMENT_NODE && xmlStrcmp(prop, n->name) == 0)
+ return n;
if ((children_node = _eclair_cover_get_node_xml_tree(n->children, prop)))
return children_node;
}
@@ -620,7 +623,7 @@
if (!artist || !album || !list)
return;
- new_album = (Eclair_Cover_Not_In_DB_Album *)malloc(sizeof(Eclair_Cover_Not_In_DB_Album));
+ new_album = malloc(sizeof(Eclair_Cover_Not_In_DB_Album));
new_album->artist = strdup(artist);
new_album->album = strdup(album);
*list = evas_list_prepend(*list, new_album);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_dialogs.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -3 -r1.5 -r1.6
--- eclair_dialogs.c 21 May 2005 12:55:23 -0000 1.5
+++ eclair_dialogs.c 27 May 2005 20:28:22 -0000 1.6
@@ -112,9 +112,9 @@
//Called each 50ms and check if we must do something (popup menu, open file selection dialog...)
static gint _eclair_dialogs_update(gpointer data)
{
- Eclair_Dialogs_Manager *dialogs_manager = (Eclair_Dialogs_Manager *)data;
+ Eclair_Dialogs_Manager *dialogs_manager;
- if (!dialogs_manager)
+ if (!(dialogs_manager = data))
return 1;
if (dialogs_manager->should_quit)
@@ -141,9 +141,9 @@
static void *_eclair_dialogs_thread(void *param)
{
Eclair_Dialogs_Manager *dialogs_manager;
- Eclair *eclair = (Eclair *)param;
+ Eclair *eclair;
- if (!eclair)
+ if (!(eclair = param))
return NULL;
gtk_init(eclair->argc, eclair->argv);
@@ -258,19 +258,18 @@
//Add the files to the playlist
static gboolean _eclair_dialogs_file_chooser_on_add_files(GtkWidget *widget, gpointer data)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair;
GtkWidget *file_chooser;
GSList *filenames, *l;
- if (!eclair || !(file_chooser = eclair->dialogs_manager.file_chooser_dialog))
+ if (!(eclair = data) || !(file_chooser = eclair->dialogs_manager.file_chooser_dialog))
return FALSE;
if (!(filenames = gtk_file_chooser_get_filenames(GTK_FILE_CHOOSER(file_chooser))))
return FALSE;
-
for (l = filenames; l; l = l->next)
- eclair_playlist_add_uri(&eclair->playlist, (char *)l->data, 0, 1);
+ eclair_playlist_add_uri(&eclair->playlist, l->data, 0, 1);
eclair_playlist_container_update(eclair->playlist_container);
g_slist_foreach(filenames, (GFunc)g_free, NULL);
g_slist_free(filenames);
@@ -283,22 +282,20 @@
//Save the playlist
static gboolean _eclair_dialogs_file_chooser_on_save_playlist(GtkWidget *widget, gpointer data)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair = data;
GtkWidget *file_chooser;
gchar *filename;
char *ext, *new_filename;
- if (!eclair || !(file_chooser = eclair->dialogs_manager.file_chooser_dialog))
- return FALSE;
-
- if (!(filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(file_chooser))) || strlen(filename) <= 0)
+ if (!(eclair = data) || !(file_chooser = eclair->dialogs_manager.file_chooser_dialog) ||
+ !(filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(file_chooser))) || strlen(filename) <= 0)
return FALSE;
if ((ext = eclair_utils_file_get_extension(filename)) && strcmp(ext, "m3u") == 0)
eclair_playlist_save(&eclair->playlist, filename);
else
{
- new_filename = (char *)malloc(strlen(filename) + 5);
+ new_filename = malloc(strlen(filename) + 5);
sprintf(new_filename, "%s.m3u", filename);
eclair_playlist_save(&eclair->playlist, new_filename);
free(new_filename);
@@ -313,9 +310,9 @@
//Do not delete the open file chooser, just hide it
static gboolean _eclair_dialogs_file_chooser_on_delete(GtkWidget *widget, GdkEvent *event, gpointer data)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair;
- if (!eclair)
+ if (!(eclair = data))
return FALSE;
gtk_file_chooser_unselect_all(GTK_FILE_CHOOSER(widget));
@@ -329,9 +326,9 @@
static void _eclair_dialogs_menu_on_add_files(GtkWidget *widget, gpointer data)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair;
- if (!eclair)
+ if (!(eclair = data))
return;
eclair_dialogs_add_files_file_chooser(&eclair->dialogs_manager);
@@ -339,9 +336,9 @@
static void _eclair_dialogs_menu_on_load_playlist(GtkWidget *widget, gpointer data)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair;
- if (!eclair)
+ if (!(eclair = data))
return;
eclair_dialogs_load_playlist_file_chooser(&eclair->dialogs_manager);
@@ -349,9 +346,9 @@
static void _eclair_dialogs_menu_on_save_playlist(GtkWidget *widget, gpointer data)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair;
- if (!eclair)
+ if (!(eclair = data))
return;
eclair_dialogs_save_playlist_file_chooser(&eclair->dialogs_manager);
@@ -359,9 +356,9 @@
static void _eclair_dialogs_menu_on_select_all(GtkWidget *widget, gpointer data)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair;
- if (!eclair)
+ if (!(eclair = data))
return;
eclair_playlist_container_select_all(eclair->playlist_container);
@@ -369,9 +366,9 @@
static void _eclair_dialogs_menu_on_select_none(GtkWidget *widget, gpointer data)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair;
- if (!eclair)
+ if (!(eclair = data))
return;
eclair_playlist_container_select_none(eclair->playlist_container);
@@ -379,9 +376,9 @@
static void _eclair_dialogs_menu_on_invert_selection(GtkWidget *widget, gpointer data)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair;
- if (!eclair)
+ if (!(eclair = data))
return;
eclair_playlist_container_invert_selection(eclair->playlist_container);
@@ -389,9 +386,9 @@
static void _eclair_dialogs_menu_on_remove_selected(GtkWidget *widget, gpointer data)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair;
- if (!eclair)
+ if (!(eclair = data))
return;
eclair_playlist_remove_selected_media_files(&eclair->playlist);
@@ -399,9 +396,9 @@
static void _eclair_dialogs_menu_on_remove_unselected(GtkWidget *widget, gpointer data)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair;
- if (!eclair)
+ if (!(eclair = data))
return;
eclair_playlist_remove_unselected_media_files(&eclair->playlist);
@@ -409,9 +406,9 @@
static void _eclair_dialogs_menu_on_remove_all(GtkWidget *widget, gpointer data)
{
- Eclair *eclair = (Eclair *)data;
+ Eclair *eclair;
- if (!eclair)
+ if (!(eclair = data))
return;
eclair_playlist_empty(&eclair->playlist);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_media_file.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- eclair_media_file.c 18 May 2005 15:36:25 -0000 1.7
+++ eclair_media_file.c 27 May 2005 20:28:22 -0000 1.8
@@ -9,7 +9,7 @@
//Create a new media file
Eclair_Media_File *eclair_media_file_new()
{
- return (Eclair_Media_File *)calloc(1, sizeof(Eclair_Media_File));
+ return calloc(1, sizeof(Eclair_Media_File));
}
//Free a media file
@@ -31,7 +31,7 @@
//Update the media file with tag and cover infos
void eclair_media_file_update(Eclair *eclair, Eclair_Media_File *media_file)
{
- char length[10] = "";
+ char length[10];
char *artist_title_string;
const char *filename;
Eclair_Playlist_Container *playlist_container;
@@ -45,7 +45,7 @@
{
//Update playlist entry
if ((container_object = media_file->container_object) && eclair->playlist_container &&
- (playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(eclair->playlist_container)))
+ (playlist_container = evas_object_smart_data_get(eclair->playlist_container)))
{
if ((artist_title_string = eclair_utils_mediafile_to_artist_title_string(media_file)))
{
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_meta_tag.c,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -3 -r1.9 -r1.10
--- eclair_meta_tag.c 18 May 2005 15:36:25 -0000 1.9
+++ eclair_meta_tag.c 27 May 2005 20:28:22 -0000 1.10
@@ -41,11 +41,10 @@
//Add a media file to the list of files to scan for meta tag
void eclair_meta_tag_add_file_to_scan(Eclair_Meta_Tag_Manager *meta_tag_manager, Eclair_Media_File *media_file)
{
- if (!meta_tag_manager || !media_file)
- return;
- if (meta_tag_manager->meta_tag_delete_thread)
+ if (!meta_tag_manager || !media_file || meta_tag_manager->meta_tag_delete_thread)
return;
+ media_file->in_meta_tag_process = 1;
while (meta_tag_manager->meta_tag_add_state != ECLAIR_IDLE)
usleep(10000);
meta_tag_manager->meta_tag_add_state = ECLAIR_ADDING_FILE_TO_ADD;
@@ -61,11 +60,9 @@
TagLib_Tag *tag;
const TagLib_AudioProperties *tag_audio_props;
- if (!eclair || !media_file)
+ if (!eclair || !media_file || !media_file->path)
return;
- if (!media_file->path)
- return;
if (!(tag_file = taglib_file_new(media_file->path)))
return;
@@ -80,7 +77,11 @@
media_file->track = taglib_tag_track(tag);
}
if ((tag_audio_props = taglib_file_audioproperties(tag_file)))
+ {
media_file->length = taglib_audioproperties_length(tag_audio_props);
+ media_file->bitrate = taglib_audioproperties_bitrate(tag_audio_props);
+ media_file->samplerate = taglib_audioproperties_samplerate(tag_audio_props);
+ }
taglib_tag_free_strings();
taglib_file_free(tag_file);
@@ -92,7 +93,7 @@
//Scan the files stored in the list of files to scan
static void *_eclair_meta_tag_thread(void *param)
{
- Eclair *eclair = (Eclair *)param;
+ Eclair *eclair = param;
Eclair_Meta_Tag_Manager *meta_tag_manager;
Evas_List *l, *next;
Eclair_Media_File *current_file;
@@ -100,6 +101,7 @@
if (!eclair)
return NULL;
+ next = NULL;
meta_tag_manager = &eclair->meta_tag_manager;
pthread_mutex_lock(&meta_tag_manager->meta_tag_mutex);
for (;;)
@@ -120,13 +122,9 @@
while (meta_tag_manager->meta_tag_add_state != ECLAIR_IDLE)
usleep(10000);
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)
- {
- 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);
- }
+ for (l = meta_tag_manager->meta_tag_files_to_add; l; l = l->next)
+ meta_tag_manager->meta_tag_files_to_scan = evas_list_append(meta_tag_manager->meta_tag_files_to_scan, l->data);
+ meta_tag_manager->meta_tag_files_to_add = evas_list_free(meta_tag_manager->meta_tag_files_to_add);
meta_tag_manager->meta_tag_add_state = ECLAIR_IDLE;
}
//Treat the files in the list
@@ -135,10 +133,19 @@
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;
+ current_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);
+ if (current_file)
+ {
+ if (current_file->delete_me)
+ {
+ current_file->in_meta_tag_process = 0;
+ continue;
+ }
+ eclair_meta_tag_read(eclair, current_file);
+ eclair_media_file_update(eclair, current_file);
+ current_file->in_meta_tag_process = 0;
+ }
}
}
}
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_playlist.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -3 -r1.12 -r1.13
--- eclair_playlist.c 22 May 2005 15:21:51 -0000 1.12
+++ eclair_playlist.c 27 May 2005 20:28:22 -0000 1.13
@@ -10,28 +10,73 @@
#include "eclair_cover.h"
#include "eclair_media_file.h"
#include "eclair_meta_tag.h"
+#include "eclair_cover.h"
#include "eclair_callbacks.h"
#include "eclair_utils.h"
#define MAX_PATH_LEN 1024
+static int eclair_playlist_media_files_destructor(void *data);
+
//Initialize the playlist
void eclair_playlist_init(Eclair_Playlist *playlist, Eclair *eclair)
{
if (!playlist)
- return;
+ return;
playlist->playlist = NULL;
playlist->current = NULL;
+ playlist->removed_media_files = NULL;
playlist->shuffle = 0;
playlist->repeat = 0;
playlist->eclair = eclair;
+ playlist->media_files_destructor_timer = ecore_timer_add(0.05, eclair_playlist_media_files_destructor, playlist);
}
//Shutdown the playlist
void eclair_playlist_shutdown(Eclair_Playlist *playlist)
{
- eclair_playlist_empty(playlist);
+ Evas_List *l;
+
+ if (!playlist)
+ return;
+
+ ecore_timer_del(playlist->media_files_destructor_timer);
+ for (l = playlist->playlist; l; l = l->next)
+ eclair_media_file_free(l->data);
+ for (l = playlist->removed_media_files; l; l = l->next)
+ eclair_media_file_free(l->data);
+ playlist->playlist = evas_list_free(playlist->playlist);
+ playlist->removed_media_files = evas_list_free(playlist->removed_media_files);
+ playlist->current = NULL;
+
+ if (playlist->eclair && playlist->eclair->playlist_container)
+ eclair_playlist_container_update(playlist->eclair->playlist_container);
+}
+
+//Called every 50ms and destroy the removed media files
+int eclair_playlist_media_files_destructor(void *data)
+{
+ Eclair_Playlist *playlist;
+ Evas_List *l, *next;
+ Eclair_Media_File *current_file;
+
+ if (!(playlist = data))
+ return 0;
+
+ for (l = playlist->removed_media_files; l; l = next)
+ {
+ next = l->next;
+ if (!(current_file = l->data))
+ playlist->removed_media_files = evas_list_remove_list(playlist->removed_media_files, l);
+ else if (!current_file->in_meta_tag_process && !current_file->in_cover_process)
+ {
+ eclair_media_file_free(current_file);
+ playlist->removed_media_files = evas_list_remove_list(playlist->removed_media_files, l);
+ }
+ }
+
+ return 1;
}
//Save the playlist
@@ -50,7 +95,7 @@
for (l = playlist->playlist; l; l = l->next)
{
- if (!(media_file = (Eclair_Media_File *)l->data) || !media_file->path || strlen(media_file->path) <= 0)
+ if (!(media_file = l->data) || !media_file->path || strlen(media_file->path) <= 0)
continue;
fprintf(playlist_file, "%s\n", media_file->path);
}
@@ -73,7 +118,7 @@
if (!playlist)
return NULL;
- return (Eclair_Media_File *)evas_list_data(evas_list_prev(playlist->current));
+ return evas_list_data(evas_list_prev(playlist->current));
}
//Return the media file just after the active media file
@@ -82,7 +127,7 @@
if (!playlist)
return NULL;
- return (Eclair_Media_File *)evas_list_data(evas_list_next(playlist->current));
+ return evas_list_data(evas_list_next(playlist->current));
}
//Add recursively a directory
@@ -99,9 +144,9 @@
{
for (l = files->first; l; l = l->next)
{
- if (!(filename = (char *)l->data))
+ if (!(filename = l->data))
continue;
- filepath = (char *)malloc(strlen(dir) + strlen(filename) + 2);
+ filepath = malloc(strlen(dir) + strlen(filename) + 2);
sprintf(filepath, "%s/%s", dir, filename);
eclair_playlist_add_uri(playlist, filepath, 0, autoplay);
free(filepath);
@@ -138,7 +183,7 @@
eclair_playlist_add_uri(playlist, line, 0, autoplay);
else if (m3u_dir)
{
- path = (char *)malloc(strlen(m3u_dir) + strlen(line) + 2);
+ path = malloc(strlen(m3u_dir) + strlen(line) + 2);
sprintf(path, "%s/%s", m3u_dir, line);
eclair_playlist_add_uri(playlist, path, 0, autoplay);
free(path);
@@ -235,8 +280,11 @@
if (playlist->current == list)
eclair_playlist_current_set_list(playlist, NULL);
- if ((remove_media_file = evas_list_data(list)))
- eclair_media_file_free(remove_media_file);
+ if ((remove_media_file = list->data))
+ {
+ remove_media_file->delete_me = 1;
+ playlist->removed_media_files = evas_list_append(playlist->removed_media_files, remove_media_file);
+ }
next = list->next;
playlist->playlist = evas_list_remove_list(playlist->playlist, list);
@@ -314,7 +362,7 @@
if (media_file)
eclair_playlist_current_set_list(playlist, evas_list_find_list(playlist->playlist, media_file));
else
- eclair_playlist_current_set_list(playlist, evas_list_find_list(playlist->playlist, NULL));
+ eclair_playlist_current_set_list(playlist, NULL);
}
//Set the media file stored in the list as the active media file
@@ -327,17 +375,18 @@
previous_media_file = evas_list_data(playlist->current);
playlist->current = list;
- eclair_playlist_container_scroll_to_list(playlist->eclair->playlist_container, list);
eclair_media_file_update(playlist->eclair, previous_media_file);
- eclair_media_file_update(playlist->eclair, evas_list_data(playlist->current));
+ if (list)
+ {
+ eclair_playlist_container_scroll_to_list(playlist->eclair->playlist_container, list);
+ eclair_media_file_update(playlist->eclair, list->data);
+ }
}
//Set the media file which is just before the active media file as the active media file
void eclair_playlist_prev_as_current(Eclair_Playlist *playlist)
{
- if (!playlist)
- return;
- if (!playlist->current)
+ if (!playlist || !playlist->current)
return;
eclair_playlist_current_set_list(playlist, playlist->current->prev);
@@ -346,9 +395,7 @@
//Set the media file which is just after the active media file as the active media file
void eclair_playlist_next_as_current(Eclair_Playlist *playlist)
{
- if (!playlist)
- return;
- if (!playlist->current)
+ if (!playlist || !playlist->current)
return;
eclair_playlist_current_set_list(playlist, playlist->current->next);
===================================================================
RCS file: /cvsroot/enlightenment/e17/apps/eclair/src/eclair_playlist_container.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -3 -r1.2 -r1.3
--- eclair_playlist_container.c 22 May 2005 15:21:51 -0000 1.2
+++ eclair_playlist_container.c 27 May 2005 20:28:22 -0000 1.3
@@ -10,6 +10,7 @@
static Evas_Smart *playlist_container_smart;
void eclair_playlist_container_update(Evas_Object *obj);
static int _eclair_playlist_container_scroll_timer(void *data);
+static int _eclair_playlist_container_scroll_to_timer(void *data);
static void _eclair_playlist_container_smart_add(Evas_Object *obj);
static void _eclair_playlist_container_smart_del(Evas_Object *obj);
static void _eclair_playlist_container_smart_layer_set(Evas_Object *obj, int layer);
@@ -59,7 +60,7 @@
char *color_string;
Eclair_Color *color;
- if (!obj || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj)))
+ if (!obj || !(playlist_container = evas_object_smart_data_get(obj)))
return;
free(playlist_container->entry_theme_path);
@@ -101,7 +102,7 @@
{
Eclair_Playlist_Container *playlist_container;
- if (!obj || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj)))
+ if (!obj || !(playlist_container = evas_object_smart_data_get(obj)))
return;
playlist_container->entries = media_list;
@@ -120,7 +121,7 @@
Evas_Coord x, y, w, h;
int invisible_height, offset, first_visible_nth, delta;
- if (!obj || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj)) ||
+ if (!obj || !(playlist_container = evas_object_smart_data_get(obj)) ||
playlist_container->entry_height <= 0 || !playlist_container->entries)
return;
@@ -142,7 +143,7 @@
for (l = playlist_container->entry_objects, l2 = first_visible, i = 0; l; l = l->next)
{
- if (!(entry_object = (Eclair_Playlist_Container_Object *)l->data))
+ if (!(entry_object = l->data))
continue;
evas_object_move(entry_object->rect, x, y + i * playlist_container->entry_height - delta);
evas_object_resize(entry_object->rect, w, playlist_container->entry_height);
@@ -168,33 +169,12 @@
}
}
-//Scroll the playlist container
-void eclair_playlist_container_scroll(Evas_Object *obj, double num_entries)
-{
- double percent;
- Evas_Coord h;
- double hidden_items;
- Eclair_Playlist_Container *playlist_container;
-
- if (!obj || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj)) ||
- playlist_container->entry_height <= 0 || !playlist_container->entries)
- return;
-
- evas_object_geometry_get(obj, NULL, NULL, NULL, &h);
- hidden_items = evas_list_count(*playlist_container->entries) - ((float)h / playlist_container->entry_height);
- if (hidden_items > 0.0)
- {
- percent = playlist_container->scroll_percent + (num_entries / hidden_items);
- eclair_playlist_container_scroll_percent_set(obj, percent);
- }
-}
-
//Set the scroll percent of the playlist container
void eclair_playlist_container_scroll_percent_set(Evas_Object *obj, double percent)
{
Eclair_Playlist_Container *playlist_container;
- if (!obj || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj)))
+ if (!obj || !(playlist_container = evas_object_smart_data_get(obj)))
return;
if (playlist_container->scroll_percent != percent)
@@ -214,12 +194,33 @@
{
Eclair_Playlist_Container *playlist_container;
- if (!obj || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj)))
+ if (!obj || !(playlist_container = evas_object_smart_data_get(obj)))
return 0.0;
return playlist_container->scroll_percent;
}
+//Scroll the playlist container
+void eclair_playlist_container_scroll(Evas_Object *obj, double num_entries)
+{
+ double percent;
+ Evas_Coord h;
+ double hidden_items;
+ Eclair_Playlist_Container *playlist_container;
+
+ if (!obj || !(playlist_container = evas_object_smart_data_get(obj)) ||
+ playlist_container->entry_height <= 0 || !playlist_container->entries)
+ return;
+
+ evas_object_geometry_get(obj, NULL, NULL, NULL, &h);
+ hidden_items = evas_list_count(*playlist_container->entries) - ((float)h / playlist_container->entry_height);
+ if (hidden_items > 0.0)
+ {
+ percent = playlist_container->scroll_percent + (num_entries / hidden_items);
+ eclair_playlist_container_scroll_percent_set(obj, percent);
+ }
+}
+
//Start scrolling the playlist
//Code from the default layout of esmart container
void eclair_playlist_container_scroll_start(Evas_Object *obj, double speed)
@@ -228,8 +229,8 @@
Evas_Coord h;
Eclair_Playlist_Container *playlist_container;
- if (!obj || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj)) ||
- !playlist_container->entry_theme_path || playlist_container->entry_height <= 0 || !playlist_container->entries)
+ if (!obj || !(playlist_container = evas_object_smart_data_get(obj)) ||
+ playlist_container->entry_height <= 0 || !playlist_container->entries)
return;
evas_object_geometry_get(obj, NULL, NULL, NULL, &h);
@@ -249,12 +250,12 @@
{
Eclair_Playlist_Container *playlist_container;
- if (!obj || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj)))
+ if (!obj || !(playlist_container = evas_object_smart_data_get(obj)))
return;
if (playlist_container->scroll_timer)
{
- ecore_timer_del(playlist_container->scroll_timer);
+ ecore_timer_del(playlist_container->scroll_timer);
playlist_container->scroll_timer = NULL;
}
}
@@ -267,7 +268,7 @@
Eclair_Playlist_Container *playlist_container;
double dt, dx;
- if (!(obj = (Evas_Object *)data) || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj)))
+ if (!(obj = data) || !(playlist_container = evas_object_smart_data_get(obj)))
return 0;
dt = ecore_time_get() - playlist_container->scroll_start_time;
@@ -278,7 +279,7 @@
return 1;
}
-//Scroll the playlist container upto the element
+//Scroll the playlist container up to the element
void eclair_playlist_container_scroll_to_list(Evas_Object *obj, Evas_List *element)
{
Eclair_Playlist_Container *playlist_container;
@@ -286,7 +287,7 @@
Evas_Coord container_height;
int i, start_offset, element_offset;
- if (!obj || !element || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj)) ||
+ if (!obj || !element || !(playlist_container = evas_object_smart_data_get(obj)) ||
playlist_container->entry_height <= 0 || !playlist_container->entries)
return;
@@ -300,26 +301,50 @@
element_offset = i * playlist_container->entry_height;
start_offset = eclair_playlist_container_offset_get(obj);
if (element_offset < start_offset)
- {
- eclair_playlist_container_offset_set(obj, element_offset);
- }
+ playlist_container->scroll_to_percent = eclair_playlist_container_percent_get_from_offset(obj, element_offset);
else
{
evas_object_geometry_get(obj, NULL, NULL, NULL, &container_height);
- eclair_playlist_container_offset_set(obj, element_offset - container_height + playlist_container->entry_height);
+ playlist_container->scroll_to_percent = eclair_playlist_container_percent_get_from_offset(obj, element_offset - container_height + playlist_container->entry_height);
}
+ playlist_container->scroll_to_speed = (playlist_container->scroll_to_percent - playlist_container->scroll_percent) / 8.0;
+ playlist_container->scroll_to_timer = ecore_timer_add(0.05, _eclair_playlist_container_scroll_to_timer, obj);
}
}
}
-//Return the offset of the playlist container
-int eclair_playlist_container_offset_get(Evas_Object *obj)
+//Update the scroll percent of the playlist container to scroll up to playlist_container->scroll_to_percent
+static int _eclair_playlist_container_scroll_to_timer(void *data)
+{
+ Evas_Object *obj;
+ Eclair_Playlist_Container *playlist_container;
+ double scroll_percent;
+
+ if (!(obj = data) || !(playlist_container = evas_object_smart_data_get(obj)))
+ return 0;
+
+ scroll_percent = playlist_container->scroll_percent + playlist_container->scroll_to_speed;
+ if ((playlist_container->scroll_to_speed > 0 && scroll_percent >= playlist_container->scroll_to_percent) ||
+ (playlist_container->scroll_to_speed < 0 && scroll_percent <= playlist_container->scroll_to_percent))
+ {
+ eclair_playlist_container_scroll_percent_set(obj, playlist_container->scroll_to_percent);
+ playlist_container->scroll_to_timer = NULL;
+ return 0;
+ }
+
+ eclair_playlist_container_scroll_percent_set(obj, scroll_percent);
+
+ return 1;
+}
+
+//Return the offset according to the scroll percent
+int eclair_playlist_container_offset_get_from_percent(Evas_Object *obj, double scroll_percent)
{
Eclair_Playlist_Container *playlist_container;
Evas_Coord container_height;
int hidden_height;
- if (!obj || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj)) ||
+ if (!obj || !(playlist_container = evas_object_smart_data_get(obj)) ||
!playlist_container->entries || playlist_container->entry_height <= 0)
return 0;
@@ -329,25 +354,51 @@
if (hidden_height <= 0)
return 0;
else
- return (int)(playlist_container->scroll_percent * hidden_height);
+ return (int)(scroll_percent * hidden_height);
}
-//Set the offset of the playlist container
-void eclair_playlist_container_offset_set(Evas_Object *obj, int offset)
+//Return the scroll percent according to the offset
+double eclair_playlist_container_percent_get_from_offset(Evas_Object *obj, int offset)
{
Eclair_Playlist_Container *playlist_container;
double scroll_percent;
Evas_Coord container_height;
int hidden_height;
- if (!obj || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj)) ||
+ if (!obj || !(playlist_container = evas_object_smart_data_get(obj)) ||
!playlist_container->entries || playlist_container->entry_height <= 0)
- return;
+ return 0;
evas_object_geometry_get(obj, NULL, NULL, NULL, &container_height);
hidden_height = (playlist_container->entry_height * evas_list_count(*playlist_container->entries)) - container_height;
scroll_percent = (double)offset / hidden_height;
- eclair_playlist_container_scroll_percent_set(obj, scroll_percent);
+ if (scroll_percent < 0)
+ scroll_percent = 0;
+ else if (scroll_percent >= 1)
+ scroll_percent = 1;
+ return scroll_percent;
+}
+
+//Return the offset of the playlist container
+int eclair_playlist_container_offset_get(Evas_Object *obj)
+{
+ Eclair_Playlist_Container *playlist_container;
+
+ if (!obj || !(playlist_container = evas_object_smart_data_get(obj)))
+ return 0;
+
+ return eclair_playlist_container_offset_get_from_percent(obj, playlist_container->scroll_percent);
+}
+
+//Set the offset of the playlist container
+void eclair_playlist_container_offset_set(Evas_Object *obj, int offset)
+{
+ Eclair_Playlist_Container *playlist_container;
+
+ if (!obj || !(playlist_container = evas_object_smart_data_get(obj)))
+ return;
+
+ eclair_playlist_container_scroll_percent_set(obj, eclair_playlist_container_percent_get_from_offset(obj, offset));
}
//Return 1 if the nth element is visible in the playlist container (if it is entirely visible if entirely == 1)
@@ -357,7 +408,7 @@
Evas_Coord container_height;
Eclair_Playlist_Container *playlist_container;
- if (!obj || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj)) || playlist_container->entry_height <= 0)
+ if (!obj || !(playlist_container = evas_object_smart_data_get(obj)) || playlist_container->entry_height <= 0)
return 0;
start_offset = eclair_playlist_container_offset_get(obj);
@@ -369,7 +420,6 @@
return (element_offset - playlist_container->entry_height > start_offset && element_offset < (start_offset + container_height));
}
-
//Select the files in the playlist container according to the media_file selected and the modifiers
void eclair_playlist_container_select_file(Evas_Object *obj, Eclair_Media_File *media_file, Evas_Modifier *modifiers)
{
@@ -378,7 +428,7 @@
Eclair_Media_File *current_file;
Evas_Bool selected = 0;
- if (!obj || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj)) ||
+ if (!obj || !(playlist_container = evas_object_smart_data_get(obj)) ||
!playlist_container->entries || !media_file)
return;
@@ -397,7 +447,7 @@
{
for (l = *playlist_container->entries; l; l = l->next)
{
- if (!(current_file = (Eclair_Media_File *)l->data))
+ if (!(current_file = l->data))
continue;
if (current_file == playlist_container->last_selected || current_file == media_file)
{
@@ -440,12 +490,12 @@
Eclair_Media_File *media_file;
Eclair_Playlist_Container *playlist_container;
- if (!obj || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj)) || !playlist_container->entries)
+ if (!obj || !(playlist_container = evas_object_smart_data_get(obj)) || !playlist_container->entries)
return;
for (l = *playlist_container->entries; l; l = l->next)
{
- if ((media_file = (Eclair_Media_File *)l->data))
+ if ((media_file = l->data))
media_file->selected = 1;
}
eclair_playlist_container_update(obj);
@@ -458,12 +508,12 @@
Eclair_Media_File *media_file;
Eclair_Playlist_Container *playlist_container;
- if (!obj || !(playlist_container = (Eclair_Playlist_Container *)evas_object_smart_data_get(obj)) || !playlist_container->entries)
+ if (!obj || !(playlist_container = evas_object_smart_data_get(obj)) || !playlist_container->entries)
return;
for (l = *playlist_container->entries; l; l = l->next)
{
- if ((media_file = (Eclair_Media_File *)l->d...
[truncated message content] |