diff options
| author | Luke Pulverenti <luke.pulverenti@gmail.com> | 2017-05-24 15:12:55 -0400 |
|---|---|---|
| committer | Luke Pulverenti <luke.pulverenti@gmail.com> | 2017-05-24 15:12:55 -0400 |
| commit | f07af448fa11330db93dd7ddcabac37ef9e014c7 (patch) | |
| tree | 1b52a4f73d674a48258c2f14c94117b96ca4a678 /Emby.Server.Implementations | |
| parent | 27c3acb2bfde9025c33f584c759a4038020cb702 (diff) | |
update main projects
Diffstat (limited to 'Emby.Server.Implementations')
11 files changed, 118 insertions, 194 deletions
diff --git a/Emby.Server.Implementations/Data/SqliteItemRepository.cs b/Emby.Server.Implementations/Data/SqliteItemRepository.cs index 7812cfb3c..49ba6c9f3 100644 --- a/Emby.Server.Implementations/Data/SqliteItemRepository.cs +++ b/Emby.Server.Implementations/Data/SqliteItemRepository.cs @@ -1245,10 +1245,6 @@ namespace Emby.Server.Implementations.Data { if (_config.Configuration.SkipDeserializationForBasicTypes) { - if (type == typeof(Person)) - { - return false; - } if (type == typeof(Channel)) { return false; @@ -1267,6 +1263,10 @@ namespace Emby.Server.Implementations.Data } } + if (type == typeof(Person)) + { + return false; + } if (type == typeof(MusicGenre)) { return false; @@ -5276,7 +5276,6 @@ namespace Emby.Server.Implementations.Data NameLessThan = query.NameLessThan, NameStartsWith = query.NameStartsWith, NameStartsWithOrGreater = query.NameStartsWithOrGreater, - AlbumArtistStartsWithOrGreater = query.AlbumArtistStartsWithOrGreater, Tags = query.Tags, OfficialRatings = query.OfficialRatings, GenreIds = query.GenreIds, diff --git a/Emby.Server.Implementations/Emby.Server.Implementations.csproj b/Emby.Server.Implementations/Emby.Server.Implementations.csproj index b2f1f0ceb..ff3a983db 100644 --- a/Emby.Server.Implementations/Emby.Server.Implementations.csproj +++ b/Emby.Server.Implementations/Emby.Server.Implementations.csproj @@ -10,9 +10,8 @@ <RootNamespace>Emby.Server.Implementations</RootNamespace> <AssemblyName>Emby.Server.Implementations</AssemblyName> <FileAlignment>512</FileAlignment> - <ProjectTypeGuids>{786C830F-07A1-408B-BD7F-6EE04809D6DB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids> - <TargetFrameworkProfile>Profile7</TargetFrameworkProfile> - <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> + <TargetFrameworkProfile /> + <TargetFrameworkVersion>v4.6.2</TargetFrameworkVersion> </PropertyGroup> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <DebugSymbols>true</DebugSymbols> @@ -291,9 +290,9 @@ <Project>{2e781478-814d-4a48-9d80-bff206441a65}</Project> <Name>MediaBrowser.Server.Implementations</Name> </ProjectReference> - <ProjectReference Include="..\SocketHttpListener.Portable\SocketHttpListener.Portable.csproj"> - <Project>{4f26d5d8-a7b0-42b3-ba42-7cb7d245934e}</Project> - <Name>SocketHttpListener.Portable</Name> + <ProjectReference Include="..\SocketHttpListener\SocketHttpListener.csproj"> + <Project>{1d74413b-e7cf-455b-b021-f52bdf881542}</Project> + <Name>SocketHttpListener</Name> </ProjectReference> <Reference Include="Emby.XmlTv, Version=1.0.6299.28292, Culture=neutral, processorArchitecture=MSIL"> <HintPath>..\packages\Emby.XmlTv.1.0.8\lib\portable-net45+win8\Emby.XmlTv.dll</HintPath> @@ -313,6 +312,17 @@ </Reference> </ItemGroup> <ItemGroup> + <Reference Include="System" /> + <Reference Include="System.Core" /> + <Reference Include="System.Runtime.Serialization" /> + <Reference Include="System.Xml.Linq" /> + <Reference Include="System.Data.DataSetExtensions" /> + <Reference Include="Microsoft.CSharp" /> + <Reference Include="System.Data" /> + <Reference Include="System.Net.Http" /> + <Reference Include="System.Xml" /> + </ItemGroup> + <ItemGroup> <EmbeddedResource Include="Localization\Core\ar.json" /> <EmbeddedResource Include="Localization\Core\bg-BG.json" /> <EmbeddedResource Include="Localization\Core\ca.json" /> @@ -410,7 +420,7 @@ <ItemGroup> <EmbeddedResource Include="Localization\Ratings\uk.txt" /> </ItemGroup> - <Import Project="$(MSBuildExtensionsPath32)\Microsoft\Portable\$(TargetFrameworkVersion)\Microsoft.Portable.CSharp.targets" /> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. Other similar extension points exist, see Microsoft.Common.targets. <Target Name="BeforeBuild"> diff --git a/Emby.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpRequest.cs b/Emby.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpRequest.cs index b3fcde745..2dfe6a9e3 100644 --- a/Emby.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpRequest.cs +++ b/Emby.Server.Implementations/HttpServer/SocketSharp/WebSocketSharpRequest.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.IO; -using System.Net; using System.Text; using Emby.Server.Implementations.HttpServer; using Emby.Server.Implementations.HttpServer.SocketSharp; @@ -374,7 +373,7 @@ namespace Emby.Server.Implementations.HttpServer.SocketSharp this.pathInfo = request.RawUrl; } - this.pathInfo = WebUtility.UrlDecode(pathInfo); + this.pathInfo = System.Net.WebUtility.UrlDecode(pathInfo); this.pathInfo = NormalizePathInfo(pathInfo, mode); } return this.pathInfo; @@ -440,7 +439,7 @@ namespace Emby.Server.Implementations.HttpServer.SocketSharp cookies = new Dictionary<string, System.Net.Cookie>(); foreach (var cookie in this.request.Cookies) { - var httpCookie = (Cookie) cookie; + var httpCookie = (System.Net.Cookie) cookie; cookies[httpCookie.Name] = new System.Net.Cookie(httpCookie.Name, httpCookie.Value, httpCookie.Path, httpCookie.Domain); } } diff --git a/Emby.Server.Implementations/IO/FileRefresher.cs b/Emby.Server.Implementations/IO/FileRefresher.cs index edff25156..885cfa3c8 100644 --- a/Emby.Server.Implementations/IO/FileRefresher.cs +++ b/Emby.Server.Implementations/IO/FileRefresher.cs @@ -231,7 +231,7 @@ namespace Emby.Server.Implementations.IO private bool IsFileLocked(string path) { - if (_environmentInfo.OperatingSystem != OperatingSystem.Windows) + if (_environmentInfo.OperatingSystem != MediaBrowser.Model.System.OperatingSystem.Windows) { // Causing lockups on linux return false; diff --git a/Emby.Server.Implementations/Library/LibraryManager.cs b/Emby.Server.Implementations/Library/LibraryManager.cs index 125db7fd6..394e357c7 100644 --- a/Emby.Server.Implementations/Library/LibraryManager.cs +++ b/Emby.Server.Implementations/Library/LibraryManager.cs @@ -1086,12 +1086,6 @@ namespace Emby.Server.Implementations.Library try { await PerformLibraryValidation(progress, cancellationToken).ConfigureAwait(false); - - if (!ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey) - { - ConfigurationManager.Configuration.EnableSeriesPresentationUniqueKey = true; - ConfigurationManager.SaveConfiguration(); - } } finally { diff --git a/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs index 50cb68a95..2afc3744f 100644 --- a/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs +++ b/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs @@ -511,8 +511,8 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun } // The UDP method is not working reliably on OSX, and on BSD it hasn't been tested yet - var enableHttpStream = _environment.OperatingSystem == OperatingSystem.OSX - || _environment.OperatingSystem == OperatingSystem.BSD; + var enableHttpStream = _environment.OperatingSystem == MediaBrowser.Model.System.OperatingSystem.OSX + || _environment.OperatingSystem == MediaBrowser.Model.System.OperatingSystem.BSD; enableHttpStream = true; if (enableHttpStream) { @@ -597,10 +597,12 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun // Need a way to set the Receive timeout on the socket otherwise this might never timeout? try { - await udpClient.SendAsync(discBytes, discBytes.Length, new IpEndPointInfo(new IpAddressInfo("255.255.255.255", IpAddressFamily.InterNetwork), 65001), cancellationToken); + await udpClient.SendToAsync(discBytes, 0, discBytes.Length, new IpEndPointInfo(new IpAddressInfo("255.255.255.255", IpAddressFamily.InterNetwork), 65001), cancellationToken); + var receiveBuffer = new byte[8192]; + while (!cancellationToken.IsCancellationRequested) { - var response = await udpClient.ReceiveAsync(cancellationToken).ConfigureAwait(false); + var response = await udpClient.ReceiveAsync(receiveBuffer, 0, receiveBuffer.Length, cancellationToken).ConfigureAwait(false); var deviceIp = response.RemoteEndPoint.IpAddress.Address; // check to make sure we have enough bytes received to be a valid message and make sure the 2nd byte is the discover reply byte diff --git a/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunManager.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunManager.cs index 3202b7313..4dd6e3c71 100644 --- a/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunManager.cs +++ b/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunManager.cs @@ -114,7 +114,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun var ipEndPoint = new IpEndPointInfo(remoteIp, HdHomeRunPort); var lockkeyMsg = CreateGetMessage(tuner, "lockkey"); - await socket.SendAsync(lockkeyMsg, lockkeyMsg.Length, ipEndPoint, cancellationToken); + await socket.SendToAsync(lockkeyMsg, 0, lockkeyMsg.Length, ipEndPoint, cancellationToken); var response = await socket.ReceiveAsync(cancellationToken).ConfigureAwait(false); string returnVal; ParseReturnMessage(response.Buffer, response.ReceivedBytes, out returnVal); @@ -128,6 +128,8 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun using (var tcpClient = _socketFactory.CreateTcpSocket(_remoteIp, HdHomeRunPort)) { + var receiveBuffer = new byte[8192]; + if (!_lockkey.HasValue) { var rand = new Random(); @@ -144,8 +146,8 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun _activeTuner = i; var lockKeyString = String.Format("{0:d}", _lockkey.Value); var lockkeyMsg = CreateSetMessage(i, "lockkey", lockKeyString, null); - await tcpClient.SendAsync(lockkeyMsg, lockkeyMsg.Length, ipEndPoint, cancellationToken).ConfigureAwait(false); - var response = await tcpClient.ReceiveAsync(cancellationToken).ConfigureAwait(false); + await tcpClient.SendToAsync(lockkeyMsg, 0, lockkeyMsg.Length, ipEndPoint, cancellationToken).ConfigureAwait(false); + var response = await tcpClient.ReceiveAsync(receiveBuffer, 0, receiveBuffer.Length, cancellationToken).ConfigureAwait(false); string returnVal; // parse response to make sure it worked if (!ParseReturnMessage(response.Buffer, response.ReceivedBytes, out returnVal)) @@ -155,8 +157,8 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun foreach(Tuple<string,string> command in commandList) { var channelMsg = CreateSetMessage(i, command.Item1, command.Item2, _lockkey.Value); - await tcpClient.SendAsync(channelMsg, channelMsg.Length, ipEndPoint, cancellationToken).ConfigureAwait(false); - response = await tcpClient.ReceiveAsync(cancellationToken).ConfigureAwait(false); + await tcpClient.SendToAsync(channelMsg, 0, channelMsg.Length, ipEndPoint, cancellationToken).ConfigureAwait(false); + response = await tcpClient.ReceiveAsync(receiveBuffer, 0, receiveBuffer.Length, cancellationToken).ConfigureAwait(false); // parse response to make sure it worked if (!ParseReturnMessage(response.Buffer, response.ReceivedBytes, out returnVal)) { @@ -169,8 +171,8 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun var targetValue = String.Format("rtp://{0}:{1}", localIp, localPort); var targetMsg = CreateSetMessage(i, "target", targetValue, _lockkey.Value); - await tcpClient.SendAsync(targetMsg, targetMsg.Length, ipEndPoint, cancellationToken).ConfigureAwait(false); - response = await tcpClient.ReceiveAsync(cancellationToken).ConfigureAwait(false); + await tcpClient.SendToAsync(targetMsg, 0, targetMsg.Length, ipEndPoint, cancellationToken).ConfigureAwait(false); + response = await tcpClient.ReceiveAsync(receiveBuffer, 0, receiveBuffer.Length, cancellationToken).ConfigureAwait(false); // parse response to make sure it worked if (!ParseReturnMessage(response.Buffer, response.ReceivedBytes, out returnVal)) { @@ -191,11 +193,13 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun using (var tcpClient = _socketFactory.CreateTcpSocket(_remoteIp, HdHomeRunPort)) { var commandList = commands.GetCommands(); + var receiveBuffer = new byte[8192]; + foreach (Tuple<string, string> command in commandList) { var channelMsg = CreateSetMessage(_activeTuner, command.Item1, command.Item2, _lockkey.Value); - await tcpClient.SendAsync(channelMsg, channelMsg.Length, new IpEndPointInfo(_remoteIp, HdHomeRunPort), cancellationToken).ConfigureAwait(false); - var response = await tcpClient.ReceiveAsync(cancellationToken).ConfigureAwait(false); + await tcpClient.SendToAsync(channelMsg, 0, channelMsg.Length, new IpEndPointInfo(_remoteIp, HdHomeRunPort), cancellationToken).ConfigureAwait(false); + var response = await tcpClient.ReceiveAsync(receiveBuffer, 0, receiveBuffer.Length, cancellationToken).ConfigureAwait(false); // parse response to make sure it worked string returnVal; if (!ParseReturnMessage(response.Buffer, response.ReceivedBytes, out returnVal)) @@ -220,12 +224,15 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun private async Task ReleaseLockkey(ISocket tcpClient) { var releaseTarget = CreateSetMessage(_activeTuner, "target", "none", _lockkey); - await tcpClient.SendAsync(releaseTarget, releaseTarget.Length, new IpEndPointInfo(_remoteIp, HdHomeRunPort), CancellationToken.None).ConfigureAwait(false); - await tcpClient.ReceiveAsync(CancellationToken.None).ConfigureAwait(false); + await tcpClient.SendToAsync(releaseTarget, 0, releaseTarget.Length, new IpEndPointInfo(_remoteIp, HdHomeRunPort), CancellationToken.None).ConfigureAwait(false); + + var receiveBuffer = new byte[8192]; + + await tcpClient.ReceiveAsync(receiveBuffer, 0, receiveBuffer.Length, CancellationToken.None).ConfigureAwait(false); var releaseKeyMsg = CreateSetMessage(_activeTuner, "lockkey", "none", _lockkey); _lockkey = null; - await tcpClient.SendAsync(releaseKeyMsg, releaseKeyMsg.Length, new IpEndPointInfo(_remoteIp, HdHomeRunPort), CancellationToken.None).ConfigureAwait(false); - await tcpClient.ReceiveAsync(CancellationToken.None).ConfigureAwait(false); + await tcpClient.SendToAsync(releaseKeyMsg, 0, releaseKeyMsg.Length, new IpEndPointInfo(_remoteIp, HdHomeRunPort), CancellationToken.None).ConfigureAwait(false); + await tcpClient.ReceiveAsync(receiveBuffer, 0, receiveBuffer.Length, CancellationToken.None).ConfigureAwait(false); } private static byte[] CreateGetMessage(int tuner, string name) diff --git a/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunUdpStream.cs b/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunUdpStream.cs index 7c767c141..97753b3d3 100644 --- a/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunUdpStream.cs +++ b/Emby.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunUdpStream.cs @@ -173,11 +173,13 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun private static int RtpHeaderBytes = 12; private async Task CopyTo(ISocket udpClient, Stream outputStream, TaskCompletionSource<bool> openTaskCompletionSource, CancellationToken cancellationToken) { + var receiveBuffer = new byte[8192]; + while (true) { - var data = await udpClient.ReceiveAsync(cancellationToken).ConfigureAwait(false); + var data = await udpClient.ReceiveAsync(receiveBuffer, 0, receiveBuffer.Length, cancellationToken).ConfigureAwait(false); var bytesRead = data.ReceivedBytes - RtpHeaderBytes; - + await outputStream.WriteAsync(data.Buffer, RtpHeaderBytes, bytesRead, cancellationToken).ConfigureAwait(false); if (openTaskCompletionSource != null) @@ -188,128 +190,4 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun } } } - - // This handles the ReadAsync function only of a Stream object - // This is used to wrap a UDP socket into a stream for MulticastStream which only uses ReadAsync - public class UdpClientStream : Stream - { - private static int RtpHeaderBytes = 12; - private static int PacketSize = 1316; - private readonly ISocket _udpClient; - bool disposed; - - public UdpClientStream(ISocket udpClient) : base() - { - _udpClient = udpClient; - } - - public override async Task<int> ReadAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken) - { - if (buffer == null) - throw new ArgumentNullException("buffer"); - - if (offset + count < 0) - throw new ArgumentOutOfRangeException("offset + count must not be negative", "offset+count"); - - if (offset + count > buffer.Length) - throw new ArgumentException("offset + count must not be greater than the length of buffer", "offset+count"); - - if (disposed) - throw new ObjectDisposedException(typeof(UdpClientStream).ToString()); - - // This will always receive a 1328 packet size (PacketSize + RtpHeaderSize) - // The RTP header will be stripped so see how many reads we need to make to fill the buffer. - var numReads = count / PacketSize; - - int totalBytesRead = 0; - - for (int i = 0; i < numReads; ++i) - { - var data = await _udpClient.ReceiveAsync(cancellationToken).ConfigureAwait(false); - - var bytesRead = data.ReceivedBytes - RtpHeaderBytes; - - // remove rtp header - Buffer.BlockCopy(data.Buffer, RtpHeaderBytes, buffer, offset, bytesRead); - offset += bytesRead; - totalBytesRead += bytesRead; - } - return totalBytesRead; - } - - protected override void Dispose(bool disposing) - { - disposed = true; - } - - public override bool CanRead - { - get - { - return true; - } - } - - public override bool CanSeek - { - get - { - return false; - } - } - - public override bool CanWrite - { - get - { - return false; - } - } - - public override long Length - { - get - { - throw new NotImplementedException(); - } - } - - public override long Position - { - get - { - throw new NotImplementedException(); - } - - set - { - throw new NotImplementedException(); - } - } - - public override void Flush() - { - throw new NotImplementedException(); - } - - public override int Read(byte[] buffer, int offset, int count) - { - throw new NotImplementedException(); - } - - public override long Seek(long offset, SeekOrigin origin) - { - throw new NotImplementedException(); - } - - public override void SetLength(long value) - { - throw new NotImplementedException(); - } - - public override void Write(byte[] buffer, int offset, int count) - { - throw new NotImplementedException(); - } - } }
\ No newline at end of file diff --git a/Emby.Server.Implementations/Session/SessionManager.cs b/Emby.Server.Implementations/Session/SessionManager.cs index 7031ad770..6b3d2dc52 100644 --- a/Emby.Server.Implementations/Session/SessionManager.cs +++ b/Emby.Server.Implementations/Session/SessionManager.cs @@ -30,6 +30,7 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using MediaBrowser.Controller.Net; +using MediaBrowser.Model.Querying; using MediaBrowser.Model.Threading; namespace Emby.Server.Implementations.Session @@ -1071,7 +1072,11 @@ namespace Emby.Server.Implementations.Session Recursive = true, DtoOptions = new DtoOptions(false) { - EnableImages = false + EnableImages = false, + Fields = new List<ItemFields> + { + ItemFields.SortName + } } }); @@ -1090,7 +1095,11 @@ namespace Emby.Server.Implementations.Session IsFolder = false, DtoOptions = new DtoOptions(false) { - EnableImages = false + EnableImages = false, + Fields = new List<ItemFields> + { + ItemFields.SortName + } } }).ConfigureAwait(false); diff --git a/Emby.Server.Implementations/TV/TVSeriesManager.cs b/Emby.Server.Implementations/TV/TVSeriesManager.cs index 255c93b5f..876c5d58b 100644 --- a/Emby.Server.Implementations/TV/TVSeriesManager.cs +++ b/Emby.Server.Implementations/TV/TVSeriesManager.cs @@ -69,7 +69,7 @@ namespace Emby.Server.Implementations.TV { Fields = new List<ItemFields> { - + ItemFields.PresentationUniqueKey } } @@ -119,7 +119,7 @@ namespace Emby.Server.Implementations.TV { Fields = new List<ItemFields> { - + ItemFields.PresentationUniqueKey }, EnableImages = false } @@ -178,12 +178,10 @@ namespace Emby.Server.Implementations.TV /// <returns>Task{Episode}.</returns> private Tuple<DateTime, Func<Episode>> GetNextUp(string seriesKey, User user, DtoOptions dtoOptions) { - var enableSeriesPresentationKey = _config.Configuration.EnableSeriesPresentationUniqueKey; - var lastWatchedEpisode = _libraryManager.GetItemList(new InternalItemsQuery(user) { - AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey, - SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null, + AncestorWithPresentationUniqueKey = null, + SeriesPresentationUniqueKey = seriesKey, IncludeItemTypes = new[] { typeof(Episode).Name }, SortBy = new[] { ItemSortBy.SortName }, SortOrder = SortOrder.Descending, @@ -194,7 +192,7 @@ namespace Emby.Server.Implementations.TV { Fields = new List<ItemFields> { - + ItemFields.SortName }, EnableImages = false } @@ -205,8 +203,8 @@ namespace Emby.Server.Implementations.TV { return _libraryManager.GetItemList(new InternalItemsQuery(user) { - AncestorWithPresentationUniqueKey = enableSeriesPresentationKey ? null : seriesKey, - SeriesPresentationUniqueKey = enableSeriesPresentationKey ? seriesKey : null, + AncestorWithPresentationUniqueKey = null, + SeriesPresentationUniqueKey = seriesKey, IncludeItemTypes = new[] { typeof(Episode).Name }, SortBy = new[] { ItemSortBy.SortName }, SortOrder = SortOrder.Ascending, diff --git a/Emby.Server.Implementations/Udp/UdpServer.cs b/Emby.Server.Implementations/Udp/UdpServer.cs index 21ef3cab6..8dc1fae4b 100644 --- a/Emby.Server.Implementations/Udp/UdpServer.cs +++ b/Emby.Server.Implementations/Udp/UdpServer.cs @@ -139,30 +139,58 @@ namespace Emby.Server.Implementations.Udp { _udpClient = _socketFactory.CreateUdpSocket(port); - Task.Run(() => StartListening()); + Task.Run(() => BeginReceive()); } - private async void StartListening() + private readonly byte[] _receiveBuffer = new byte[8192]; + + private void BeginReceive() { - while (!_isDisposed) + if (_isDisposed) { - try - { - var result = await _udpClient.ReceiveAsync(CancellationToken.None).ConfigureAwait(false); + return; + } - OnMessageReceived(result); - } - catch (ObjectDisposedException) - { - } - catch (OperationCanceledException) - { - } - catch (Exception ex) + try + { + var result = _udpClient.BeginReceive(_receiveBuffer, 0, _receiveBuffer.Length, OnReceiveResult); + + if (result.CompletedSynchronously) { - _logger.ErrorException("Error receiving udp message", ex); + OnReceiveResult(result); } } + catch (ObjectDisposedException) + { + } + catch (Exception ex) + { + _logger.ErrorException("Error receiving udp message", ex); + } + } + + private void OnReceiveResult(IAsyncResult result) + { + if (_isDisposed) + { + return; + } + + try + { + var socketResult = _udpClient.EndReceive(result); + + OnMessageReceived(socketResult); + } + catch (ObjectDisposedException) + { + } + catch (Exception ex) + { + _logger.ErrorException("Error receiving udp message", ex); + } + + BeginReceive(); } /// <summary> @@ -239,13 +267,13 @@ namespace Emby.Server.Implementations.Udp try { - await _udpClient.SendWithLockAsync(bytes, bytes.Length, remoteEndPoint, CancellationToken.None).ConfigureAwait(false); + await _udpClient.SendToAsync(bytes, 0, bytes.Length, remoteEndPoint, CancellationToken.None).ConfigureAwait(false); _logger.Info("Udp message sent to {0}", remoteEndPoint); } catch (OperationCanceledException) { - + } catch (Exception ex) { |
