diff --git a/MediaBrowser.Common/MediaBrowser.Common.csproj b/MediaBrowser.Common/MediaBrowser.Common.csproj index 76bf63e3a5..bdef529a57 100644 --- a/MediaBrowser.Common/MediaBrowser.Common.csproj +++ b/MediaBrowser.Common/MediaBrowser.Common.csproj @@ -87,8 +87,6 @@ - - diff --git a/MediaBrowser.Common/Net/BasePeriodicWebSocketListener.cs b/MediaBrowser.Common/Net/BasePeriodicWebSocketListener.cs index de5071a53e..a8e8d7a8cd 100644 --- a/MediaBrowser.Common/Net/BasePeriodicWebSocketListener.cs +++ b/MediaBrowser.Common/Net/BasePeriodicWebSocketListener.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Linq; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Model.Net; namespace MediaBrowser.Common.Net { diff --git a/MediaBrowser.Common/Net/IWebSocket.cs b/MediaBrowser.Common/Net/IWebSocket.cs index 9c9bcb41dd..805340b906 100644 --- a/MediaBrowser.Common/Net/IWebSocket.cs +++ b/MediaBrowser.Common/Net/IWebSocket.cs @@ -1,6 +1,7 @@ using System; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Model.Net; namespace MediaBrowser.Common.Net { diff --git a/MediaBrowser.Common/Net/IWebSocketConnection.cs b/MediaBrowser.Common/Net/IWebSocketConnection.cs index 8e1b13ceb9..c09d5ba2bc 100644 --- a/MediaBrowser.Common/Net/IWebSocketConnection.cs +++ b/MediaBrowser.Common/Net/IWebSocketConnection.cs @@ -1,6 +1,7 @@ using System; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Model.Net; namespace MediaBrowser.Common.Net { diff --git a/MediaBrowser.Model/MediaBrowser.Model.csproj b/MediaBrowser.Model/MediaBrowser.Model.csproj index a3bc341c34..ae6e21923b 100644 --- a/MediaBrowser.Model/MediaBrowser.Model.csproj +++ b/MediaBrowser.Model/MediaBrowser.Model.csproj @@ -46,6 +46,8 @@ + + diff --git a/MediaBrowser.Common/Net/WebSocketMessageType.cs b/MediaBrowser.Model/Net/WebSocketMessageType.cs similarity index 87% rename from MediaBrowser.Common/Net/WebSocketMessageType.cs rename to MediaBrowser.Model/Net/WebSocketMessageType.cs index 3b12bc2b29..37ae7fc55f 100644 --- a/MediaBrowser.Common/Net/WebSocketMessageType.cs +++ b/MediaBrowser.Model/Net/WebSocketMessageType.cs @@ -1,5 +1,5 @@  -namespace MediaBrowser.Common.Net +namespace MediaBrowser.Model.Net { /// /// Enum WebSocketMessageType @@ -17,6 +17,6 @@ namespace MediaBrowser.Common.Net /// /// The close /// - Close, + Close } } diff --git a/MediaBrowser.Common/Net/WebSocketState.cs b/MediaBrowser.Model/Net/WebSocketState.cs similarity index 95% rename from MediaBrowser.Common/Net/WebSocketState.cs rename to MediaBrowser.Model/Net/WebSocketState.cs index 7f8ac3cbe0..41a2e9741d 100644 --- a/MediaBrowser.Common/Net/WebSocketState.cs +++ b/MediaBrowser.Model/Net/WebSocketState.cs @@ -1,5 +1,5 @@  -namespace MediaBrowser.Common.Net +namespace MediaBrowser.Model.Net { /// /// Enum WebSocketState diff --git a/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs b/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs index 9f5d14eaf9..9ad6178472 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/NativeWebSocket.cs @@ -4,8 +4,8 @@ using System; using System.Net.WebSockets; using System.Threading; using System.Threading.Tasks; -using WebSocketMessageType = MediaBrowser.Common.Net.WebSocketMessageType; -using WebSocketState = MediaBrowser.Common.Net.WebSocketState; +using WebSocketMessageType = MediaBrowser.Model.Net.WebSocketMessageType; +using WebSocketState = MediaBrowser.Model.Net.WebSocketState; namespace MediaBrowser.Server.Implementations.HttpServer { @@ -83,7 +83,7 @@ namespace MediaBrowser.Server.Implementations.HttpServer } catch (WebSocketException ex) { - _logger.ErrorException("Error reveiving web socket message", ex); + _logger.ErrorException("Error receiving web socket message", ex); break; } diff --git a/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs b/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs index cba74ffbf8..c1453cd8ba 100644 --- a/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs +++ b/MediaBrowser.Server.Implementations/ServerManager/ServerManager.cs @@ -3,6 +3,7 @@ using MediaBrowser.Common.Net; using MediaBrowser.Controller; using MediaBrowser.Controller.Configuration; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Net; using MediaBrowser.Model.Serialization; using System; using System.Collections.Generic; diff --git a/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs b/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs index d92c607732..5a074d1947 100644 --- a/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs +++ b/MediaBrowser.Server.Implementations/ServerManager/WebSocketConnection.cs @@ -1,5 +1,6 @@ using MediaBrowser.Common.Net; using MediaBrowser.Model.Logging; +using MediaBrowser.Model.Net; using MediaBrowser.Model.Serialization; using System; using System.IO; diff --git a/MediaBrowser.Server.Implementations/WebSocket/AlchemyWebSocket.cs b/MediaBrowser.Server.Implementations/WebSocket/AlchemyWebSocket.cs index 13a9ce0505..7bf1fe86d0 100644 --- a/MediaBrowser.Server.Implementations/WebSocket/AlchemyWebSocket.cs +++ b/MediaBrowser.Server.Implementations/WebSocket/AlchemyWebSocket.cs @@ -5,6 +5,7 @@ using System; using System.Text; using System.Threading; using System.Threading.Tasks; +using MediaBrowser.Model.Net; namespace MediaBrowser.Server.Implementations.WebSocket { diff --git a/MediaBrowser.WebDashboard/ApiClient.js b/MediaBrowser.WebDashboard/ApiClient.js index 94dc72d543..5381a7abd4 100644 --- a/MediaBrowser.WebDashboard/ApiClient.js +++ b/MediaBrowser.WebDashboard/ApiClient.js @@ -1,54 +1,4 @@ -(function (jQuery, window, undefined) { - "use strict"; - - var matched, browser; - - jQuery.uaMatch = function (ua) { - ua = ua.toLowerCase(); - - var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || - /(webkit)[ \/]([\w.]+)/.exec(ua) || - /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || - /(msie) ([\w.]+)/.exec(ua) || - ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || - []; - - var platform_match = /(ipad)/.exec(ua) || - /(iphone)/.exec(ua) || - /(android)/.exec(ua) || - []; - - return { - browser: match[1] || "", - version: match[2] || "0", - platform: platform_match[0] || "" - }; - }; - - matched = jQuery.uaMatch(window.navigator.userAgent); - browser = {}; - - if (matched.browser) { - browser[matched.browser] = true; - browser.version = matched.version; - } - - if (matched.platform) { - browser[matched.platform] = true - } - - // Chrome is Webkit, but Webkit is also Safari. - if (browser.chrome) { - browser.webkit = true; - } else if (browser.webkit) { - browser.safari = true; - } - - jQuery.browser = browser; - -})(jQuery, window); - -if (!window.MediaBrowser) { +if (!window.MediaBrowser) { window.MediaBrowser = {}; } @@ -63,6 +13,16 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { */ return function (serverProtocol, serverHostName, serverPortNumber, clientName) { + if (!serverProtocol) { + throw new Error("Must supply a serverProtocol, e.g. http:"); + } + if (!serverHostName) { + throw new Error("Must supply serverHostName, e.g. 192.168.1.1 or myServerName"); + } + if (!serverPortNumber) { + throw new Error("Must supply a serverPortNumber"); + } + var self = this; var deviceName = "Web Browser"; var deviceId = MediaBrowser.SHA1(navigator.userAgent + (navigator.cpuClass || "")); @@ -113,10 +73,7 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { else if ($.browser.msie) { name = "Internet Explorer"; } - else if ($.browser.firefox) { - name = "Firefox"; - } - else if ($.browser.mozilla) { + else if ($.browser.firefox || $.browser.mozilla) { name = "Firefox"; } else if ($.browser.opera) { @@ -147,15 +104,18 @@ MediaBrowser.ApiClient = function ($, navigator, JSON, WebSocket, setTimeout) { throw new Error("Request cannot be null"); } - var auth = 'MediaBrowser Client="' + clientName + '", Device="' + deviceName + '", DeviceId="' + deviceId + '"'; + if (clientName) { - if (currentUserId) { - auth += ', UserId="' + currentUserId + '"'; - } + var auth = 'MediaBrowser Client="' + clientName + '", Device="' + deviceName + '", DeviceId="' + deviceId + '"'; - request.headers = { - Authorization: auth - }; + if (currentUserId) { + auth += ', UserId="' + currentUserId + '"'; + } + + request.headers = { + Authorization: auth + }; + } return $.ajax(request); }; @@ -1933,4 +1893,54 @@ MediaBrowser.SHA1 = function (msg) { var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4); return temp.toLowerCase(); -}; \ No newline at end of file +}; + +(function (jQuery, window, undefined) { + "use strict"; + + var matched, browser; + + jQuery.uaMatch = function (ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + var platform_match = /(ipad)/.exec(ua) || + /(iphone)/.exec(ua) || + /(android)/.exec(ua) || + []; + + return { + browser: match[1] || "", + version: match[2] || "0", + platform: platform_match[0] || "" + }; + }; + + matched = jQuery.uaMatch(window.navigator.userAgent); + browser = {}; + + if (matched.browser) { + browser[matched.browser] = true; + browser.version = matched.version; + } + + if (matched.platform) { + browser[matched.platform] = true + } + + // Chrome is Webkit, but Webkit is also Safari. + if (browser.chrome) { + browser.webkit = true; + } else if (browser.webkit) { + browser.safari = true; + } + + jQuery.browser = browser; + +})(jQuery, window); \ No newline at end of file diff --git a/MediaBrowser.WebDashboard/packages.config b/MediaBrowser.WebDashboard/packages.config index cd8da27323..5599c176d5 100644 --- a/MediaBrowser.WebDashboard/packages.config +++ b/MediaBrowser.WebDashboard/packages.config @@ -1,6 +1,6 @@  - + \ No newline at end of file