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