diff --git a/MediaBrowser.Api/EnvironmentService.cs b/MediaBrowser.Api/EnvironmentService.cs
index 985e3c89b..ffc54b6fb 100644
--- a/MediaBrowser.Api/EnvironmentService.cs
+++ b/MediaBrowser.Api/EnvironmentService.cs
@@ -55,6 +55,15 @@ namespace MediaBrowser.Api
{
}
+ ///
+ /// Class GetNetworkComputers
+ ///
+ [Route("/Environment/NetworkDevices", "GET")]
+ [Api(Description = "Gets a list of devices on the network")]
+ public class GetNetworkDevices : IReturn>
+ {
+ }
+
///
/// Class EnvironmentService
///
@@ -138,6 +147,32 @@ namespace MediaBrowser.Api
});
}
+ ///
+ /// Gets the specified request.
+ ///
+ /// The request.
+ /// System.Object.
+ public object Get(GetNetworkDevices request)
+ {
+ var result = GetNetworkDevices().OrderBy(i => i.Path).ToList();
+
+ return ToOptimizedResult(result);
+ }
+
+ ///
+ /// Gets the network computers.
+ ///
+ /// IEnumerable{FileSystemEntryInfo}.
+ private IEnumerable GetNetworkDevices()
+ {
+ return _networkManager.GetNetworkDevices().Select(c => new FileSystemEntryInfo
+ {
+ Name = c,
+ Path = NetworkPrefix + c,
+ Type = FileSystemEntryType.NetworkComputer
+ });
+ }
+
///
/// Gets the name.
///
diff --git a/MediaBrowser.Common.Implementations/NetworkManagement/NetworkManager.cs b/MediaBrowser.Common.Implementations/NetworkManagement/NetworkManager.cs
index 71e2ec85a..1ac26cafe 100644
--- a/MediaBrowser.Common.Implementations/NetworkManagement/NetworkManager.cs
+++ b/MediaBrowser.Common.Implementations/NetworkManagement/NetworkManager.cs
@@ -224,6 +224,67 @@ namespace MediaBrowser.Common.Implementations.NetworkManagement
return hosts[0];
}
+
+ ///
+ /// Uses the DllImport : NetServerEnum with all its required parameters
+ /// (see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/netmgmt/netmgmt/netserverenum.asp
+ /// for full details or method signature) to retrieve a list of domain SV_TYPE_WORKSTATION
+ /// and SV_TYPE_SERVER PC's
+ ///
+ /// Arraylist that represents all the SV_TYPE_WORKSTATION and SV_TYPE_SERVER
+ /// PC's in the Domain
+ public IEnumerable GetNetworkDevices()
+ {
+ //local fields
+ const int MAX_PREFERRED_LENGTH = -1;
+ var SV_TYPE_WORKSTATION = 1;
+ var SV_TYPE_SERVER = 2;
+ var buffer = IntPtr.Zero;
+ var tmpBuffer = IntPtr.Zero;
+ var entriesRead = 0;
+ var totalEntries = 0;
+ var resHandle = 0;
+ var sizeofINFO = Marshal.SizeOf(typeof(_SERVER_INFO_100));
+
+ try
+ {
+ //call the DllImport : NetServerEnum with all its required parameters
+ //see http://msdn.microsoft.com/library/default.asp?url=/library/en-us/netmgmt/netmgmt/netserverenum.asp
+ //for full details of method signature
+ var ret = NativeMethods.NetServerEnum(null, 100, ref buffer, MAX_PREFERRED_LENGTH, out entriesRead, out totalEntries, SV_TYPE_WORKSTATION | SV_TYPE_SERVER, null, out resHandle);
+
+ //if the returned with a NERR_Success (C++ term), =0 for C#
+ if (ret == 0)
+ {
+ //loop through all SV_TYPE_WORKSTATION and SV_TYPE_SERVER PC's
+ for (var i = 0; i < totalEntries; i++)
+ {
+ //get pointer to, Pointer to the buffer that received the data from
+ //the call to NetServerEnum. Must ensure to use correct size of
+ //STRUCTURE to ensure correct location in memory is pointed to
+ tmpBuffer = new IntPtr((int)buffer + (i * sizeofINFO));
+ //Have now got a pointer to the list of SV_TYPE_WORKSTATION and
+ //SV_TYPE_SERVER PC's, which is unmanaged memory
+ //Needs to Marshal data from an unmanaged block of memory to a
+ //managed object, again using STRUCTURE to ensure the correct data
+ //is marshalled
+ var svrInfo = (_SERVER_INFO_100)Marshal.PtrToStructure(tmpBuffer, typeof(_SERVER_INFO_100));
+
+ //add the PC names to the ArrayList
+ if (!string.IsNullOrEmpty(svrInfo.sv100_name))
+ {
+ yield return svrInfo.sv100_name;
+ }
+ }
+ }
+ }
+ finally
+ {
+ //The NetApiBufferFree function frees
+ //the memory that the NetApiBufferAllocate function allocates
+ NativeMethods.NetApiBufferFree(buffer);
+ }
+ }
}
}
diff --git a/MediaBrowser.Common/Net/INetworkManager.cs b/MediaBrowser.Common/Net/INetworkManager.cs
index 6cda54606..e0171381d 100644
--- a/MediaBrowser.Common/Net/INetworkManager.cs
+++ b/MediaBrowser.Common/Net/INetworkManager.cs
@@ -29,19 +29,11 @@ namespace MediaBrowser.Common.Net
/// The path.
/// IEnumerable{NetworkShare}.
IEnumerable GetNetworkShares(string path);
- }
- ///
- /// Enum NetworkProtocol
- ///
- public enum NetworkProtocol
- {
+
///
- /// The TCP
+ /// Gets available devices within the domain
///
- Tcp,
- ///
- /// The UDP
- ///
- Udp
+ /// PC's in the Domain
+ IEnumerable GetNetworkDevices();
}
}
\ No newline at end of file
diff --git a/MediaBrowser.WebDashboard/ApiClient.js b/MediaBrowser.WebDashboard/ApiClient.js
index e9679c3f0..af785eb3e 100644
--- a/MediaBrowser.WebDashboard/ApiClient.js
+++ b/MediaBrowser.WebDashboard/ApiClient.js
@@ -496,6 +496,20 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) {
});
};
+ /**
+ * Gets a list of network devices from the server
+ */
+ self.getNetworkDevices = function () {
+
+ var url = self.getUrl("Environment/NetworkDevices");
+
+ return self.ajax({
+ type: "GET",
+ url: url,
+ dataType: "json"
+ });
+ };
+
/**
* Cancels a package installation
*/
diff --git a/MediaBrowser.WebDashboard/packages.config b/MediaBrowser.WebDashboard/packages.config
index 2e19e0a12..395c46b56 100644
--- a/MediaBrowser.WebDashboard/packages.config
+++ b/MediaBrowser.WebDashboard/packages.config
@@ -1,6 +1,6 @@
-
+
\ No newline at end of file