浏览代码

Merge pull request #2962 from MediaBrowser/dev

Dev
Luke 7 年之前
父节点
当前提交
497819b345
共有 40 个文件被更改,包括 172 次插入114 次删除
  1. 5 6
      Emby.Dlna/Didl/DidlBuilder.cs
  2. 8 1
      Emby.Server.Implementations/ApplicationHost.cs
  3. 24 2
      Emby.Server.Implementations/HttpServer/Security/AuthorizationContext.cs
  4. 0 9
      Emby.Server.Implementations/HttpServer/Security/SessionContext.cs
  5. 1 1
      Emby.Server.Implementations/Library/UserViewManager.cs
  6. 1 0
      Emby.Server.Implementations/Localization/Core/ar.json
  7. 1 0
      Emby.Server.Implementations/Localization/Core/bg-BG.json
  8. 1 0
      Emby.Server.Implementations/Localization/Core/ca.json
  9. 1 0
      Emby.Server.Implementations/Localization/Core/cs.json
  10. 1 0
      Emby.Server.Implementations/Localization/Core/da.json
  11. 1 0
      Emby.Server.Implementations/Localization/Core/de.json
  12. 1 0
      Emby.Server.Implementations/Localization/Core/en-GB.json
  13. 94 93
      Emby.Server.Implementations/Localization/Core/en-US.json
  14. 1 0
      Emby.Server.Implementations/Localization/Core/es-AR.json
  15. 1 0
      Emby.Server.Implementations/Localization/Core/es-MX.json
  16. 1 0
      Emby.Server.Implementations/Localization/Core/es.json
  17. 1 0
      Emby.Server.Implementations/Localization/Core/fr-CA.json
  18. 1 0
      Emby.Server.Implementations/Localization/Core/fr.json
  19. 1 0
      Emby.Server.Implementations/Localization/Core/he.json
  20. 1 0
      Emby.Server.Implementations/Localization/Core/hr.json
  21. 1 0
      Emby.Server.Implementations/Localization/Core/hu.json
  22. 1 0
      Emby.Server.Implementations/Localization/Core/it.json
  23. 1 0
      Emby.Server.Implementations/Localization/Core/kk.json
  24. 1 0
      Emby.Server.Implementations/Localization/Core/ko.json
  25. 1 0
      Emby.Server.Implementations/Localization/Core/lt-LT.json
  26. 1 0
      Emby.Server.Implementations/Localization/Core/ms.json
  27. 1 0
      Emby.Server.Implementations/Localization/Core/nb.json
  28. 1 0
      Emby.Server.Implementations/Localization/Core/nl.json
  29. 1 0
      Emby.Server.Implementations/Localization/Core/pl.json
  30. 1 0
      Emby.Server.Implementations/Localization/Core/pt-BR.json
  31. 1 0
      Emby.Server.Implementations/Localization/Core/pt-PT.json
  32. 1 0
      Emby.Server.Implementations/Localization/Core/ru.json
  33. 1 0
      Emby.Server.Implementations/Localization/Core/sk.json
  34. 1 0
      Emby.Server.Implementations/Localization/Core/sl-SI.json
  35. 1 0
      Emby.Server.Implementations/Localization/Core/sv.json
  36. 1 0
      Emby.Server.Implementations/Localization/Core/tr.json
  37. 1 0
      Emby.Server.Implementations/Localization/Core/zh-CN.json
  38. 1 0
      Emby.Server.Implementations/Localization/Core/zh-HK.json
  39. 1 1
      SharedVersion.cs
  40. 7 1
      SocketHttpListener/Net/HttpConnection.cs

+ 5 - 6
Emby.Dlna/Didl/DidlBuilder.cs

@@ -1071,8 +1071,10 @@ namespace Emby.Dlna.Didl
 
             writer.WriteStartElement(string.Empty, "res", NS_DIDL);
 
-            var width = albumartUrlInfo.Width;
-            var height = albumartUrlInfo.Height;
+            // Images must have a reported size or many clients (Bubble upnp), will only use the first thumbnail
+            // rather than using a larger one when available
+            var width = albumartUrlInfo.Width ?? maxWidth;
+            var height = albumartUrlInfo.Height ?? maxHeight;
 
             var contentFeatures = new ContentFeatureBuilder(_profile)
                 .BuildImageHeader(format, width, height, imageInfo.IsDirectStream, org_Pn);
@@ -1083,10 +1085,7 @@ namespace Emby.Dlna.Didl
                 contentFeatures
                 ));
 
-            if (width.HasValue && height.HasValue)
-            {
-                writer.WriteAttributeString("resolution", string.Format("{0}x{1}", width.Value, height.Value));
-            }
+            writer.WriteAttributeString("resolution", string.Format("{0}x{1}", width, height));
 
             writer.WriteString(albumartUrlInfo.Url);
 

+ 8 - 1
Emby.Server.Implementations/ApplicationHost.cs

@@ -775,7 +775,14 @@ namespace Emby.Server.Implementations
             }
 
             // Put the app config in the log for troubleshooting purposes
-            Logger.LogMultiline("Application configuration:", LogSeverity.Info, new StringBuilder(JsonSerializer.SerializeToString(ConfigurationManager.CommonConfiguration)));
+            var configJson = new StringBuilder(JsonSerializer.SerializeToString(ConfigurationManager.CommonConfiguration));
+
+            if (!string.IsNullOrWhiteSpace(ServerConfigurationManager.Configuration.CertificatePassword))
+            {
+                configJson = configJson.Replace(ServerConfigurationManager.Configuration.CertificatePassword, "####");
+            }
+
+            Logger.LogMultiline("Application configuration:", LogSeverity.Info, configJson);
 
             if (Plugins != null)
             {

+ 24 - 2
Emby.Server.Implementations/HttpServer/Security/AuthorizationContext.cs

@@ -5,6 +5,7 @@ using System;
 using System.Collections.Generic;
 using MediaBrowser.Model.Services;
 using System.Linq;
+using System.Threading;
 
 namespace Emby.Server.Implementations.HttpServer.Security
 {
@@ -95,23 +96,44 @@ namespace Emby.Server.Implementations.HttpServer.Security
                 {
                     info.UserId = tokenInfo.UserId;
 
+                    var updateToken = false;
+
                     // TODO: Remove these checks for IsNullOrWhiteSpace
                     if (string.IsNullOrWhiteSpace(info.Client))
                     {
                         info.Client = tokenInfo.AppName;
                     }
+
+                    if (string.IsNullOrWhiteSpace(info.DeviceId))
+                    {
+                        info.DeviceId = tokenInfo.DeviceId;
+                    }
+
+
                     if (string.IsNullOrWhiteSpace(info.Device))
                     {
                         info.Device = tokenInfo.DeviceName;
                     }
-                    if (string.IsNullOrWhiteSpace(info.DeviceId))
+                    else if (!string.Equals(info.Device, tokenInfo.DeviceName, StringComparison.OrdinalIgnoreCase))
                     {
-                        info.DeviceId = tokenInfo.DeviceId;
+                        updateToken = true;
+                        tokenInfo.DeviceName = info.Device;
                     }
+
                     if (string.IsNullOrWhiteSpace(info.Version))
                     {
                         info.Version = tokenInfo.AppVersion;
                     }
+                    else if (!string.Equals(info.Version, tokenInfo.AppVersion, StringComparison.OrdinalIgnoreCase))
+                    {
+                        updateToken = true;
+                        tokenInfo.AppVersion = info.Version;
+                    }
+
+                    if (updateToken)
+                    {
+                        _authRepo.Update(tokenInfo, CancellationToken.None);
+                    }
                 }
                 else
                 {

+ 0 - 9
Emby.Server.Implementations/HttpServer/Security/SessionContext.cs

@@ -25,15 +25,6 @@ namespace Emby.Server.Implementations.HttpServer.Security
         {
             var authorization = _authContext.GetAuthorizationInfo(requestContext);
 
-            //if (!string.IsNullOrWhiteSpace(authorization.Token))
-            //{
-            //    var auth = GetTokenInfo(requestContext);
-            //    if (auth != null)
-            //    {
-            //        return _sessionManager.GetSessionByAuthenticationToken(auth, authorization.DeviceId, requestContext.RemoteIp, authorization.Version);
-            //    }
-            //}
-
             var user = string.IsNullOrWhiteSpace(authorization.UserId) ? null : _userManager.GetUserById(authorization.UserId);
             return _sessionManager.LogSessionActivity(authorization.Client, authorization.Version, authorization.DeviceId, authorization.Device, requestContext.RemoteIp, user);
         }

+ 1 - 1
Emby.Server.Implementations/Library/UserViewManager.cs

@@ -96,7 +96,7 @@ namespace Emby.Server.Implementations.Library
                 if (parents.Count > 0)
                 {
                     var localizationKey = string.Equals(viewType, CollectionType.TvShows, StringComparison.OrdinalIgnoreCase) ?
-                        "Shows" :
+                        "TvShows" :
                         "Movies";
 
                     list.Add(GetUserView(parents, viewType, localizationKey, string.Empty, user, query.PresetViews, cancellationToken));

+ 1 - 0
Emby.Server.Implementations/Localization/Core/ar.json

@@ -27,6 +27,7 @@
     "Artists": "\u0627\u0644\u0641\u0646\u0627\u0646\u0648\u0646",
     "Folders": "\u0627\u0644\u0645\u062c\u0644\u062f\u0627\u062a",
     "Songs": "\u0627\u0644\u0623\u063a\u0627\u0646\u064a",
+    "TvShows": "TV Shows",
     "Shows": "Shows",
     "Genres": "\u0623\u0646\u0648\u0627\u0639 \u0627\u0644\u0623\u0641\u0644\u0627\u0645",
     "NameSeasonNumber": "\u0627\u0644\u0645\u0648\u0633\u0645 {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/bg-BG.json

@@ -27,6 +27,7 @@
     "Artists": "\u0418\u0437\u043f\u044a\u043b\u043d\u0438\u0442\u0435\u043b\u0438",
     "Folders": "\u041f\u0430\u043f\u043a\u0438",
     "Songs": "\u041f\u0435\u0441\u043d\u0438",
+    "TvShows": "TV Shows",
     "Shows": "\u0421\u0435\u0440\u0438\u0430\u043b\u0438",
     "Genres": "\u0416\u0430\u043d\u0440\u043e\u0432\u0435",
     "NameSeasonNumber": "\u0421\u0435\u0437\u043e\u043d {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/ca.json

@@ -27,6 +27,7 @@
     "Artists": "Artists",
     "Folders": "Folders",
     "Songs": "Songs",
+    "TvShows": "TV Shows",
     "Shows": "Shows",
     "Genres": "G\u00e8neres",
     "NameSeasonNumber": "Season {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/cs.json

@@ -27,6 +27,7 @@
     "Artists": "Um\u011blci",
     "Folders": "Slo\u017eky",
     "Songs": "Skladby",
+    "TvShows": "TV Shows",
     "Shows": "Seri\u00e1ly",
     "Genres": "\u017d\u00e1nry",
     "NameSeasonNumber": "Sez\u00f3na {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/da.json

@@ -27,6 +27,7 @@
     "Artists": "Kunstner",
     "Folders": "Mapper",
     "Songs": "Sange",
+    "TvShows": "TV Shows",
     "Shows": "Shows",
     "Genres": "Genre",
     "NameSeasonNumber": "S\u00e6son {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/de.json

@@ -27,6 +27,7 @@
     "Artists": "Interpreten",
     "Folders": "Verzeichnisse",
     "Songs": "Songs",
+    "TvShows": "TV Shows",
     "Shows": "Serien",
     "Genres": "Genres",
     "NameSeasonNumber": "Staffel {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/en-GB.json

@@ -27,6 +27,7 @@
     "Artists": "Artists",
     "Folders": "Folders",
     "Songs": "Songs",
+    "TvShows": "TV Shows",
     "Shows": "Shows",
     "Genres": "Genres",
     "NameSeasonNumber": "Season {0}",

+ 94 - 93
Emby.Server.Implementations/Localization/Core/en-US.json

@@ -1,95 +1,96 @@
 {
-    "Latest": "Latest",
-    "ValueSpecialEpisodeName": "Special - {0}",
-    "Inherit": "Inherit",
-    "Books": "Books",
-    "Music": "Music",
-    "Games": "Games",
-    "Photos": "Photos",
-    "MixedContent": "Mixed content",
-    "MusicVideos": "Music videos",
-    "HomeVideos": "Home videos",
-    "Playlists": "Playlists",
-    "HeaderRecordingGroups": "Recording Groups",
-    "HeaderContinueWatching": "Continue Watching",
-    "HeaderFavoriteArtists": "Favorite Artists",
-    "HeaderFavoriteSongs": "Favorite Songs",
-    "HeaderAlbumArtists": "Album Artists",
-    "HeaderFavoriteAlbums": "Favorite Albums",
-    "HeaderFavoriteEpisodes": "Favorite Episodes",
-    "HeaderFavoriteShows": "Favorite Shows",
-    "HeaderNextUp": "Next Up",
-    "Favorites": "Favorites",
-    "Collections": "Collections",
-    "Channels": "Channels",
-    "Movies": "Movies",
-    "Albums": "Albums",
-    "Artists": "Artists",
-    "Folders": "Folders",
-    "Songs": "Songs",
-    "Shows": "Shows",
-    "Genres": "Genres",
-    "NameSeasonNumber": "Season {0}",
-    "AppDeviceValues": "App: {0}, Device: {1}",
-    "UserDownloadingItemWithValues": "{0} is downloading {1}",
-    "HeaderLiveTV": "Live TV",
-    "ChapterNameValue": "Chapter {0}",
-    "ScheduledTaskFailedWithName": "{0} failed",
-    "LabelRunningTimeValue": "Running time: {0}",
-    "ScheduledTaskStartedWithName": "{0} started",
-    "VersionNumber": "Version {0}",
-    "PluginInstalledWithName": "{0} was installed",
-    "StartupEmbyServerIsLoading": "Emby Server is loading. Please try again shortly.",
-    "PluginUpdatedWithName": "{0} was updated",
-    "PluginUninstalledWithName": "{0} was uninstalled",
-    "ItemAddedWithName": "{0} was added to the library",
-    "ItemRemovedWithName": "{0} was removed from the library",
-    "LabelIpAddressValue": "Ip address: {0}",
-    "DeviceOnlineWithName": "{0} is connected",
-    "UserOnlineFromDevice": "{0} is online from {1}",
-    "ProviderValue": "Provider: {0}",
-    "SubtitlesDownloadedForItem": "Subtitles downloaded for {0}",
-    "UserCreatedWithName": "User {0} has been created",
-    "UserPasswordChangedWithName": "Password has been changed for user {0}",
-    "UserDeletedWithName": "User {0} has been deleted",
-    "UserConfigurationUpdatedWithName": "User configuration has been updated for {0}",
-    "MessageServerConfigurationUpdated": "Server configuration has been updated",
-    "MessageNamedServerConfigurationUpdatedWithValue": "Server configuration section {0} has been updated",
-    "MessageApplicationUpdated": "Emby Server has been updated",
-    "FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
-    "AuthenticationSucceededWithUserName": "{0} successfully authenticated",
-    "UserOfflineFromDevice": "{0} has disconnected from {1}",
-    "DeviceOfflineWithName": "{0} has disconnected",
-    "UserStartedPlayingItemWithValues": "{0} has started playing {1}",
-    "UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
-    "NotificationOptionPluginError": "Plugin failure",
-    "NotificationOptionApplicationUpdateAvailable": "Application update available",
-    "NotificationOptionApplicationUpdateInstalled": "Application update installed",
-    "NotificationOptionPluginUpdateInstalled": "Plugin update installed",
-    "NotificationOptionPluginInstalled": "Plugin installed",
-    "NotificationOptionPluginUninstalled": "Plugin uninstalled",
-    "NotificationOptionVideoPlayback": "Video playback started",
-    "NotificationOptionAudioPlayback": "Audio playback started",
-    "NotificationOptionGamePlayback": "Game playback started",
-    "NotificationOptionVideoPlaybackStopped": "Video playback stopped",
-    "NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
-    "NotificationOptionGamePlaybackStopped": "Game playback stopped",
-    "NotificationOptionTaskFailed": "Scheduled task failure",
-    "NotificationOptionInstallationFailed": "Installation failure",
-    "NotificationOptionNewLibraryContent": "New content added",
-    "NotificationOptionCameraImageUploaded": "Camera image uploaded",
-    "NotificationOptionUserLockedOut": "User locked out",
-    "NotificationOptionServerRestartRequired": "Server restart required",
-    "UserLockedOutWithName": "User {0} has been locked out",
-    "SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
-    "Sync": "Sync",
-    "User": "User",
-    "System": "System",
-    "Application": "Application",
-    "Plugin": "Plugin",
-    "LabelExit": "Exit",
-    "LabelVisitCommunity": "Visit Community",
-    "LabelBrowseLibrary": "Browse Library",
-    "LabelConfigureServer": "Configure Emby",
-    "LabelRestartServer": "Restart Server"
+  "Latest": "Latest",
+  "ValueSpecialEpisodeName": "Special - {0}",
+  "Inherit": "Inherit",
+  "Books": "Books",
+  "Music": "Music",
+  "Games": "Games",
+  "Photos": "Photos",
+  "MixedContent": "Mixed content",
+  "MusicVideos": "Music videos",
+  "HomeVideos": "Home videos",
+  "Playlists": "Playlists",
+  "HeaderRecordingGroups": "Recording Groups",
+  "HeaderContinueWatching": "Continue Watching",
+  "HeaderFavoriteArtists": "Favorite Artists",
+  "HeaderFavoriteSongs": "Favorite Songs",
+  "HeaderAlbumArtists": "Album Artists",
+  "HeaderFavoriteAlbums": "Favorite Albums",
+  "HeaderFavoriteEpisodes": "Favorite Episodes",
+  "HeaderFavoriteShows": "Favorite Shows",
+  "HeaderNextUp": "Next Up",
+  "Favorites": "Favorites",
+  "Collections": "Collections",
+  "Channels": "Channels",
+  "Movies": "Movies",
+  "Albums": "Albums",
+  "Artists": "Artists",
+  "Folders": "Folders",
+  "Songs": "Songs",
+  "TvShows": "TV Shows",
+  "Shows": "Shows",
+  "Genres": "Genres",
+  "NameSeasonNumber": "Season {0}",
+  "AppDeviceValues": "App: {0}, Device: {1}",
+  "UserDownloadingItemWithValues": "{0} is downloading {1}",
+  "HeaderLiveTV": "Live TV",
+  "ChapterNameValue": "Chapter {0}",
+  "ScheduledTaskFailedWithName": "{0} failed",
+  "LabelRunningTimeValue": "Running time: {0}",
+  "ScheduledTaskStartedWithName": "{0} started",
+  "VersionNumber": "Version {0}",
+  "PluginInstalledWithName": "{0} was installed",
+  "StartupEmbyServerIsLoading": "Emby Server is loading. Please try again shortly.",
+  "PluginUpdatedWithName": "{0} was updated",
+  "PluginUninstalledWithName": "{0} was uninstalled",
+  "ItemAddedWithName": "{0} was added to the library",
+  "ItemRemovedWithName": "{0} was removed from the library",
+  "LabelIpAddressValue": "Ip address: {0}",
+  "DeviceOnlineWithName": "{0} is connected",
+  "UserOnlineFromDevice": "{0} is online from {1}",
+  "ProviderValue": "Provider: {0}",
+  "SubtitlesDownloadedForItem": "Subtitles downloaded for {0}",
+  "UserCreatedWithName": "User {0} has been created",
+  "UserPasswordChangedWithName": "Password has been changed for user {0}",
+  "UserDeletedWithName": "User {0} has been deleted",
+  "UserConfigurationUpdatedWithName": "User configuration has been updated for {0}",
+  "MessageServerConfigurationUpdated": "Server configuration has been updated",
+  "MessageNamedServerConfigurationUpdatedWithValue": "Server configuration section {0} has been updated",
+  "MessageApplicationUpdated": "Emby Server has been updated",
+  "FailedLoginAttemptWithUserName": "Failed login attempt from {0}",
+  "AuthenticationSucceededWithUserName": "{0} successfully authenticated",
+  "UserOfflineFromDevice": "{0} has disconnected from {1}",
+  "DeviceOfflineWithName": "{0} has disconnected",
+  "UserStartedPlayingItemWithValues": "{0} has started playing {1}",
+  "UserStoppedPlayingItemWithValues": "{0} has stopped playing {1}",
+  "NotificationOptionPluginError": "Plugin failure",
+  "NotificationOptionApplicationUpdateAvailable": "Application update available",
+  "NotificationOptionApplicationUpdateInstalled": "Application update installed",
+  "NotificationOptionPluginUpdateInstalled": "Plugin update installed",
+  "NotificationOptionPluginInstalled": "Plugin installed",
+  "NotificationOptionPluginUninstalled": "Plugin uninstalled",
+  "NotificationOptionVideoPlayback": "Video playback started",
+  "NotificationOptionAudioPlayback": "Audio playback started",
+  "NotificationOptionGamePlayback": "Game playback started",
+  "NotificationOptionVideoPlaybackStopped": "Video playback stopped",
+  "NotificationOptionAudioPlaybackStopped": "Audio playback stopped",
+  "NotificationOptionGamePlaybackStopped": "Game playback stopped",
+  "NotificationOptionTaskFailed": "Scheduled task failure",
+  "NotificationOptionInstallationFailed": "Installation failure",
+  "NotificationOptionNewLibraryContent": "New content added",
+  "NotificationOptionCameraImageUploaded": "Camera image uploaded",
+  "NotificationOptionUserLockedOut": "User locked out",
+  "NotificationOptionServerRestartRequired": "Server restart required",
+  "UserLockedOutWithName": "User {0} has been locked out",
+  "SubtitleDownloadFailureForItem": "Subtitles failed to download for {0}",
+  "Sync": "Sync",
+  "User": "User",
+  "System": "System",
+  "Application": "Application",
+  "Plugin": "Plugin",
+  "LabelExit": "Exit",
+  "LabelVisitCommunity": "Visit Community",
+  "LabelBrowseLibrary": "Browse Library",
+  "LabelConfigureServer": "Configure Emby",
+  "LabelRestartServer": "Restart Server"
 }

+ 1 - 0
Emby.Server.Implementations/Localization/Core/es-AR.json

@@ -27,6 +27,7 @@
     "Artists": "Artists",
     "Folders": "Folders",
     "Songs": "Songs",
+    "TvShows": "TV Shows",
     "Shows": "Series",
     "Genres": "Genres",
     "NameSeasonNumber": "Season {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/es-MX.json

@@ -27,6 +27,7 @@
     "Artists": "Artistas",
     "Folders": "Carpetas",
     "Songs": "Canciones",
+    "TvShows": "TV Shows",
     "Shows": "Programas",
     "Genres": "G\u00e9neros",
     "NameSeasonNumber": "Temporada {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/es.json

@@ -27,6 +27,7 @@
     "Artists": "Artistas",
     "Folders": "Carpetas",
     "Songs": "Canciones",
+    "TvShows": "TV Shows",
     "Shows": "Series",
     "Genres": "G\u00e9neros",
     "NameSeasonNumber": "Temporada {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/fr-CA.json

@@ -27,6 +27,7 @@
     "Artists": "Artists",
     "Folders": "Folders",
     "Songs": "Songs",
+    "TvShows": "TV Shows",
     "Shows": "Series",
     "Genres": "Genres",
     "NameSeasonNumber": "Season {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/fr.json

@@ -27,6 +27,7 @@
     "Artists": "Artistes",
     "Folders": "Dossiers",
     "Songs": "Chansons",
+    "TvShows": "TV Shows",
     "Shows": "\u00c9missions",
     "Genres": "Genres",
     "NameSeasonNumber": "Saison {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/he.json

@@ -27,6 +27,7 @@
     "Artists": "Artists",
     "Folders": "Folders",
     "Songs": "Songs",
+    "TvShows": "TV Shows",
     "Shows": "Shows",
     "Genres": "\u05d6'\u05d0\u05e0\u05e8\u05d9\u05dd",
     "NameSeasonNumber": "Season {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/hr.json

@@ -27,6 +27,7 @@
     "Artists": "Izvo\u0111a\u010di",
     "Folders": "Mape",
     "Songs": "Pjesme",
+    "TvShows": "TV Shows",
     "Shows": "Shows",
     "Genres": "\u017danrovi",
     "NameSeasonNumber": "Sezona {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/hu.json

@@ -27,6 +27,7 @@
     "Artists": "Artists",
     "Folders": "Folders",
     "Songs": "Songs",
+    "TvShows": "TV Shows",
     "Shows": "Shows",
     "Genres": "M\u0171fajok",
     "NameSeasonNumber": "Season {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/it.json

@@ -27,6 +27,7 @@
     "Artists": "Artisti",
     "Folders": "Cartelle",
     "Songs": "Canzoni",
+    "TvShows": "TV Shows",
     "Shows": "Programmi",
     "Genres": "Generi",
     "NameSeasonNumber": "Stagione {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/kk.json

@@ -27,6 +27,7 @@
     "Artists": "\u041e\u0440\u044b\u043d\u0434\u0430\u0443\u0448\u044b\u043b\u0430\u0440",
     "Folders": "\u049a\u0430\u043b\u0442\u0430\u043b\u0430\u0440",
     "Songs": "\u04d8\u0443\u0435\u043d\u0434\u0435\u0440",
+    "TvShows": "TV Shows",
     "Shows": "\u041a\u04e9\u0440\u0441\u0435\u0442\u0456\u043c\u0434\u0435\u0440",
     "Genres": "\u0416\u0430\u043d\u0440\u043b\u0430\u0440",
     "NameSeasonNumber": "{0}-\u043c\u0430\u0443\u0441\u044b\u043c",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/ko.json

@@ -27,6 +27,7 @@
     "Artists": "Artists",
     "Folders": "Folders",
     "Songs": "Songs",
+    "TvShows": "TV Shows",
     "Shows": "Shows",
     "Genres": "Genres",
     "NameSeasonNumber": "Season {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/lt-LT.json

@@ -27,6 +27,7 @@
     "Artists": "Artists",
     "Folders": "Folders",
     "Songs": "Songs",
+    "TvShows": "TV Shows",
     "Shows": "Shows",
     "Genres": "\u017danrai",
     "NameSeasonNumber": "Season {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/ms.json

@@ -27,6 +27,7 @@
     "Artists": "Artists",
     "Folders": "Folders",
     "Songs": "Songs",
+    "TvShows": "TV Shows",
     "Shows": "Series",
     "Genres": "Genres",
     "NameSeasonNumber": "Season {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/nb.json

@@ -27,6 +27,7 @@
     "Artists": "Artister",
     "Folders": "Mapper",
     "Songs": "Sanger",
+    "TvShows": "TV Shows",
     "Shows": "Programmer",
     "Genres": "Sjanger",
     "NameSeasonNumber": "Sesong {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/nl.json

@@ -27,6 +27,7 @@
     "Artists": "Artiesten",
     "Folders": "Mappen",
     "Songs": "Titels",
+    "TvShows": "TV Shows",
     "Shows": "Series",
     "Genres": "Genres",
     "NameSeasonNumber": "Seizoen {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/pl.json

@@ -27,6 +27,7 @@
     "Artists": "Wykonawcy",
     "Folders": "Foldery",
     "Songs": "Utwory",
+    "TvShows": "TV Shows",
     "Shows": "Seriale",
     "Genres": "Gatunki",
     "NameSeasonNumber": "Sezon {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/pt-BR.json

@@ -27,6 +27,7 @@
     "Artists": "Artistas",
     "Folders": "Pastas",
     "Songs": "M\u00fasicas",
+    "TvShows": "TV Shows",
     "Shows": "S\u00e9ries",
     "Genres": "G\u00eaneros",
     "NameSeasonNumber": "Temporada {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/pt-PT.json

@@ -27,6 +27,7 @@
     "Artists": "Artists",
     "Folders": "Folders",
     "Songs": "Songs",
+    "TvShows": "TV Shows",
     "Shows": "Shows",
     "Genres": "Genres",
     "NameSeasonNumber": "Season {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/ru.json

@@ -27,6 +27,7 @@
     "Artists": "\u0418\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u0438",
     "Folders": "\u041f\u0430\u043f\u043a\u0438",
     "Songs": "\u041a\u043e\u043c\u043f\u043e\u0437\u0438\u0446\u0438\u0438",
+    "TvShows": "TV Shows",
     "Shows": "\u041f\u0435\u0440\u0435\u0434\u0430\u0447\u0438",
     "Genres": "\u0416\u0430\u043d\u0440\u044b",
     "NameSeasonNumber": "\u0421\u0435\u0437\u043e\u043d {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/sk.json

@@ -27,6 +27,7 @@
     "Artists": "Artists",
     "Folders": "Folders",
     "Songs": "Songs",
+    "TvShows": "TV Shows",
     "Shows": "Series",
     "Genres": "Genres",
     "NameSeasonNumber": "Season {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/sl-SI.json

@@ -27,6 +27,7 @@
     "Artists": "Artists",
     "Folders": "Folders",
     "Songs": "Songs",
+    "TvShows": "TV Shows",
     "Shows": "Serije",
     "Genres": "Genres",
     "NameSeasonNumber": "Season {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/sv.json

@@ -27,6 +27,7 @@
     "Artists": "Artister",
     "Folders": "Mappar",
     "Songs": "L\u00e5tar",
+    "TvShows": "TV Shows",
     "Shows": "Serier",
     "Genres": "Genrer",
     "NameSeasonNumber": "S\u00e4song {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/tr.json

@@ -27,6 +27,7 @@
     "Artists": "Artists",
     "Folders": "Folders",
     "Songs": "Songs",
+    "TvShows": "TV Shows",
     "Shows": "Shows",
     "Genres": "Genres",
     "NameSeasonNumber": "Season {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/zh-CN.json

@@ -27,6 +27,7 @@
     "Artists": "\u827a\u672f\u5bb6",
     "Folders": "\u6587\u4ef6\u5939",
     "Songs": "\u6b4c\u66f2",
+    "TvShows": "TV Shows",
     "Shows": "\u8282\u76ee",
     "Genres": "\u98ce\u683c",
     "NameSeasonNumber": "\u5b63 {0}",

+ 1 - 0
Emby.Server.Implementations/Localization/Core/zh-HK.json

@@ -27,6 +27,7 @@
     "Artists": "Artists",
     "Folders": "Folders",
     "Songs": "Songs",
+    "TvShows": "TV Shows",
     "Shows": "Shows",
     "Genres": "Genres",
     "NameSeasonNumber": "Season {0}",

+ 1 - 1
SharedVersion.cs

@@ -1,3 +1,3 @@
 using System.Reflection;
 
-[assembly: AssemblyVersion("3.2.33.11")]
+[assembly: AssemblyVersion("3.2.33.12")]

+ 7 - 1
SocketHttpListener/Net/HttpConnection.cs

@@ -528,7 +528,13 @@ namespace SocketHttpListener.Net
                 finally
                 {
                     if (s != null)
-                        s.Close();
+                    {
+                        try
+                        {
+                            s.Close();
+                        }
+                        catch { }
+                    }
                 }
                 Unbind();
                 RemoveConnection();