Enlightenment CVS committal

Author  : tsauerbeck
Project : misc
Module  : eplayer

Dir     : misc/eplayer/src


Modified Files:
        callbacks.c playlist.c playlist.h track.c 


Log Message:
Playlist API changes.
===================================================================
RCS file: /cvsroot/enlightenment/misc/eplayer/src/callbacks.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -3 -r1.16 -r1.17
--- callbacks.c 18 Nov 2003 17:58:54 -0000      1.16
+++ callbacks.c 23 Nov 2003 19:13:17 -0000      1.17
@@ -59,20 +59,15 @@
  */
 void cb_track_next(ePlayer *player, Evas *e, Evas_Object *o,
                    void *event) {
-       int play = 0;
+       int play = 1;
        
        debug(DEBUG_LEVEL_INFO, "Next File Called\n");
 
        eplayer_playback_stop(player);
 
-       if (player->playlist->cur_item->next) {
-               player->playlist->cur_item = player->playlist->cur_item->next;
-               play = 1;
-       } else {
-               /* there's no next item, so move to the beginning again */
-               player->playlist->cur_item = player->playlist->items;
+       /* check whether we moved to the beginning of the list */
+       if (playlist_current_item_next(player->playlist))
                play = player->cfg.repeat;
-       }
 
        if (play) {
                eplayer_playback_start(player, 1);
@@ -95,13 +90,13 @@
        debug(DEBUG_LEVEL_INFO, "Previous File Called\n");
 
        /* first item on the list: do nothing */
-       if (!player->playlist->cur_item->prev)
+       if (!playlist_current_item_has_prev(player->playlist))
                return;
 
        eplayer_playback_stop(player);
        
        /* Get the previous list item */
-       player->playlist->cur_item = player->playlist->cur_item->prev;
+       playlist_current_item_prev(player->playlist);
 
        eplayer_playback_start(player, 1);
        paused = 0;
@@ -166,13 +161,10 @@
                            const char *emission, const char *src) {
        ePlayer *player = udata;
        PlayListItem *pli = evas_object_data_get(obj, "PlayListItem");
-       Evas_List *item = evas_list_find_list(player->playlist->items, pli);
 
-       assert(item);
-       
        eplayer_playback_stop(player);
 
-       player->playlist->cur_item = item;
+       playlist_current_item_set(player->playlist, pli);
        eplayer_playback_start(player, 1);
        paused = 0;
 }
@@ -192,7 +184,7 @@
 void cb_seek_forward(void *udata, Evas_Object *obj,
                      const char *emission, const char *src) {
        ePlayer *player = udata;
-       PlayListItem *pli = player->playlist->cur_item->data;
+       PlayListItem *pli = playlist_current_item_get(player->playlist);
 
        debug(DEBUG_LEVEL_INFO, "Seeking forward\n");
 
@@ -208,8 +200,8 @@
 void cb_seek_backward(void *udata, Evas_Object *obj,
                       const char *emission, const char *src) {
        ePlayer *player = udata;
-       PlayListItem *pli = player->playlist->cur_item->data;
-       int cur_time = pli->plugin->get_current_pos();
+       PlayListItem *pli = playlist_current_item_get(player->playlist);
+       int cur_time  = pli->plugin->get_current_pos();
        
        debug(DEBUG_LEVEL_INFO, "Seeking backward - Current Pos: %i\n",
              cur_time);
===================================================================
RCS file: /cvsroot/enlightenment/misc/eplayer/src/playlist.c,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -3 -r1.11 -r1.12
--- playlist.c  17 Nov 2003 21:03:10 -0000      1.11
+++ playlist.c  23 Nov 2003 19:13:17 -0000      1.12
@@ -31,8 +31,11 @@
  * @param pli
  */
 void playlist_item_free(PlayListItem *pli) {
-       if (pli)
-               free(pli);
+       if (!pli)
+               return;
+       
+       pthread_mutex_destroy(&pli->pos_mutex);
+       free(pli);
 }
 
 /**
@@ -51,6 +54,8 @@
        
        memset(pli, 0, sizeof(PlayListItem));
 
+       pthread_mutex_init(&pli->pos_mutex, NULL);
+
        /* find the plugin for this file */
        for (l = plugins; l; l = l->next) {
                ip = l->data;
@@ -114,6 +119,58 @@
                playlist_item_free((PlayListItem *) pl->items->data);
                pl->items = evas_list_remove(pl->items, pl->items->data);
        }
+}
+
+PlayListItem *playlist_current_item_get(PlayList *pl) {
+       return pl ? pl->cur_item->data : NULL;
+}
+
+void playlist_current_item_set(PlayList *pl, PlayListItem *pli) {
+       if (!pl)
+               return;
+
+       if (!pli) /* move to the beginning */
+               pl->cur_item = pl->items;
+       else
+               pl->cur_item = evas_list_find_list(pl->items, pli);
+}
+
+int playlist_current_item_has_next(PlayList *pl) {
+       return pl ? !!pl->cur_item->next : 0;
+}
+
+int playlist_current_item_has_prev(PlayList *pl) {
+       return pl ? !!pl->cur_item->prev : 0;
+}
+
+/**
+ * Moves the current item of a PlayList to the next item.
+ *
+ * @param pl
+ * return 1 if the current item has been set to the beginning, else 0
+ */
+int playlist_current_item_next(PlayList *pl) {
+       if (!pl)
+               return 0;
+       
+       if (pl->cur_item->next) {
+               pl->cur_item = pl->cur_item->next;
+               return 0;
+       } else { /* move to the beginning */
+               pl->cur_item = pl->items;
+               return 1;
+       }
+}
+
+int playlist_current_item_prev(PlayList *pl) {
+       if (!pl)
+               return 0;
+
+       if (playlist_current_item_has_prev(pl)) {
+               pl->cur_item = pl->cur_item->prev;
+               return 1;
+       } else
+               return 0;
 }
 
 /**
===================================================================
RCS file: /cvsroot/enlightenment/misc/eplayer/src/playlist.h,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- playlist.h  14 Nov 2003 16:40:19 -0000      1.6
+++ playlist.h  23 Nov 2003 19:13:17 -0000      1.7
@@ -50,6 +50,15 @@
 
 void playlist_remove_all(PlayList *pl);
 
+PlayListItem *playlist_current_item_get(PlayList *pl);
+void playlist_current_item_set(PlayList *pl, PlayListItem *pli);
+
+int playlist_current_item_prev(PlayList *pl);
+int playlist_current_item_next(PlayList *pl);
+
+int playlist_current_item_has_prev(PlayList *pl);
+int playlist_current_item_has_next(PlayList *pl);
+
 #ifdef __cplusplus
 }
 #endif
===================================================================
RCS file: /cvsroot/enlightenment/misc/eplayer/src/track.c,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- track.c     14 Nov 2003 20:16:28 -0000      1.7
+++ track.c     23 Nov 2003 19:13:17 -0000      1.8
@@ -12,7 +12,7 @@
  */
 void track_play_chunk(void *udata) {
        ePlayer *player = udata;
-       PlayListItem *pli = player->playlist->cur_item->data;
+       PlayListItem *pli = playlist_current_item_get(player->playlist);
        int read;
        unsigned char *buf = NULL;
 
@@ -32,7 +32,7 @@
 
 int track_update_time(void *udata) {
        ePlayer *player = udata;
-       PlayListItem *current_item = player->playlist->cur_item->data;
+       PlayListItem *current_item = playlist_current_item_get(player->playlist);
        static int old_time = -1;
        int cur_time;
 
@@ -58,10 +58,8 @@
 void track_close(ePlayer *player) {
        PlayListItem *pli;
        
-       if (player->playlist && player->playlist->cur_item) {
-               pli = player->playlist->cur_item->data;
+       if ((pli = playlist_current_item_get(player->playlist)))
                pli->plugin->close();
-       }
 }
 
 /**
@@ -70,12 +68,11 @@
  * @param player
  */
 void track_open(ePlayer *player) {
-       PlayListItem *pli;
+       PlayListItem *pli = playlist_current_item_get(player->playlist);
 
-       assert(player->playlist->cur_item);
-       pli = player->playlist->cur_item->data;
-       pli->current_pos = 0;
+       assert(pli);
 
+       pli->current_pos = 0;
        pli->plugin->open(pli->file);
 
        edje_object_part_text_set(player->gui.edje, "song_name",




-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
Does SourceForge.net help you be more productive?  Does it
help you create better code?  SHARE THE LOVE, and help us help
YOU!  Click Here: http://sourceforge.net/donate/
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to