Bläddra i källkod

update xmltv parsing

Luke Pulverenti 8 år sedan
förälder
incheckning
1d849e3f25

+ 2 - 2
Emby.Server.Implementations/Emby.Server.Implementations.csproj

@@ -309,8 +309,8 @@
       <Project>{4f26d5d8-a7b0-42b3-ba42-7cb7d245934e}</Project>
       <Project>{4f26d5d8-a7b0-42b3-ba42-7cb7d245934e}</Project>
       <Name>SocketHttpListener.Portable</Name>
       <Name>SocketHttpListener.Portable</Name>
     </ProjectReference>
     </ProjectReference>
-    <Reference Include="Emby.XmlTv, Version=1.0.6236.39295, Culture=neutral, processorArchitecture=MSIL">
-      <HintPath>..\packages\Emby.XmlTv.1.0.4\lib\portable-net45+win8\Emby.XmlTv.dll</HintPath>
+    <Reference Include="Emby.XmlTv, Version=1.0.6241.4924, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\Emby.XmlTv.1.0.5\lib\portable-net45+win8\Emby.XmlTv.dll</HintPath>
       <Private>True</Private>
       <Private>True</Private>
     </Reference>
     </Reference>
     <Reference Include="MediaBrowser.Naming, Version=1.0.6201.24431, Culture=neutral, processorArchitecture=MSIL">
     <Reference Include="MediaBrowser.Naming, Version=1.0.6201.24431, Culture=neutral, processorArchitecture=MSIL">

+ 2 - 1
Emby.Server.Implementations/LiveTv/EmbyTV/EmbyTV.cs

@@ -847,6 +847,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
 
 
                 var channelMappings = GetChannelMappings(provider.Item2);
                 var channelMappings = GetChannelMappings(provider.Item2);
                 var channelNumber = channel.Number;
                 var channelNumber = channel.Number;
+                var tunerChannelId = channel.TunerChannelId;
 
 
                 if (!string.IsNullOrWhiteSpace(channelNumber))
                 if (!string.IsNullOrWhiteSpace(channelNumber))
                 {
                 {
@@ -858,7 +859,7 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
                     }
                     }
                 }
                 }
 
 
-                var programs = await provider.Item1.GetProgramsAsync(provider.Item2, channelNumber, channel.Name, startDateUtc, endDateUtc, cancellationToken)
+                var programs = await provider.Item1.GetProgramsAsync(provider.Item2, tunerChannelId, channelNumber, channel.Name, startDateUtc, endDateUtc, cancellationToken)
                         .ConfigureAwait(false);
                         .ConfigureAwait(false);
 
 
                 var list = programs.ToList();
                 var list = programs.ToList();

+ 1 - 1
Emby.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs

@@ -60,7 +60,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
             return dates;
             return dates;
         }
         }
 
 
-        public async Task<IEnumerable<ProgramInfo>> GetProgramsAsync(ListingsProviderInfo info, string channelNumber, string channelName, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken)
+        public async Task<IEnumerable<ProgramInfo>> GetProgramsAsync(ListingsProviderInfo info, string channelId, string channelNumber, string channelName, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken)
         {
         {
             List<ProgramInfo> programsInfo = new List<ProgramInfo>();
             List<ProgramInfo> programsInfo = new List<ProgramInfo>();
 
 

+ 6 - 2
Emby.Server.Implementations/LiveTv/Listings/XmlTvListingsProvider.cs

@@ -106,7 +106,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
             return cacheFile;
             return cacheFile;
         }
         }
 
 
-        public async Task<IEnumerable<ProgramInfo>> GetProgramsAsync(ListingsProviderInfo info, string channelNumber, string channelName, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken)
+        public async Task<IEnumerable<ProgramInfo>> GetProgramsAsync(ListingsProviderInfo info, string channelId, string channelNumber, string channelName, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken)
         {
         {
             if (!await EmbyTV.EmbyTVRegistration.Instance.EnableXmlTv().ConfigureAwait(false))
             if (!await EmbyTV.EmbyTVRegistration.Instance.EnableXmlTv().ConfigureAwait(false))
             {
             {
@@ -161,8 +161,12 @@ namespace Emby.Server.Implementations.LiveTv.Listings
             }
             }
             else
             else
             {
             {
-                var uniqueString = (p.Title ?? string.Empty) + (episodeTitle ?? string.Empty);
+                var uniqueString = (p.Title ?? string.Empty) + (episodeTitle ?? string.Empty) + (p.IceTvEpisodeNumber ?? string.Empty);
 
 
+                if (programInfo.SeasonNumber.HasValue)
+                {
+                    uniqueString = "-" + programInfo.SeasonNumber.Value.ToString(CultureInfo.InvariantCulture);
+                }
                 if (programInfo.EpisodeNumber.HasValue)
                 if (programInfo.EpisodeNumber.HasValue)
                 {
                 {
                     uniqueString = "-" + programInfo.EpisodeNumber.Value.ToString(CultureInfo.InvariantCulture);
                     uniqueString = "-" + programInfo.EpisodeNumber.Value.ToString(CultureInfo.InvariantCulture);

+ 1 - 0
Emby.Server.Implementations/LiveTv/TunerHosts/M3uParser.cs

@@ -137,6 +137,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts
             if (attributes.TryGetValue("tvg-id", out value))
             if (attributes.TryGetValue("tvg-id", out value))
             {
             {
                 channel.Id = value;
                 channel.Id = value;
+                channel.TunerChannelId = value;
             }
             }
 
 
             return channel;
             return channel;

+ 1 - 1
Emby.Server.Implementations/packages.config

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <?xml version="1.0" encoding="utf-8"?>
 <packages>
 <packages>
-  <package id="Emby.XmlTv" version="1.0.4" targetFramework="portable45-net45+win8" />
+  <package id="Emby.XmlTv" version="1.0.5" targetFramework="portable45-net45+win8" />
   <package id="MediaBrowser.Naming" version="1.0.4" targetFramework="portable45-net45+win8" />
   <package id="MediaBrowser.Naming" version="1.0.4" targetFramework="portable45-net45+win8" />
   <package id="SQLitePCL.pretty" version="1.1.0" targetFramework="portable45-net45+win8" />
   <package id="SQLitePCL.pretty" version="1.1.0" targetFramework="portable45-net45+win8" />
   <package id="SQLitePCLRaw.core" version="1.1.1" targetFramework="portable45-net45+win8" />
   <package id="SQLitePCLRaw.core" version="1.1.1" targetFramework="portable45-net45+win8" />

+ 7 - 22
MediaBrowser.Api/BasePeriodicWebSocketListener.cs

@@ -23,8 +23,8 @@ namespace MediaBrowser.Api
         /// <summary>
         /// <summary>
         /// The _active connections
         /// The _active connections
         /// </summary>
         /// </summary>
-        protected readonly List<Tuple<IWebSocketConnection, CancellationTokenSource, ITimer, TStateType, SemaphoreSlim>> ActiveConnections =
-            new List<Tuple<IWebSocketConnection, CancellationTokenSource, ITimer, TStateType, SemaphoreSlim>>();
+        protected readonly List<Tuple<IWebSocketConnection, CancellationTokenSource, ITimer, TStateType>> ActiveConnections =
+            new List<Tuple<IWebSocketConnection, CancellationTokenSource, ITimer, TStateType>>();
 
 
         /// <summary>
         /// <summary>
         /// Gets the name.
         /// Gets the name.
@@ -132,11 +132,9 @@ namespace MediaBrowser.Api
                 InitialDelayMs = dueTimeMs
                 InitialDelayMs = dueTimeMs
             };
             };
 
 
-            var semaphore = new SemaphoreSlim(1, 1);
-
             lock (ActiveConnections)
             lock (ActiveConnections)
             {
             {
-                ActiveConnections.Add(new Tuple<IWebSocketConnection, CancellationTokenSource, ITimer, TStateType, SemaphoreSlim>(message.Connection, cancellationTokenSource, timer, state, semaphore));
+                ActiveConnections.Add(new Tuple<IWebSocketConnection, CancellationTokenSource, ITimer, TStateType>(message.Connection, cancellationTokenSource, timer, state));
             }
             }
 
 
             if (timer != null)
             if (timer != null)
@@ -153,7 +151,7 @@ namespace MediaBrowser.Api
         {
         {
             var connection = (IWebSocketConnection)state;
             var connection = (IWebSocketConnection)state;
 
 
-            Tuple<IWebSocketConnection, CancellationTokenSource, ITimer, TStateType, SemaphoreSlim> tuple;
+            Tuple<IWebSocketConnection, CancellationTokenSource, ITimer, TStateType> tuple;
 
 
             lock (ActiveConnections)
             lock (ActiveConnections)
             {
             {
@@ -176,7 +174,7 @@ namespace MediaBrowser.Api
 
 
         protected void SendData(bool force)
         protected void SendData(bool force)
         {
         {
-            List<Tuple<IWebSocketConnection, CancellationTokenSource, ITimer, TStateType, SemaphoreSlim>> tuples;
+            List<Tuple<IWebSocketConnection, CancellationTokenSource, ITimer, TStateType>> tuples;
 
 
             lock (ActiveConnections)
             lock (ActiveConnections)
             {
             {
@@ -204,14 +202,12 @@ namespace MediaBrowser.Api
             }
             }
         }
         }
 
 
-        private async void SendData(Tuple<IWebSocketConnection, CancellationTokenSource, ITimer, TStateType, SemaphoreSlim> tuple)
+        private async void SendData(Tuple<IWebSocketConnection, CancellationTokenSource, ITimer, TStateType> tuple)
         {
         {
             var connection = tuple.Item1;
             var connection = tuple.Item1;
 
 
             try
             try
             {
             {
-                await tuple.Item5.WaitAsync(tuple.Item2.Token).ConfigureAwait(false);
-
                 var state = tuple.Item4;
                 var state = tuple.Item4;
 
 
                 var data = await GetDataToSend(state).ConfigureAwait(false);
                 var data = await GetDataToSend(state).ConfigureAwait(false);
@@ -227,8 +223,6 @@ namespace MediaBrowser.Api
 
 
                     state.DateLastSendUtc = DateTime.UtcNow;
                     state.DateLastSendUtc = DateTime.UtcNow;
                 }
                 }
-
-                tuple.Item5.Release();
             }
             }
             catch (OperationCanceledException)
             catch (OperationCanceledException)
             {
             {
@@ -265,7 +259,7 @@ namespace MediaBrowser.Api
         /// Disposes the connection.
         /// Disposes the connection.
         /// </summary>
         /// </summary>
         /// <param name="connection">The connection.</param>
         /// <param name="connection">The connection.</param>
-        private void DisposeConnection(Tuple<IWebSocketConnection, CancellationTokenSource, ITimer, TStateType, SemaphoreSlim> connection)
+        private void DisposeConnection(Tuple<IWebSocketConnection, CancellationTokenSource, ITimer, TStateType> connection)
         {
         {
             Logger.Debug("{1} stop transmitting over websocket to {0}", connection.Item1.RemoteEndPoint, GetType().Name);
             Logger.Debug("{1} stop transmitting over websocket to {0}", connection.Item1.RemoteEndPoint, GetType().Name);
 
 
@@ -293,15 +287,6 @@ namespace MediaBrowser.Api
 
 
             }
             }
 
 
-            try
-            {
-                connection.Item5.Dispose();
-            }
-            catch (ObjectDisposedException)
-            {
-
-            }
-
             ActiveConnections.Remove(connection);
             ActiveConnections.Remove(connection);
         }
         }
 
 

+ 2 - 0
MediaBrowser.Controller/LiveTv/ChannelInfo.cs

@@ -25,6 +25,8 @@ namespace MediaBrowser.Controller.LiveTv
         /// <value>The id of the channel.</value>
         /// <value>The id of the channel.</value>
         public string Id { get; set; }
         public string Id { get; set; }
 
 
+        public string TunerChannelId { get; set; }
+
         /// <summary>
         /// <summary>
         /// Gets or sets the tuner host identifier.
         /// Gets or sets the tuner host identifier.
         /// </summary>
         /// </summary>

+ 1 - 1
MediaBrowser.Controller/LiveTv/IListingsProvider.cs

@@ -11,7 +11,7 @@ namespace MediaBrowser.Controller.LiveTv
     {
     {
         string Name { get; }
         string Name { get; }
         string Type { get; }
         string Type { get; }
-        Task<IEnumerable<ProgramInfo>> GetProgramsAsync(ListingsProviderInfo info, string channelNumber, string channelName, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken);
+        Task<IEnumerable<ProgramInfo>> GetProgramsAsync(ListingsProviderInfo info, string channelId, string channelNumber, string channelName, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken);
         Task AddMetadata(ListingsProviderInfo info, List<ChannelInfo> channels, CancellationToken cancellationToken);
         Task AddMetadata(ListingsProviderInfo info, List<ChannelInfo> channels, CancellationToken cancellationToken);
         Task Validate(ListingsProviderInfo info, bool validateLogin, bool validateListings);
         Task Validate(ListingsProviderInfo info, bool validateLogin, bool validateListings);
         Task<List<NameIdPair>> GetLineups(ListingsProviderInfo info, string country, string location);
         Task<List<NameIdPair>> GetLineups(ListingsProviderInfo info, string country, string location);