Merge pull request #2945 from MediaBrowser/dev

Dev
pull/1154/head
Luke 7 years ago committed by GitHub
commit b7b1dbed5b

@ -725,12 +725,13 @@ namespace Emby.Server.Implementations.HttpServer
Summary = route.Summary Summary = route.Summary
}); });
//routes.Add(new RouteAttribute(DoubleNormalizeEmbyRoutePath(route.Path), route.Verbs) // needed because apps add /emby, and some users also add /emby, thereby double prefixing
//{ routes.Add(new RouteAttribute(DoubleNormalizeEmbyRoutePath(route.Path), route.Verbs)
// Notes = route.Notes, {
// Priority = route.Priority, Notes = route.Notes,
// Summary = route.Summary Priority = route.Priority,
//}); Summary = route.Summary
});
} }
return routes.ToArray(routes.Count); return routes.ToArray(routes.Count);

@ -12,7 +12,7 @@ namespace Emby.Server.Implementations.Library.Resolvers.Books
/// </summary> /// </summary>
public class BookResolver : MediaBrowser.Controller.Resolvers.ItemResolver<Book> public class BookResolver : MediaBrowser.Controller.Resolvers.ItemResolver<Book>
{ {
private readonly string[] _validExtensions = {".pdf", ".epub", ".mobi", ".cbr", ".cbz"}; private readonly string[] _validExtensions = { ".pdf", ".epub", ".mobi", ".cbr", ".cbz", ".azw3" };
/// <summary> /// <summary>
/// ///
@ -69,9 +69,9 @@ namespace Emby.Server.Implementations.Library.Resolvers.Books
return null; return null;
return new Book return new Book
{ {
Path = bookFiles[0].FullName Path = bookFiles[0].FullName
}; };
} }
} }
} }

@ -272,11 +272,6 @@ namespace Emby.Server.Implementations.LiveTv.EmbyTV
private bool EncodeVideo(MediaSourceInfo mediaSource) private bool EncodeVideo(MediaSourceInfo mediaSource)
{ {
if (string.Equals(_liveTvOptions.RecordedVideoCodec, "copy", StringComparison.OrdinalIgnoreCase))
{
return false;
}
var mediaStreams = mediaSource.MediaStreams ?? new List<MediaStream>(); var mediaStreams = mediaSource.MediaStreams ?? new List<MediaStream>();
return !mediaStreams.Any(i => i.Type == MediaStreamType.Video && string.Equals(i.Codec, "h264", StringComparison.OrdinalIgnoreCase) && !i.IsInterlaced); return !mediaStreams.Any(i => i.Type == MediaStreamType.Video && string.Equals(i.Codec, "h264", StringComparison.OrdinalIgnoreCase) && !i.IsInterlaced);
} }

@ -110,7 +110,15 @@ namespace Emby.Server.Implementations.LiveTv.Listings
var tempFolder = Path.Combine(_config.ApplicationPaths.TempDirectory, Guid.NewGuid().ToString()); var tempFolder = Path.Combine(_config.ApplicationPaths.TempDirectory, Guid.NewGuid().ToString());
_fileSystem.CreateDirectory(tempFolder); _fileSystem.CreateDirectory(tempFolder);
_zipClient.ExtractAllFromGz(stream, tempFolder, true); try
{
_zipClient.ExtractAllFromGz(stream, tempFolder, true);
}
catch
{
// If the extraction fails just return the original file, it could be a gz
return file;
}
return _fileSystem.GetFiles(tempFolder, true) return _fileSystem.GetFiles(tempFolder, true)
.Where(i => string.Equals(i.Extension, ".xml", StringComparison.OrdinalIgnoreCase)) .Where(i => string.Equals(i.Extension, ".xml", StringComparison.OrdinalIgnoreCase))

@ -299,6 +299,8 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
int? videoBitrate = null; int? videoBitrate = null;
int? audioBitrate = null; int? audioBitrate = null;
var isHd = channelInfo.IsHD ?? true;
if (string.Equals(profile, "mobile", StringComparison.OrdinalIgnoreCase)) if (string.Equals(profile, "mobile", StringComparison.OrdinalIgnoreCase))
{ {
width = 1280; width = 1280;
@ -350,7 +352,7 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
else else
{ {
// This is for android tv's 1200 condition. Remove once not needed anymore so that we can avoid possible side effects of dummying up this data // This is for android tv's 1200 condition. Remove once not needed anymore so that we can avoid possible side effects of dummying up this data
if ((channelInfo.IsHD ?? true)) if (isHd)
{ {
width = 1920; width = 1920;
height = 1080; height = 1080;
@ -367,9 +369,9 @@ namespace Emby.Server.Implementations.LiveTv.TunerHosts.HdHomerun
if (!videoBitrate.HasValue) if (!videoBitrate.HasValue)
{ {
videoBitrate = (channelInfo.IsHD ?? true) ? 15000000 : 2000000; videoBitrate = isHd ? 15000000 : 2000000;
} }
audioBitrate = (channelInfo.IsHD ?? true) ? 448000 : 192000; audioBitrate = isHd ? 448000 : 192000;
} }
// normalize // normalize

@ -1,8 +1,9 @@
using MediaBrowser.Model.Serialization; using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Serialization;
namespace MediaBrowser.Controller.Entities.Audio namespace MediaBrowser.Controller.Entities.Audio
{ {
public class AudioPodcast : Audio public class AudioPodcast : Audio, IHasLookupInfo<SongInfo>
{ {
[IgnoreDataMember] [IgnoreDataMember]
public override bool SupportsPositionTicksResume public override bool SupportsPositionTicksResume
@ -13,6 +14,15 @@ namespace MediaBrowser.Controller.Entities.Audio
} }
} }
[IgnoreDataMember]
public override bool SupportsPlayedStatus
{
get
{
return true;
}
}
public override double? GetDefaultPrimaryImageAspectRatio() public override double? GetDefaultPrimaryImageAspectRatio()
{ {
return 1; return 1;

@ -1,11 +1,12 @@
using System; using System;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Configuration; using MediaBrowser.Model.Configuration;
using MediaBrowser.Model.Serialization; using MediaBrowser.Model.Serialization;
using MediaBrowser.Model.Entities; using MediaBrowser.Model.Entities;
namespace MediaBrowser.Controller.Entities namespace MediaBrowser.Controller.Entities
{ {
public class AudioBook : Audio.Audio, IHasSeries public class AudioBook : Audio.Audio, IHasSeries, IHasLookupInfo<SongInfo>
{ {
[IgnoreDataMember] [IgnoreDataMember]
public override bool SupportsPositionTicksResume public override bool SupportsPositionTicksResume

@ -1,4 +1,5 @@
using MediaBrowser.Controller.Entities; using System;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Library;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -13,6 +14,7 @@ namespace MediaBrowser.Controller.Providers
/// <param name="item">The item.</param> /// <param name="item">The item.</param>
/// <returns><c>true</c> if this instance can refresh the specified item; otherwise, <c>false</c>.</returns> /// <returns><c>true</c> if this instance can refresh the specified item; otherwise, <c>false</c>.</returns>
bool CanRefresh(IHasMetadata item); bool CanRefresh(IHasMetadata item);
bool CanRefreshPrimary(Type type);
/// <summary> /// <summary>
/// Refreshes the metadata. /// Refreshes the metadata.

@ -91,8 +91,6 @@ namespace MediaBrowser.Controller.Sync
/// </summary> /// </summary>
List<SyncTarget> GetSyncTargets(string userId); List<SyncTarget> GetSyncTargets(string userId);
List<SyncTarget> GetSyncTargets(string userId, bool? supportsRemoteSync);
/// <summary> /// <summary>
/// Supportses the synchronize. /// Supportses the synchronize.
/// </summary> /// </summary>

@ -11,8 +11,6 @@ namespace MediaBrowser.Controller.Sync
/// <value>The name.</value> /// <value>The name.</value>
string Name { get; } string Name { get; }
bool SupportsRemoteSync { get; }
/// <summary> /// <summary>
/// Gets the synchronize targets. /// Gets the synchronize targets.
/// </summary> /// </summary>

@ -13,7 +13,6 @@ namespace MediaBrowser.Model.LiveTv
public string RecordingEncodingFormat { get; set; } public string RecordingEncodingFormat { get; set; }
public bool EnableRecordingSubfolders { get; set; } public bool EnableRecordingSubfolders { get; set; }
public bool EnableOriginalAudioWithEncodedRecordings { get; set; } public bool EnableOriginalAudioWithEncodedRecordings { get; set; }
public string RecordedVideoCodec { get; set; }
public TunerHostInfo[] TunerHosts { get; set; } public TunerHostInfo[] TunerHosts { get; set; }
public ListingsProviderInfo[] ListingProviders { get; set; } public ListingsProviderInfo[] ListingProviders { get; set; }

@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Common.Net;
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Entities.TV;
using MediaBrowser.Controller.Providers;
using MediaBrowser.Model.Providers;
namespace MediaBrowser.Providers.Books
{
public class GoogleBooksProvider : IRemoteMetadataProvider<AudioBook, SongInfo>
{
public string Name => "Google Books";
private readonly IHttpClient _httpClient;
public GoogleBooksProvider(IHttpClient httpClient)
{
_httpClient = httpClient;
}
public Task<HttpResponseInfo> GetImageResponse(string url, CancellationToken cancellationToken)
{
return _httpClient.GetResponse(new HttpRequestOptions
{
CancellationToken = cancellationToken,
Url = url,
BufferContent = false
});
}
public async Task<MetadataResult<AudioBook>> GetMetadata(SongInfo info, CancellationToken cancellationToken)
{
return new MetadataResult<AudioBook>();
}
public async Task<IEnumerable<RemoteSearchResult>> GetSearchResults(SongInfo searchInfo, CancellationToken cancellationToken)
{
return new List<RemoteSearchResult>();
}
}
}

@ -453,6 +453,11 @@ namespace MediaBrowser.Providers.Manager
return item is TItemType; return item is TItemType;
} }
public bool CanRefreshPrimary(Type type)
{
return type == typeof(TItemType);
}
protected virtual async Task<RefreshResult> RefreshWithProviders(MetadataResult<TItemType> metadata, protected virtual async Task<RefreshResult> RefreshWithProviders(MetadataResult<TItemType> metadata,
TIdType id, TIdType id,
MetadataRefreshOptions options, MetadataRefreshOptions options,

@ -118,7 +118,29 @@ namespace MediaBrowser.Providers.Manager
public Task<ItemUpdateType> RefreshSingleItem(IHasMetadata item, MetadataRefreshOptions options, CancellationToken cancellationToken) public Task<ItemUpdateType> RefreshSingleItem(IHasMetadata item, MetadataRefreshOptions options, CancellationToken cancellationToken)
{ {
var service = _metadataServices.FirstOrDefault(i => i.CanRefresh(item)); IMetadataService service = null;
var type = item.GetType();
foreach (var current in _metadataServices)
{
if (current.CanRefreshPrimary(type))
{
service = current;
break;
}
}
if (service == null)
{
foreach (var current in _metadataServices)
{
if (current.CanRefresh(item))
{
service = current;
break;
}
}
}
if (service != null) if (service != null)
{ {
@ -452,6 +474,8 @@ namespace MediaBrowser.Providers.Manager
GetPluginSummary<MusicAlbum>(), GetPluginSummary<MusicAlbum>(),
GetPluginSummary<MusicArtist>(), GetPluginSummary<MusicArtist>(),
GetPluginSummary<Audio>(), GetPluginSummary<Audio>(),
GetPluginSummary<AudioBook>(),
GetPluginSummary<AudioPodcast>(),
GetPluginSummary<Genre>(), GetPluginSummary<Genre>(),
GetPluginSummary<Studio>(), GetPluginSummary<Studio>(),
GetPluginSummary<GameGenre>(), GetPluginSummary<GameGenre>(),

@ -41,6 +41,7 @@
<Compile Include="Books\AudioBookMetadataService.cs" /> <Compile Include="Books\AudioBookMetadataService.cs" />
<Compile Include="Books\AudioPodcastMetadataService.cs" /> <Compile Include="Books\AudioPodcastMetadataService.cs" />
<Compile Include="Books\BookMetadataService.cs" /> <Compile Include="Books\BookMetadataService.cs" />
<Compile Include="Books\GoogleBooksProvider.cs" />
<Compile Include="BoxSets\BoxSetMetadataService.cs" /> <Compile Include="BoxSets\BoxSetMetadataService.cs" />
<Compile Include="BoxSets\MovieDbBoxSetImageProvider.cs" /> <Compile Include="BoxSets\MovieDbBoxSetImageProvider.cs" />
<Compile Include="BoxSets\MovieDbBoxSetProvider.cs" /> <Compile Include="BoxSets\MovieDbBoxSetProvider.cs" />

@ -1,3 +1,3 @@
using System.Reflection; using System.Reflection;
[assembly: AssemblyVersion("3.2.33.3")] [assembly: AssemblyVersion("3.2.33.4")]

Loading…
Cancel
Save