commit
e02b3f479e
|
@ -2222,9 +2222,10 @@ namespace MediaBrowser.Api.Playback
|
||||||
|
|
||||||
if (state.VideoRequest != null)
|
if (state.VideoRequest != null)
|
||||||
{
|
{
|
||||||
|
// Important: If this is ever re-enabled, make sure not to use it with wtv because it breaks seeking
|
||||||
if (string.Equals(state.OutputContainer, "mkv", StringComparison.OrdinalIgnoreCase) && state.VideoRequest.CopyTimestamps)
|
if (string.Equals(state.OutputContainer, "mkv", StringComparison.OrdinalIgnoreCase) && state.VideoRequest.CopyTimestamps)
|
||||||
{
|
{
|
||||||
inputModifier += " -noaccurate_seek";
|
//inputModifier += " -noaccurate_seek";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,8 +54,9 @@
|
||||||
<Reference Include="MoreLinq">
|
<Reference Include="MoreLinq">
|
||||||
<HintPath>..\packages\morelinq.1.4.0\lib\net35\MoreLinq.dll</HintPath>
|
<HintPath>..\packages\morelinq.1.4.0\lib\net35\MoreLinq.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="NLog">
|
<Reference Include="NLog, Version=4.0.0.0, Culture=neutral, PublicKeyToken=5120e14c03d0593c, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\NLog.4.2.3\lib\net45\NLog.dll</HintPath>
|
<HintPath>..\packages\NLog.4.3.1\lib\net45\NLog.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Patterns.Logging">
|
<Reference Include="Patterns.Logging">
|
||||||
<HintPath>..\packages\Patterns.Logging.1.0.0.2\lib\portable-net45+sl4+wp71+win8+wpa81\Patterns.Logging.dll</HintPath>
|
<HintPath>..\packages\Patterns.Logging.1.0.0.2\lib\portable-net45+sl4+wp71+win8+wpa81\Patterns.Logging.dll</HintPath>
|
||||||
|
@ -64,8 +65,9 @@
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<SpecificVersion>False</SpecificVersion>
|
||||||
<HintPath>..\ThirdParty\SharpCompress\SharpCompress.dll</HintPath>
|
<HintPath>..\ThirdParty\SharpCompress\SharpCompress.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="SimpleInjector">
|
<Reference Include="SimpleInjector, Version=3.1.3.0, Culture=neutral, PublicKeyToken=984cb50dea722e99, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\SimpleInjector.3.1.2\lib\net45\SimpleInjector.dll</HintPath>
|
<HintPath>..\packages\SimpleInjector.3.1.3\lib\net45\SimpleInjector.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Configuration" />
|
<Reference Include="System.Configuration" />
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
<packages>
|
<packages>
|
||||||
<package id="CommonIO" version="1.0.0.9" targetFramework="net45" />
|
<package id="CommonIO" version="1.0.0.9" targetFramework="net45" />
|
||||||
<package id="morelinq" version="1.4.0" targetFramework="net45" />
|
<package id="morelinq" version="1.4.0" targetFramework="net45" />
|
||||||
<package id="NLog" version="4.2.3" targetFramework="net45" />
|
<package id="NLog" version="4.3.1" targetFramework="net45" />
|
||||||
<package id="Patterns.Logging" version="1.0.0.2" targetFramework="net45" />
|
<package id="Patterns.Logging" version="1.0.0.2" targetFramework="net45" />
|
||||||
<package id="SimpleInjector" version="3.1.2" targetFramework="net45" />
|
<package id="SimpleInjector" version="3.1.3" targetFramework="net45" />
|
||||||
</packages>
|
</packages>
|
|
@ -255,7 +255,7 @@ namespace MediaBrowser.Controller.Entities.TV
|
||||||
// Refresh current item
|
// Refresh current item
|
||||||
await RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
|
await RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
// Refresh TV
|
// Refresh seasons
|
||||||
foreach (var item in seasons)
|
foreach (var item in seasons)
|
||||||
{
|
{
|
||||||
cancellationToken.ThrowIfCancellationRequested();
|
cancellationToken.ThrowIfCancellationRequested();
|
||||||
|
@ -268,12 +268,30 @@ namespace MediaBrowser.Controller.Entities.TV
|
||||||
progress.Report(percent * 100);
|
progress.Report(percent * 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Refresh all non-songs
|
// Refresh episodes and other children
|
||||||
foreach (var item in otherItems)
|
foreach (var item in otherItems)
|
||||||
{
|
{
|
||||||
cancellationToken.ThrowIfCancellationRequested();
|
cancellationToken.ThrowIfCancellationRequested();
|
||||||
|
|
||||||
await item.RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
|
var skipItem = false;
|
||||||
|
|
||||||
|
var episode = item as Episode;
|
||||||
|
|
||||||
|
if (episode != null
|
||||||
|
&& refreshOptions.MetadataRefreshMode != MetadataRefreshMode.FullRefresh
|
||||||
|
&& !refreshOptions.ReplaceAllMetadata
|
||||||
|
&& episode.IsMissingEpisode
|
||||||
|
&& episode.LocationType == Model.Entities.LocationType.Virtual
|
||||||
|
&& episode.PremiereDate.HasValue
|
||||||
|
&& (DateTime.UtcNow - episode.PremiereDate.Value).TotalDays > 30)
|
||||||
|
{
|
||||||
|
skipItem = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!skipItem)
|
||||||
|
{
|
||||||
|
await item.RefreshMetadata(refreshOptions, cancellationToken).ConfigureAwait(false);
|
||||||
|
}
|
||||||
|
|
||||||
numComplete++;
|
numComplete++;
|
||||||
double percent = numComplete;
|
double percent = numComplete;
|
||||||
|
|
|
@ -86,5 +86,7 @@ namespace MediaBrowser.Controller
|
||||||
/// <param name="ipAddress">The ip address.</param>
|
/// <param name="ipAddress">The ip address.</param>
|
||||||
/// <returns>System.String.</returns>
|
/// <returns>System.String.</returns>
|
||||||
string GetLocalApiUrl(IPAddress ipAddress);
|
string GetLocalApiUrl(IPAddress ipAddress);
|
||||||
|
|
||||||
|
void LaunchUrl(string url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,7 +23,7 @@ namespace MediaBrowser.Providers.BoxSets
|
||||||
{
|
{
|
||||||
public class MovieDbBoxSetProvider : IRemoteMetadataProvider<BoxSet, BoxSetInfo>
|
public class MovieDbBoxSetProvider : IRemoteMetadataProvider<BoxSet, BoxSetInfo>
|
||||||
{
|
{
|
||||||
private const string GetCollectionInfo3 = @"http://api.themoviedb.org/3/collection/{0}?api_key={1}&append_to_response=images";
|
private const string GetCollectionInfo3 = @"https://api.themoviedb.org/3/collection/{0}?api_key={1}&append_to_response=images";
|
||||||
|
|
||||||
internal static MovieDbBoxSetProvider Current;
|
internal static MovieDbBoxSetProvider Current;
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using CommonIO;
|
using CommonIO;
|
||||||
|
using MediaBrowser.Model.Serialization;
|
||||||
|
|
||||||
namespace MediaBrowser.Providers.Manager
|
namespace MediaBrowser.Providers.Manager
|
||||||
{
|
{
|
||||||
|
@ -60,6 +61,7 @@ namespace MediaBrowser.Providers.Manager
|
||||||
private IEnumerable<IMetadataSaver> _savers;
|
private IEnumerable<IMetadataSaver> _savers;
|
||||||
private IImageSaver[] _imageSavers;
|
private IImageSaver[] _imageSavers;
|
||||||
private readonly IServerApplicationPaths _appPaths;
|
private readonly IServerApplicationPaths _appPaths;
|
||||||
|
private readonly IJsonSerializer _json;
|
||||||
|
|
||||||
private IExternalId[] _externalIds;
|
private IExternalId[] _externalIds;
|
||||||
|
|
||||||
|
@ -73,7 +75,7 @@ namespace MediaBrowser.Providers.Manager
|
||||||
/// <param name="libraryMonitor">The directory watchers.</param>
|
/// <param name="libraryMonitor">The directory watchers.</param>
|
||||||
/// <param name="logManager">The log manager.</param>
|
/// <param name="logManager">The log manager.</param>
|
||||||
/// <param name="fileSystem">The file system.</param>
|
/// <param name="fileSystem">The file system.</param>
|
||||||
public ProviderManager(IHttpClient httpClient, IServerConfigurationManager configurationManager, ILibraryMonitor libraryMonitor, ILogManager logManager, IFileSystem fileSystem, IServerApplicationPaths appPaths, Func<ILibraryManager> libraryManagerFactory)
|
public ProviderManager(IHttpClient httpClient, IServerConfigurationManager configurationManager, ILibraryMonitor libraryMonitor, ILogManager logManager, IFileSystem fileSystem, IServerApplicationPaths appPaths, Func<ILibraryManager> libraryManagerFactory, IJsonSerializer json)
|
||||||
{
|
{
|
||||||
_logger = logManager.GetLogger("ProviderManager");
|
_logger = logManager.GetLogger("ProviderManager");
|
||||||
_httpClient = httpClient;
|
_httpClient = httpClient;
|
||||||
|
@ -82,6 +84,7 @@ namespace MediaBrowser.Providers.Manager
|
||||||
_fileSystem = fileSystem;
|
_fileSystem = fileSystem;
|
||||||
_appPaths = appPaths;
|
_appPaths = appPaths;
|
||||||
_libraryManagerFactory = libraryManagerFactory;
|
_libraryManagerFactory = libraryManagerFactory;
|
||||||
|
_json = json;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
@ -730,8 +733,6 @@ namespace MediaBrowser.Providers.Manager
|
||||||
where TItemType : BaseItem, new()
|
where TItemType : BaseItem, new()
|
||||||
where TLookupType : ItemLookupInfo
|
where TLookupType : ItemLookupInfo
|
||||||
{
|
{
|
||||||
const int maxResults = 10;
|
|
||||||
|
|
||||||
// Give it a dummy path just so that it looks like a file system item
|
// Give it a dummy path just so that it looks like a file system item
|
||||||
var dummy = new TItemType
|
var dummy = new TItemType
|
||||||
{
|
{
|
||||||
|
@ -761,7 +762,6 @@ namespace MediaBrowser.Providers.Manager
|
||||||
}
|
}
|
||||||
|
|
||||||
var resultList = new List<RemoteSearchResult>();
|
var resultList = new List<RemoteSearchResult>();
|
||||||
var foundProviderIds = new Dictionary<Tuple<string, string>, RemoteSearchResult>();
|
|
||||||
|
|
||||||
foreach (var provider in providers)
|
foreach (var provider in providers)
|
||||||
{
|
{
|
||||||
|
@ -771,32 +771,27 @@ namespace MediaBrowser.Providers.Manager
|
||||||
|
|
||||||
foreach (var result in results)
|
foreach (var result in results)
|
||||||
{
|
{
|
||||||
var bFound = false;
|
var existingMatch = resultList.FirstOrDefault(i => i.ProviderIds.Any(p => string.Equals(result.GetProviderId(p.Key), p.Value, StringComparison.OrdinalIgnoreCase)));
|
||||||
|
|
||||||
// This check prevents duplicate search results by comparing provider ids
|
if (existingMatch == null)
|
||||||
foreach (var providerId in result.ProviderIds)
|
|
||||||
{
|
|
||||||
var idTuple = new Tuple<string, string>(providerId.Key.ToLower(), providerId.Value.ToLower());
|
|
||||||
|
|
||||||
if (!foundProviderIds.ContainsKey(idTuple))
|
|
||||||
{
|
|
||||||
foundProviderIds.Add(idTuple, result);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
bFound = true;
|
|
||||||
var existingResult = foundProviderIds[idTuple];
|
|
||||||
if (string.IsNullOrEmpty(existingResult.ImageUrl) && !string.IsNullOrEmpty(result.ImageUrl))
|
|
||||||
{
|
|
||||||
existingResult.ImageUrl = result.ImageUrl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!bFound && resultList.Count < maxResults)
|
|
||||||
{
|
{
|
||||||
resultList.Add(result);
|
resultList.Add(result);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
foreach (var providerId in result.ProviderIds)
|
||||||
|
{
|
||||||
|
if (!existingMatch.ProviderIds.ContainsKey(providerId.Key))
|
||||||
|
{
|
||||||
|
existingMatch.ProviderIds.Add(providerId.Key, providerId.Value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (string.IsNullOrWhiteSpace(existingMatch.ImageUrl))
|
||||||
|
{
|
||||||
|
existingMatch.ImageUrl = result.ImageUrl;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -805,6 +800,8 @@ namespace MediaBrowser.Providers.Manager
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//_logger.Debug("Returning search results {0}", _json.SerializeToString(resultList));
|
||||||
|
|
||||||
return resultList;
|
return resultList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,7 +20,7 @@ namespace MediaBrowser.Providers.Movies
|
||||||
{
|
{
|
||||||
class FanartMovieUpdatesPostScanTask : ILibraryPostScanTask
|
class FanartMovieUpdatesPostScanTask : ILibraryPostScanTask
|
||||||
{
|
{
|
||||||
private const string UpdatesUrl = "http://webservice.fanart.tv/v3/movies/latest?api_key={0}&date={1}";
|
private const string UpdatesUrl = "https://webservice.fanart.tv/v3/movies/latest?api_key={0}&date={1}";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The _HTTP client
|
/// The _HTTP client
|
||||||
|
|
|
@ -31,7 +31,7 @@ namespace MediaBrowser.Providers.Movies
|
||||||
private readonly IFileSystem _fileSystem;
|
private readonly IFileSystem _fileSystem;
|
||||||
private readonly IJsonSerializer _json;
|
private readonly IJsonSerializer _json;
|
||||||
|
|
||||||
private const string FanArtBaseUrl = "http://webservice.fanart.tv/v3/movies/{1}?api_key={0}";
|
private const string FanArtBaseUrl = "https://webservice.fanart.tv/v3/movies/{1}?api_key={0}";
|
||||||
// &client_key=52c813aa7b8c8b3bb87f4797532a2f8c
|
// &client_key=52c813aa7b8c8b3bb87f4797532a2f8c
|
||||||
|
|
||||||
internal static FanartMovieImageProvider Current;
|
internal static FanartMovieImageProvider Current;
|
||||||
|
|
|
@ -329,7 +329,7 @@ namespace MediaBrowser.Providers.Movies
|
||||||
{
|
{
|
||||||
hasTrailers.RemoteTrailers = movieData.trailers.youtube.Select(i => new MediaUrl
|
hasTrailers.RemoteTrailers = movieData.trailers.youtube.Select(i => new MediaUrl
|
||||||
{
|
{
|
||||||
Url = string.Format("http://www.youtube.com/watch?v={0}", i.source),
|
Url = string.Format("https://www.youtube.com/watch?v={0}", i.source),
|
||||||
Name = i.name,
|
Name = i.name,
|
||||||
VideoSize = string.Equals("hd", i.size, StringComparison.OrdinalIgnoreCase) ? VideoSize.HighDefinition : VideoSize.StandardDefinition
|
VideoSize = string.Equals("hd", i.size, StringComparison.OrdinalIgnoreCase) ? VideoSize.HighDefinition : VideoSize.StandardDefinition
|
||||||
|
|
||||||
|
|
|
@ -172,8 +172,8 @@ namespace MediaBrowser.Providers.Movies
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private const string TmdbConfigUrl = "http://api.themoviedb.org/3/configuration?api_key={0}";
|
private const string TmdbConfigUrl = "https://api.themoviedb.org/3/configuration?api_key={0}";
|
||||||
private const string GetMovieInfo3 = @"http://api.themoviedb.org/3/movie/{0}?api_key={1}&append_to_response=casts,releases,images,keywords,trailers";
|
private const string GetMovieInfo3 = @"https://api.themoviedb.org/3/movie/{0}?api_key={1}&append_to_response=casts,releases,images,keywords,trailers";
|
||||||
|
|
||||||
internal static string ApiKey = "f6bd687ffa63cd282b6ff2c6877f2669";
|
internal static string ApiKey = "f6bd687ffa63cd282b6ff2c6877f2669";
|
||||||
internal static string AcceptHeader = "application/json,image/*";
|
internal static string AcceptHeader = "application/json,image/*";
|
||||||
|
@ -281,7 +281,7 @@ namespace MediaBrowser.Providers.Movies
|
||||||
public static string NormalizeLanguage(string language)
|
public static string NormalizeLanguage(string language)
|
||||||
{
|
{
|
||||||
// They require this to be uppercase
|
// They require this to be uppercase
|
||||||
// http://emby.media/community/index.php?/topic/32454-fr-follow-tmdbs-new-language-api-update/?p=311148
|
// https://emby.media/community/index.php?/topic/32454-fr-follow-tmdbs-new-language-api-update/?p=311148
|
||||||
var parts = language.Split('-');
|
var parts = language.Split('-');
|
||||||
|
|
||||||
if (parts.Length == 2)
|
if (parts.Length == 2)
|
||||||
|
|
|
@ -18,7 +18,7 @@ namespace MediaBrowser.Providers.Movies
|
||||||
public class MovieDbSearch
|
public class MovieDbSearch
|
||||||
{
|
{
|
||||||
private static readonly CultureInfo EnUs = new CultureInfo("en-US");
|
private static readonly CultureInfo EnUs = new CultureInfo("en-US");
|
||||||
private const string Search3 = @"http://api.themoviedb.org/3/search/{3}?api_key={1}&query={0}&language={2}";
|
private const string Search3 = @"https://api.themoviedb.org/3/search/{3}?api_key={1}&query={0}&language={2}";
|
||||||
|
|
||||||
internal static string ApiKey = "f6bd687ffa63cd282b6ff2c6877f2669";
|
internal static string ApiKey = "f6bd687ffa63cd282b6ff2c6877f2669";
|
||||||
internal static string AcceptHeader = "application/json,image/*";
|
internal static string AcceptHeader = "application/json,image/*";
|
||||||
|
|
|
@ -21,7 +21,7 @@ namespace MediaBrowser.Providers.Movies
|
||||||
|
|
||||||
public string UrlFormatString
|
public string UrlFormatString
|
||||||
{
|
{
|
||||||
get { return "http://www.themoviedb.org/movie/{0}"; }
|
get { return "https://www.themoviedb.org/movie/{0}"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Supports(IHasProviderIds item)
|
public bool Supports(IHasProviderIds item)
|
||||||
|
@ -51,7 +51,7 @@ namespace MediaBrowser.Providers.Movies
|
||||||
|
|
||||||
public string UrlFormatString
|
public string UrlFormatString
|
||||||
{
|
{
|
||||||
get { return "http://www.themoviedb.org/tv/{0}"; }
|
get { return "https://www.themoviedb.org/tv/{0}"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Supports(IHasProviderIds item)
|
public bool Supports(IHasProviderIds item)
|
||||||
|
@ -74,7 +74,7 @@ namespace MediaBrowser.Providers.Movies
|
||||||
|
|
||||||
public string UrlFormatString
|
public string UrlFormatString
|
||||||
{
|
{
|
||||||
get { return "http://www.themoviedb.org/collection/{0}"; }
|
get { return "https://www.themoviedb.org/collection/{0}"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Supports(IHasProviderIds item)
|
public bool Supports(IHasProviderIds item)
|
||||||
|
@ -97,7 +97,7 @@ namespace MediaBrowser.Providers.Movies
|
||||||
|
|
||||||
public string UrlFormatString
|
public string UrlFormatString
|
||||||
{
|
{
|
||||||
get { return "http://www.themoviedb.org/person/{0}"; }
|
get { return "https://www.themoviedb.org/person/{0}"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Supports(IHasProviderIds item)
|
public bool Supports(IHasProviderIds item)
|
||||||
|
@ -120,7 +120,7 @@ namespace MediaBrowser.Providers.Movies
|
||||||
|
|
||||||
public string UrlFormatString
|
public string UrlFormatString
|
||||||
{
|
{
|
||||||
get { return "http://www.themoviedb.org/collection/{0}"; }
|
get { return "https://www.themoviedb.org/collection/{0}"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Supports(IHasProviderIds item)
|
public bool Supports(IHasProviderIds item)
|
||||||
|
|
|
@ -22,7 +22,7 @@ namespace MediaBrowser.Providers.Movies
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The updates URL
|
/// The updates URL
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private const string UpdatesUrl = "http://api.themoviedb.org/3/movie/changes?start_date={0}&api_key={1}&page={2}";
|
private const string UpdatesUrl = "https://api.themoviedb.org/3/movie/changes?start_date={0}&api_key={1}&page={2}";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The _HTTP client
|
/// The _HTTP client
|
||||||
|
|
|
@ -26,7 +26,7 @@ namespace MediaBrowser.Providers.Music
|
||||||
{
|
{
|
||||||
internal readonly SemaphoreSlim FanArtResourcePool = new SemaphoreSlim(3, 3);
|
internal readonly SemaphoreSlim FanArtResourcePool = new SemaphoreSlim(3, 3);
|
||||||
internal const string ApiKey = "5c6b04c68e904cfed1e6cbc9a9e683d4";
|
internal const string ApiKey = "5c6b04c68e904cfed1e6cbc9a9e683d4";
|
||||||
private const string FanArtBaseUrl = "http://webservice.fanart.tv/v3.1/music/{1}?api_key={0}";
|
private const string FanArtBaseUrl = "https://webservice.fanart.tv/v3.1/music/{1}?api_key={0}";
|
||||||
|
|
||||||
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
|
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
|
||||||
private readonly IServerConfigurationManager _config;
|
private readonly IServerConfigurationManager _config;
|
||||||
|
|
|
@ -19,7 +19,7 @@ namespace MediaBrowser.Providers.Music
|
||||||
{
|
{
|
||||||
class FanartUpdatesPostScanTask : ILibraryPostScanTask
|
class FanartUpdatesPostScanTask : ILibraryPostScanTask
|
||||||
{
|
{
|
||||||
private const string UpdatesUrl = "http://api.fanart.tv/webservice/newmusic/{0}/{1}/";
|
private const string UpdatesUrl = "https://api.fanart.tv/webservice/newmusic/{0}/{1}/";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The _HTTP client
|
/// The _HTTP client
|
||||||
|
|
|
@ -42,7 +42,7 @@ namespace MediaBrowser.Providers.Music
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(releaseId))
|
if (!string.IsNullOrEmpty(releaseId))
|
||||||
{
|
{
|
||||||
url = string.Format("http://www.musicbrainz.org/ws/2/release/?query=reid:{0}", releaseId);
|
url = string.Format("https://www.musicbrainz.org/ws/2/release/?query=reid:{0}", releaseId);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -50,7 +50,7 @@ namespace MediaBrowser.Providers.Music
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(artistMusicBrainzId))
|
if (!string.IsNullOrWhiteSpace(artistMusicBrainzId))
|
||||||
{
|
{
|
||||||
url = string.Format("http://www.musicbrainz.org/ws/2/release/?query=\"{0}\" AND arid:{1}",
|
url = string.Format("https://www.musicbrainz.org/ws/2/release/?query=\"{0}\" AND arid:{1}",
|
||||||
WebUtility.UrlEncode(searchInfo.Name),
|
WebUtility.UrlEncode(searchInfo.Name),
|
||||||
artistMusicBrainzId);
|
artistMusicBrainzId);
|
||||||
}
|
}
|
||||||
|
@ -58,7 +58,7 @@ namespace MediaBrowser.Providers.Music
|
||||||
{
|
{
|
||||||
isNameSearch = true;
|
isNameSearch = true;
|
||||||
|
|
||||||
url = string.Format("http://www.musicbrainz.org/ws/2/release/?query=\"{0}\" AND artist:\"{1}\"",
|
url = string.Format("https://www.musicbrainz.org/ws/2/release/?query=\"{0}\" AND artist:\"{1}\"",
|
||||||
WebUtility.UrlEncode(searchInfo.Name),
|
WebUtility.UrlEncode(searchInfo.Name),
|
||||||
WebUtility.UrlEncode(searchInfo.GetAlbumArtist()));
|
WebUtility.UrlEncode(searchInfo.GetAlbumArtist()));
|
||||||
}
|
}
|
||||||
|
@ -77,7 +77,7 @@ namespace MediaBrowser.Providers.Music
|
||||||
private IEnumerable<RemoteSearchResult> GetResultsFromResponse(XmlDocument doc)
|
private IEnumerable<RemoteSearchResult> GetResultsFromResponse(XmlDocument doc)
|
||||||
{
|
{
|
||||||
var ns = new XmlNamespaceManager(doc.NameTable);
|
var ns = new XmlNamespaceManager(doc.NameTable);
|
||||||
ns.AddNamespace("mb", "http://musicbrainz.org/ns/mmd-2.0#");
|
ns.AddNamespace("mb", "https://musicbrainz.org/ns/mmd-2.0#");
|
||||||
|
|
||||||
var list = new List<RemoteSearchResult>();
|
var list = new List<RemoteSearchResult>();
|
||||||
|
|
||||||
|
@ -197,7 +197,7 @@ namespace MediaBrowser.Providers.Music
|
||||||
|
|
||||||
private async Task<ReleaseResult> GetReleaseResult(string albumName, string artistId, CancellationToken cancellationToken)
|
private async Task<ReleaseResult> GetReleaseResult(string albumName, string artistId, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var url = string.Format("http://www.musicbrainz.org/ws/2/release/?query=\"{0}\" AND arid:{1}",
|
var url = string.Format("https://www.musicbrainz.org/ws/2/release/?query=\"{0}\" AND arid:{1}",
|
||||||
WebUtility.UrlEncode(albumName),
|
WebUtility.UrlEncode(albumName),
|
||||||
artistId);
|
artistId);
|
||||||
|
|
||||||
|
@ -208,7 +208,7 @@ namespace MediaBrowser.Providers.Music
|
||||||
|
|
||||||
private async Task<ReleaseResult> GetReleaseResultByArtistName(string albumName, string artistName, CancellationToken cancellationToken)
|
private async Task<ReleaseResult> GetReleaseResultByArtistName(string albumName, string artistName, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var url = string.Format("http://www.musicbrainz.org/ws/2/release/?query=\"{0}\" AND artist:\"{1}\"",
|
var url = string.Format("https://www.musicbrainz.org/ws/2/release/?query=\"{0}\" AND artist:\"{1}\"",
|
||||||
WebUtility.UrlEncode(albumName),
|
WebUtility.UrlEncode(albumName),
|
||||||
WebUtility.UrlEncode(artistName));
|
WebUtility.UrlEncode(artistName));
|
||||||
|
|
||||||
|
@ -220,7 +220,7 @@ namespace MediaBrowser.Providers.Music
|
||||||
private ReleaseResult GetReleaseResult(XmlDocument doc)
|
private ReleaseResult GetReleaseResult(XmlDocument doc)
|
||||||
{
|
{
|
||||||
var ns = new XmlNamespaceManager(doc.NameTable);
|
var ns = new XmlNamespaceManager(doc.NameTable);
|
||||||
ns.AddNamespace("mb", "http://musicbrainz.org/ns/mmd-2.0#");
|
ns.AddNamespace("mb", "https://musicbrainz.org/ns/mmd-2.0#");
|
||||||
|
|
||||||
var result = new ReleaseResult
|
var result = new ReleaseResult
|
||||||
{
|
{
|
||||||
|
@ -258,12 +258,12 @@ namespace MediaBrowser.Providers.Music
|
||||||
/// <returns>Task{System.String}.</returns>
|
/// <returns>Task{System.String}.</returns>
|
||||||
private async Task<string> GetReleaseGroupId(string releaseEntryId, CancellationToken cancellationToken)
|
private async Task<string> GetReleaseGroupId(string releaseEntryId, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var url = string.Format("http://www.musicbrainz.org/ws/2/release-group/?query=reid:{0}", releaseEntryId);
|
var url = string.Format("https://www.musicbrainz.org/ws/2/release-group/?query=reid:{0}", releaseEntryId);
|
||||||
|
|
||||||
var doc = await GetMusicBrainzResponse(url, false, cancellationToken).ConfigureAwait(false);
|
var doc = await GetMusicBrainzResponse(url, false, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
var ns = new XmlNamespaceManager(doc.NameTable);
|
var ns = new XmlNamespaceManager(doc.NameTable);
|
||||||
ns.AddNamespace("mb", "http://musicbrainz.org/ns/mmd-2.0#");
|
ns.AddNamespace("mb", "https://musicbrainz.org/ns/mmd-2.0#");
|
||||||
var node = doc.SelectSingleNode("//mb:release-group-list/mb:release-group/@id", ns);
|
var node = doc.SelectSingleNode("//mb:release-group-list/mb:release-group/@id", ns);
|
||||||
|
|
||||||
return node != null ? node.Value : null;
|
return node != null ? node.Value : null;
|
||||||
|
|
|
@ -23,7 +23,7 @@ namespace MediaBrowser.Providers.Music
|
||||||
|
|
||||||
if (!string.IsNullOrWhiteSpace(musicBrainzId))
|
if (!string.IsNullOrWhiteSpace(musicBrainzId))
|
||||||
{
|
{
|
||||||
var url = string.Format("http://www.musicbrainz.org/ws/2/artist/?query=arid:{0}", musicBrainzId);
|
var url = string.Format("https://www.musicbrainz.org/ws/2/artist/?query=arid:{0}", musicBrainzId);
|
||||||
|
|
||||||
var doc = await MusicBrainzAlbumProvider.Current.GetMusicBrainzResponse(url, false, cancellationToken)
|
var doc = await MusicBrainzAlbumProvider.Current.GetMusicBrainzResponse(url, false, cancellationToken)
|
||||||
.ConfigureAwait(false);
|
.ConfigureAwait(false);
|
||||||
|
@ -35,7 +35,7 @@ namespace MediaBrowser.Providers.Music
|
||||||
// They seem to throw bad request failures on any term with a slash
|
// They seem to throw bad request failures on any term with a slash
|
||||||
var nameToSearch = searchInfo.Name.Replace('/', ' ');
|
var nameToSearch = searchInfo.Name.Replace('/', ' ');
|
||||||
|
|
||||||
var url = String.Format("http://www.musicbrainz.org/ws/2/artist/?query=artist:\"{0}\"", UrlEncode(nameToSearch));
|
var url = String.Format("https://www.musicbrainz.org/ws/2/artist/?query=artist:\"{0}\"", UrlEncode(nameToSearch));
|
||||||
|
|
||||||
var doc = await MusicBrainzAlbumProvider.Current.GetMusicBrainzResponse(url, true, cancellationToken).ConfigureAwait(false);
|
var doc = await MusicBrainzAlbumProvider.Current.GetMusicBrainzResponse(url, true, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
|
@ -49,7 +49,7 @@ namespace MediaBrowser.Providers.Music
|
||||||
if (HasDiacritics(searchInfo.Name))
|
if (HasDiacritics(searchInfo.Name))
|
||||||
{
|
{
|
||||||
// Try again using the search with accent characters url
|
// Try again using the search with accent characters url
|
||||||
url = String.Format("http://www.musicbrainz.org/ws/2/artist/?query=artistaccent:\"{0}\"", UrlEncode(nameToSearch));
|
url = String.Format("https://www.musicbrainz.org/ws/2/artist/?query=artistaccent:\"{0}\"", UrlEncode(nameToSearch));
|
||||||
|
|
||||||
doc = await MusicBrainzAlbumProvider.Current.GetMusicBrainzResponse(url, true, cancellationToken).ConfigureAwait(false);
|
doc = await MusicBrainzAlbumProvider.Current.GetMusicBrainzResponse(url, true, cancellationToken).ConfigureAwait(false);
|
||||||
|
|
||||||
|
@ -63,7 +63,7 @@ namespace MediaBrowser.Providers.Music
|
||||||
private IEnumerable<RemoteSearchResult> GetResultsFromResponse(XmlDocument doc)
|
private IEnumerable<RemoteSearchResult> GetResultsFromResponse(XmlDocument doc)
|
||||||
{
|
{
|
||||||
var ns = new XmlNamespaceManager(doc.NameTable);
|
var ns = new XmlNamespaceManager(doc.NameTable);
|
||||||
ns.AddNamespace("mb", "http://musicbrainz.org/ns/mmd-2.0#");
|
ns.AddNamespace("mb", "https://musicbrainz.org/ns/mmd-2.0#");
|
||||||
|
|
||||||
var list = new List<RemoteSearchResult>();
|
var list = new List<RemoteSearchResult>();
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ namespace MediaBrowser.Providers.Music
|
||||||
|
|
||||||
public string UrlFormatString
|
public string UrlFormatString
|
||||||
{
|
{
|
||||||
get { return "http://musicbrainz.org/release-group/{0}"; }
|
get { return "https://musicbrainz.org/release-group/{0}"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Supports(IHasProviderIds item)
|
public bool Supports(IHasProviderIds item)
|
||||||
|
@ -41,7 +41,7 @@ namespace MediaBrowser.Providers.Music
|
||||||
|
|
||||||
public string UrlFormatString
|
public string UrlFormatString
|
||||||
{
|
{
|
||||||
get { return "http://musicbrainz.org/artist/{0}"; }
|
get { return "https://musicbrainz.org/artist/{0}"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Supports(IHasProviderIds item)
|
public bool Supports(IHasProviderIds item)
|
||||||
|
@ -64,7 +64,7 @@ namespace MediaBrowser.Providers.Music
|
||||||
|
|
||||||
public string UrlFormatString
|
public string UrlFormatString
|
||||||
{
|
{
|
||||||
get { return "http://musicbrainz.org/release/{0}"; }
|
get { return "https://musicbrainz.org/release/{0}"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Supports(IHasProviderIds item)
|
public bool Supports(IHasProviderIds item)
|
||||||
|
@ -87,7 +87,7 @@ namespace MediaBrowser.Providers.Music
|
||||||
|
|
||||||
public string UrlFormatString
|
public string UrlFormatString
|
||||||
{
|
{
|
||||||
get { return "http://musicbrainz.org/artist/{0}"; }
|
get { return "https://musicbrainz.org/artist/{0}"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Supports(IHasProviderIds item)
|
public bool Supports(IHasProviderIds item)
|
||||||
|
@ -110,7 +110,7 @@ namespace MediaBrowser.Providers.Music
|
||||||
|
|
||||||
public string UrlFormatString
|
public string UrlFormatString
|
||||||
{
|
{
|
||||||
get { return "http://musicbrainz.org/artist/{0}"; }
|
get { return "https://musicbrainz.org/artist/{0}"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Supports(IHasProviderIds item)
|
public bool Supports(IHasProviderIds item)
|
||||||
|
@ -133,7 +133,7 @@ namespace MediaBrowser.Providers.Music
|
||||||
|
|
||||||
public string UrlFormatString
|
public string UrlFormatString
|
||||||
{
|
{
|
||||||
get { return "http://musicbrainz.org/track/{0}"; }
|
get { return "https://musicbrainz.org/track/{0}"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Supports(IHasProviderIds item)
|
public bool Supports(IHasProviderIds item)
|
||||||
|
|
|
@ -40,7 +40,7 @@ namespace MediaBrowser.Providers.Omdb
|
||||||
list.Add(new RemoteImageInfo
|
list.Add(new RemoteImageInfo
|
||||||
{
|
{
|
||||||
ProviderName = Name,
|
ProviderName = Name,
|
||||||
Url = string.Format("http://img.omdbapi.com/?i={0}&apikey=82e83907", imdbId)
|
Url = string.Format("https://img.omdbapi.com/?i={0}&apikey=82e83907", imdbId)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -64,11 +64,9 @@ namespace MediaBrowser.Providers.Omdb
|
||||||
{
|
{
|
||||||
var episodeSearchInfo = searchInfo as EpisodeInfo;
|
var episodeSearchInfo = searchInfo as EpisodeInfo;
|
||||||
|
|
||||||
var list = new List<RemoteSearchResult>();
|
|
||||||
|
|
||||||
var imdbId = searchInfo.GetProviderId(MetadataProviders.Imdb);
|
var imdbId = searchInfo.GetProviderId(MetadataProviders.Imdb);
|
||||||
|
|
||||||
var url = "http://www.omdbapi.com/?plot=full&r=json";
|
var url = "https://www.omdbapi.com/?plot=full&r=json";
|
||||||
if (type == "episode" && episodeSearchInfo != null)
|
if (type == "episode" && episodeSearchInfo != null)
|
||||||
{
|
{
|
||||||
episodeSearchInfo.SeriesProviderIds.TryGetValue(MetadataProviders.Imdb.ToString(), out imdbId);
|
episodeSearchInfo.SeriesProviderIds.TryGetValue(MetadataProviders.Imdb.ToString(), out imdbId);
|
||||||
|
@ -148,14 +146,13 @@ namespace MediaBrowser.Providers.Omdb
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var result in resultList)
|
return resultList.Select(result =>
|
||||||
{
|
{
|
||||||
var item = new RemoteSearchResult
|
var item = new RemoteSearchResult
|
||||||
{
|
{
|
||||||
IndexNumber = searchInfo.IndexNumber,
|
IndexNumber = searchInfo.IndexNumber,
|
||||||
Name = result.Title,
|
Name = result.Title,
|
||||||
ParentIndexNumber = searchInfo.ParentIndexNumber,
|
ParentIndexNumber = searchInfo.ParentIndexNumber,
|
||||||
ProviderIds = searchInfo.ProviderIds,
|
|
||||||
SearchProviderName = Name
|
SearchProviderName = Name
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -185,11 +182,9 @@ namespace MediaBrowser.Providers.Omdb
|
||||||
item.ImageUrl = result.Poster;
|
item.ImageUrl = result.Poster;
|
||||||
}
|
}
|
||||||
|
|
||||||
list.Add(item);
|
return item;
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return list;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task<MetadataResult<Trailer>> GetMetadata(TrailerInfo info, CancellationToken cancellationToken)
|
public Task<MetadataResult<Trailer>> GetMetadata(TrailerInfo info, CancellationToken cancellationToken)
|
||||||
|
|
|
@ -37,7 +37,7 @@ namespace MediaBrowser.Providers.Omdb
|
||||||
|
|
||||||
var imdbParam = imdbId.StartsWith("tt", StringComparison.OrdinalIgnoreCase) ? imdbId : "tt" + imdbId;
|
var imdbParam = imdbId.StartsWith("tt", StringComparison.OrdinalIgnoreCase) ? imdbId : "tt" + imdbId;
|
||||||
|
|
||||||
var url = string.Format("http://www.omdbapi.com/?i={0}&tomatoes=true", imdbParam);
|
var url = string.Format("https://www.omdbapi.com/?i={0}&tomatoes=true", imdbParam);
|
||||||
|
|
||||||
using (var stream = await _httpClient.Get(new HttpRequestOptions
|
using (var stream = await _httpClient.Get(new HttpRequestOptions
|
||||||
{
|
{
|
||||||
|
|
|
@ -97,7 +97,7 @@ namespace MediaBrowser.Providers.People
|
||||||
|
|
||||||
var requestCount = _requestCount;
|
var requestCount = _requestCount;
|
||||||
|
|
||||||
if (requestCount >= 30)
|
if (requestCount >= 40)
|
||||||
{
|
{
|
||||||
//_logger.Debug("Throttling Tmdb people");
|
//_logger.Debug("Throttling Tmdb people");
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ namespace MediaBrowser.Providers.People
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var url = string.Format(@"http://api.themoviedb.org/3/search/person?api_key={1}&query={0}", WebUtility.UrlEncode(searchInfo.Name), MovieDbProvider.ApiKey);
|
var url = string.Format(@"https://api.themoviedb.org/3/search/person?api_key={1}&query={0}", WebUtility.UrlEncode(searchInfo.Name), MovieDbProvider.ApiKey);
|
||||||
|
|
||||||
using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
|
using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
|
||||||
{
|
{
|
||||||
|
@ -234,7 +234,7 @@ namespace MediaBrowser.Providers.People
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var url = string.Format(@"http://api.themoviedb.org/3/person/{1}?api_key={0}&append_to_response=credits,images,external_ids", MovieDbProvider.ApiKey, id);
|
var url = string.Format(@"https://api.themoviedb.org/3/person/{1}?api_key={0}&append_to_response=credits,images,external_ids", MovieDbProvider.ApiKey, id);
|
||||||
|
|
||||||
using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
|
using (var json = await MovieDbProvider.Current.GetMovieDbResponse(new HttpRequestOptions
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,7 +19,7 @@ namespace MediaBrowser.Providers.TV
|
||||||
{
|
{
|
||||||
class FanArtTvUpdatesPostScanTask : ILibraryPostScanTask
|
class FanArtTvUpdatesPostScanTask : ILibraryPostScanTask
|
||||||
{
|
{
|
||||||
private const string UpdatesUrl = "http://webservice.fanart.tv/v3/tv/latest?api_key={0}&date={1}";
|
private const string UpdatesUrl = "https://webservice.fanart.tv/v3/tv/latest?api_key={0}&date={1}";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The _HTTP client
|
/// The _HTTP client
|
||||||
|
|
|
@ -31,7 +31,7 @@ namespace MediaBrowser.Providers.TV
|
||||||
private readonly IFileSystem _fileSystem;
|
private readonly IFileSystem _fileSystem;
|
||||||
private readonly IJsonSerializer _json;
|
private readonly IJsonSerializer _json;
|
||||||
|
|
||||||
private const string FanArtBaseUrl = "http://webservice.fanart.tv/v3/tv/{1}?api_key={0}";
|
private const string FanArtBaseUrl = "https://webservice.fanart.tv/v3/tv/{1}?api_key={0}";
|
||||||
// &client_key=52c813aa7b8c8b3bb87f4797532a2f8c
|
// &client_key=52c813aa7b8c8b3bb87f4797532a2f8c
|
||||||
|
|
||||||
internal static FanartSeriesProvider Current { get; private set; }
|
internal static FanartSeriesProvider Current { get; private set; }
|
||||||
|
|
|
@ -16,7 +16,7 @@ namespace MediaBrowser.Providers.TV
|
||||||
{
|
{
|
||||||
public abstract class MovieDbProviderBase
|
public abstract class MovieDbProviderBase
|
||||||
{
|
{
|
||||||
private const string EpisodeUrlPattern = @"http://api.themoviedb.org/3/tv/{0}/season/{1}/episode/{2}?api_key={3}&append_to_response=images,external_ids,credits,videos";
|
private const string EpisodeUrlPattern = @"https://api.themoviedb.org/3/tv/{0}/season/{1}/episode/{2}?api_key={3}&append_to_response=images,external_ids,credits,videos";
|
||||||
private readonly IHttpClient _httpClient;
|
private readonly IHttpClient _httpClient;
|
||||||
private readonly IServerConfigurationManager _configurationManager;
|
private readonly IServerConfigurationManager _configurationManager;
|
||||||
private readonly IJsonSerializer _jsonSerializer;
|
private readonly IJsonSerializer _jsonSerializer;
|
||||||
|
|
|
@ -22,7 +22,7 @@ namespace MediaBrowser.Providers.TV
|
||||||
{
|
{
|
||||||
public class MovieDbSeasonProvider : IRemoteMetadataProvider<Season, SeasonInfo>
|
public class MovieDbSeasonProvider : IRemoteMetadataProvider<Season, SeasonInfo>
|
||||||
{
|
{
|
||||||
private const string GetTvInfo3 = @"http://api.themoviedb.org/3/tv/{0}/season/{1}?api_key={2}&append_to_response=images,keywords,external_ids,credits,videos";
|
private const string GetTvInfo3 = @"https://api.themoviedb.org/3/tv/{0}/season/{1}?api_key={2}&append_to_response=images,keywords,external_ids,credits,videos";
|
||||||
private readonly IHttpClient _httpClient;
|
private readonly IHttpClient _httpClient;
|
||||||
private readonly IServerConfigurationManager _configurationManager;
|
private readonly IServerConfigurationManager _configurationManager;
|
||||||
private readonly IJsonSerializer _jsonSerializer;
|
private readonly IJsonSerializer _jsonSerializer;
|
||||||
|
|
|
@ -24,7 +24,7 @@ namespace MediaBrowser.Providers.TV
|
||||||
{
|
{
|
||||||
public class MovieDbSeriesProvider : IRemoteMetadataProvider<Series, SeriesInfo>, IHasOrder
|
public class MovieDbSeriesProvider : IRemoteMetadataProvider<Series, SeriesInfo>, IHasOrder
|
||||||
{
|
{
|
||||||
private const string GetTvInfo3 = @"http://api.themoviedb.org/3/tv/{0}?api_key={1}&append_to_response=credits,images,keywords,external_ids,videos,content_ratings";
|
private const string GetTvInfo3 = @"https://api.themoviedb.org/3/tv/{0}?api_key={1}&append_to_response=credits,images,keywords,external_ids,videos,content_ratings";
|
||||||
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
|
private readonly CultureInfo _usCulture = new CultureInfo("en-US");
|
||||||
|
|
||||||
internal static MovieDbSeriesProvider Current { get; private set; }
|
internal static MovieDbSeriesProvider Current { get; private set; }
|
||||||
|
@ -438,7 +438,7 @@ namespace MediaBrowser.Providers.TV
|
||||||
|
|
||||||
private async Task<RemoteSearchResult> FindByExternalId(string id, string externalSource, CancellationToken cancellationToken)
|
private async Task<RemoteSearchResult> FindByExternalId(string id, string externalSource, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var url = string.Format("http://api.themoviedb.org/3/tv/find/{0}?api_key={1}&external_source={2}",
|
var url = string.Format("https://api.themoviedb.org/3/tv/find/{0}?api_key={1}&external_source={2}",
|
||||||
id,
|
id,
|
||||||
MovieDbProvider.ApiKey,
|
MovieDbProvider.ApiKey,
|
||||||
externalSource);
|
externalSource);
|
||||||
|
|
|
@ -26,12 +26,12 @@ namespace MediaBrowser.Providers.TV
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The server time URL
|
/// The server time URL
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private const string ServerTimeUrl = "http://thetvdb.com/api/Updates.php?type=none";
|
private const string ServerTimeUrl = "https://thetvdb.com/api/Updates.php?type=none";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The updates URL
|
/// The updates URL
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private const string UpdatesUrl = "http://thetvdb.com/api/Updates.php?type=all&time={0}";
|
private const string UpdatesUrl = "https://thetvdb.com/api/Updates.php?type=all&time={0}";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// The _HTTP client
|
/// The _HTTP client
|
||||||
|
|
|
@ -53,9 +53,9 @@ namespace MediaBrowser.Providers.TV
|
||||||
Current = this;
|
Current = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
private const string SeriesSearchUrl = "http://www.thetvdb.com/api/GetSeries.php?seriesname={0}&language={1}";
|
private const string SeriesSearchUrl = "https://www.thetvdb.com/api/GetSeries.php?seriesname={0}&language={1}";
|
||||||
private const string SeriesGetZip = "http://www.thetvdb.com/api/{0}/series/{1}/all/{2}.zip";
|
private const string SeriesGetZip = "https://www.thetvdb.com/api/{0}/series/{1}/all/{2}.zip";
|
||||||
private const string GetSeriesByImdbId = "http://www.thetvdb.com/api/GetSeriesByRemoteID.php?imdbid={0}&language={1}";
|
private const string GetSeriesByImdbId = "https://www.thetvdb.com/api/GetSeriesByRemoteID.php?imdbid={0}&language={1}";
|
||||||
|
|
||||||
private string NormalizeLanguage(string language)
|
private string NormalizeLanguage(string language)
|
||||||
{
|
{
|
||||||
|
|
|
@ -42,7 +42,7 @@ namespace MediaBrowser.Providers.TV
|
||||||
|
|
||||||
public string UrlFormatString
|
public string UrlFormatString
|
||||||
{
|
{
|
||||||
get { return "http://thetvdb.com/index.php?tab=series&id={0}"; }
|
get { return "https://thetvdb.com/index.php?tab=series&id={0}"; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool Supports(IHasProviderIds item)
|
public bool Supports(IHasProviderIds item)
|
||||||
|
|
|
@ -68,9 +68,13 @@
|
||||||
<Reference Include="ServiceStack.Api.Swagger">
|
<Reference Include="ServiceStack.Api.Swagger">
|
||||||
<HintPath>..\ThirdParty\ServiceStack\ServiceStack.Api.Swagger.dll</HintPath>
|
<HintPath>..\ThirdParty\ServiceStack\ServiceStack.Api.Swagger.dll</HintPath>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="SocketHttpListener, Version=1.0.5908.28560, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="SimpleInjector, Version=3.1.3.0, Culture=neutral, PublicKeyToken=984cb50dea722e99, processorArchitecture=MSIL">
|
||||||
<SpecificVersion>False</SpecificVersion>
|
<HintPath>..\packages\SimpleInjector.3.1.3\lib\net45\SimpleInjector.dll</HintPath>
|
||||||
<HintPath>..\packages\SocketHttpListener.1.0.0.29\lib\net45\SocketHttpListener.dll</HintPath>
|
<Private>True</Private>
|
||||||
|
</Reference>
|
||||||
|
<Reference Include="SocketHttpListener, Version=1.0.5955.1537, Culture=neutral, processorArchitecture=MSIL">
|
||||||
|
<HintPath>..\packages\SocketHttpListener.1.0.0.30\lib\net45\SocketHttpListener.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
|
|
|
@ -8,5 +8,6 @@
|
||||||
<package id="Mono.Nat" version="1.2.24.0" targetFramework="net45" />
|
<package id="Mono.Nat" version="1.2.24.0" targetFramework="net45" />
|
||||||
<package id="morelinq" version="1.4.0" targetFramework="net45" />
|
<package id="morelinq" version="1.4.0" targetFramework="net45" />
|
||||||
<package id="Patterns.Logging" version="1.0.0.2" targetFramework="net45" />
|
<package id="Patterns.Logging" version="1.0.0.2" targetFramework="net45" />
|
||||||
<package id="SocketHttpListener" version="1.0.0.29" targetFramework="net45" />
|
<package id="SimpleInjector" version="3.1.3" targetFramework="net45" />
|
||||||
|
<package id="SocketHttpListener" version="1.0.0.30" targetFramework="net45" />
|
||||||
</packages>
|
</packages>
|
|
@ -69,6 +69,11 @@ namespace MediaBrowser.Server.Mono.Native
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void AllowSystemStandby()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public List<Assembly> GetAssembliesWithParts()
|
public List<Assembly> GetAssembliesWithParts()
|
||||||
{
|
{
|
||||||
var list = new List<Assembly>();
|
var list = new List<Assembly>();
|
||||||
|
@ -217,6 +222,11 @@ namespace MediaBrowser.Server.Mono.Native
|
||||||
return GetInfo(Environment);
|
return GetInfo(Environment);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void LaunchUrl(string url)
|
||||||
|
{
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
public static FFMpegInstallInfo GetInfo(NativeEnvironment environment)
|
public static FFMpegInstallInfo GetInfo(NativeEnvironment environment)
|
||||||
{
|
{
|
||||||
var info = new FFMpegInstallInfo();
|
var info = new FFMpegInstallInfo();
|
||||||
|
|
|
@ -440,7 +440,7 @@ namespace MediaBrowser.Server.Startup.Common
|
||||||
LibraryMonitor = new LibraryMonitor(LogManager, TaskManager, LibraryManager, ServerConfigurationManager, FileSystemManager, this);
|
LibraryMonitor = new LibraryMonitor(LogManager, TaskManager, LibraryManager, ServerConfigurationManager, FileSystemManager, this);
|
||||||
RegisterSingleInstance(LibraryMonitor);
|
RegisterSingleInstance(LibraryMonitor);
|
||||||
|
|
||||||
ProviderManager = new ProviderManager(HttpClient, ServerConfigurationManager, LibraryMonitor, LogManager, FileSystemManager, ApplicationPaths, () => LibraryManager);
|
ProviderManager = new ProviderManager(HttpClient, ServerConfigurationManager, LibraryMonitor, LogManager, FileSystemManager, ApplicationPaths, () => LibraryManager, JsonSerializer);
|
||||||
RegisterSingleInstance(ProviderManager);
|
RegisterSingleInstance(ProviderManager);
|
||||||
|
|
||||||
SeriesOrderManager = new SeriesOrderManager();
|
SeriesOrderManager = new SeriesOrderManager();
|
||||||
|
@ -1404,5 +1404,10 @@ namespace MediaBrowser.Server.Startup.Common
|
||||||
return externalDns;
|
return externalDns;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void LaunchUrl(string url)
|
||||||
|
{
|
||||||
|
NativeApp.LaunchUrl(url);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,87 +15,58 @@ namespace MediaBrowser.Server.Startup.Common.Browser
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="page">The page.</param>
|
/// <param name="page">The page.</param>
|
||||||
/// <param name="appHost">The app host.</param>
|
/// <param name="appHost">The app host.</param>
|
||||||
/// <param name="logger">The logger.</param>
|
public static void OpenDashboardPage(string page, IServerApplicationHost appHost)
|
||||||
public static void OpenDashboardPage(string page, IServerApplicationHost appHost, ILogger logger)
|
|
||||||
{
|
{
|
||||||
var url = appHost.GetLocalApiUrl("localhost") + "/web/" + page;
|
var url = appHost.GetLocalApiUrl("localhost") + "/web/" + page;
|
||||||
|
|
||||||
OpenUrl(url, logger);
|
OpenUrl(appHost, url);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Opens the community.
|
/// Opens the community.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="logger">The logger.</param>
|
public static void OpenCommunity(IServerApplicationHost appHost)
|
||||||
public static void OpenCommunity(ILogger logger)
|
|
||||||
{
|
{
|
||||||
OpenUrl("http://emby.media/community", logger);
|
OpenUrl(appHost, "http://emby.media/community");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Opens the web client.
|
/// Opens the web client.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="appHost">The app host.</param>
|
/// <param name="appHost">The app host.</param>
|
||||||
/// <param name="logger">The logger.</param>
|
public static void OpenWebClient(IServerApplicationHost appHost)
|
||||||
public static void OpenWebClient(IServerApplicationHost appHost, ILogger logger)
|
|
||||||
{
|
{
|
||||||
OpenDashboardPage("index.html", appHost, logger);
|
OpenDashboardPage("index.html", appHost);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Opens the dashboard.
|
/// Opens the dashboard.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="appHost">The app host.</param>
|
/// <param name="appHost">The app host.</param>
|
||||||
/// <param name="logger">The logger.</param>
|
public static void OpenDashboard(IServerApplicationHost appHost)
|
||||||
public static void OpenDashboard(IServerApplicationHost appHost, ILogger logger)
|
|
||||||
{
|
{
|
||||||
OpenDashboardPage("dashboard.html", appHost, logger);
|
OpenDashboardPage("dashboard.html", appHost);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Opens the URL.
|
/// Opens the URL.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="url">The URL.</param>
|
/// <param name="url">The URL.</param>
|
||||||
/// <param name="logger">The logger.</param>
|
private static void OpenUrl(IServerApplicationHost appHost, string url)
|
||||||
private static void OpenUrl(string url, ILogger logger)
|
|
||||||
{
|
{
|
||||||
var process = new Process
|
|
||||||
{
|
|
||||||
StartInfo = new ProcessStartInfo
|
|
||||||
{
|
|
||||||
FileName = url
|
|
||||||
},
|
|
||||||
|
|
||||||
EnableRaisingEvents = true,
|
|
||||||
};
|
|
||||||
|
|
||||||
process.Exited += ProcessExited;
|
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
process.Start();
|
appHost.LaunchUrl(url);
|
||||||
|
}
|
||||||
|
catch (NotImplementedException)
|
||||||
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
logger.ErrorException("Error launching url: {0}", ex, url);
|
Console.WriteLine("Error launching url: " + url);
|
||||||
|
|
||||||
Console.WriteLine("Error launching url: {0}", ex.Message);
|
|
||||||
Console.WriteLine(ex.Message);
|
Console.WriteLine(ex.Message);
|
||||||
|
|
||||||
//#if !__MonoCS__
|
|
||||||
// System.Windows.Forms.MessageBox.Show("There was an error launching your web browser. Please check your default browser settings.");
|
|
||||||
//#endif
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Processes the exited.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sender">The sender.</param>
|
|
||||||
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
|
|
||||||
private static void ProcessExited(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
((Process)sender).Dispose();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,28 +27,27 @@ namespace MediaBrowser.Server.Startup.Common.EntryPoints
|
||||||
_timer = new PeriodicTimer(obj =>
|
_timer = new PeriodicTimer(obj =>
|
||||||
{
|
{
|
||||||
var now = DateTime.UtcNow;
|
var now = DateTime.UtcNow;
|
||||||
if (_sessionManager.Sessions.Any(i => (now - i.LastActivityDate).TotalMinutes < 15))
|
var nativeApp = ((ApplicationHost)_appHost).NativeApp;
|
||||||
|
|
||||||
|
try
|
||||||
{
|
{
|
||||||
KeepAlive();
|
if (_sessionManager.Sessions.Any(i => (now - i.LastActivityDate).TotalMinutes < 15))
|
||||||
|
{
|
||||||
|
nativeApp.PreventSystemStandby();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
nativeApp.AllowSystemStandby();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.ErrorException("Error resetting system standby timer", ex);
|
||||||
}
|
}
|
||||||
|
|
||||||
}, null, TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5));
|
}, null, TimeSpan.FromMinutes(5), TimeSpan.FromMinutes(5));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void KeepAlive()
|
|
||||||
{
|
|
||||||
var nativeApp = ((ApplicationHost)_appHost).NativeApp;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
nativeApp.PreventSystemStandby();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
_logger.ErrorException("Error resetting system standby timer", ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
{
|
{
|
||||||
if (_timer != null)
|
if (_timer != null)
|
||||||
|
|
|
@ -46,7 +46,7 @@ namespace MediaBrowser.Server.Startup.Common.EntryPoints
|
||||||
/// </summary>
|
/// </summary>
|
||||||
private void LaunchStartupWizard()
|
private void LaunchStartupWizard()
|
||||||
{
|
{
|
||||||
BrowserLauncher.OpenDashboardPage("wizardstart.html", _appHost, _logger);
|
BrowserLauncher.OpenDashboardPage("wizardstart.html", _appHost);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
@ -93,6 +93,8 @@ namespace MediaBrowser.Server.Startup.Common
|
||||||
/// </summary>
|
/// </summary>
|
||||||
void PreventSystemStandby();
|
void PreventSystemStandby();
|
||||||
|
|
||||||
|
void AllowSystemStandby();
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Gets the power management.
|
/// Gets the power management.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -100,5 +102,7 @@ namespace MediaBrowser.Server.Startup.Common
|
||||||
IPowerManagement GetPowerManagement();
|
IPowerManagement GetPowerManagement();
|
||||||
|
|
||||||
FFMpegInstallInfo GetFfmpegInstallInfo();
|
FFMpegInstallInfo GetFfmpegInstallInfo();
|
||||||
|
|
||||||
|
void LaunchUrl(string url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -317,10 +317,15 @@ namespace MediaBrowser.ServerApplication
|
||||||
{
|
{
|
||||||
if (e.Reason == SessionSwitchReason.SessionLogon)
|
if (e.Reason == SessionSwitchReason.SessionLogon)
|
||||||
{
|
{
|
||||||
BrowserLauncher.OpenDashboard(_appHost, _logger);
|
BrowserLauncher.OpenDashboard(_appHost);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void Invoke(Action action)
|
||||||
|
{
|
||||||
|
_serverNotifyIcon.Invoke(action);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Starts the service.
|
/// Starts the service.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
using System.Runtime.InteropServices;
|
using System;
|
||||||
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
namespace MediaBrowser.ServerApplication.Native
|
namespace MediaBrowser.ServerApplication.Native
|
||||||
{
|
{
|
||||||
|
@ -7,11 +8,33 @@ namespace MediaBrowser.ServerApplication.Native
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public static class Standby
|
public static class Standby
|
||||||
{
|
{
|
||||||
public static void PreventSystemStandby()
|
public static void PreventSleepAndMonitorOff()
|
||||||
{
|
{
|
||||||
SystemHelper.ResetStandbyTimer();
|
NativeMethods.SetThreadExecutionState(NativeMethods.ES_CONTINUOUS | NativeMethods.ES_SYSTEM_REQUIRED | NativeMethods.ES_DISPLAY_REQUIRED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void PreventSleep()
|
||||||
|
{
|
||||||
|
NativeMethods.SetThreadExecutionState(NativeMethods.ES_CONTINUOUS | NativeMethods.ES_SYSTEM_REQUIRED);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clear EXECUTION_STATE flags to allow the system to sleep and turn off monitor normally
|
||||||
|
public static void AllowSleep()
|
||||||
|
{
|
||||||
|
NativeMethods.SetThreadExecutionState(NativeMethods.ES_CONTINUOUS);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal static class NativeMethods
|
||||||
|
{
|
||||||
|
// Import SetThreadExecutionState Win32 API and necessary flags
|
||||||
|
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
||||||
|
public static extern uint SetThreadExecutionState(uint esFlags);
|
||||||
|
public const uint ES_CONTINUOUS = 0x80000000;
|
||||||
|
public const uint ES_SYSTEM_REQUIRED = 0x00000001;
|
||||||
|
public const uint ES_DISPLAY_REQUIRED = 0x00000002;
|
||||||
|
}
|
||||||
|
|
||||||
|
[Flags]
|
||||||
internal enum EXECUTION_STATE : uint
|
internal enum EXECUTION_STATE : uint
|
||||||
{
|
{
|
||||||
ES_NONE = 0,
|
ES_NONE = 0,
|
||||||
|
@ -21,16 +44,5 @@ namespace MediaBrowser.ServerApplication.Native
|
||||||
ES_AWAYMODE_REQUIRED = 0x00000040,
|
ES_AWAYMODE_REQUIRED = 0x00000040,
|
||||||
ES_CONTINUOUS = 0x80000000
|
ES_CONTINUOUS = 0x80000000
|
||||||
}
|
}
|
||||||
|
|
||||||
public class SystemHelper
|
|
||||||
{
|
|
||||||
[DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
|
|
||||||
static extern EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE esFlags);
|
|
||||||
|
|
||||||
public static void ResetStandbyTimer()
|
|
||||||
{
|
|
||||||
EXECUTION_STATE es = SetThreadExecutionState(EXECUTION_STATE.ES_SYSTEM_REQUIRED);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,17 @@
|
||||||
using MediaBrowser.Common.Net;
|
using System;
|
||||||
|
using MediaBrowser.Common.Net;
|
||||||
using MediaBrowser.Model.Logging;
|
using MediaBrowser.Model.Logging;
|
||||||
using MediaBrowser.Server.Startup.Common;
|
using MediaBrowser.Server.Startup.Common;
|
||||||
using MediaBrowser.ServerApplication.Networking;
|
using MediaBrowser.ServerApplication.Networking;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Windows.Forms;
|
||||||
using CommonIO;
|
using CommonIO;
|
||||||
using MediaBrowser.Controller.Power;
|
using MediaBrowser.Controller.Power;
|
||||||
using MediaBrowser.Server.Startup.Common.FFMpeg;
|
using MediaBrowser.Server.Startup.Common.FFMpeg;
|
||||||
|
using OperatingSystem = MediaBrowser.Server.Startup.Common.OperatingSystem;
|
||||||
|
|
||||||
namespace MediaBrowser.ServerApplication.Native
|
namespace MediaBrowser.ServerApplication.Native
|
||||||
{
|
{
|
||||||
|
@ -134,7 +138,12 @@ namespace MediaBrowser.ServerApplication.Native
|
||||||
|
|
||||||
public void PreventSystemStandby()
|
public void PreventSystemStandby()
|
||||||
{
|
{
|
||||||
Standby.PreventSystemStandby();
|
MainStartup.Invoke(Standby.PreventSleep);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AllowSystemStandby()
|
||||||
|
{
|
||||||
|
MainStartup.Invoke(Standby.AllowSleep);
|
||||||
}
|
}
|
||||||
|
|
||||||
public IPowerManagement GetPowerManagement()
|
public IPowerManagement GetPowerManagement()
|
||||||
|
@ -156,6 +165,42 @@ namespace MediaBrowser.ServerApplication.Native
|
||||||
return info;
|
return info;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void LaunchUrl(string url)
|
||||||
|
{
|
||||||
|
var process = new Process
|
||||||
|
{
|
||||||
|
StartInfo = new ProcessStartInfo
|
||||||
|
{
|
||||||
|
FileName = url
|
||||||
|
},
|
||||||
|
|
||||||
|
EnableRaisingEvents = true,
|
||||||
|
};
|
||||||
|
|
||||||
|
process.Exited += ProcessExited;
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
process.Start();
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.ErrorException("Error launching url: {0}", ex, url);
|
||||||
|
|
||||||
|
throw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Processes the exited.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sender">The sender.</param>
|
||||||
|
/// <param name="e">The <see cref="EventArgs" /> instance containing the event data.</param>
|
||||||
|
private static void ProcessExited(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
((Process)sender).Dispose();
|
||||||
|
}
|
||||||
|
|
||||||
private string[] GetDownloadUrls()
|
private string[] GetDownloadUrls()
|
||||||
{
|
{
|
||||||
switch (Environment.SystemArchitecture)
|
switch (Environment.SystemArchitecture)
|
||||||
|
|
|
@ -36,10 +36,15 @@ namespace MediaBrowser.ServerApplication
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
Action act = () => notifyIcon1.Visible = false;
|
Action act = () => notifyIcon1.Visible = false;
|
||||||
contextMenuStrip1.Invoke(act);
|
Invoke(act);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Invoke(Action action)
|
||||||
|
{
|
||||||
|
contextMenuStrip1.Invoke(action);
|
||||||
|
}
|
||||||
|
|
||||||
public ServerNotifyIcon(ILogManager logManager,
|
public ServerNotifyIcon(ILogManager logManager,
|
||||||
IServerApplicationHost appHost,
|
IServerApplicationHost appHost,
|
||||||
IServerConfigurationManager configurationManager,
|
IServerConfigurationManager configurationManager,
|
||||||
|
@ -163,7 +168,7 @@ namespace MediaBrowser.ServerApplication
|
||||||
|
|
||||||
void notifyIcon1_DoubleClick(object sender, EventArgs e)
|
void notifyIcon1_DoubleClick(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
BrowserLauncher.OpenDashboard(_appHost, _logger);
|
BrowserLauncher.OpenDashboard(_appHost);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void LocalizeText()
|
private void LocalizeText()
|
||||||
|
@ -194,17 +199,17 @@ namespace MediaBrowser.ServerApplication
|
||||||
|
|
||||||
void cmdBrowse_Click(object sender, EventArgs e)
|
void cmdBrowse_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
BrowserLauncher.OpenWebClient(_appHost, _logger);
|
BrowserLauncher.OpenWebClient(_appHost);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmdCommunity_Click(object sender, EventArgs e)
|
void cmdCommunity_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
BrowserLauncher.OpenCommunity(_logger);
|
BrowserLauncher.OpenCommunity(_appHost);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmdConfigure_Click(object sender, EventArgs e)
|
void cmdConfigure_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
BrowserLauncher.OpenDashboard(_appHost, _logger);
|
BrowserLauncher.OpenDashboard(_appHost);
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmdRestart_Click(object sender, EventArgs e)
|
void cmdRestart_Click(object sender, EventArgs e)
|
||||||
|
|
|
@ -128,6 +128,12 @@
|
||||||
<Content Include="dashboard-ui\components\guestinviter\guestinviter.template.html">
|
<Content Include="dashboard-ui\components\guestinviter\guestinviter.template.html">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
|
<Content Include="dashboard-ui\components\ironcardlist\ironcardlist.template.html">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
|
<Content Include="dashboard-ui\components\ironcardlist\ironcardlist.js">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
<Content Include="dashboard-ui\components\metadataeditor\metadataeditor.js">
|
<Content Include="dashboard-ui\components\metadataeditor\metadataeditor.js">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
|
@ -146,6 +152,9 @@
|
||||||
<Content Include="dashboard-ui\components\remotecontrolautoplay.js">
|
<Content Include="dashboard-ui\components\remotecontrolautoplay.js">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
|
<Content Include="dashboard-ui\components\scrollthreshold.js">
|
||||||
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
</Content>
|
||||||
<Content Include="dashboard-ui\components\servertestermessage.js">
|
<Content Include="dashboard-ui\components\servertestermessage.js">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</Content>
|
</Content>
|
||||||
|
|
|
@ -13,8 +13,8 @@
|
||||||
<copyright>Copyright © Emby 2013</copyright>
|
<copyright>Copyright © Emby 2013</copyright>
|
||||||
<dependencies>
|
<dependencies>
|
||||||
<dependency id="MediaBrowser.Common" version="3.0.645" />
|
<dependency id="MediaBrowser.Common" version="3.0.645" />
|
||||||
<dependency id="NLog" version="4.2.3" />
|
<dependency id="NLog" version="4.3.1" />
|
||||||
<dependency id="SimpleInjector" version="3.1.2" />
|
<dependency id="SimpleInjector" version="3.1.3" />
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</metadata>
|
</metadata>
|
||||||
<files>
|
<files>
|
||||||
|
|
|
@ -32,7 +32,7 @@ namespace OpenSubtitlesHandler
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public sealed class Utilities
|
public sealed class Utilities
|
||||||
{
|
{
|
||||||
private const string XML_RPC_SERVER = "http://api.opensubtitles.org/xml-rpc";
|
private const string XML_RPC_SERVER = "https://api.opensubtitles.org/xml-rpc";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Compute movie hash
|
/// Compute movie hash
|
||||||
|
@ -195,7 +195,7 @@ namespace OpenSubtitlesHandler
|
||||||
RequestContentBytes = request,
|
RequestContentBytes = request,
|
||||||
RequestContentType = "text/xml",
|
RequestContentType = "text/xml",
|
||||||
UserAgent = userAgent,
|
UserAgent = userAgent,
|
||||||
Host = "api.opensubtitles.org:80",
|
Host = "api.opensubtitles.org:443",
|
||||||
Url = XML_RPC_SERVER,
|
Url = XML_RPC_SERVER,
|
||||||
|
|
||||||
// Response parsing will fail with this enabled
|
// Response parsing will fail with this enabled
|
||||||
|
|
Loading…
Reference in New Issue
Block a user