[Rhythmbox-devel] problem with parsing playlists



Hi.

In trying to debug why playlists were not being populated from my PMP on
RB 0.12.6, I think I discovered why.

It seems that for each entry in a playlist (for example):

#UTF8: /Music/Wes Burden/Brave New World/Brave New World.mp3
/Music/Wes Burden/Brave New World/Brave New World.mp3
#UTF8: /Music/Kokoon/Save Me.mp3
/Music/Kokoon/Save Me.mp3
#UTF8: /Music/Wes Burden/Brave New World/Mirror.mp3
/Music/Wes Burden/Brave New World/Mirror.mp3

handle_playlist_entry_cb() is called with two parameters, the playlist
to add to and the path from the playlist file ("/Music/Wes Burden/Brave
New World/Brave New World.mp3") in the parameter "uri".  Of course, this
is not really a URI, it's the path portion from a URI.

handle_playlist_entry_cb() goes on to believe this is a URI and calls
rb_generic_player_source_uri_from_playlist_uri() with it.
rb_generic_player_source_uri_from_playlist_uri() then hands this "URI"
off to RB_GENERIC_PLAYER_SOURCE_GET_CLASS
(source)->impl_uri_from_playlist_uri(), which is actually
default_uri_from_playlist_uri() which also handles this "uri" argument
as a URI and tries to build a full URI with it using:

full_uri = rb_uri_append_uri (mount_uri, uri);

This of course fails because rb_uri_append_uri(), which is given two
arguments: a uri and a path, as such:

rb_uri_append_uri (uri=0xa9bfd78 "file:///media/ARCHOS5", fragment=0xa613f28 "/Music/Wes Burden/Brave New World/Mirror.mp3")

then tries to create a GFile * from the non-uri path argument (fragment)
with:

g_file_new_for_uri (fragment);

But of course, fragment is not a URI, but a path and
g_file_new_for_uri() fails, returning NULL.

Am I now barking up the right tree or am I off-base?

FWIW, the full stack trace leading to default_uri_from_playlist_uri()
is:

#0  default_uri_from_playlist_uri (source=0xa9e7178, 
    uri=0xb954370 "/Music/Wes Burden/Brave New World/Brave New World.mp3")
    at rb-generic-player-source.c:663
#1  0x0905921b in rb_generic_player_source_uri_from_playlist_uri (
    source=0xa9e7178, 
    uri=0xb954370 "/Music/Wes Burden/Brave New World/Brave New World.mp3")
    at rb-generic-player-source.c:696
#2  0x0905cd8f in handle_playlist_entry_cb (playlist=0xbd4d2a0, 
    uri=0xb954370 "/Music/Wes Burden/Brave New World/Brave New World.mp3", 
    metadata=0xb370f260, source=0xab74cb8)
    at rb-generic-player-playlist-source.c:240
#3  0x00a14b2f in ?? () from /usr/lib/libtotem-plparser.so.12
#4  0x0050a072 in IA__g_closure_invoke (closure=0xbc69538, return_value=0x0, 
    n_param_values=3, param_values=0xbd869e0, invocation_hint=0xbfa0b940)
    at /build/buildd/glib2.0-2.22.3/gobject/gclosure.c:767
#5  0x0051f7a8 in signal_emit_unlocked_R (node=<value optimized out>, 
    detail=<value optimized out>, instance=0xbd4d2a0, emission_return=0x0, 
    instance_and_params=0xbd869e0)
    at /build/buildd/glib2.0-2.22.3/gobject/gsignal.c:3247
#6  0x00520b2d in IA__g_signal_emit_valist (instance=0xbd4d2a0, signal_id=537, 
    detail=0, var_args=0xbfa0bb04 "\001")
    at /build/buildd/glib2.0-2.22.3/gobject/gsignal.c:2980
#7  0x00520fb6 in IA__g_signal_emit (instance=0xbd4d2a0, signal_id=537, 
    detail=0) at /build/buildd/glib2.0-2.22.3/gobject/gsignal.c:3037
#8  0x00a1009d in ?? () from /usr/lib/libtotem-plparser.so.12
#9  0x00a114d7 in ?? () from /usr/lib/libtotem-plparser.so.12
#10 0x00a121f7 in ?? () from /usr/lib/libtotem-plparser.so.12
#11 0x00a13d33 in ?? () from /usr/lib/libtotem-plparser.so.12
#12 0x00a1206b in ?? () from /usr/lib/libtotem-plparser.so.12
#13 0x00a126c9 in totem_pl_parser_parse_with_base ()
   from /usr/lib/libtotem-plparser.so.12
#14 0x0905cb11 in load_playlist (type=178128376, n_construct_properties=9, 
    construct_properties=0xbd795e0) at rb-generic-player-playlist-source.c:294
#15 impl_constructor (type=178128376, n_construct_properties=9, 
    construct_properties=0xbd795e0) at rb-generic-player-playlist-source.c:393
#16 0x00510b62 in IA__g_object_newv (object_type=178128376, n_parameters=7, 
    parameters=0xaa01798)
    at /build/buildd/glib2.0-2.22.3/gobject/gobject.c:1252
#17 0x005115f1 in IA__g_object_new_valist (object_type=178128376, 
    first_property_name=0x905e06e "shell", var_args=0xbfa0bfbc "")
    at /build/buildd/glib2.0-2.22.3/gobject/gobject.c:1364
#18 0x0051170e in IA__g_object_new (object_type=178128376, 
    first_property_name=0x905e06e "shell")
    at /build/buildd/glib2.0-2.22.3/gobject/gobject.c:1086
#19 0x0905c00c in rb_generic_player_playlist_source_new (shell=0xa167010, 
    source=0xa9e7178, 
    playlist_file=0xb5ca760 "/media/ARCHOS5/Playlists/sample playlist.m3u", 
    device_root=0xb564ef8 "file:///media/ARCHOS5", entry_type=0xb483b78)
    at rb-generic-player-playlist-source.c:349
#20 0x0905a033 in load_playlist_file (source=0xa9e7178, 
    playlist_path=0xb5ca760 "/media/ARCHOS5/Playlists/sample playlist.m3u", 
    rel_path=0xbbc8050 "sample playlist.m3u") at rb-generic-player-source.c:725
#21 0x0905a74d in visit_playlist_dirs (file=0xbce8a20, dir=0, source=0xa9e7178)
    at rb-generic-player-source.c:782
#22 0x001d6fa0 in _uri_handle_recurse (dir=<value optimized out>, 
    cancel=<value optimized out>, handled=0xb378d9b0, 
    func=0x905a640 <visit_playlist_dirs>, user_data=0xa9e7178)
    at rb-file-helpers.c:667
#23 0x001d70de in rb_uri_handle_recursively (
    text_uri=0xb8bd3d8 "file:///media/ARCHOS5/Playlists", cancel=0x0, 
    func=0x905a640 <visit_playlist_dirs>, user_data=0xa9e7178)
    at rb-file-helpers.c:696
#24 0x0905a63a in default_load_playlists (source=0xa9e7178)
    at rb-generic-player-source.c:832
#25 0x0905b852 in import_complete_cb (job=0xb9a98c0, total=1674, 
    source=0xa9e7178) at rb-generic-player-source.c:426
#26 0x00517748 in IA__g_cclosure_marshal_VOID__INT (closure=0xbafe980, 
    return_value=0x0, n_param_values=2, param_values=0xb4f2e00, 
    invocation_hint=0xbfa0c350, marshal_data=0x905b7b0)
    at /build/buildd/glib2.0-2.22.3/gobject/gmarshal.c:216
#27 0x0050a072 in IA__g_closure_invoke (closure=0xbafe980, return_value=0x0, 
    n_param_values=2, param_values=0xb4f2e00, invocation_hint=0xbfa0c350)
    at /build/buildd/glib2.0-2.22.3/gobject/gclosure.c:767
#28 0x0051f7a8 in signal_emit_unlocked_R (node=<value optimized out>, 
    detail=<value optimized out>, instance=0xb9a98c0, emission_return=0x0, 
    instance_and_params=0xb4f2e00)
    at /build/buildd/glib2.0-2.22.3/gobject/gsignal.c:3247
#29 0x00520b2d in IA__g_signal_emit_valist (instance=0xb9a98c0, signal_id=536, 
    detail=0, var_args=0xbfa0c510 "\371\070!")
    at /build/buildd/glib2.0-2.22.3/gobject/gsignal.c:2980
#30 0x00520fb6 in IA__g_signal_emit (instance=0xb9a98c0, signal_id=536, 
    detail=0) at /build/buildd/glib2.0-2.22.3/gobject/gsignal.c:3037
#31 0x001b64f1 in emit_status_changed (job=0xb9a98c0)
    at rhythmdb-import-job.c:157
#32 0x00cb4101 in g_idle_dispatch (source=0xb773958, callback=0xa9e7178, 
    user_data=0xb9a98c0) at /build/buildd/glib2.0-2.22.3/glib/gmain.c:4065
#33 0x00cb5e88 in g_main_dispatch (context=0xa11fca8)
    at /build/buildd/glib2.0-2.22.3/glib/gmain.c:1960
#34 IA__g_main_context_dispatch (context=0xa11fca8)
    at /build/buildd/glib2.0-2.22.3/glib/gmain.c:2513
#35 0x00cb9730 in g_main_context_iterate (context=0xa11fca8, 
    block=<value optimized out>, dispatch=1, self=0x9fe1028)
    at /build/buildd/glib2.0-2.22.3/glib/gmain.c:2591
#36 0x00cb9b9f in IA__g_main_loop_run (loop=0xa3ee0b8)
    at /build/buildd/glib2.0-2.22.3/glib/gmain.c:2799
#37 0x01134419 in IA__gtk_main ()
    at /build/buildd/gtk+2.0-2.18.3/gtk/gtkmain.c:1218
#38 0x0804b46e in main (argc=1, argv=0xbfa0c834) at main.c:336


b.

Attachment: signature.asc
Description: This is a digitally signed message part



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]