banshee r3579 - in trunk/banshee: . src/Backends/Banshee.Hal/Banshee.HalBackend src/Core/Banshee.Services/Banshee.Hardware src/Extensions/Banshee.AudioCd/Banshee.AudioCd src/Libraries/Hyena/Hyena
- From: abock svn gnome org
- To: svn-commits-list gnome org
- Subject: banshee r3579 - in trunk/banshee: . src/Backends/Banshee.Hal/Banshee.HalBackend src/Core/Banshee.Services/Banshee.Hardware src/Extensions/Banshee.AudioCd/Banshee.AudioCd src/Libraries/Hyena/Hyena
- Date: Fri, 28 Mar 2008 23:41:11 +0000 (GMT)
Author: abock
Date: Fri Mar 28 23:41:11 2008
New Revision: 3579
URL: http://svn.gnome.org/viewvc/banshee?rev=3579&view=rev
Log:
2008-03-28 Aaron Bockover <abock gnome org>
* src/Core/Banshee.Services/Banshee.Hardware/IVolume.cs: Added Eject
and Unmount properties/methods
* src/Backends/Banshee.Hal/Banshee.HalBackend/Volume.cs: Implemented
the new Eject/Unmount members
* src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdService.cs:
Make UnmapDiscVolume internal so the source can call it when being
unmapped by the user
* src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs:
Implement the unmap method to eject the disc from the drive
* src/Libraries/Hyena/Hyena/Log.cs: Added an Exception method to which
all exceptions that are handled should be logged; currently it just
prints the exception, but we should later save them to a log file
Modified:
trunk/banshee/ChangeLog
trunk/banshee/src/Backends/Banshee.Hal/Banshee.HalBackend/Volume.cs
trunk/banshee/src/Core/Banshee.Services/Banshee.Hardware/IVolume.cs
trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdService.cs
trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs
trunk/banshee/src/Libraries/Hyena/Hyena/Log.cs
Modified: trunk/banshee/src/Backends/Banshee.Hal/Banshee.HalBackend/Volume.cs
==============================================================================
--- trunk/banshee/src/Backends/Banshee.Hal/Banshee.HalBackend/Volume.cs (original)
+++ trunk/banshee/src/Backends/Banshee.Hal/Banshee.HalBackend/Volume.cs Fri Mar 28 23:41:11 2008
@@ -34,6 +34,8 @@
{
public class Volume : Device, IVolume
{
+ private const string method_names_property = "org.freedesktop.Hal.Device.Volume.method_names";
+
public static Volume Resolve (BlockDevice parent, Hal.Manager manager, Hal.Device device)
{
if (!device.IsVolume) {
@@ -46,10 +48,15 @@
}
private BlockDevice parent;
+ private string [] method_names;
protected Volume (BlockDevice parent, Hal.Manager manager, Hal.Device device) : base (manager, device)
{
this.parent = parent ?? BlockDevice.Resolve<IBlockDevice> (manager, device.Parent);
+
+ method_names = HalDevice.PropertyExists (method_names_property)
+ ? device.GetPropertyStringList (method_names_property)
+ : new string[0];
}
public string MountPoint {
@@ -90,6 +97,28 @@
get { return parent; }
}
+ public bool CanEject {
+ get { return Array.IndexOf<string> (method_names, "Eject") >= 0; }
+ }
+
+ public void Eject ()
+ {
+ if (CanEject && HalDevice.IsVolume) {
+ HalDevice.Volume.Eject ();
+ }
+ }
+
+ public bool CanUnmount {
+ get { return Array.IndexOf<string> (method_names, "Unmount") >= 0; }
+ }
+
+ public void Unmount ()
+ {
+ if (CanUnmount && HalDevice.IsVolume) {
+ HalDevice.Volume.Unmount ();
+ }
+ }
+
public override string ToString ()
{
if (IsMounted) {
Modified: trunk/banshee/src/Core/Banshee.Services/Banshee.Hardware/IVolume.cs
==============================================================================
--- trunk/banshee/src/Core/Banshee.Services/Banshee.Hardware/IVolume.cs (original)
+++ trunk/banshee/src/Core/Banshee.Services/Banshee.Hardware/IVolume.cs Fri Mar 28 23:41:11 2008
@@ -38,5 +38,11 @@
ulong Capacity { get; }
long Available { get; }
new IBlockDevice Parent { get; }
+
+ bool CanEject { get; }
+ void Eject ();
+
+ bool CanUnmount { get; }
+ void Unmount ();
}
}
Modified: trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdService.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdService.cs (original)
+++ trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdService.cs Fri Mar 28 23:41:11 2008
@@ -74,7 +74,7 @@
{
lock (this) {
if (!sources.ContainsKey (volume.Uuid) && volume.HasAudio) {
- AudioCdSource source = new AudioCdSource (new AudioCdDisc (volume));
+ AudioCdSource source = new AudioCdSource (this, new AudioCdDisc (volume));
sources.Add (volume.Uuid, source);
ServiceManager.SourceManager.AddSource (source);
Log.DebugFormat ("Mapping audio CD ({0})", volume.Uuid);
@@ -82,7 +82,7 @@
}
}
- private void UnmapDiscVolume (string uuid)
+ internal void UnmapDiscVolume (string uuid)
{
lock (this) {
if (sources.ContainsKey (uuid)) {
Modified: trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs
==============================================================================
--- trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs (original)
+++ trunk/banshee/src/Extensions/Banshee.AudioCd/Banshee.AudioCd/AudioCdSource.cs Fri Mar 28 23:41:11 2008
@@ -29,6 +29,7 @@
using System;
using Mono.Unix;
+using Hyena;
using Banshee.Sources;
using Banshee.Collection;
@@ -36,11 +37,14 @@
{
public class AudioCdSource : Source, ITrackModelSource, IUnmapableSource, IDisposable
{
+ private AudioCdService service;
private AudioCdDisc disc;
private MemoryTrackListModel track_model;
- public AudioCdSource (AudioCdDisc disc) : base (Catalog.GetString ("Audio CD"), disc.Title, 200)
+ public AudioCdSource (AudioCdService service, AudioCdDisc disc)
+ : base (Catalog.GetString ("Audio CD"), disc.Title, 200)
{
+ this.service = service;
this.disc = disc;
track_model = new MemoryTrackListModel ();
@@ -131,6 +135,18 @@
public bool Unmap ()
{
+ System.Threading.ThreadPool.QueueUserWorkItem (delegate {
+ try {
+ disc.Volume.Unmount ();
+ disc.Volume.Eject ();
+ } catch (Exception e) {
+ Log.Error (Catalog.GetString ("Could not eject Audio CD"), e.Message, true);
+ Log.Exception (e);
+ }
+ });
+
+ service.UnmapDiscVolume (disc.Volume.Uuid);
+
return true;
}
Modified: trunk/banshee/src/Libraries/Hyena/Hyena/Log.cs
==============================================================================
--- trunk/banshee/src/Libraries/Hyena/Hyena/Log.cs (original)
+++ trunk/banshee/src/Libraries/Hyena/Hyena/Log.cs Fri Mar 28 23:41:11 2008
@@ -356,5 +356,15 @@
}
#endregion
+
+ #region Public Exception Methods
+
+ public static void Exception (Exception e)
+ {
+ // FIXME: We should save these to an actual log file
+ Console.WriteLine (e);
+ }
+
+ #endregion
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]