mirror of https://github.com/jellyfin/jellyfin.git
Merge pull request #1560 from jellyfin/release-10.3.z
Backmerge for 10.3.7
This commit is contained in:
commit
e8028de4d7
|
@ -21,7 +21,7 @@ RUN apt-get update \
|
||||||
COPY --from=ffmpeg / /
|
COPY --from=ffmpeg / /
|
||||||
COPY --from=builder /jellyfin /jellyfin
|
COPY --from=builder /jellyfin /jellyfin
|
||||||
|
|
||||||
ARG JELLYFIN_WEB_VERSION=10.3.6
|
ARG JELLYFIN_WEB_VERSION=10.3.7
|
||||||
RUN curl -L https://github.com/jellyfin/jellyfin-web/archive/v${JELLYFIN_WEB_VERSION}.tar.gz | tar zxf - \
|
RUN curl -L https://github.com/jellyfin/jellyfin-web/archive/v${JELLYFIN_WEB_VERSION}.tar.gz | tar zxf - \
|
||||||
&& rm -rf /jellyfin/jellyfin-web \
|
&& rm -rf /jellyfin/jellyfin-web \
|
||||||
&& mv jellyfin-web-${JELLYFIN_WEB_VERSION} /jellyfin/jellyfin-web
|
&& mv jellyfin-web-${JELLYFIN_WEB_VERSION} /jellyfin/jellyfin-web
|
||||||
|
|
|
@ -26,7 +26,7 @@ RUN apt-get update \
|
||||||
&& chmod 777 /cache /config /media
|
&& chmod 777 /cache /config /media
|
||||||
COPY --from=builder /jellyfin /jellyfin
|
COPY --from=builder /jellyfin /jellyfin
|
||||||
|
|
||||||
ARG JELLYFIN_WEB_VERSION=10.3.6
|
ARG JELLYFIN_WEB_VERSION=10.3.7
|
||||||
RUN curl -L https://github.com/jellyfin/jellyfin-web/archive/v${JELLYFIN_WEB_VERSION}.tar.gz | tar zxf - \
|
RUN curl -L https://github.com/jellyfin/jellyfin-web/archive/v${JELLYFIN_WEB_VERSION}.tar.gz | tar zxf - \
|
||||||
&& rm -rf /jellyfin/jellyfin-web \
|
&& rm -rf /jellyfin/jellyfin-web \
|
||||||
&& mv jellyfin-web-${JELLYFIN_WEB_VERSION} /jellyfin/jellyfin-web
|
&& mv jellyfin-web-${JELLYFIN_WEB_VERSION} /jellyfin/jellyfin-web
|
||||||
|
|
|
@ -26,7 +26,7 @@ RUN apt-get update \
|
||||||
&& chmod 777 /cache /config /media
|
&& chmod 777 /cache /config /media
|
||||||
COPY --from=builder /jellyfin /jellyfin
|
COPY --from=builder /jellyfin /jellyfin
|
||||||
|
|
||||||
ARG JELLYFIN_WEB_VERSION=10.3.6
|
ARG JELLYFIN_WEB_VERSION=10.3.7
|
||||||
RUN curl -L https://github.com/jellyfin/jellyfin-web/archive/v${JELLYFIN_WEB_VERSION}.tar.gz | tar zxf - \
|
RUN curl -L https://github.com/jellyfin/jellyfin-web/archive/v${JELLYFIN_WEB_VERSION}.tar.gz | tar zxf - \
|
||||||
&& rm -rf /jellyfin/jellyfin-web \
|
&& rm -rf /jellyfin/jellyfin-web \
|
||||||
&& mv jellyfin-web-${JELLYFIN_WEB_VERSION} /jellyfin/jellyfin-web
|
&& mv jellyfin-web-${JELLYFIN_WEB_VERSION} /jellyfin/jellyfin-web
|
||||||
|
|
|
@ -155,7 +155,6 @@ namespace Emby.Dlna.PlayTo
|
||||||
}
|
}
|
||||||
|
|
||||||
options.RequestContentType = "text/xml";
|
options.RequestContentType = "text/xml";
|
||||||
options.AppendCharsetToMimeType = true;
|
|
||||||
options.RequestContent = postData;
|
options.RequestContent = postData;
|
||||||
|
|
||||||
return _httpClient.Post(options);
|
return _httpClient.Post(options);
|
||||||
|
|
|
@ -179,10 +179,7 @@ namespace Emby.Server.Implementations.HttpClientManager
|
||||||
/// <param name="httpMethod">The HTTP method.</param>
|
/// <param name="httpMethod">The HTTP method.</param>
|
||||||
/// <returns>Task{HttpResponseInfo}.</returns>
|
/// <returns>Task{HttpResponseInfo}.</returns>
|
||||||
public Task<HttpResponseInfo> SendAsync(HttpRequestOptions options, string httpMethod)
|
public Task<HttpResponseInfo> SendAsync(HttpRequestOptions options, string httpMethod)
|
||||||
{
|
=> SendAsync(options, new HttpMethod(httpMethod));
|
||||||
var httpMethod2 = GetHttpMethod(httpMethod);
|
|
||||||
return SendAsync(options, httpMethod2);
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// send as an asynchronous operation.
|
/// send as an asynchronous operation.
|
||||||
|
@ -218,40 +215,6 @@ namespace Emby.Server.Implementations.HttpClientManager
|
||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
private HttpMethod GetHttpMethod(string httpMethod)
|
|
||||||
{
|
|
||||||
if (httpMethod.Equals("DELETE", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
return HttpMethod.Delete;
|
|
||||||
}
|
|
||||||
else if (httpMethod.Equals("GET", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
return HttpMethod.Get;
|
|
||||||
}
|
|
||||||
else if (httpMethod.Equals("HEAD", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
return HttpMethod.Head;
|
|
||||||
}
|
|
||||||
else if (httpMethod.Equals("OPTIONS", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
return HttpMethod.Options;
|
|
||||||
}
|
|
||||||
else if (httpMethod.Equals("POST", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
return HttpMethod.Post;
|
|
||||||
}
|
|
||||||
else if (httpMethod.Equals("PUT", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
return HttpMethod.Put;
|
|
||||||
}
|
|
||||||
else if (httpMethod.Equals("TRACE", StringComparison.OrdinalIgnoreCase))
|
|
||||||
{
|
|
||||||
return HttpMethod.Trace;
|
|
||||||
}
|
|
||||||
|
|
||||||
throw new ArgumentException("Invalid HTTP method", nameof(httpMethod));
|
|
||||||
}
|
|
||||||
|
|
||||||
private HttpResponseInfo GetCachedResponse(string responseCachePath, TimeSpan cacheLength, string url)
|
private HttpResponseInfo GetCachedResponse(string responseCachePath, TimeSpan cacheLength, string url)
|
||||||
{
|
{
|
||||||
if (File.Exists(responseCachePath)
|
if (File.Exists(responseCachePath)
|
||||||
|
@ -303,23 +266,15 @@ namespace Emby.Server.Implementations.HttpClientManager
|
||||||
}
|
}
|
||||||
else if (options.RequestContent != null)
|
else if (options.RequestContent != null)
|
||||||
{
|
{
|
||||||
httpWebRequest.Content = new StringContent(options.RequestContent);
|
httpWebRequest.Content = new StringContent(
|
||||||
|
options.RequestContent,
|
||||||
|
null,
|
||||||
|
options.RequestContentType);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
httpWebRequest.Content = new ByteArrayContent(Array.Empty<byte>());
|
httpWebRequest.Content = new ByteArrayContent(Array.Empty<byte>());
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: add correct content type
|
|
||||||
/*
|
|
||||||
var contentType = options.RequestContentType ?? "application/x-www-form-urlencoded";
|
|
||||||
|
|
||||||
if (options.AppendCharsetToMimeType)
|
|
||||||
{
|
|
||||||
contentType = contentType.TrimEnd(';') + "; charset=\"utf-8\"";
|
|
||||||
}
|
|
||||||
|
|
||||||
httpWebRequest.Headers.Add(HeaderNames.ContentType, contentType);*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (options.LogRequest)
|
if (options.LogRequest)
|
||||||
|
@ -331,24 +286,24 @@ namespace Emby.Server.Implementations.HttpClientManager
|
||||||
|
|
||||||
if (!options.BufferContent)
|
if (!options.BufferContent)
|
||||||
{
|
{
|
||||||
var response = await client.SendAsync(httpWebRequest, options.CancellationToken).ConfigureAwait(false);
|
var response = await client.SendAsync(httpWebRequest, HttpCompletionOption.ResponseHeadersRead, options.CancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
await EnsureSuccessStatusCode(response, options).ConfigureAwait(false);
|
await EnsureSuccessStatusCode(response, options).ConfigureAwait(false);
|
||||||
|
|
||||||
options.CancellationToken.ThrowIfCancellationRequested();
|
options.CancellationToken.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);
|
var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false);
|
||||||
return new HttpResponseInfo(response.Headers)
|
return new HttpResponseInfo(response.Headers, response.Content.Headers)
|
||||||
{
|
{
|
||||||
Content = stream,
|
Content = stream,
|
||||||
StatusCode = response.StatusCode,
|
StatusCode = response.StatusCode,
|
||||||
ContentType = response.Content.Headers.ContentType?.MediaType,
|
ContentType = response.Content.Headers.ContentType?.MediaType,
|
||||||
ContentLength = stream.Length,
|
ContentLength = response.Content.Headers.ContentLength,
|
||||||
ResponseUrl = response.Content.Headers.ContentLocation?.ToString()
|
ResponseUrl = response.Content.Headers.ContentLocation?.ToString()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
using (var response = await client.SendAsync(httpWebRequest, options.CancellationToken).ConfigureAwait(false))
|
using (var response = await client.SendAsync(httpWebRequest, HttpCompletionOption.ResponseHeadersRead, options.CancellationToken).ConfigureAwait(false))
|
||||||
{
|
{
|
||||||
await EnsureSuccessStatusCode(response, options).ConfigureAwait(false);
|
await EnsureSuccessStatusCode(response, options).ConfigureAwait(false);
|
||||||
|
|
||||||
|
@ -360,7 +315,7 @@ namespace Emby.Server.Implementations.HttpClientManager
|
||||||
await stream.CopyToAsync(memoryStream, StreamDefaults.DefaultCopyToBufferSize, options.CancellationToken).ConfigureAwait(false);
|
await stream.CopyToAsync(memoryStream, StreamDefaults.DefaultCopyToBufferSize, options.CancellationToken).ConfigureAwait(false);
|
||||||
memoryStream.Position = 0;
|
memoryStream.Position = 0;
|
||||||
|
|
||||||
return new HttpResponseInfo(response.Headers)
|
return new HttpResponseInfo(response.Headers, response.Content.Headers)
|
||||||
{
|
{
|
||||||
Content = memoryStream,
|
Content = memoryStream,
|
||||||
StatusCode = response.StatusCode,
|
StatusCode = response.StatusCode,
|
||||||
|
@ -430,7 +385,7 @@ namespace Emby.Server.Implementations.HttpClientManager
|
||||||
|
|
||||||
options.Progress.Report(100);
|
options.Progress.Report(100);
|
||||||
|
|
||||||
var responseInfo = new HttpResponseInfo(response.Headers)
|
var responseInfo = new HttpResponseInfo(response.Headers, response.Content.Headers)
|
||||||
{
|
{
|
||||||
TempFilePath = tempFile,
|
TempFilePath = tempFile,
|
||||||
StatusCode = response.StatusCode,
|
StatusCode = response.StatusCode,
|
||||||
|
|
|
@ -2,14 +2,15 @@ using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.IO.Compression;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Net.Http;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Emby.XmlTv.Classes;
|
using Emby.XmlTv.Classes;
|
||||||
using Emby.XmlTv.Entities;
|
using Emby.XmlTv.Entities;
|
||||||
using MediaBrowser.Common.Extensions;
|
using MediaBrowser.Common.Extensions;
|
||||||
using MediaBrowser.Common.Net;
|
using MediaBrowser.Common.Net;
|
||||||
using MediaBrowser.Common.Progress;
|
|
||||||
using MediaBrowser.Controller.Configuration;
|
using MediaBrowser.Controller.Configuration;
|
||||||
using MediaBrowser.Controller.LiveTv;
|
using MediaBrowser.Controller.LiveTv;
|
||||||
using MediaBrowser.Model.Dto;
|
using MediaBrowser.Model.Dto;
|
||||||
|
@ -27,7 +28,12 @@ namespace Emby.Server.Implementations.LiveTv.Listings
|
||||||
private readonly IFileSystem _fileSystem;
|
private readonly IFileSystem _fileSystem;
|
||||||
private readonly IZipClient _zipClient;
|
private readonly IZipClient _zipClient;
|
||||||
|
|
||||||
public XmlTvListingsProvider(IServerConfigurationManager config, IHttpClient httpClient, ILogger logger, IFileSystem fileSystem, IZipClient zipClient)
|
public XmlTvListingsProvider(
|
||||||
|
IServerConfigurationManager config,
|
||||||
|
IHttpClient httpClient,
|
||||||
|
ILogger logger,
|
||||||
|
IFileSystem fileSystem,
|
||||||
|
IZipClient zipClient)
|
||||||
{
|
{
|
||||||
_config = config;
|
_config = config;
|
||||||
_httpClient = httpClient;
|
_httpClient = httpClient;
|
||||||
|
@ -52,7 +58,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
|
||||||
|
|
||||||
private async Task<string> GetXml(string path, CancellationToken cancellationToken)
|
private async Task<string> GetXml(string path, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("xmltv path: {path}", path);
|
_logger.LogInformation("xmltv path: {Path}", path);
|
||||||
|
|
||||||
if (!path.StartsWith("http", StringComparison.OrdinalIgnoreCase))
|
if (!path.StartsWith("http", StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
|
@ -66,24 +72,33 @@ namespace Emby.Server.Implementations.LiveTv.Listings
|
||||||
return UnzipIfNeeded(path, cacheFile);
|
return UnzipIfNeeded(path, cacheFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
_logger.LogInformation("Downloading xmltv listings from {path}", path);
|
_logger.LogInformation("Downloading xmltv listings from {Path}", path);
|
||||||
|
|
||||||
string tempFile = await _httpClient.GetTempFile(new HttpRequestOptions
|
|
||||||
{
|
|
||||||
CancellationToken = cancellationToken,
|
|
||||||
Url = path,
|
|
||||||
Progress = new SimpleProgress<double>(),
|
|
||||||
// It's going to come back gzipped regardless of this value
|
|
||||||
// So we need to make sure the decompression method is set to gzip
|
|
||||||
DecompressionMethod = CompressionMethod.Gzip,
|
|
||||||
|
|
||||||
UserAgent = "Emby/3.0"
|
|
||||||
|
|
||||||
}).ConfigureAwait(false);
|
|
||||||
|
|
||||||
Directory.CreateDirectory(Path.GetDirectoryName(cacheFile));
|
Directory.CreateDirectory(Path.GetDirectoryName(cacheFile));
|
||||||
|
|
||||||
File.Copy(tempFile, cacheFile, true);
|
using (var res = await _httpClient.SendAsync(
|
||||||
|
new HttpRequestOptions
|
||||||
|
{
|
||||||
|
CancellationToken = cancellationToken,
|
||||||
|
Url = path,
|
||||||
|
DecompressionMethod = CompressionMethod.Gzip,
|
||||||
|
},
|
||||||
|
HttpMethod.Get).ConfigureAwait(false))
|
||||||
|
using (var stream = res.Content)
|
||||||
|
using (var fileStream = new FileStream(cacheFile, FileMode.CreateNew))
|
||||||
|
{
|
||||||
|
if (res.ContentHeaders.ContentEncoding.Contains("gzip"))
|
||||||
|
{
|
||||||
|
using (var gzStream = new GZipStream(stream, CompressionMode.Decompress))
|
||||||
|
{
|
||||||
|
await gzStream.CopyToAsync(fileStream).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
await stream.CopyToAsync(fileStream).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return UnzipIfNeeded(path, cacheFile);
|
return UnzipIfNeeded(path, cacheFile);
|
||||||
}
|
}
|
||||||
|
@ -101,7 +116,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_logger.LogError(ex, "Error extracting from gz file {file}", file);
|
_logger.LogError(ex, "Error extracting from gz file {File}", file);
|
||||||
}
|
}
|
||||||
|
|
||||||
try
|
try
|
||||||
|
@ -111,7 +126,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
_logger.LogError(ex, "Error extracting from zip file {file}", file);
|
_logger.LogError(ex, "Error extracting from zip file {File}", file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -159,20 +174,10 @@ namespace Emby.Server.Implementations.LiveTv.Listings
|
||||||
throw new ArgumentNullException(nameof(channelId));
|
throw new ArgumentNullException(nameof(channelId));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
_logger.LogDebug("Getting xmltv programs for channel {Id}", channelId);
|
||||||
if (!await EmbyTV.EmbyTVRegistration.Instance.EnableXmlTv().ConfigureAwait(false))
|
|
||||||
{
|
|
||||||
var length = endDateUtc - startDateUtc;
|
|
||||||
if (length.TotalDays > 1)
|
|
||||||
{
|
|
||||||
endDateUtc = startDateUtc.AddDays(1);
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
_logger.LogDebug("Getting xmltv programs for channel {id}", channelId);
|
|
||||||
|
|
||||||
string path = await GetXml(info.Path, cancellationToken).ConfigureAwait(false);
|
string path = await GetXml(info.Path, cancellationToken).ConfigureAwait(false);
|
||||||
_logger.LogDebug("Opening XmlTvReader for {path}", path);
|
_logger.LogDebug("Opening XmlTvReader for {Path}", path);
|
||||||
var reader = new XmlTvReader(path, GetLanguage(info));
|
var reader = new XmlTvReader(path, GetLanguage(info));
|
||||||
|
|
||||||
return reader.GetProgrammes(channelId, startDateUtc, endDateUtc, cancellationToken)
|
return reader.GetProgrammes(channelId, startDateUtc, endDateUtc, cancellationToken)
|
||||||
|
@ -265,7 +270,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
|
||||||
{
|
{
|
||||||
// In theory this should never be called because there is always only one lineup
|
// In theory this should never be called because there is always only one lineup
|
||||||
string path = await GetXml(info.Path, CancellationToken.None).ConfigureAwait(false);
|
string path = await GetXml(info.Path, CancellationToken.None).ConfigureAwait(false);
|
||||||
_logger.LogDebug("Opening XmlTvReader for {path}", path);
|
_logger.LogDebug("Opening XmlTvReader for {Path}", path);
|
||||||
var reader = new XmlTvReader(path, GetLanguage(info));
|
var reader = new XmlTvReader(path, GetLanguage(info));
|
||||||
IEnumerable<XmlTvChannel> results = reader.GetChannels();
|
IEnumerable<XmlTvChannel> results = reader.GetChannels();
|
||||||
|
|
||||||
|
@ -277,7 +282,7 @@ namespace Emby.Server.Implementations.LiveTv.Listings
|
||||||
{
|
{
|
||||||
// In theory this should never be called because there is always only one lineup
|
// In theory this should never be called because there is always only one lineup
|
||||||
string path = await GetXml(info.Path, cancellationToken).ConfigureAwait(false);
|
string path = await GetXml(info.Path, cancellationToken).ConfigureAwait(false);
|
||||||
_logger.LogDebug("Opening XmlTvReader for {path}", path);
|
_logger.LogDebug("Opening XmlTvReader for {Path}", path);
|
||||||
var reader = new XmlTvReader(path, GetLanguage(info));
|
var reader = new XmlTvReader(path, GetLanguage(info));
|
||||||
var results = reader.GetChannels();
|
var results = reader.GetChannels();
|
||||||
|
|
||||||
|
|
|
@ -91,8 +91,6 @@ namespace MediaBrowser.Common.Net
|
||||||
|
|
||||||
public bool EnableDefaultUserAgent { get; set; }
|
public bool EnableDefaultUserAgent { get; set; }
|
||||||
|
|
||||||
public bool AppendCharsetToMimeType { get; set; }
|
|
||||||
|
|
||||||
private string GetHeaderValue(string name)
|
private string GetHeaderValue(string name)
|
||||||
{
|
{
|
||||||
RequestHeaders.TryGetValue(name, out var value);
|
RequestHeaders.TryGetValue(name, out var value);
|
||||||
|
|
|
@ -52,14 +52,21 @@ namespace MediaBrowser.Common.Net
|
||||||
/// <value>The headers.</value>
|
/// <value>The headers.</value>
|
||||||
public HttpResponseHeaders Headers { get; set; }
|
public HttpResponseHeaders Headers { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets or sets the content headers.
|
||||||
|
/// </summary>
|
||||||
|
/// <value>The content headers.</value>
|
||||||
|
public HttpContentHeaders ContentHeaders { get; set; }
|
||||||
|
|
||||||
public HttpResponseInfo()
|
public HttpResponseInfo()
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public HttpResponseInfo(HttpResponseHeaders headers)
|
public HttpResponseInfo(HttpResponseHeaders headers, HttpContentHeaders contentHeader)
|
||||||
{
|
{
|
||||||
Headers = headers;
|
Headers = headers;
|
||||||
|
ContentHeaders = contentHeader;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit c9e70d95643e84437189dd500b0380ec0fbbf659
|
Subproject commit 1d0fd79eb1e4d0bf6a9f62f769a951970383bcf0
|
|
@ -57,10 +57,9 @@ namespace Mono.Nat.Upnp
|
||||||
req.Url = ss;
|
req.Url = ss;
|
||||||
req.EnableKeepAlive = false;
|
req.EnableKeepAlive = false;
|
||||||
req.RequestContentType = "text/xml";
|
req.RequestContentType = "text/xml";
|
||||||
req.AppendCharsetToMimeType = true;
|
|
||||||
req.RequestHeaders.Add("SOAPACTION", "\"" + device.ServiceType + "#" + upnpMethod + "\"");
|
req.RequestHeaders.Add("SOAPACTION", "\"" + device.ServiceType + "#" + upnpMethod + "\"");
|
||||||
|
|
||||||
string bodyString = "<s:Envelope "
|
req.RequestContent = "<s:Envelope "
|
||||||
+ "xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" "
|
+ "xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" "
|
||||||
+ "s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">"
|
+ "s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">"
|
||||||
+ "<s:Body>"
|
+ "<s:Body>"
|
||||||
|
@ -70,8 +69,6 @@ namespace Mono.Nat.Upnp
|
||||||
+ "</u:" + upnpMethod + ">"
|
+ "</u:" + upnpMethod + ">"
|
||||||
+ "</s:Body>"
|
+ "</s:Body>"
|
||||||
+ "</s:Envelope>\r\n\r\n";
|
+ "</s:Envelope>\r\n\r\n";
|
||||||
|
|
||||||
req.RequestContentBytes = System.Text.Encoding.UTF8.GetBytes(bodyString);
|
|
||||||
return req;
|
return req;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
[assembly: AssemblyVersion("10.3.6")]
|
[assembly: AssemblyVersion("10.3.7")]
|
||||||
[assembly: AssemblyFileVersion("10.3.6")]
|
[assembly: AssemblyFileVersion("10.3.7")]
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
---
|
---
|
||||||
# We just wrap `build` so this is really it
|
# We just wrap `build` so this is really it
|
||||||
name: "jellyfin"
|
name: "jellyfin"
|
||||||
version: "10.3.6"
|
version: "10.3.7"
|
||||||
packages:
|
packages:
|
||||||
- debian-package-x64
|
- debian-package-x64
|
||||||
- debian-package-armhf
|
- debian-package-armhf
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
jellyfin (10.3.7-1) unstable; urgency=medium
|
||||||
|
|
||||||
|
* New upstream version 10.3.7; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.7
|
||||||
|
|
||||||
|
-- Jellyfin Packaging Team <packaging@jellyfin.org> Wed, 24 Jul 2019 10:48:28 -0400
|
||||||
|
|
||||||
jellyfin (10.3.6-1) unstable; urgency=medium
|
jellyfin (10.3.6-1) unstable; urgency=medium
|
||||||
|
|
||||||
* New upstream version 10.3.6; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.6
|
* New upstream version 10.3.6; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.6
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
Name: jellyfin
|
Name: jellyfin
|
||||||
Version: 10.3.6
|
Version: 10.3.7
|
||||||
Release: 1%{?dist}
|
Release: 1%{?dist}
|
||||||
Summary: The Free Software Media Browser
|
Summary: The Free Software Media Browser
|
||||||
License: GPLv2
|
License: GPLv2
|
||||||
|
@ -140,6 +140,8 @@ fi
|
||||||
%systemd_postun_with_restart jellyfin.service
|
%systemd_postun_with_restart jellyfin.service
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Jul 24 2019 Jellyfin Packaging Team <packaging@jellyfin.org>
|
||||||
|
- New upstream version 10.3.7; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.7
|
||||||
* Sat Jul 06 2019 Jellyfin Packaging Team <packaging@jellyfin.org>
|
* Sat Jul 06 2019 Jellyfin Packaging Team <packaging@jellyfin.org>
|
||||||
- New upstream version 10.3.6; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.6
|
- New upstream version 10.3.6; release changelog at https://github.com/jellyfin/jellyfin/releases/tag/v10.3.6
|
||||||
* Sun Jun 09 2019 Jellyfin Packaging Team <packaging@jellyfin.org>
|
* Sun Jun 09 2019 Jellyfin Packaging Team <packaging@jellyfin.org>
|
||||||
|
|
Loading…
Reference in New Issue