diff --git a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs index c917851112..9deb34e917 100644 --- a/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs +++ b/MediaBrowser.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpListener.cs @@ -78,6 +78,8 @@ private void Listen() // Handle the processing of a request in here. private void ListenerCallback(IAsyncResult asyncResult) { + _listenForNextRequest.Set(); + var listener = asyncResult.AsyncState as HttpListener; HttpListenerContext context; @@ -88,8 +90,7 @@ private void ListenerCallback(IAsyncResult asyncResult) { if (!isListening) { - _logger.Debug("Ignoring ListenerCallback() as HttpListener is no longer listening"); - return; + _logger.Debug("Ignoring ListenerCallback() as HttpListener is no longer listening"); return; } // The EndGetContext() method, as with all Begin/End asynchronous methods in the .NET Framework, // blocks until there is a request to be processed or some type of data is available. @@ -105,10 +106,6 @@ private void ListenerCallback(IAsyncResult asyncResult) _logger.Warn(errMsg); return; } - finally - { - _listenForNextRequest.Set(); - } Task.Factory.StartNew(() => InitTask(context)); } @@ -268,4 +265,4 @@ protected virtual void Dispose(bool disposing) } } } -} +} \ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json index 297e351ea6..ffe56e3d9c 100644 --- a/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json +++ b/MediaBrowser.Server.Implementations/Localization/JavaScript/javascript.json @@ -457,5 +457,10 @@ "MessagePendingMediaBrowserAccountAdded": "The Media Browser account has been added to this user. An email will be sent to the owner of the account. The invitation will need to be confirmed by clicking a link within the email.", "HeaderMediaBrowserAccountRemoved": "Media Browser Account Removed", "MessageMediaBrowserAccontRemoved": "The Media Browser account has been removed from this user.", - "TooltipLinkedToMediaBrowserConnect": "Linked to Media Browser Connect" + "TooltipLinkedToMediaBrowserConnect": "Linked to Media Browser Connect", + "HeaderUnrated": "Unrated", + "ValueDiscNumber": "Disc {0}", + "HeaderUnknownDate": "Unknown Date", + "HeaderUnknownYear": "Unknown Year", + "ValueMinutes": "{0} min" } diff --git a/MediaBrowser.WebDashboard/dashboard-ui/scripts/extensions.js b/MediaBrowser.WebDashboard/dashboard-ui/scripts/extensions.js index 712980d8b4..c819ecbae0 100644 --- a/MediaBrowser.WebDashboard/dashboard-ui/scripts/extensions.js +++ b/MediaBrowser.WebDashboard/dashboard-ui/scripts/extensions.js @@ -513,8 +513,15 @@ function ticks_to_human(str) { window.Globalize = { translate: function (key) { - return window.localizationGlossary[key] || key; + var val = window.localizationGlossary[key] || key; + for (var i = 1; i < arguments.length; i++) { + + val = val.replace('{' + (i - 1) + '}', arguments[i]); + + } + + return val; } }; diff --git a/MediaBrowser.WebDashboard/dashboard-ui/scripts/librarybrowser.js b/MediaBrowser.WebDashboard/dashboard-ui/scripts/librarybrowser.js index 064d21888f..11ef46dc0f 100644 --- a/MediaBrowser.WebDashboard/dashboard-ui/scripts/librarybrowser.js +++ b/MediaBrowser.WebDashboard/dashboard-ui/scripts/librarybrowser.js @@ -145,10 +145,10 @@ minutes = minutes || 1; - childText += Math.round(minutes) + " min"; + childText += Globalize.translate('ValueMinutes', Math.round(minutes)); } else { - childText += '0 min'; + childText += Globalize.translate('ValueMinutes', 0); } //childText += item.ChildCount == 1 ? "1 item" : item.ChildCount + " items"; @@ -248,28 +248,28 @@ var html = '
'; html += ''; @@ -313,14 +313,14 @@ var html = '
'; html += ''; @@ -499,7 +499,7 @@ if (options.index == 'disc') { - return item.ParentIndexNumber == null ? '' : 'Disc ' + item.ParentIndexNumber; + return item.ParentIndexNumber == null ? '' : Globalize.translate('ValueDiscNumber', item.ParentIndexNumber); } var sortBy = (options.sortBy || '').toLowerCase(); @@ -521,12 +521,12 @@ } if (sortBy.indexOf('officialrating') == 0) { - return item.OfficialRating || 'Unrated'; + return item.OfficialRating || Globalize.translate('HeaderUnrated'); } if (sortBy.indexOf('communityrating') == 0) { if (item.CommunityRating == null) { - return 'Unrated'; + return Globalize.translate('HeaderUnrated'); } return Math.floor(item.CommunityRating); @@ -534,7 +534,7 @@ if (sortBy.indexOf('criticrating') == 0) { if (item.CriticRating == null) { - return 'Unrated'; + return Globalize.translate('HeaderUnrated'); } return Math.floor(item.CriticRating); @@ -542,7 +542,7 @@ if (sortBy.indexOf('metascore') == 0) { if (item.Metascore == null) { - return 'Unrated'; + return Globalize.translate('HeaderUnrated'); } return Math.floor(item.Metascore); @@ -683,9 +683,9 @@ var textlines = []; if (item.Type == 'Episode') { - textlines.push(item.SeriesName || 'Unknown Series'); + textlines.push(item.SeriesName || ' '); } else if (item.Type == 'MusicAlbum') { - textlines.push(item.AlbumArtist || 'Unknown Artist'); + textlines.push(item.AlbumArtist || ' '); } var displayName = LibraryBrowser.getPosterViewDisplayName(item); @@ -696,18 +696,18 @@ textlines.push(displayName); if (item.Type == 'Audio') { - textlines.push(item.Artists.join(', ') || 'Unknown Artist'); + textlines.push(item.Artists.join(', ') || ' '); } if (item.Type == 'Game') { - textlines.push(item.GameSystem || 'Unknown Game System'); + textlines.push(item.GameSystem || ' '); } else if (item.Type == 'MusicGenre') { - textlines.push('Music genre'); + textlines.push(' '); } else if (item.Type == 'MusicArtist') { - textlines.push('Music artist'); + textlines.push(' '); } else { textlines.push(LibraryBrowser.getMiscInfoHtml(item)); @@ -874,7 +874,7 @@ if (options.showPremiereDateIndex && futureDateText) { - var val = futureDateText || "Unknown Date"; + var val = futureDateText || Globalize.translate('HeaderUnknownDate'); if (val != currentIndexValue) { @@ -882,7 +882,7 @@ currentIndexValue = val; } } else if (options.timeline) { - var year = item.ProductionYear || "Unknown Year"; + var year = item.ProductionYear || Globalize.translate('HeaderUnknownYear'); if (year != currentIndexValue) { @@ -1257,7 +1257,7 @@ if (progressHtml) { html += "
"; - html += progressHtml || " "; + html += progressHtml; html += "
"; } } diff --git a/ThirdParty/WebsocketSharp/websocket-sharp.dll b/ThirdParty/WebsocketSharp/websocket-sharp.dll index f32757a92c..d87a8255c1 100644 Binary files a/ThirdParty/WebsocketSharp/websocket-sharp.dll and b/ThirdParty/WebsocketSharp/websocket-sharp.dll differ