diff --git a/MediaBrowser.Model/Dto/BaseItemDto.cs b/MediaBrowser.Model/Dto/BaseItemDto.cs
index c469d97d62..9f88261841 100644
--- a/MediaBrowser.Model/Dto/BaseItemDto.cs
+++ b/MediaBrowser.Model/Dto/BaseItemDto.cs
@@ -133,6 +133,12 @@ namespace MediaBrowser.Model.Dto
/// The custom rating.
public string CustomRating { get; set; }
+ ///
+ /// Gets or sets the channel identifier.
+ ///
+ /// The channel identifier.
+ public string ChannelId { get; set; }
+
///
/// Gets or sets the overview.
///
diff --git a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs
index b3984bb6c2..cfa642add2 100644
--- a/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs
+++ b/MediaBrowser.Server.Implementations/Channels/ChannelManager.cs
@@ -385,6 +385,11 @@ namespace MediaBrowser.Server.Implementations.Channels
private async Task GetChannelItemEntity(ChannelItemInfo info, string internalChannnelId, CancellationToken cancellationToken)
{
+ if (string.IsNullOrEmpty(internalChannnelId))
+ {
+ throw new ArgumentNullException("internalChannnelId");
+ }
+
BaseItem item;
Guid id;
var isNew = false;
diff --git a/MediaBrowser.Server.Implementations/Dto/DtoService.cs b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
index bf77f18696..ceb39da038 100644
--- a/MediaBrowser.Server.Implementations/Dto/DtoService.cs
+++ b/MediaBrowser.Server.Implementations/Dto/DtoService.cs
@@ -1,5 +1,6 @@
using MediaBrowser.Common.Extensions;
using MediaBrowser.Common.IO;
+using MediaBrowser.Controller.Channels;
using MediaBrowser.Controller.Configuration;
using MediaBrowser.Controller.Drawing;
using MediaBrowser.Controller.Dto;
@@ -1140,6 +1141,13 @@ namespace MediaBrowser.Server.Implementations.Dto
{
dto.MediaSources = GetMediaSources(tvChannel);
}
+
+ var channelItem = item as IChannelItem;
+
+ if (channelItem != null)
+ {
+ dto.ChannelId = channelItem.ChannelId;
+ }
}
public List GetMediaSources(BaseItem item)
diff --git a/MediaBrowser.Server.Implementations/Session/WebSocketController.cs b/MediaBrowser.Server.Implementations/Session/WebSocketController.cs
index 6f4dd0a723..05eef611f5 100644
--- a/MediaBrowser.Server.Implementations/Session/WebSocketController.cs
+++ b/MediaBrowser.Server.Implementations/Session/WebSocketController.cs
@@ -14,7 +14,7 @@ using System.Threading.Tasks;
namespace MediaBrowser.Server.Implementations.Session
{
- public class WebSocketController : ISessionController
+ public class WebSocketController : ISessionController, IDisposable
{
public SessionInfo Session { get; private set; }
public IReadOnlyList Sockets { get; private set; }
@@ -244,5 +244,13 @@ namespace MediaBrowser.Server.Implementations.Session
return Task.WhenAll(tasks);
}
+
+ public void Dispose()
+ {
+ foreach (var socket in Sockets.ToList())
+ {
+ socket.Closed -= connection_Closed;
+ }
+ }
}
}