Browse Source

DBus control: do not query index of item if known

The track index is sometimes known when serialising a track's metadata.
This moves the index query outside the metadata serialisation function
when necessary.
pull/141/head
Jorge Bellon-Castro 4 years ago
committed by Felix Paul Kühne
parent
commit
b2a5d6cc75
  1. 5
      modules/control/dbus/dbus.c
  2. 2
      modules/control/dbus/dbus_common.h
  3. 14
      modules/control/dbus/dbus_player.c
  4. 13
      modules/control/dbus/dbus_tracklist.c

5
modules/control/dbus/dbus.c

@ -1311,7 +1311,7 @@ int DemarshalSetPropertyValue( DBusMessage *p_msg, void *p_arg )
free( psz ); \ free( psz ); \
} }
int GetInputMeta(vlc_playlist_t *playlist, vlc_playlist_item_t *item, DBusMessageIter *args) int GetInputMeta(size_t index, vlc_playlist_item_t *item, DBusMessageIter *args)
{ {
input_item_t *p_input = vlc_playlist_item_GetMedia(item); input_item_t *p_input = vlc_playlist_item_GetMedia(item);
DBusMessageIter dict, dict_entry, variant, list; DBusMessageIter dict, dict_entry, variant, list;
@ -1322,8 +1322,7 @@ int GetInputMeta(vlc_playlist_t *playlist, vlc_playlist_item_t *item, DBusMessag
dbus_int64_t i_length = i_mtime / 1000; dbus_int64_t i_length = i_mtime / 1000;
char *psz_trackid; char *psz_trackid;
if (asprintf(&psz_trackid, MPRIS_TRACKID_FORMAT, if (asprintf(&psz_trackid, MPRIS_TRACKID_FORMAT, index) == -1)
vlc_playlist_IndexOf(playlist, item)) == -1)
return VLC_ENOMEM; return VLC_ENOMEM;
const char* ppsz_meta_items[] = const char* ppsz_meta_items[] =

2
modules/control/dbus/dbus_common.h

@ -144,7 +144,7 @@ enum
}; };
int DemarshalSetPropertyValue( DBusMessage *p_msg, void *p_arg ); int DemarshalSetPropertyValue( DBusMessage *p_msg, void *p_arg );
int GetInputMeta( vlc_playlist_t *, vlc_playlist_item_t *, int GetInputMeta( size_t index, vlc_playlist_item_t *,
DBusMessageIter *args ); DBusMessageIter *args );
int AddProperty ( intf_thread_t *p_intf, int AddProperty ( intf_thread_t *p_intf,
DBusMessageIter *p_container, DBusMessageIter *p_container,

14
modules/control/dbus/dbus_player.c

@ -525,13 +525,20 @@ static int
MarshalMetadata( intf_thread_t *p_intf, DBusMessageIter *container ) MarshalMetadata( intf_thread_t *p_intf, DBusMessageIter *container )
{ {
int result = VLC_SUCCESS; int result = VLC_SUCCESS;
vlc_playlist_item_t *plitem = NULL;
vlc_playlist_t *playlist = p_intf->p_sys->playlist; vlc_playlist_t *playlist = p_intf->p_sys->playlist;
vlc_playlist_Lock(playlist); vlc_playlist_Lock(playlist);
ssize_t id = vlc_playlist_GetCurrentIndex(playlist); ssize_t id = vlc_playlist_GetCurrentIndex(playlist);
if(id != -1) if (id != -1) {
plitem = vlc_playlist_Get(playlist, id);
vlc_playlist_item_Hold(plitem);
}
vlc_playlist_Unlock(playlist);
if(plitem)
{ {
vlc_playlist_item_t *plitem = vlc_playlist_Get(playlist, id); result = GetInputMeta(id, plitem, container);
result = GetInputMeta(playlist, plitem, container); vlc_playlist_item_Release(plitem);
} }
else else
{ // avoid breaking the type marshalling { // avoid breaking the type marshalling
@ -541,7 +548,6 @@ MarshalMetadata( intf_thread_t *p_intf, DBusMessageIter *container )
!dbus_message_iter_close_container( container, &a ) ) !dbus_message_iter_close_container( container, &a ) )
result = VLC_ENOMEM; result = VLC_ENOMEM;
} }
vlc_playlist_Unlock(playlist);
return result; return result;
} }

13
modules/control/dbus/dbus_tracklist.c

@ -132,13 +132,20 @@ DBUS_METHOD( GetTracksMetadata )
vlc_playlist_Lock(playlist); vlc_playlist_Lock(playlist);
bool id_valid = i_track_id < vlc_playlist_Count(playlist); bool id_valid = i_track_id < vlc_playlist_Count(playlist);
vlc_playlist_item_t *item = NULL;
if (id_valid) if (id_valid)
{ {
vlc_playlist_item_t *item = vlc_playlist_Get(playlist, i_track_id); item = vlc_playlist_Get(playlist, i_track_id);
GetInputMeta(playlist, item, &meta); vlc_playlist_item_Hold(item);
} }
vlc_playlist_Unlock(playlist); vlc_playlist_Unlock(playlist);
if (!id_valid)
if (id_valid)
{
GetInputMeta(i_track_id, item, &meta);
vlc_playlist_item_Release(item);
}
else
{ {
invalid_track_id: invalid_track_id:
msg_Err( (vlc_object_t*) p_this, "Invalid track id: %s", msg_Err( (vlc_object_t*) p_this, "Invalid track id: %s",

Loading…
Cancel
Save