Browse Source

update search hints

Luke Pulverenti 9 years ago
parent
commit
1936d6db43

+ 5 - 0
MediaBrowser.Api/Playback/BaseStreamingService.cs

@@ -1748,6 +1748,11 @@ namespace MediaBrowser.Api.Playback
                 return false;
                 return false;
             }
             }
 
 
+            if (videoStream.IsAnamorphic ?? false)
+            {
+                return false;
+            }
+            
             // Can't stream copy if we're burning in subtitles
             // Can't stream copy if we're burning in subtitles
             if (request.SubtitleStreamIndex.HasValue)
             if (request.SubtitleStreamIndex.HasValue)
             {
             {

+ 9 - 0
MediaBrowser.Api/SearchService.cs

@@ -4,6 +4,7 @@ using MediaBrowser.Controller.Entities;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Entities.Audio;
 using MediaBrowser.Controller.Entities.TV;
 using MediaBrowser.Controller.Entities.TV;
 using MediaBrowser.Controller.Library;
 using MediaBrowser.Controller.Library;
+using MediaBrowser.Controller.LiveTv;
 using MediaBrowser.Controller.Net;
 using MediaBrowser.Controller.Net;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Entities;
 using MediaBrowser.Model.Search;
 using MediaBrowser.Model.Search;
@@ -171,6 +172,8 @@ namespace MediaBrowser.Api
                 ProductionYear = item.ProductionYear
                 ProductionYear = item.ProductionYear
             };
             };
 
 
+            result.ChannelId = item.ChannelId;
+
             var primaryImageTag = _imageProcessor.GetImageCacheTag(item, ImageType.Primary);
             var primaryImageTag = _imageProcessor.GetImageCacheTag(item, ImageType.Primary);
 
 
             if (primaryImageTag != null)
             if (primaryImageTag != null)
@@ -218,6 +221,12 @@ namespace MediaBrowser.Api
                 result.Artists = song.Artists.ToArray();
                 result.Artists = song.Artists.ToArray();
             }
             }
 
 
+            if (!string.IsNullOrWhiteSpace(item.ChannelId))
+            {
+                var channel = _libraryManager.GetItemById(item.ChannelId);
+                result.ChannelName = channel == null ? null : channel.Name;
+            }
+
             return result;
             return result;
         }
         }
 
 

+ 0 - 2
MediaBrowser.Model/Configuration/BaseApplicationConfiguration.cs

@@ -63,8 +63,6 @@ namespace MediaBrowser.Model.Configuration
         {
         {
             EnableAutoUpdate = true;
             EnableAutoUpdate = true;
             LogFileRetentionDays = 3;
             LogFileRetentionDays = 3;
-
-            EnableDebugLevelLogging = true;
         }
         }
     }
     }
 }
 }

+ 12 - 0
MediaBrowser.Model/Search/SearchHint.cs

@@ -132,5 +132,17 @@ namespace MediaBrowser.Model.Search
         /// </summary>
         /// </summary>
         /// <value>The episode count.</value>
         /// <value>The episode count.</value>
         public int? EpisodeCount { get; set; }
         public int? EpisodeCount { get; set; }
+
+        /// <summary>
+        /// Gets or sets the channel identifier.
+        /// </summary>
+        /// <value>The channel identifier.</value>
+        public string ChannelId { get; set; }
+
+        /// <summary>
+        /// Gets or sets the name of the channel.
+        /// </summary>
+        /// <value>The name of the channel.</value>
+        public string ChannelName { get; set; }
     }
     }
 }
 }

+ 5 - 5
MediaBrowser.Server.Implementations/Library/Resolvers/TV/SeriesResolver.cs

@@ -110,11 +110,11 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.TV
             {
             {
                 var attributes = child.Attributes;
                 var attributes = child.Attributes;
 
 
-                if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
-                {
-                    //logger.Debug("Igoring series file or folder marked hidden: {0}", child.FullName);
-                    continue;
-                }
+                //if ((attributes & FileAttributes.Hidden) == FileAttributes.Hidden)
+                //{
+                //    //logger.Debug("Igoring series file or folder marked hidden: {0}", child.FullName);
+                //    continue;
+                //}
 
 
                 // Can't enforce this because files saved by Bitcasa are always marked System
                 // Can't enforce this because files saved by Bitcasa are always marked System
                 //if ((attributes & FileAttributes.System) == FileAttributes.System)
                 //if ((attributes & FileAttributes.System) == FileAttributes.System)

+ 59 - 0
MediaBrowser.Server.Implementations/LiveTv/Listings/Emby/EmbyListings.cs

@@ -0,0 +1,59 @@
+using MediaBrowser.Common.Net;
+using MediaBrowser.Controller.LiveTv;
+using MediaBrowser.Model.Dto;
+using MediaBrowser.Model.LiveTv;
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+using MediaBrowser.Model.Serialization;
+
+namespace MediaBrowser.Server.Implementations.LiveTv.Listings.Emby
+{
+    public class EmbyGuide : IListingsProvider
+    {
+        private readonly IHttpClient _httpClient;
+        private readonly IJsonSerializer _jsonSerializer;
+
+        public EmbyGuide(IHttpClient httpClient, IJsonSerializer jsonSerializer)
+        {
+            _httpClient = httpClient;
+            _jsonSerializer = jsonSerializer;
+        }
+
+        public string Name
+        {
+            get { return "Emby Guide"; }
+        }
+
+        public string Type
+        {
+            get { return "emby"; }
+        }
+
+        public Task<IEnumerable<ProgramInfo>> GetProgramsAsync(ListingsProviderInfo info, string channelNumber, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken)
+        {
+            return GetListingsProvider(info.Country).GetProgramsAsync(info, channelNumber, startDateUtc, endDateUtc, cancellationToken);
+        }
+
+        public Task AddMetadata(ListingsProviderInfo info, List<ChannelInfo> channels, CancellationToken cancellationToken)
+        {
+            return GetListingsProvider(info.Country).AddMetadata(info, channels, cancellationToken);
+        }
+
+        public Task Validate(ListingsProviderInfo info, bool validateLogin, bool validateListings)
+        {
+            return GetListingsProvider(info.Country).Validate(info, validateLogin, validateListings);
+        }
+
+        public Task<List<NameIdPair>> GetLineups(ListingsProviderInfo info, string country, string location)
+        {
+            return GetListingsProvider(country).GetLineups(info, country, location);
+        }
+
+        private IEmbyListingProvider GetListingsProvider(string country)
+        {
+            return new EmbyListingsNorthAmerica(_httpClient, _jsonSerializer);
+        }
+    }
+}

+ 144 - 0
MediaBrowser.Server.Implementations/LiveTv/Listings/Emby/EmbyListingsNorthAmerica.cs

@@ -0,0 +1,144 @@
+using MediaBrowser.Common.Net;
+using MediaBrowser.Controller.LiveTv;
+using MediaBrowser.Model.Dto;
+using MediaBrowser.Model.LiveTv;
+using MediaBrowser.Model.Serialization;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Server.Implementations.LiveTv.Listings.Emby
+{
+    public class EmbyListingsNorthAmerica : IEmbyListingProvider
+    {
+        private readonly IHttpClient _httpClient;
+        private readonly IJsonSerializer _jsonSerializer;
+
+        public EmbyListingsNorthAmerica(IHttpClient httpClient, IJsonSerializer jsonSerializer)
+        {
+            _httpClient = httpClient;
+            _jsonSerializer = jsonSerializer;
+        }
+
+        public async Task<IEnumerable<ProgramInfo>> GetProgramsAsync(ListingsProviderInfo info, string channelNumber, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken)
+        {
+            return new List<ProgramInfo>();
+        }
+
+        public async Task AddMetadata(ListingsProviderInfo info, List<ChannelInfo> channels, CancellationToken cancellationToken)
+        {
+            var response = await GetResponse<LineupDetailResponse>("https://data.emby.media/service/lineups?id=" + info.ListingsId).ConfigureAwait(false);
+
+            foreach (var channel in channels)
+            {
+
+            }
+        }
+
+        public Task Validate(ListingsProviderInfo info, bool validateLogin, bool validateListings)
+        {
+            return Task.FromResult(true);
+        }
+
+        public async Task<List<NameIdPair>> GetLineups(ListingsProviderInfo info, string country, string location)
+        {
+            var response = await GetResponse<LineupInfo[]>("https://data.emby.media/service/lineups?id=" + location).ConfigureAwait(false);
+
+            return response.Select(i => new NameIdPair
+            {
+
+                Name = GetName(i),
+                Id = i.lineupID
+
+            }).ToList();
+        }
+
+        private string GetName(LineupInfo info)
+        {
+            var name = info.lineupName;
+
+            if (string.Equals(info.lineupType, "cab", StringComparison.OrdinalIgnoreCase))
+            {
+                name += " - Cable";
+            }
+            else if (string.Equals(info.lineupType, "sat", StringComparison.OrdinalIgnoreCase))
+            {
+                name += " - SAT";
+            }
+            else if (string.Equals(info.lineupType, "ota", StringComparison.OrdinalIgnoreCase))
+            {
+                name += " - OTA";
+            }
+
+            return name;
+        }
+
+        private async Task<T> GetResponse<T>(string url)
+            where T : class
+        {
+            using (var stream = await _httpClient.Get(new HttpRequestOptions
+            {
+                Url = url
+
+            }).ConfigureAwait(false))
+            {
+                using (var reader = new StreamReader(stream))
+                {
+                    var path = await reader.ReadToEndAsync().ConfigureAwait(false);
+
+                    // location = zip code
+                    using (var secondStream = await _httpClient.Get(new HttpRequestOptions
+                    {
+                        Url = "https://data.emby.media" + path
+
+                    }).ConfigureAwait(false))
+                    {
+                        return _jsonSerializer.DeserializeFromStream<T>(secondStream);
+                    }
+                }
+            }
+        }
+
+        private class LineupInfo
+        {
+            public string lineupID { get; set; }
+            public string lineupName { get; set; }
+            public string lineupType { get; set; }
+            public string providerID { get; set; }
+            public string providerName { get; set; }
+            public string serviceArea { get; set; }
+            public string country { get; set; }
+        }
+
+        private class Station
+        {
+            public string number { get; set; }
+            public int channelNumber { get; set; }
+            public int subChannelNumber { get; set; }
+            public int stationID { get; set; }
+            public string name { get; set; }
+            public string callsign { get; set; }
+            public string network { get; set; }
+            public string stationType { get; set; }
+            public int NTSC_TSID { get; set; }
+            public int DTV_TSID { get; set; }
+            public string webLink { get; set; }
+            public string logoFilename { get; set; }
+        }
+
+        private class LineupDetailResponse
+        {
+            public string lineupID { get; set; }
+            public string lineupName { get; set; }
+            public string lineupType { get; set; }
+            public string providerID { get; set; }
+            public string providerName { get; set; }
+            public string serviceArea { get; set; }
+            public string country { get; set; }
+            public List<Station> stations { get; set; }
+        }
+    }
+}

+ 18 - 0
MediaBrowser.Server.Implementations/LiveTv/Listings/Emby/IEmbyListingProvider.cs

@@ -0,0 +1,18 @@
+using MediaBrowser.Controller.LiveTv;
+using MediaBrowser.Model.Dto;
+using MediaBrowser.Model.LiveTv;
+using System;
+using System.Collections.Generic;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace MediaBrowser.Server.Implementations.LiveTv.Listings.Emby
+{
+    public interface IEmbyListingProvider
+    {
+        Task<IEnumerable<ProgramInfo>> GetProgramsAsync(ListingsProviderInfo info, string channelNumber, DateTime startDateUtc, DateTime endDateUtc, CancellationToken cancellationToken);
+        Task AddMetadata(ListingsProviderInfo info, List<ChannelInfo> channels, CancellationToken cancellationToken);
+        Task Validate(ListingsProviderInfo info, bool validateLogin, bool validateListings);
+        Task<List<NameIdPair>> GetLineups(ListingsProviderInfo info, string country, string location);
+    }
+}

+ 3 - 0
MediaBrowser.Server.Implementations/MediaBrowser.Server.Implementations.csproj

@@ -222,6 +222,9 @@
     <Compile Include="LiveTv\EmbyTV\RecordingHelper.cs" />
     <Compile Include="LiveTv\EmbyTV\RecordingHelper.cs" />
     <Compile Include="LiveTv\EmbyTV\SeriesTimerManager.cs" />
     <Compile Include="LiveTv\EmbyTV\SeriesTimerManager.cs" />
     <Compile Include="LiveTv\EmbyTV\TimerManager.cs" />
     <Compile Include="LiveTv\EmbyTV\TimerManager.cs" />
+    <Compile Include="LiveTv\Listings\Emby\EmbyListings.cs" />
+    <Compile Include="LiveTv\Listings\Emby\EmbyListingsNorthAmerica.cs" />
+    <Compile Include="LiveTv\Listings\Emby\IEmbyListingProvider.cs" />
     <Compile Include="LiveTv\Listings\SchedulesDirect.cs" />
     <Compile Include="LiveTv\Listings\SchedulesDirect.cs" />
     <Compile Include="LiveTv\Listings\XmlTv.cs" />
     <Compile Include="LiveTv\Listings\XmlTv.cs" />
     <Compile Include="LiveTv\LiveTvConfigurationFactory.cs" />
     <Compile Include="LiveTv\LiveTvConfigurationFactory.cs" />

+ 15 - 6
MediaBrowser.Server.Startup.Common/ApplicationHost.cs

@@ -529,7 +529,7 @@ namespace MediaBrowser.Server.Startup.Common
             var sharingRepo = new SharingRepository(LogManager, ApplicationPaths);
             var sharingRepo = new SharingRepository(LogManager, ApplicationPaths);
             await sharingRepo.Initialize().ConfigureAwait(false);
             await sharingRepo.Initialize().ConfigureAwait(false);
             RegisterSingleInstance<ISharingManager>(new SharingManager(sharingRepo, ServerConfigurationManager, LibraryManager, this));
             RegisterSingleInstance<ISharingManager>(new SharingManager(sharingRepo, ServerConfigurationManager, LibraryManager, this));
-            
+
             RegisterSingleInstance<ISsdpHandler>(new SsdpHandler(LogManager.GetLogger("SsdpHandler"), ServerConfigurationManager, this));
             RegisterSingleInstance<ISsdpHandler>(new SsdpHandler(LogManager.GetLogger("SsdpHandler"), ServerConfigurationManager, this));
 
 
             var activityLogRepo = await GetActivityLogRepository().ConfigureAwait(false);
             var activityLogRepo = await GetActivityLogRepository().ConfigureAwait(false);
@@ -1088,15 +1088,24 @@ namespace MediaBrowser.Server.Startup.Common
         {
         {
             get
             get
             {
             {
-                // Return the first matched address, if found, or the first known local address
-                var address = LocalIpAddress;
+                try
+                {
+                    // Return the first matched address, if found, or the first known local address
+                    var address = LocalIpAddress;
 
 
-                if (!string.IsNullOrWhiteSpace(address))
+                    if (!string.IsNullOrWhiteSpace(address))
+                    {
+                        address = GetLocalApiUrl(address);
+                    }
+
+                    return address;
+                }
+                catch (Exception ex)
                 {
                 {
-                    address = GetLocalApiUrl(address);
+                    Logger.ErrorException("Error getting local Ip address information", ex);
                 }
                 }
 
 
-                return address;
+                return null;
             }
             }
         }
         }
 
 

+ 6 - 0
MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj

@@ -183,6 +183,9 @@
     <Content Include="dashboard-ui\livetvguideprovider-scd.html">
     <Content Include="dashboard-ui\livetvguideprovider-scd.html">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     </Content>
+    <Content Include="dashboard-ui\livetvguideprovider.html">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="dashboard-ui\livetvtunerprovider-hdhomerun.html">
     <Content Include="dashboard-ui\livetvtunerprovider-hdhomerun.html">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     </Content>
@@ -213,6 +216,9 @@
     <Content Include="dashboard-ui\scripts\livetvguideprovider-scd.js">
     <Content Include="dashboard-ui\scripts\livetvguideprovider-scd.js">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     </Content>
+    <Content Include="dashboard-ui\scripts\livetvguideprovider.js">
+      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
+    </Content>
     <Content Include="dashboard-ui\scripts\livetvtunerprovider-hdhomerun.js">
     <Content Include="dashboard-ui\scripts\livetvtunerprovider-hdhomerun.js">
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
       <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
     </Content>
     </Content>