Package: rhythmbox Version: 0.12.6-2 Severity: normal Hi.
I cannot seem to detect a remote upnp server (mediatomb). By investigating the cause, I found out that the code of the coherence plugin seems different from the one shipped into upstream rhythmbox. By changing it in order to match the one available from http://coherence.beebits.net/wiki/RhythmBox#PluginInstall it seems to work much better. I suspect that the python-coherence and/or python-louie behaviour has changed, and one now needs to import coherence.extern.louie instead of louie python module directly. The following patch illustrates the diffs between usptream code and the one in the coherence SVN. Hope this helps. Best regards, -- System Information: Debian Release: squeeze/sid APT prefers testing APT policy: (500, 'testing'), (500, 'stable') Architecture: i386 (i686) Kernel: Linux 2.6.30-2-686 (SMP w/1 CPU core) Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages rhythmbox depends on: ii dbus 1.2.16-2 simple interprocess messaging syst ii gconf2 2.28.0-1 GNOME configuration database syste ii gnome-icon-theme 2.28.0-1 GNOME Desktop icon theme ii gstreamer0.10-alsa [gst 0.10.25-7 GStreamer plugin for ALSA ii gstreamer0.10-esd [gstr 0.10.17-1 GStreamer plugin for ESD ii gstreamer0.10-plugins-b 0.10.17-1 GStreamer plugins from the "bad" s ii gstreamer0.10-plugins-b 0.10.25-7 GStreamer plugins from the "base" ii gstreamer0.10-plugins-g 0.10.17-1 GStreamer plugins from the "good" ii gstreamer0.10-pulseaudi 0.10.17-1 GStreamer plugin for PulseAudio ii gstreamer0.10-x 0.10.25-7 GStreamer plugins for X11 and Pang ii libatk1.0-0 1.28.0-1 The ATK accessibility toolkit ii libavahi-client3 0.6.25-2 Avahi client library ii libavahi-common3 0.6.25-2 Avahi common library ii libavahi-glib1 0.6.25-2 Avahi glib integration library ii libbrasero-media0 2.28.3-1 CD/DVD burning library for GNOME - ii libc6 2.10.2-2 GNU C Library: Shared libraries ii libcairo2 1.8.8-2 The Cairo 2D vector graphics libra ii libdbus-1-3 1.2.16-2 simple interprocess messaging syst ii libdbus-glib-1-2 0.82-2 simple interprocess messaging syst ii libfontconfig1 2.8.0-2 generic font configuration library ii libfreetype6 2.3.11-1 FreeType 2 font engine, shared lib ii libgconf2-4 2.28.0-1 GNOME configuration database syste ii libglade2-0 1:2.6.4-1 library to load .glade files at ru ii libglib2.0-0 2.22.3-1 The GLib library of C routines ii libgnome-keyring0 2.28.2-1 GNOME keyring services library ii libgnome-media0 2.28.1-1 runtime libraries for the GNOME me ii libgpod4 0.7.2-2 library to read and write songs an ii libgstreamer-plugins-ba 0.10.25-7 GStreamer libraries from the "base ii libgstreamer0.10-0 0.10.25-4+b1 Core GStreamer libraries and eleme ii libgtk2.0-0 2.18.3-1 The GTK+ graphical user interface ii libgudev-1.0-0 149-2 GObject-based wrapper library for ii libice6 2:1.0.6-1 X11 Inter-Client Exchange library ii liblircclient0 0.8.3-5 infra-red remote control support - ii libmtp8 0.3.7-7 Media Transfer Protocol (MTP) libr ii libmusicbrainz4c2a 2.1.5-4 Second generation incarnation of t ii libnotify1 [libnotify1- 0.4.5-1 sends desktop notifications to a n ii libpango1.0-0 1.26.2-1 Layout and rendering of internatio ii libsm6 2:1.1.1-1 X11 Session Management library ii libsoup-gnome2.4-1 2.28.2-1 an HTTP library implementation in ii libsoup2.4-1 2.28.2-1 an HTTP library implementation in ii libtotem-plparser12 2.28.2-1 Totem Playlist Parser library - ru ii libusb-0.1-4 2:0.1.12-13 userspace USB programming library ii libxml2 2.7.6.dfsg-1 GNOME XML library ii media-player-info 4-1 Media player identification files ii python 2.5.4-5 An interactive high-level object-o ii python-gnome2 2.28.0-1 Python bindings for the GNOME desk ii python-gst0.10 0.10.17-1 generic media-playing framework (P ii python-gtk2 2.16.0-1 Python bindings for the GTK+ widge ii python-support 1.0.6 automated rebuilding support for P ii python2.5 2.5.4-3 An interactive high-level object-o ii zlib1g 1:1.2.3.4.dfsg-3 compression library - runtime Versions of packages rhythmbox recommends: ii avahi-daemon 0.6.25-2 Avahi mDNS/DNS-SD daemon ii gstreamer0.10-plugins-ug 0.10.13-2 GStreamer plugins from the "ugly" ii gvfs-backends 1.4.3-1 userspace virtual filesystem - bac ii hal 0.5.14-1 Hardware Abstraction Layer ii notification-daemon 0.4.0-2 a daemon that displays passive pop ii yelp 2.28.0+webkit-2 Help browser for GNOME Versions of packages rhythmbox suggests: ii gnome-codec-install 0.4.2 GStreamer codec installer ii gnome-control-center 1:2.28.1-1 utilities to configure the GNOME d ii gstreamer0.10-plugins-bad 0.10.17-1 GStreamer plugins from the "bad" s ii python-coherence 0.6.4-4 Python UPnP framework -- no debconf information
diff -Naur orig/__init__.py ./__init__.py --- orig/__init__.py 2010-01-10 22:02:08.000000000 +0100 +++ ./__init__.py 2010-01-01 18:42:08.000000000 +0100 @@ -12,12 +12,12 @@ import gconf -import louie +import coherence.extern.louie as louie from coherence import log # for the icon -import os.path, urllib, gnomevfs, gtk.gdk +import os.path, urllib, gio, gtk.gdk # the gconf configuration gconf_keys = { @@ -78,8 +78,10 @@ the_icon = None face_path = os.path.join(os.path.expanduser('~'), ".face") if os.path.exists(face_path): - url = "file://" + urllib.pathname2url(face_path) - mimetype = gnomevfs.get_mime_type(url) + file = gio.File(file=face_path); + url = file.get_uri(); + info = file.query_info("standard::fast-content-type"); + mimetype = info.get_attribute_as_string("standard::fast-content-type"); pixbuf = gtk.gdk.pixbuf_new_from_file(face_path) width = "%s" % pixbuf.get_width() height = "%s" % pixbuf.get_height() diff -Naur orig/MediaPlayer.py ./MediaPlayer.py --- orig/MediaPlayer.py 2010-01-10 22:02:08.000000000 +0100 +++ ./MediaPlayer.py 2009-11-01 12:41:42.000000000 +0100 @@ -13,7 +13,7 @@ from coherence.upnp.core.soap_service import errorCode from coherence.upnp.core import DIDLLite -import louie +import coherence.extern.louie as louie from coherence.extern.simple_plugin import Plugin @@ -421,9 +421,21 @@ self.current_connection_id = None self.server.connection_manager_server.set_variable(0, 'SinkProtocolInfo', ['rhythmbox:%s:audio/mpeg:*' % self.server.coherence.hostname, - 'rhythmbox:%s:application/ogg:*' % self.server.coherence.hostname, 'http-get:*:audio/mpeg:*', - 'http-get:*:application/ogg:*'], + 'rhythmbox:%s:application/ogg:*' % self.server.coherence.hostname, + 'http-get:*:application/ogg:*', + 'rhythmbox:%s:audio/ogg:*' % self.server.coherence.hostname, + 'http-get:*:audio/ogg:*', + 'rhythmbox:%s:audio/x-flac:*' % self.server.coherence.hostname, + 'http-get:*:audio/x-flac:*', + 'rhythmbox:%s:audio/flac:*' % self.server.coherence.hostname, + 'http-get:*:audio/flac:*', + 'rhythmbox:%s:audio/x-wav:*' % self.server.coherence.hostname, + 'http-get:*:audio/x-wav:*', + 'rhythmbox:%s:audio/L16;rate=44100;channels=2:*' % self.server.coherence.hostname, + 'http-get:*:audio/L16;rate=44100;channels=2:*', + 'rhythmbox:%s:audio/x-m4a:*' % self.server.coherence.hostname, + 'http-get:*:audio/x-m4a:*'], default=True) self.server.av_transport_server.set_variable(0, 'TransportState', 'NO_MEDIA_PRESENT', default=True) self.server.av_transport_server.set_variable(0, 'TransportStatus', 'OK', default=True) diff -Naur orig/MediaStore.py ./MediaStore.py --- orig/MediaStore.py 2010-01-10 22:02:08.000000000 +0100 +++ ./MediaStore.py 2009-06-01 21:20:56.000000000 +0200 @@ -6,7 +6,7 @@ import os.path import rhythmdb -import louie +import coherence.extern.louie as louie import urllib from coherence import __version_info__ diff -Naur orig/UpnpSource.py ./UpnpSource.py --- orig/UpnpSource.py 2010-01-10 22:02:08.000000000 +0100 +++ ./UpnpSource.py 2009-10-29 22:29:47.000000000 +0100 @@ -132,9 +132,9 @@ if duration is not None: h,m,s = duration.split(':') - seconds = int(h)*3600 + int(m)*60 + int(s) - self.info("%r %r:%r:%r %r", duration, h, m , s, seconds) - self.__db.set(entry, rhythmdb.PROP_DURATION, seconds) + seconds = int(h)*3600 + int(m)*60 + float(s) + self.info("%r %r:%r:%r %r" % (duration,h,m,s,seconds)) + self.__db.set(entry, rhythmdb.PROP_DURATION, int(seconds)) if size is not None: self.__db.set(entry, rhythmdb.PROP_FILE_SIZE,int(size))