[vlc-commits] dbus: use playlist item IDs rather input item IDs

Rémi Denis-Courmont git at videolan.org
Tue Nov 15 21:04:44 CET 2016


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Tue Nov 15 22:01:25 2016 +0200| [014d77b76e909588f51ad3a4cd313808feacfae9] | committer: Rémi Denis-Courmont

dbus: use playlist item IDs rather input item IDs

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=014d77b76e909588f51ad3a4cd313808feacfae9
---

 modules/control/dbus/dbus.c           |  6 +--
 modules/control/dbus/dbus_common.h    |  2 +-
 modules/control/dbus/dbus_player.c    | 81 ++++++++++++++---------------------
 modules/control/dbus/dbus_tracklist.c | 64 +++++++++++----------------
 4 files changed, 62 insertions(+), 91 deletions(-)

diff --git a/modules/control/dbus/dbus.c b/modules/control/dbus/dbus.c
index c9a071a..f6068aa 100644
--- a/modules/control/dbus/dbus.c
+++ b/modules/control/dbus/dbus.c
@@ -1146,9 +1146,9 @@ int DemarshalSetPropertyValue( DBusMessage *p_msg, void *p_arg )
         free( psz ); \
     }
 
-int GetInputMeta( input_item_t* p_input,
-                  DBusMessageIter *args )
+int GetInputMeta( playlist_item_t *item, DBusMessageIter *args )
 {
+    input_item_t *p_input = item->p_input;
     DBusMessageIter dict, dict_entry, variant, list;
     /** The duration of the track can be expressed in second, milli-seconds and
         µ-seconds */
@@ -1157,7 +1157,7 @@ int GetInputMeta( input_item_t* p_input,
     dbus_int64_t i_length = i_mtime / 1000;
     char *psz_trackid;
 
-    if( -1 == asprintf( &psz_trackid, MPRIS_TRACKID_FORMAT, p_input->i_id ) )
+    if( -1 == asprintf( &psz_trackid, MPRIS_TRACKID_FORMAT, item->i_id ) )
         return VLC_ENOMEM;
 
     const char* ppsz_meta_items[] =
diff --git a/modules/control/dbus/dbus_common.h b/modules/control/dbus/dbus_common.h
index 1bdce2e..85eb033 100644
--- a/modules/control/dbus/dbus_common.h
+++ b/modules/control/dbus/dbus_common.h
@@ -139,7 +139,7 @@ enum
 };
 
 int DemarshalSetPropertyValue( DBusMessage *p_msg, void *p_arg );
-int GetInputMeta  ( input_item_t* p_input, DBusMessageIter *args );
+int GetInputMeta( playlist_item_t *, DBusMessageIter *args );
 int AddProperty ( intf_thread_t *p_intf,
                   DBusMessageIter *p_container,
                   const char* psz_property_name,
diff --git a/modules/control/dbus/dbus_player.c b/modules/control/dbus/dbus_player.c
index 527a807..5f0f347 100644
--- a/modules/control/dbus/dbus_player.c
+++ b/modules/control/dbus/dbus_player.c
@@ -66,14 +66,17 @@ DBUS_METHOD( SetPosition )
 
     REPLY_INIT;
     dbus_int64_t i_pos;
-    char *psz_trackid, *psz_dbus_trackid;
-    input_item_t *p_item;
+    const char *psz_trackid;
+    playlist_t *playlist = pl_Get(p_this);
+    playlist_item_t *item;
+    input_thread_t *input = NULL;
+    int i_id;
 
     DBusError error;
     dbus_error_init( &error );
 
     dbus_message_get_args( p_from, &error,
-            DBUS_TYPE_OBJECT_PATH, &psz_dbus_trackid,
+            DBUS_TYPE_OBJECT_PATH, &psz_trackid,
             DBUS_TYPE_INT64, &i_pos,
             DBUS_TYPE_INVALID );
 
@@ -85,29 +88,21 @@ DBUS_METHOD( SetPosition )
         return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
     }
 
-    input_thread_t *p_input = pl_CurrentInput( p_this );
+    if( sscanf( psz_trackid, MPRIS_TRACKID_FORMAT, &i_id ) < 1 )
+        return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
 
-    if( p_input )
-    {
-        if( ( p_item = input_GetItem( p_input ) ) )
-        {
-            if( -1 == asprintf( &psz_trackid,
-                                MPRIS_TRACKID_FORMAT,
-                                p_item->i_id ) )
-            {
-                vlc_object_release( p_input );
-                return DBUS_HANDLER_RESULT_NEED_MEMORY;
-            }
-
-            if( !strcmp( psz_trackid, psz_dbus_trackid ) )
-                var_SetInteger( p_input, "time", i_pos );
-            free( psz_trackid );
-        }
+    playlist_Lock( playlist );
+    item = playlist_CurrentPlayingItem( playlist );
+    if( item != NULL && item->i_id == i_id )
+        input = playlist_CurrentInputLocked( playlist );
+    playlist_Unlock( playlist );
 
-        vlc_object_release( p_input );
+    if( input != NULL )
+    {
+        var_SetInteger( input, "time", i_pos );
+        vlc_object_release( input );
     }
 
-
     REPLY_SEND;
 }
 
@@ -513,37 +508,27 @@ DBUS_METHOD( LoopStatusSet )
 static int
 MarshalMetadata( intf_thread_t *p_intf, DBusMessageIter *container )
 {
-    DBusMessageIter a;
-    input_thread_t *p_input = pl_CurrentInput( p_intf );
-    input_item_t   *p_item  = NULL;
+    playlist_t *playlist = pl_Get( p_intf );
+    playlist_item_t *item;
+    int result = VLC_SUCCESS;
 
-    if( p_input != NULL )
-    {
-        p_item = input_GetItem( p_input );
-
-        if( p_item )
-        {
-            int result = GetInputMeta( p_item, container );
-
-            if (result != VLC_SUCCESS)
-            {
-                vlc_object_release( (vlc_object_t*) p_input );
-                return result;
-            }
-        }
+    playlist_Lock( playlist );
+    item = playlist_CurrentPlayingItem( playlist );
 
-        vlc_object_release( (vlc_object_t*) p_input );
-    }
+    if( item != NULL )
+        result = GetInputMeta( item, container );
+    else
+    {   // avoid breaking the type marshalling
+        DBusMessageIter a;
 
-    if (!p_item)
-    {
-        // avoid breaking the type marshalling
-        if( !dbus_message_iter_open_container( container, DBUS_TYPE_ARRAY, "{sv}", &a ) ||
-              !dbus_message_iter_close_container( container, &a ) )
-            return VLC_ENOMEM;
+        if( !dbus_message_iter_open_container( container, DBUS_TYPE_ARRAY,
+                                               "{sv}", &a ) ||
+            !dbus_message_iter_close_container( container, &a ) )
+            result = VLC_ENOMEM;
     }
 
-    return VLC_SUCCESS;
+    playlist_Unlock( playlist );
+    return result;
 }
 
 
diff --git a/modules/control/dbus/dbus_tracklist.c b/modules/control/dbus/dbus_tracklist.c
index 8c71250..19ee8b9 100644
--- a/modules/control/dbus/dbus_tracklist.c
+++ b/modules/control/dbus/dbus_tracklist.c
@@ -44,32 +44,20 @@
  *
  * This function must be called with the playlist locked
  *
- * @param playlist_t*   p_playlist The playlist
- * @param input_item_t* i_input_id An input item ID
+ * @param playlist playlist
+ * @param id playlist item ID
  *
- * @return int The position of the input item or a VLC error constant
+ * @return The position of the input item or -1
  */
-static int getInputPosition( playlist_t* p_playlist, int i_input_id )
+static int getInputPosition( playlist_t* playlist, int id )
 {
-    input_item_t* p_input = NULL;
+    assert( playlist != NULL );
 
-    assert( p_playlist );
-    assert( i_input_id >= 0 );
-
-    playlist_AssertLocked( p_playlist );
-
-    for( int i = 0; i < playlist_CurrentSize( p_playlist ); i++ )
-    {
-        p_input = p_playlist->current.p_elems[i]->p_input;
-
-        if( !p_input )
-            return VLC_EGENERIC;
-
-        if( p_input->i_id == i_input_id )
+    for( int i = 0; i < playlist->current.i_size; i++ )
+        if( playlist->current.p_elems[i]->i_id == id )
             return i;
-    }
 
-    return VLC_ENOITEM;
+    return -1;
 }
 
 DBUS_METHOD( AddTrack )
@@ -150,7 +138,6 @@ DBUS_METHOD( GetTracksMetadata )
     const char *psz_track_id = NULL;
 
     playlist_t   *p_playlist = PL;
-    input_item_t *p_input = NULL;
 
     DBusMessageIter in_args, track_ids, meta;
     dbus_message_iter_init( p_from, &in_args );
@@ -177,13 +164,13 @@ DBUS_METHOD( GetTracksMetadata )
         }
 
         PL_LOCK;
-        for( int i = 0; i < playlist_CurrentSize( p_playlist ); i++ )
+        for( int i = 0; i < p_playlist->current.i_size; i++ )
         {
-            p_input = p_playlist->current.p_elems[i]->p_input;
+            playlist_item_t *item = p_playlist->current.p_elems[i];
 
-            if( i_track_id == p_input->i_id )
+            if( item->i_id == i_track_id )
             {
-                GetInputMeta( p_input, &meta );
+                GetInputMeta( item, &meta );
                 break;
             }
         }
@@ -227,13 +214,14 @@ DBUS_METHOD( GoTo )
 
     PL_LOCK;
 
-    for( int i = 0; i < playlist_CurrentSize( p_playlist ); i++ )
+    for( int i = 0; i < p_playlist->current.i_size; i++ )
     {
-        if( i_track_id == p_playlist->current.p_elems[i]->p_input->i_id )
+        playlist_item_t *item = p_playlist->current.p_elems[i];
+
+        if( item->i_id == i_track_id )
         {
             playlist_Control( p_playlist, PLAYLIST_VIEWPLAY, true,
-                              p_playlist->current.p_elems[i]->p_parent,
-                              p_playlist->current.p_elems[i] );
+                              item->p_parent, item );
             break;
         }
     }
@@ -249,10 +237,9 @@ DBUS_METHOD( RemoveTrack )
     DBusError error;
     dbus_error_init( &error );
 
-    int   i_id = -1, i;
+    int   i_id = -1;
     char *psz_id = NULL;
     playlist_t *p_playlist = PL;
-    input_item_t *p_input  = NULL;
 
     dbus_message_get_args( p_from, &error,
             DBUS_TYPE_OBJECT_PATH, &psz_id,
@@ -274,13 +261,13 @@ DBUS_METHOD( RemoveTrack )
 
     PL_LOCK;
 
-    for( i = 0; i < playlist_CurrentSize( p_playlist ); i++ )
+    for( int i = 0; i < p_playlist->current.i_size; i++ )
     {
-        p_input = p_playlist->current.p_elems[i]->p_input;
+        playlist_item_t *item = p_playlist->current.p_elems[i];
 
-        if( i_id == p_input->i_id )
+        if( item->i_id == i_id )
         {
-            playlist_DeleteFromInput( p_playlist, p_input, true );
+            playlist_NodeDelete( p_playlist, item, true, false );
             break;
         }
     }
@@ -295,20 +282,19 @@ MarshalTracks( intf_thread_t *p_intf, DBusMessageIter *container )
     DBusMessageIter tracks;
     char         *psz_track_id = NULL;
     playlist_t   *p_playlist   = p_intf->p_sys->p_playlist;
-    input_item_t *p_input      = NULL;
 
     dbus_message_iter_open_container( container, DBUS_TYPE_ARRAY, "o",
                                       &tracks );
 
     PL_LOCK;
 
-    for( int i = 0; i < playlist_CurrentSize( p_playlist ); i++ )
+    for( int i = 0; i < p_playlist->current.i_size; i++ )
     {
-        p_input = p_playlist->current.p_elems[i]->p_input;
+        playlist_item_t *item = p_playlist->current.p_elems[i];
 
         if( ( -1 == asprintf( &psz_track_id,
                               MPRIS_TRACKID_FORMAT,
-                              p_input->i_id ) ) ||
+                              item->i_id ) ) ||
             !dbus_message_iter_append_basic( &tracks,
                                              DBUS_TYPE_OBJECT_PATH,
                                              &psz_track_id ) )



More information about the vlc-commits mailing list