support xmltv gzip

This commit is contained in:
Luke Pulverenti 2016-06-15 22:37:06 -04:00
parent 825f0f3507
commit 37d7db4bc4
6 changed files with 48 additions and 13 deletions

View File

@ -143,7 +143,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
}; };
} }
private WebRequest GetRequest(HttpRequestOptions options, string method, bool enableHttpCompression) private WebRequest GetRequest(HttpRequestOptions options, string method)
{ {
var request = CreateWebRequest(options.Url); var request = CreateWebRequest(options.Url);
var httpWebRequest = request as HttpWebRequest; var httpWebRequest = request as HttpWebRequest;
@ -154,7 +154,9 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
AddRequestHeaders(httpWebRequest, options); AddRequestHeaders(httpWebRequest, options);
httpWebRequest.AutomaticDecompression = enableHttpCompression ? DecompressionMethods.Deflate : DecompressionMethods.None; httpWebRequest.AutomaticDecompression = options.EnableHttpCompression ?
(options.DecompressionMethod ?? DecompressionMethods.Deflate) :
DecompressionMethods.None;
} }
request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.BypassCache); request.CachePolicy = new RequestCachePolicy(RequestCacheLevel.BypassCache);
@ -366,7 +368,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
}; };
} }
var httpWebRequest = GetRequest(options, httpMethod, options.EnableHttpCompression); var httpWebRequest = GetRequest(options, httpMethod);
if (options.RequestContentBytes != null || if (options.RequestContentBytes != null ||
!string.IsNullOrEmpty(options.RequestContent) || !string.IsNullOrEmpty(options.RequestContent) ||
@ -556,7 +558,7 @@ namespace MediaBrowser.Common.Implementations.HttpClientManager
options.CancellationToken.ThrowIfCancellationRequested(); options.CancellationToken.ThrowIfCancellationRequested();
var httpWebRequest = GetRequest(options, "GET", options.EnableHttpCompression); var httpWebRequest = GetRequest(options, "GET");
if (options.ResourcePool != null) if (options.ResourcePool != null)
{ {

View File

@ -1,6 +1,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Net;
using System.Threading; using System.Threading;
namespace MediaBrowser.Common.Net namespace MediaBrowser.Common.Net
@ -16,6 +17,8 @@ namespace MediaBrowser.Common.Net
/// <value>The URL.</value> /// <value>The URL.</value>
public string Url { get; set; } public string Url { get; set; }
public DecompressionMethods? DecompressionMethod { get; set; }
/// <summary> /// <summary>
/// Gets or sets the accept header. /// Gets or sets the accept header.
/// </summary> /// </summary>

View File

@ -1,3 +1,4 @@
using System;
using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
@ -5,10 +6,6 @@ namespace MediaBrowser.Controller.Providers
{ {
public class ItemInfo public class ItemInfo
{ {
public ItemInfo()
{
}
public ItemInfo(IHasMetadata item) public ItemInfo(IHasMetadata item)
{ {
Path = item.Path; Path = item.Path;
@ -21,8 +18,11 @@ namespace MediaBrowser.Controller.Providers
VideoType = video.VideoType; VideoType = video.VideoType;
IsPlaceHolder = video.IsPlaceHolder; IsPlaceHolder = video.IsPlaceHolder;
} }
ItemType = item.GetType();
} }
public Type ItemType { get; set; }
public string Path { get; set; } public string Path { get; set; }
public string ContainingFolderPath { get; set; } public string ContainingFolderPath { get; set; }
public VideoType VideoType { get; set; } public VideoType VideoType { get; set; }

View File

@ -486,10 +486,15 @@ namespace MediaBrowser.Server.Implementations.Dto
dto.UserData.Played = dto.UserData.PlayedPercentage.HasValue && dto.UserData.PlayedPercentage.Value >= 100; dto.UserData.Played = dto.UserData.PlayedPercentage.HasValue && dto.UserData.PlayedPercentage.Value >= 100;
} }
else else if (item.SourceType == SourceType.Library)
{ {
dto.UserData = _userDataRepository.GetUserDataDto(item, user); dto.UserData = _userDataRepository.GetUserDataDto(item, user);
} }
else
{
var userData = _userDataRepository.GetUserData(user, item);
dto.UserData = GetUserItemDataDto(userData);
}
if (item.SourceType == SourceType.Library) if (item.SourceType == SourceType.Library)
{ {

View File

@ -6,6 +6,8 @@ using System.Collections.Generic;
using System.Globalization; using System.Globalization;
using System.IO; using System.IO;
using System.Linq; using System.Linq;
using System.Net;
using System.Text;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Emby.XmlTv.Classes; using Emby.XmlTv.Classes;
@ -53,7 +55,7 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings
return path; return path;
} }
var cacheFilename = DateTime.UtcNow.DayOfYear.ToString(CultureInfo.InvariantCulture) + "_" + DateTime.UtcNow.Hour.ToString(CultureInfo.InvariantCulture) + ".xml"; var cacheFilename = DateTime.UtcNow.DayOfYear.ToString(CultureInfo.InvariantCulture) + "-" + DateTime.UtcNow.Hour.ToString(CultureInfo.InvariantCulture) + ".xml";
var cacheFile = Path.Combine(_config.ApplicationPaths.CachePath, "xmltv", cacheFilename); var cacheFile = Path.Combine(_config.ApplicationPaths.CachePath, "xmltv", cacheFilename);
if (File.Exists(cacheFile)) if (File.Exists(cacheFile))
{ {
@ -67,13 +69,34 @@ namespace MediaBrowser.Server.Implementations.LiveTv.Listings
CancellationToken = cancellationToken, CancellationToken = cancellationToken,
Url = path, Url = path,
Progress = new Progress<Double>(), Progress = new Progress<Double>(),
EnableHttpCompression = false DecompressionMethod = DecompressionMethods.GZip,
// It's going to come back gzipped regardless of this value
// So we need to make sure the decompression method is set to gzip
EnableHttpCompression = true
}).ConfigureAwait(false); }).ConfigureAwait(false);
Directory.CreateDirectory(Path.GetDirectoryName(cacheFile)); Directory.CreateDirectory(Path.GetDirectoryName(cacheFile));
File.Copy(tempFile, cacheFile, true);
using (var stream = File.OpenRead(tempFile))
{
using (var reader = new StreamReader(stream, Encoding.UTF8))
{
using (var fileStream = File.OpenWrite(cacheFile))
{
using (var writer = new StreamWriter(fileStream))
{
while (!reader.EndOfStream)
{
writer.WriteLine(reader.ReadLine());
}
}
}
}
}
_logger.Debug("Returning xmltv path {0}", cacheFile);
return cacheFile; return cacheFile;
} }

View File

@ -44,7 +44,9 @@ namespace MediaBrowser.XbmcMetadata.Savers
} }
else else
{ {
//if (item is Movie) // http://kodi.wiki/view/NFO_files/Movies
// movie.nfo will override all and any .nfo files in the same folder as the media files if you use the "Use foldernames for lookups" setting. If you don't, then moviename.nfo is used
//if (!item.IsInMixedFolder && item.ItemType == typeof(Movie))
//{ //{
// list.Add(Path.Combine(item.ContainingFolderPath, "movie.nfo")); // list.Add(Path.Combine(item.ContainingFolderPath, "movie.nfo"));
//} //}