[banshee] [Banshee.Networking] Add WICD support (bgo#596918)
- From: Aaron Bockover <abock src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [banshee] [Banshee.Networking] Add WICD support (bgo#596918)
- Date: Tue, 20 Oct 2009 14:51:04 +0000 (UTC)
commit 83d681c708796f37d8be12754832cfe9cb5ccbd6
Author: Jérémie Laval <jeremie laval gmail com>
Date: Tue Oct 20 10:44:15 2009 -0400
[Banshee.Networking] Add WICD support (bgo#596918)
Implement WICD connectivity backend to the network availability service.
Backends now implement a INetworkAvailabilityService interface.
Move State enum and StateChangeHandler delegate from NetworkManager.cs
to State.cs since it's generic code.
Make INetworkManager a private inner interface of NetworkManager.
Signed-off-by: Aaron Bockover <abockover novell com>
.../INetworkAvailabilityService.cs | 36 ++++++
.../Banshee.Services/Banshee.Networking/Network.cs | 31 ++++--
.../Banshee.Networking/NetworkManager.cs | 30 ++---
.../Banshee.Services/Banshee.Networking/State.cs | 41 +++++++
.../Banshee.Services/Banshee.Networking/Wicd.cs | 112 ++++++++++++++++++++
src/Core/Banshee.Services/Banshee.Services.csproj | 3 +
src/Core/Banshee.Services/Makefile.am | 3 +
7 files changed, 226 insertions(+), 30 deletions(-)
---
diff --git a/src/Core/Banshee.Services/Banshee.Networking/INetworkAvailabilityService.cs b/src/Core/Banshee.Services/Banshee.Networking/INetworkAvailabilityService.cs
new file mode 100644
index 0000000..d7b9d64
--- /dev/null
+++ b/src/Core/Banshee.Services/Banshee.Networking/INetworkAvailabilityService.cs
@@ -0,0 +1,36 @@
+//
+// INetworkAvailabilityService.cs
+//
+// Author:
+// Jérémie "Garuma" Laval <jeremie laval gmail com>
+//
+// Copyright 2009 Jérémie "Garuma" Laval
+//
+// Permission is hereby granted, free of charge, to any person obtaining a copy
+// of this software and associated documentation files (the "Software"), to deal
+// in the Software without restriction, including without limitation the rights
+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+// copies of the Software, and to permit persons to whom the Software is
+// furnished to do so, subject to the following conditions:
+//
+// The above copyright notice and this permission notice shall be included in
+// all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+// THE SOFTWARE.
+
+using System;
+
+namespace Banshee.Networking
+{
+ public interface INetworkAvailabilityService
+ {
+ State State { get; }
+ event StateChangeHandler StateChange;
+ }
+}
diff --git a/src/Core/Banshee.Services/Banshee.Networking/Network.cs b/src/Core/Banshee.Services/Banshee.Networking/Network.cs
index 6b41fdc..5d98152 100644
--- a/src/Core/Banshee.Services/Banshee.Networking/Network.cs
+++ b/src/Core/Banshee.Services/Banshee.Networking/Network.cs
@@ -41,7 +41,7 @@ using Banshee.Configuration;
namespace Banshee.Networking
{
public delegate void NetworkStateChangedHandler(object o, NetworkStateChangedArgs args);
-
+
public class NetworkStateChangedArgs : EventArgs
{
public bool Connected;
@@ -62,7 +62,7 @@ namespace Banshee.Networking
{
public event NetworkStateChangedHandler StateChanged;
- private NetworkManager nm_manager;
+ private INetworkAvailabilityService manager;
private State current_state;
private bool disable_internet_access = false;
@@ -71,11 +71,11 @@ namespace Banshee.Networking
InstallPreferences ();
try {
- ConnectToNetworkManager();
+ ConnectToManager ();
} catch(Exception) {
- nm_manager = null;
+ manager = null;
Log.Warning(
- Catalog.GetString("Cannot connect to NetworkManager"),
+ Catalog.GetString("Cannot connect to NetworkManager or Wicd"),
Catalog.GetString("An available, working network connection will be assumed"),
false);
}
@@ -86,11 +86,18 @@ namespace Banshee.Networking
UninstallPreferences ();
}
- private void ConnectToNetworkManager()
+ private void ConnectToManager()
{
- nm_manager = new NetworkManager();
- nm_manager.StateChange += OnNetworkManagerEvent;
- current_state = nm_manager.State;
+ if (NetworkManager.ManagerPresent) {
+ manager = new NetworkManager ();
+ } else if (Wicd.ManagerPresent) {
+ manager = new Wicd ();
+ } else {
+ throw new NetworkUnavailableException ("Neither NetworkManager nor Wicd could be found");
+ }
+
+ manager.StateChange += OnNetworkManagerEvent;
+ current_state = manager.State;
}
private void OnNetworkManagerEvent(State new_state)
@@ -126,11 +133,11 @@ namespace Banshee.Networking
}
public bool Connected {
- get { return disable_internet_access ? false : (nm_manager == null ? true : current_state == State.Connected); }
+ get { return disable_internet_access ? false : (manager == null ? true : current_state == State.Connected); }
}
- public NetworkManager Manager {
- get { return nm_manager; }
+ public INetworkAvailabilityService Manager {
+ get { return manager; }
}
#region Offline Preference
diff --git a/src/Core/Banshee.Services/Banshee.Networking/NetworkManager.cs b/src/Core/Banshee.Services/Banshee.Networking/NetworkManager.cs
index 9d6b558..255c034 100644
--- a/src/Core/Banshee.Services/Banshee.Networking/NetworkManager.cs
+++ b/src/Core/Banshee.Services/Banshee.Networking/NetworkManager.cs
@@ -34,25 +34,15 @@ using NDesk.DBus;
namespace Banshee.Networking
{
- public enum State : uint {
- Unknown = 0,
- Asleep,
- Connecting,
- Connected,
- Disconnected
- }
-
- [Interface("org.freedesktop.NetworkManager")]
- public interface INetworkManager
+ public class NetworkManager : INetworkAvailabilityService
{
- event StateChangeHandler StateChange;
- State state();
- }
-
- public delegate void StateChangeHandler(State state);
+ [Interface ("org.freedesktop.NetworkManager")]
+ private interface INetworkManager
+ {
+ event StateChangeHandler StateChange;
+ State state ();
+ }
- public class NetworkManager
- {
private const string BusName = "org.freedesktop.NetworkManager";
private const string ObjectPath = "/org/freedesktop/NetworkManager";
@@ -62,7 +52,7 @@ namespace Banshee.Networking
public NetworkManager()
{
- if(!Bus.System.NameHasOwner(BusName)) {
+ if (!ManagerPresent) {
throw new ApplicationException(String.Format("Name {0} has no owner", BusName));
}
@@ -81,6 +71,10 @@ namespace Banshee.Networking
public State State {
get { return manager.state(); }
}
+
+ public static bool ManagerPresent {
+ get { return Bus.System.NameHasOwner (BusName); }
+ }
}
}
diff --git a/src/Core/Banshee.Services/Banshee.Networking/State.cs b/src/Core/Banshee.Services/Banshee.Networking/State.cs
new file mode 100644
index 0000000..4619416
--- /dev/null
+++ b/src/Core/Banshee.Services/Banshee.Networking/State.cs
@@ -0,0 +1,41 @@
+//
+// State.cs
+//
+// Author:
+// Aaron Bockover <abockover novell com>
+//
+// Copyright 2005-2009 Novell, Inc.
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+namespace Banshee.Networking
+{
+ public enum State : uint
+ {
+ Unknown = 0,
+ Asleep,
+ Connecting,
+ Connected,
+ Disconnected
+ }
+
+ public delegate void StateChangeHandler (State state);
+}
diff --git a/src/Core/Banshee.Services/Banshee.Networking/Wicd.cs b/src/Core/Banshee.Services/Banshee.Networking/Wicd.cs
new file mode 100644
index 0000000..723e272
--- /dev/null
+++ b/src/Core/Banshee.Services/Banshee.Networking/Wicd.cs
@@ -0,0 +1,112 @@
+//
+// Wicd.cs
+//
+// Author:
+// Jérémie Laval <jeremie laval gmail com>
+//
+// Copyright 2009 Jérémie "Garuma" Laval
+//
+// Permission is hereby granted, free of charge, to any person obtaining
+// a copy of this software and associated documentation files (the
+// "Software"), to deal in the Software without restriction, including
+// without limitation the rights to use, copy, modify, merge, publish,
+// distribute, sublicense, and/or sell copies of the Software, and to
+// permit persons to whom the Software is furnished to do so, subject to
+// the following conditions:
+//
+// The above copyright notice and this permission notice shall be
+// included in all copies or substantial portions of the Software.
+//
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+//
+
+using System;
+using System.Reflection;
+using System.Collections;
+using System.Collections.Generic;
+using NDesk.DBus;
+
+namespace Banshee.Networking
+{
+ public class Wicd : INetworkAvailabilityService
+ {
+ public delegate void StateChangeInternalHandler (uint code, object [] foo);
+
+ internal struct StatusStruct
+ {
+ public uint Code;
+ public string [] Foo;
+ }
+
+ [Interface ("org.wicd.daemon")]
+ internal interface IWicd
+ {
+ event StateChangeInternalHandler StatusChanged;
+ StatusStruct GetConnectionStatus ();
+ }
+
+ private enum WicdCodes : uint {
+ NotConnected = 0,
+ Connecting,
+ Wired,
+ Wireless,
+ Suspended
+ }
+
+ private const string BusName = "org.wicd.daemon";
+ private const string ObjectPath = "/org/wicd/daemon";
+
+ private IWicd manager;
+
+ public event StateChangeHandler StateChange;
+
+ public Wicd ()
+ {
+ if (!ManagerPresent) {
+ throw new ApplicationException (String.Format ("Name {0} has no owner", BusName));
+ }
+
+ manager = Bus.System.GetObject<IWicd> (BusName, new ObjectPath(ObjectPath));
+ manager.StatusChanged += OnStateChange;
+ }
+
+ private void OnStateChange (uint code, object[] foo)
+ {
+ var handler = StateChange;
+ if (handler != null) {
+ handler(GetTranslatedCode (code));
+ }
+ }
+
+ public State State {
+ get { return GetTranslatedCode (manager.GetConnectionStatus ().Code); }
+ }
+
+ public static bool ManagerPresent {
+ get { return Bus.System.NameHasOwner (BusName); }
+ }
+
+ private State GetTranslatedCode (uint wicdCode)
+ {
+ switch ((WicdCodes)wicdCode) {
+ case WicdCodes.NotConnected:
+ return State.Disconnected;
+ case WicdCodes.Connecting:
+ return State.Connecting;
+ case WicdCodes.Wireless:
+ case WicdCodes.Wired:
+ return State.Connected;
+ case WicdCodes.Suspended:
+ return State.Asleep;
+ default:
+ return State.Unknown;
+ }
+ }
+ }
+}
diff --git a/src/Core/Banshee.Services/Banshee.Services.csproj b/src/Core/Banshee.Services/Banshee.Services.csproj
index d6a5ccc..80d2974 100644
--- a/src/Core/Banshee.Services/Banshee.Services.csproj
+++ b/src/Core/Banshee.Services/Banshee.Services.csproj
@@ -171,7 +171,10 @@
<Compile Include="Banshee.Metadata.Rhapsody\RhapsodyMetadataProvider.cs" />
<Compile Include="Banshee.Metadata.Rhapsody\RhapsodyQueryJob.cs" />
<Compile Include="Banshee.Networking\Network.cs" />
+ <Compile Include="Banshee.Networking\State.cs" />
<Compile Include="Banshee.Networking\NetworkManager.cs" />
+ <Compile Include="Banshee.Networking\Wicd.cs" />
+ <Compile Include="Banshee.Networking\INetworkAvailabilityService.cs" />
<Compile Include="Banshee.Database\BansheeModelProvider.cs" />
<Compile Include="Banshee.Database\BansheeModelCache.cs" />
<Compile Include="Banshee.PlaybackController\IPlaybackController.cs" />
diff --git a/src/Core/Banshee.Services/Makefile.am b/src/Core/Banshee.Services/Makefile.am
index c36d426..c626e57 100644
--- a/src/Core/Banshee.Services/Makefile.am
+++ b/src/Core/Banshee.Services/Makefile.am
@@ -119,7 +119,10 @@ SOURCES = \
Banshee.Metadata/SaveTrackMetadataJob.cs \
Banshee.Metadata/SaveTrackMetadataService.cs \
Banshee.Networking/Network.cs \
+ Banshee.Networking/State.cs \
Banshee.Networking/NetworkManager.cs \
+ Banshee.Networking/Wicd.cs \
+ Banshee.Networking/INetworkAvailabilityService.cs \
Banshee.PlatformServices/IScreensaverManager.cs \
Banshee.PlatformServices/ScreensaverManager.cs \
Banshee.PlaybackController/IBasicPlaybackController.cs \
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]