/*****************************************************************************
* tree.c: libvlc tags tree functions
- * Create a tree of the 'tags' of a media_list's media_descriptors.
+ * Create a tree of the 'tags' of a media_list's medias.
*****************************************************************************
* Copyright (C) 2007 the VideoLAN team
* $Id$
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
-#include "libvlc_internal.h"
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+
#include <vlc/libvlc.h>
-#include "vlc_arrays.h"
+#include <vlc/libvlc_media.h>
+#include <vlc/libvlc_media_list.h>
+#include <vlc/libvlc_media_library.h>
+#include <vlc/libvlc_events.h>
+
+#include <vlc_common.h>
+
+#include "libvlc_internal.h"
+
+struct libvlc_media_library_t
+{
+ libvlc_event_manager_t * p_event_manager;
+ libvlc_instance_t * p_libvlc_instance;
+ int i_refcount;
+ libvlc_media_list_t * p_mlist;
+};
+
/*
* Private functions
* new (Public)
**************************************************************************/
libvlc_media_library_t *
-libvlc_media_library_new( libvlc_instance_t * p_inst,
- libvlc_exception_t * p_e )
+libvlc_media_library_new( libvlc_instance_t * p_inst )
{
- (void)p_e;
libvlc_media_library_t * p_mlib;
- p_mlib = malloc(sizeof(libvlc_media_library_t));
+ p_mlib = malloc(sizeof(libvlc_media_library_t));
- if( !p_mlib )
- return NULL;
+ if( !p_mlib )
+ return NULL;
- p_mlib->p_libvlc_instance = p_inst;
+ p_mlib->p_libvlc_instance = p_inst;
p_mlib->i_refcount = 1;
p_mlib->p_mlist = NULL;
- p_mlib->p_event_manager = libvlc_event_manager_new( p_mlib, p_inst, p_e );
+ p_mlib->p_event_manager = libvlc_event_manager_new( p_mlib, p_inst );
+ if( unlikely(p_mlib->p_event_manager == NULL) )
+ {
+ free(p_mlib);
+ return NULL;
+ }
- return p_mlib;
+ return p_mlib;
}
/**************************************************************************
if( p_mlib->i_refcount > 0 )
return;
- free( p_mlib );
+ libvlc_event_manager_release( p_mlib->p_event_manager );
+ free( p_mlib );
}
/**************************************************************************
**************************************************************************/
void libvlc_media_library_retain( libvlc_media_library_t * p_mlib )
{
- p_mlib->i_refcount++;
+ p_mlib->i_refcount++;
}
/**************************************************************************
*
* It doesn't yet load the playlists
**************************************************************************/
-void
-libvlc_media_library_load( libvlc_media_library_t * p_mlib,
- libvlc_exception_t * p_e )
+int libvlc_media_library_load( libvlc_media_library_t * p_mlib )
{
- const char *psz_homedir = p_mlib->p_libvlc_instance->p_libvlc_int->psz_homedir;
+ char *psz_datadir = config_GetUserDir( VLC_DATA_DIR );
char * psz_uri;
- if( !psz_homedir )
- {
- libvlc_exception_raise( p_e, "Can't get HOME DIR" );
- return;
- }
+ if( psz_datadir == NULL
+ || asprintf( &psz_uri, "file/xspf-open://%s" DIR_SEP "ml.xsp",
+ psz_datadir ) == -1 )
+ psz_uri = NULL;
+ free( psz_datadir );
- if( asprintf( &psz_uri, "file/xspf-open://%s" DIR_SEP CONFIG_DIR DIR_SEP
- "ml.xsp", psz_homedir ) == -1 )
+ if( psz_uri == NULL )
{
- libvlc_exception_raise( p_e, "Can't get create the path" );
- return;
+ libvlc_printerr( "Not enough memory" );
+ return -1;
}
+
if( p_mlib->p_mlist )
libvlc_media_list_release( p_mlib->p_mlist );
- p_mlib->p_mlist = libvlc_media_list_new(
- p_mlib->p_libvlc_instance,
- p_e );
+ p_mlib->p_mlist = libvlc_media_list_new( p_mlib->p_libvlc_instance );
- libvlc_media_list_add_file_content( p_mlib->p_mlist, psz_uri, p_e );
+ int ret = libvlc_media_list_add_file_content( p_mlib->p_mlist, psz_uri );
free( psz_uri );
- return;
-}
-
-/**************************************************************************
- * save (Public)
- **************************************************************************/
-void
-libvlc_media_library_save( libvlc_media_library_t * p_mlib,
- libvlc_exception_t * p_e )
-{
- libvlc_exception_raise( p_e, "Not supported" );
-}
-
-/**************************************************************************
- * media_list (Public)
- **************************************************************************/
-libvlc_media_list_t *
-libvlc_media_library_media_list( libvlc_media_library_t * p_mlib,
- libvlc_exception_t * p_e )
-{
- (void)p_e;
- if( p_mlib->p_mlist )
- libvlc_media_list_retain( p_mlib->p_mlist );
- return p_mlib->p_mlist;
+ return ret;
}
/**************************************************************************
* media_list (Public)
**************************************************************************/
libvlc_media_list_t *
-libvlc_media_library_media_list( libvlc_media_library_t * p_mlib,
- libvlc_exception_t * p_e )
+libvlc_media_library_media_list( libvlc_media_library_t * p_mlib )
{
- (void)p_e;
if( p_mlib->p_mlist )
libvlc_media_list_retain( p_mlib->p_mlist );
return p_mlib->p_mlist;
}
-