[exaile/f16] Update to 0.3.2.2 Drop hal. Apply patch to support udisk from upstream bzr's udisk branch
Deji Akingunola
deji at fedoraproject.org
Fri Sep 2 03:35:52 UTC 2011
commit 386f7ce6e511771393312cf04dc3142d2b9f5f3d
Author: Deji Akingunola <dakingun at mail.com>
Date: Thu Sep 1 23:38:14 2011 -0400
Update to 0.3.2.2
Drop hal. Apply patch to support udisk from upstream bzr's udisk branch
exaile-udisks.patch | 253 +++++++++++++++++++++++++++++++++++++++++++++++++++
exaile.spec | 12 ++-
sources | 2 +-
3 files changed, 263 insertions(+), 4 deletions(-)
---
diff --git a/exaile-udisks.patch b/exaile-udisks.patch
new file mode 100644
index 0000000..cc776fa
--- /dev/null
+++ b/exaile-udisks.patch
@@ -0,0 +1,253 @@
+--- plugins/cd/__init__.py 2011-07-18 20:32:50.690850000 -0400
++++ plugins/cd/__init__.py.new 2011-08-31 13:41:50.277924078 -0400
+@@ -27,12 +27,12 @@
+
+ from xl.nls import gettext as _
+ from xl import providers, event
+-from xl.hal import Handler
++from xl.hal import Handler, UDisksProvider
+ from xl.devices import Device
+ import logging
+ logger = logging.getLogger(__name__)
+
+-PROVIDER = None
++PROVIDER = PROVIDER_UDISKS = None
+
+ import dbus, threading, os, struct
+ from fcntl import ioctl
+@@ -61,15 +61,17 @@
+ CDROM_DATA_TRACK = 0x04
+
+ def enable(exaile):
+- global PROVIDER
+- PROVIDER = CDHandler()
+- providers.register("hal", PROVIDER)
+-
++ global PROVIDER, PROVIDER_UDISKS
++ #~ PROVIDER = CDHandler()
++ #~ providers.register("hal", PROVIDER)
++ PROVIDER_UDISKS = UDisksCdProvider()
++ providers.register("udisks", PROVIDER_UDISKS)
+
+ def disable(exaile):
+- global PROVIDER
++ global PROVIDER, PROVIDER_UDISKS
+ providers.unregister("hal", PROVIDER)
+- PROVIDER = None
++ providers.unregister("udisks", PROVIDER_UDISKS)
++ PROVIDER = PROVIDER_UDISKS = None
+
+ class CDTocParser(object):
+ #based on code from http://carey.geek.nz/code/python-cdrom/cdtoc.py
+@@ -150,7 +152,7 @@
+ sort_tups.sort()
+ sorted = [ s[1] for s in sort_tups ]
+
+- self.add_tracks(sorted)
++ self.extend(sorted)
+
+ if CDDB_AVAIL:
+ self.get_cddb_info()
+@@ -244,6 +246,24 @@
+
+ return cddev
+
++class UDisksCdProvider(UDisksProvider):
++ PRIORITY = UDisksProvider.NORMAL
++
++ name = 'cd'
++
++ def get_priority(self, obj):
++ props = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
++ iface = 'org.freedesktop.UDisks.Device'
++ # XXX: We use the number of audio tracks to identify audio CDs.
++ # There may be a better way....
++ compat = props.Get(iface, 'DriveMediaCompatibility')
++ return self.PRIORITY if 'optical_cd' in compat else None
++
++ def create_device(self, obj):
++ props = dbus.Interface(obj, 'org.freedesktop.DBus.Properties')
++ iface = 'org.freedesktop.UDisks.Device'
++ return CDDevice(dev=props.Get(iface, 'DeviceFile'))
++
+
+ # vim: et sts=4 sw=4
+
+--- xl/main.py 2011-07-18 20:32:50.690850000 -0400
++++ xl/main.py.new 2011-08-31 13:57:44.678992423 -0400
+@@ -203,6 +203,8 @@
+ # Initialize HAL
+ if self.options.Hal:
+ from xl import hal
++ self.udisks = hal.UDisks(self.devices)
++ self.udisks.connect()
+ self.hal = hal.HAL(self.devices)
+ self.hal.connect()
+ else:
+--- xl/hal.py 2011-07-18 20:32:50.690850000 -0400
++++ xl/hal.py.new 2011-08-31 13:49:02.489520690 -0400
+@@ -24,7 +24,7 @@
+ # do so. If you do not wish to do so, delete this exception statement
+ # from your version.
+
+-import logging
++import logging, threading, time
+ import dbus
+
+ from xl import common, providers, event, devices, settings
+@@ -32,6 +32,120 @@
+
+ logger = logging.getLogger(__name__)
+
++class UDisks(providers.ProviderHandler):
++ """Provides support for UDisks devices.
++
++ If the D-Bus connection fails, this object will grow a "failed" attribute
++ with True as the value. Plugins should check for this attribute when
++ registering if they want to provide HAL fallback. FIXME: There's a race
++ condition here.
++ """
++
++ # States: start -> init -> addremove <-> listening -> end.
++ # The addremove state acts as a lock against concurrent changes.
++
++ def __init__(self, devicemanager):
++ self._lock = lock = threading.Lock()
++ self._state = 'init'
++
++ providers.ProviderHandler.__init__(self, 'udisks')
++ self.devicemanager = devicemanager
++
++ self.bus = self.obj = self.iface = None
++ self.devices = {}
++ self.providers = {}
++
++ @common.threaded
++ def connect(self):
++ assert self._state == 'init'
++ logger.debug("Connecting to UDisks")
++ try:
++ self.bus = bus = dbus.SystemBus()
++ self.obj = obj = bus.get_object('org.freedesktop.UDisks', '/org/freedesktop/UDisks')
++ self.iface = iface = dbus.Interface(obj, 'org.freedesktop.UDisks')
++ iface.connect_to_signal('DeviceAdded', self._device_added, path_keyword='path')
++ iface.connect_to_signal('DeviceRemoved', self._device_removed, path_keyword='path')
++ logger.info("Connected to UDisks")
++ event.log_event("hal_connected", self, None)
++ except Exception:
++ logger.warning("Failed to connect to UDisks, " \
++ "autodetection of devices will be disabled.")
++ self._state = 'listening'
++ self.failed = True
++ return
++ self._state = 'addremove'
++ self._add_all()
++ self._state = 'listening'
++
++ def _add_all(self):
++ assert self._state == 'addremove'
++ for path in self.iface.EnumerateDevices():
++ self._add_path(path)
++
++ def _add_path(self, path):
++ assert self._state == 'addremove'
++ obj = self.bus.get_object('org.freedesktop.UDisks', path)
++ old, new = self._get_provider_for(obj)
++ if new is not old:
++ if old[0]:
++ self.devicemanager.remove_device(self.devices[path])
++ device = new[0].create_device(obj)
++ device.autoconnect()
++ self.devicemanager.add_device(device)
++ self.providers[path] = new
++ self.devices[path] = device
++
++ def _get_provider_for(self, obj):
++ """Return (old_provider, old_priority), (new_provider, new_priority)"""
++ assert self._state == 'addremove'
++ path = obj.object_path
++ highest = old = self.providers.get(path, (None, -1))
++ for provider in self.get_providers():
++ priority = provider.get_priority(obj)
++ if priority is not None and priority > highest[1]:
++ highest = (provider, priority)
++ return old, highest
++
++ def _remove_path(self, path):
++ assert self._state == 'addremove'
++ self.devicemanager.remove_device(self.devices[path])
++ del self.devices[path]
++
++ def _device_added(self, path):
++ import pdb; pdb.set_trace()
++ self._addremove()
++ self._add_path(path)
++ self._state = 'listening'
++
++ def _device_removed(self, path):
++ self._addremove()
++ try:
++ self._remove_path(path)
++ except KeyError: # Not ours
++ pass
++ self._state = 'listening'
++
++ def on_provider_added(self, provider):
++ self._addremove()
++ self._connect_all()
++ self._state = 'listening'
++
++ def on_provider_removed(self, provider):
++ self._addremove()
++ for path, provider_ in self.providers.iteritems():
++ if provider_ is provider:
++ self._remove_path(path)
++ self._state = 'listening'
++
++ def _addremove(self):
++ """Helper to transition safely to the addremove state"""
++ while True:
++ with self._lock:
++ if self._state == 'listening':
++ self._state = 'addremove'
++ break
++ time.sleep(1)
++
+ class HAL(providers.ProviderHandler):
+ """
+ HAL interface
+@@ -144,6 +258,13 @@
+ def device_from_udi(self, hal, udi):
+ pass
+
++class UDisksProvider:
++ VERY_LOW, LOW, NORMAL, HIGH, VERY_HIGH = range(0, 101, 25)
++ def get_priority(self, obj):
++ pass # return: int [0..100] or None
++ def get_device(self, obj):
++ pass # return: xl.devices.Device
++
+
+ # vim: et sts=4 sw=4
+
+--- xlgui/panel/flatplaylist.py 2011-07-18 20:32:50.690850000 -0400
++++ xlgui/panel/flatplaylist.py.new 2011-08-31 13:59:20.890789609 -0400
+@@ -29,7 +29,7 @@
+
+ from xl import metadata, trax
+ from xl.nls import gettext as _
+-from xlgui import panel, guiutil, menu
++from xlgui import panel, guiutil, oldmenu as menu
+
+ class FlatPlaylistPanel(panel.Panel):
+ """
+@@ -116,8 +116,7 @@
+ def set_playlist(self, pl):
+ self.model.clear()
+
+- tracks = pl.get_tracks()
+- self.tracks = tracks
++ self.tracks = tracks = list(pl)
+ for i, track in enumerate(tracks):
+ self.model.append([i + 1, track.get_tag_display("title"), track])
+
diff --git a/exaile.spec b/exaile.spec
index f517853..2fb296a 100644
--- a/exaile.spec
+++ b/exaile.spec
@@ -2,13 +2,14 @@
Summary: A music player
Name: exaile
-Version: 0.3.2.1
+Version: 0.3.2.2
Release: 1%{?dist}
Group: Applications/Multimedia
License: GPLv2+
URL: http://www.exaile.org
-Source0: http://launchpad.net/exaile/0.3.2/0.3.2.1/+download/exaile-%{version}.tar.gz
+Source0: http://launchpad.net/exaile/0.3.2/0.3.2.2/+download/exaile-%{version}.tar.gz
Patch0: exaile-makefile.patch
+Patch1: exaile-udisks.patch
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: pygobject2-devel
BuildRequires: desktop-file-utils
@@ -25,7 +26,7 @@ Requires: python-inotify
Requires: python-CDDB
Requires: python-sexy
Requires: gamin-python
-Requires: hal
+Requires: udisks
BuildArch: noarch
@@ -45,6 +46,7 @@ on your iPod to last.fm
%prep
%setup -q
%patch0 -p0 -b .fix
+%patch1 -p0 -b .udisk
%build
make %{?_smp_mflags}
@@ -76,6 +78,10 @@ rm -rf %{buildroot}
%{python_sitelib}/exaile/
%changelog
+* Wed Aug 31 2011 Deji Akingunola <dakingun at gmail.com> - 0.3.2.2-1
+- Update to 0.3.2.2
+- Drop hal. Apply patch to support udisk from upstream bzr's udisk branch
+
* Thu Mar 03 2011 Deji Akingunola <dakingun at gmail.com> - 0.3.2.1-1
- Update to 0.3.2.1
diff --git a/sources b/sources
index 8d46f94..17cb347 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-7ecfa9e52a9f2882717b3483518b604b exaile-0.3.2.1.tar.gz
+b3fd87e40af6592df0b511183ca49408 exaile-0.3.2.2.tar.gz
More information about the scm-commits
mailing list