]> git.sesse.net Git - vlc/commitdiff
SD: add a function to query a service discovery for more items.
authorRémi Duraffort <ivoire@videolan.org>
Mon, 18 Oct 2010 04:56:57 +0000 (06:56 +0200)
committerRémi Duraffort <ivoire@videolan.org>
Tue, 19 Oct 2010 19:13:47 +0000 (21:13 +0200)
include/vlc_playlist.h
include/vlc_services_discovery.h
src/libvlccore.sym
src/playlist/services_discovery.c

index 732d9439bf34ab4edd3527ee788d3d83bfe3af2f..100288612f51e62ed8e4dde185271a62b800cfb9 100644 (file)
@@ -323,6 +323,8 @@ VLC_EXPORT( int, playlist_ServicesDiscoveryAdd, (playlist_t *, const char *));
 VLC_EXPORT( int, playlist_ServicesDiscoveryRemove, (playlist_t *, const char *));
 /** Check whether a given SD is loaded */
 VLC_EXPORT( bool, playlist_IsServicesDiscoveryLoaded, ( playlist_t *,const char *));
+/** Query a services discovery */
+VLC_EXPORT( int, playlist_QueryServicesDiscovery, ( playlist_t *, const char *, const char * ) );
 
 
 
index 58ff2a77ce8a52bac304f7279c013ef8667ccb98..8a00dcbc18fbfe32339662407ec7e0b0d65f35ec 100644 (file)
@@ -51,6 +51,8 @@ struct services_discovery_t
     char *psz_name;
     config_chain_t *p_cfg;
 
+    int ( *pf_search ) ( services_discovery_t *, const char * );
+
     services_discovery_sys_t *p_sys;
 };
 
@@ -66,6 +68,20 @@ enum services_discovery_category_e
  * Service Discovery
  ***********************************************************************/
 
+/**
+ * Ask for a research in the SD
+ * @param p_sd: the Service Discovery
+ * @param psz_query: the query
+ * @return VLC_SUCCESS in case of success, the error code overwise
+ */
+static inline int vlc_sd_search( services_discovery_t *p_sd, const char *psz_query )
+{
+    if( p_sd->pf_search )
+        return p_sd->pf_search( p_sd, psz_query );
+    else
+        return VLC_EGENERIC;
+}
+
 /* Get the services discovery modules names to use in Create(), in a null
  * terminated string array. Array and string must be freed after use. */
 VLC_EXPORT( char **, vlc_sd_GetNames, ( vlc_object_t *, char ***, int ** ) LIBVLC_USED );
index 5632223aeb4c122f6c9c1b7d327f8e97df57f369..b5c05f80bfa99eb3245c05e13d25b3c6a84b1bd9 100644 (file)
@@ -362,6 +362,7 @@ playlist_NodeDelete
 playlist_NodeInsert
 playlist_NodeRemoveItem
 playlist_PreparseEnqueue
+playlist_QueryServicesDiscovery
 playlist_RecursiveNodeSort
 playlist_ServicesDiscoveryAdd
 playlist_ServicesDiscoveryRemove
index 2f384e679add18ac2eeae47aa8a795025e636b62..ca5ec49d503d28684ed3ea787b88eecfa9c71d40 100644 (file)
@@ -440,6 +440,29 @@ bool playlist_IsServicesDiscoveryLoaded( playlist_t * p_playlist,
     return found;
 }
 
+int playlist_QueryServicesDiscovery( playlist_t *p_playlist, const char *psz_name, const char *psz_query )
+{
+    playlist_private_t *priv = pl_priv( p_playlist );
+    int i_ret = VLC_EGENERIC;
+    int i;
+
+    PL_LOCK;
+    for( i = 0; i < priv->i_sds; i++ )
+    {
+        vlc_sd_internal_t *sd = priv->pp_sds[i];
+        if( sd->psz_name && !strcmp( psz_name, sd->psz_name ) )
+        {
+            i_ret = vlc_sd_search( sd->p_sd, psz_query );
+            break;
+        }
+    }
+
+    assert( i != priv->i_sds );
+    PL_UNLOCK;
+
+    return i_ret;
+}
+
 void playlist_ServicesDiscoveryKillAll( playlist_t *p_playlist )
 {
     playlist_private_t *priv = pl_priv( p_playlist );