From 78dba9c668c9b2a40409dd48feeff3b97063a5cc Mon Sep 17 00:00:00 2001
From: nothingmn <rob.chartier@gmail.com>
Date: Thu, 7 Oct 2010 21:34:32 -0700
Subject: [PATCH] Added Media Disco Providers - these will be used to auto
 detect media providers on the LAN

---
 NzbDrone.Core/NzbDrone.Core.csproj            |  2 +
 .../Providers/IMediaDiscoveryProvider.cs      | 14 ++++++
 NzbDrone.Core/Providers/IMediaProvider.cs     |  4 +-
 .../Providers/MediaDiscoveryProvider.cs       | 46 +++++++++++++++++++
 NzbDrone.Web/Views/Series/index.aspx          |  2 +
 5 files changed, 66 insertions(+), 2 deletions(-)
 create mode 100644 NzbDrone.Core/Providers/IMediaDiscoveryProvider.cs
 create mode 100644 NzbDrone.Core/Providers/MediaDiscoveryProvider.cs

diff --git a/NzbDrone.Core/NzbDrone.Core.csproj b/NzbDrone.Core/NzbDrone.Core.csproj
index 7ebdd1cec..13b146c27 100644
--- a/NzbDrone.Core/NzbDrone.Core.csproj
+++ b/NzbDrone.Core/NzbDrone.Core.csproj
@@ -149,7 +149,9 @@
     </Reference>
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="Providers\IMediaDiscoveryProvider.cs" />
     <Compile Include="Providers\IMediaProvider.cs" />
+    <Compile Include="Providers\MediaDiscoveryProvider.cs" />
     <Compile Include="Providers\XBMCMediaProvider.cs" />
     <Compile Include="SonicTrace.cs" />
     <Compile Include="Providers\ConfigProvider.cs" />
diff --git a/NzbDrone.Core/Providers/IMediaDiscoveryProvider.cs b/NzbDrone.Core/Providers/IMediaDiscoveryProvider.cs
new file mode 100644
index 000000000..42dd9315c
--- /dev/null
+++ b/NzbDrone.Core/Providers/IMediaDiscoveryProvider.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace NzbDrone.Core.Providers
+{
+    interface IMediaDiscoveryProvider
+    {
+        void Discover();
+        bool DiscoveredMedia { get; }
+        List<IMediaProvider> Providers { get; }
+    }
+}
diff --git a/NzbDrone.Core/Providers/IMediaProvider.cs b/NzbDrone.Core/Providers/IMediaProvider.cs
index 00cda8db1..d3789b63b 100644
--- a/NzbDrone.Core/Providers/IMediaProvider.cs
+++ b/NzbDrone.Core/Providers/IMediaProvider.cs
@@ -5,8 +5,8 @@
 
 namespace NzbDrone.Core.Providers
 {
-    interface IMediaProvider
-    {
+    public interface IMediaProvider
+    {        
         void Play();
         void Play(string Location);
         void Play(string Location, bool AddToQueue);
diff --git a/NzbDrone.Core/Providers/MediaDiscoveryProvider.cs b/NzbDrone.Core/Providers/MediaDiscoveryProvider.cs
new file mode 100644
index 000000000..e09a5097f
--- /dev/null
+++ b/NzbDrone.Core/Providers/MediaDiscoveryProvider.cs
@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace NzbDrone.Core.Providers
+{
+    public class MediaDiscoveryProvider : IMediaDiscoveryProvider
+    {
+        #region IMediaDiscoveryProvider Members
+
+        public void Discover()
+        {
+            //calling the static instance will kick off the discovery process
+            OpenSource.UPnP.AudioVideoDevices instance = OpenSource.UPnP.AudioVideoDevices.Instance;
+        }
+
+        public bool DiscoveredMedia
+        {
+            get { return (OpenSource.UPnP.AudioVideoDevices.Instance.Devices.Count > 0); }
+        }
+
+        private object _lock = new object();
+        public List<IMediaProvider> Providers
+        {
+            get {
+                lock (_lock)
+                {
+                    List<IMediaProvider> list = new List<IMediaProvider>();
+                    foreach (OpenSource.UPnP.IAVDevice device in OpenSource.UPnP.AudioVideoDevices.Instance.Devices)
+                    {
+                        OpenSource.XBMC.XBMCAVDevice xbmc = (device as OpenSource.XBMC.XBMCAVDevice);
+                        if (xbmc != null)
+                        {
+                            XBMCMediaProvider newX = new XBMCMediaProvider(xbmc);
+                            list.Add(newX);
+                        }
+                    }
+                    return list;
+                }
+            }
+        }
+
+        #endregion
+    }
+}
diff --git a/NzbDrone.Web/Views/Series/index.aspx b/NzbDrone.Web/Views/Series/index.aspx
index 1b09b0726..ae6cfd0b1 100644
--- a/NzbDrone.Web/Views/Series/index.aspx
+++ b/NzbDrone.Web/Views/Series/index.aspx
@@ -11,6 +11,8 @@
                                                 .Items(items => items.Add().Text("Sync With Disk").Action("Sync", "Series"))
                                                 .Render();
     %>
+
+    sss
 </asp:Content>
 <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
     <%