diff options
9 files changed, 643 insertions, 18 deletions
diff --git a/MediaBrowser.Controller/LiveTv/ProgramInfo.cs b/MediaBrowser.Controller/LiveTv/ProgramInfo.cs index 2c7b40415..d672340e4 100644 --- a/MediaBrowser.Controller/LiveTv/ProgramInfo.cs +++ b/MediaBrowser.Controller/LiveTv/ProgramInfo.cs @@ -45,12 +45,6 @@ namespace MediaBrowser.Controller.LiveTv public DateTime EndDate { get; set; } /// <summary> - /// Gets or sets the aspect ratio. - /// </summary> - /// <value>The aspect ratio.</value> - public string AspectRatio { get; set; } - - /// <summary> /// Genre of the program. /// </summary> public List<string> Genres { get; set; } diff --git a/MediaBrowser.Model/LiveTv/ProgramInfoDto.cs b/MediaBrowser.Model/LiveTv/ProgramInfoDto.cs index 8b8b0cd07..0798a2294 100644 --- a/MediaBrowser.Model/LiveTv/ProgramInfoDto.cs +++ b/MediaBrowser.Model/LiveTv/ProgramInfoDto.cs @@ -47,12 +47,6 @@ namespace MediaBrowser.Model.LiveTv /// </summary> /// <value>The community rating.</value> public float? CommunityRating { get; set; } - - /// <summary> - /// Gets or sets the aspect ratio. - /// </summary> - /// <value>The aspect ratio.</value> - public string AspectRatio { get; set; } /// <summary> /// Gets or sets the official rating. diff --git a/MediaBrowser.Providers/MediaBrowser.Providers.csproj b/MediaBrowser.Providers/MediaBrowser.Providers.csproj index 272274679..c757a89cb 100644 --- a/MediaBrowser.Providers/MediaBrowser.Providers.csproj +++ b/MediaBrowser.Providers/MediaBrowser.Providers.csproj @@ -120,6 +120,7 @@ <Compile Include="Savers\SeasonXmlSaver.cs" /> <Compile Include="Savers\SeriesXmlSaver.cs" /> <Compile Include="Savers\XmlSaverHelpers.cs" /> + <Compile Include="Studios\StudioImageProvider.cs" /> <Compile Include="TV\EpisodeImageFromMediaLocationProvider.cs" /> <Compile Include="TV\EpisodeIndexNumberProvider.cs" /> <Compile Include="TV\EpisodeProviderFromXml.cs" /> @@ -165,6 +166,9 @@ <ItemGroup> <None Include="packages.config" /> </ItemGroup> + <ItemGroup> + <EmbeddedResource Include="Studios\images.txt" /> + </ItemGroup> <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition=" '$(ConfigurationName)' != 'Release Mono' " /> <!-- To modify your build process, add your task inside one of the targets below and uncomment it. diff --git a/MediaBrowser.Providers/Movies/MovieProviderFromXml.cs b/MediaBrowser.Providers/Movies/MovieProviderFromXml.cs index bb1299f67..3ba777b37 100644 --- a/MediaBrowser.Providers/Movies/MovieProviderFromXml.cs +++ b/MediaBrowser.Providers/Movies/MovieProviderFromXml.cs @@ -1,7 +1,7 @@ using MediaBrowser.Common.IO; using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; -using MediaBrowser.Controller.Entities.Movies; +using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Persistence; using MediaBrowser.Controller.Providers; using MediaBrowser.Model.Entities; @@ -48,7 +48,8 @@ namespace MediaBrowser.Providers.Movies return !trailer.IsLocalTrailer; } - return item is Movie || item is MusicVideo || item is AdultVideo; + // Check parent for null to avoid running this against things like video backdrops + return item is Video && !(item is Episode) && item.Parent != null; } /// <summary> diff --git a/MediaBrowser.Providers/Savers/MovieXmlSaver.cs b/MediaBrowser.Providers/Savers/MovieXmlSaver.cs index 17dca6008..f10e24dc1 100644 --- a/MediaBrowser.Providers/Savers/MovieXmlSaver.cs +++ b/MediaBrowser.Providers/Savers/MovieXmlSaver.cs @@ -1,10 +1,9 @@ using MediaBrowser.Controller.Configuration; using MediaBrowser.Controller.Entities; using MediaBrowser.Controller.Entities.Movies; +using MediaBrowser.Controller.Entities.TV; using MediaBrowser.Controller.Library; using MediaBrowser.Controller.Persistence; -using MediaBrowser.Providers.Movies; -using System; using System.Collections.Generic; using System.Globalization; using System.IO; @@ -50,7 +49,8 @@ namespace MediaBrowser.Providers.Savers return !trailer.IsLocalTrailer; } - return item is Movie || item is MusicVideo || item is AdultVideo; + // Check parent for null to avoid running this against things like video backdrops + return item is Video && !(item is Episode) && item.Parent != null; } return false; diff --git a/MediaBrowser.Providers/Studios/StudioImageProvider.cs b/MediaBrowser.Providers/Studios/StudioImageProvider.cs new file mode 100644 index 000000000..28229fff5 --- /dev/null +++ b/MediaBrowser.Providers/Studios/StudioImageProvider.cs @@ -0,0 +1,138 @@ +using MediaBrowser.Controller.Configuration; +using MediaBrowser.Controller.Entities; +using MediaBrowser.Controller.Library; +using MediaBrowser.Controller.Providers; +using MediaBrowser.Model.Entities; +using MediaBrowser.Model.Logging; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; + +namespace MediaBrowser.Providers.Studios +{ + public class StudioImageProvider : BaseMetadataProvider + { + private readonly IProviderManager _providerManager; + private readonly SemaphoreSlim _resourcePool = new SemaphoreSlim(5, 5); + + public StudioImageProvider(ILogManager logManager, IServerConfigurationManager configurationManager, IProviderManager providerManager) + : base(logManager, configurationManager) + { + _providerManager = providerManager; + } + + public override bool Supports(BaseItem item) + { + return item is Studio; + } + + public override bool RequiresInternet + { + get + { + return true; + } + } + + public override ItemUpdateType ItemUpdateType + { + get + { + return ItemUpdateType.ImageUpdate; + } + } + + protected override bool NeedsRefreshInternal(BaseItem item, BaseProviderInfo providerInfo) + { + if (!string.IsNullOrEmpty(item.PrimaryImagePath)) + { + return false; + } + + return base.NeedsRefreshInternal(item, providerInfo); + } + + protected override bool RefreshOnVersionChange + { + get + { + return true; + } + } + + protected override string ProviderVersion + { + get + { + return "1"; + } + } + + public override async Task<bool> FetchAsync(BaseItem item, bool force, BaseProviderInfo providerInfo, CancellationToken cancellationToken) + { + if (string.IsNullOrEmpty(item.PrimaryImagePath)) + { + var list = GetAvailableImages(); + + var match = FindMatch(item, list); + + if (!string.IsNullOrEmpty(match)) + { + var url = GetUrl(match); + + await _providerManager.SaveImage(item, url, _resourcePool, ImageType.Primary, null, cancellationToken).ConfigureAwait(false); + } + } + + SetLastRefreshed(item, DateTime.UtcNow, providerInfo); + return true; + } + + private string FindMatch(BaseItem item, IEnumerable<string> images) + { + var name = GetComparableName(item.Name); + + return images.FirstOrDefault(i => string.Equals(name, GetComparableName(i), StringComparison.OrdinalIgnoreCase)); + } + + private string GetComparableName(string name) + { + return name.Replace(" ", string.Empty).Replace(".", string.Empty).Replace("&", string.Empty).Replace("!", string.Empty); + } + + private string GetUrl(string image) + { + return string.Format("https://raw.github.com/MediaBrowser/MediaBrowser.Resources/master/images/studios/{0}/folder.jpg", image); + } + + private IEnumerable<string> GetAvailableImages() + { + var path = GetType().Namespace + ".images.txt"; + + using (var stream = GetType().Assembly.GetManifestResourceStream(path)) + { + using (var reader = new StreamReader(stream)) + { + var lines = new List<string>(); + + while (!reader.EndOfStream) + { + var text = reader.ReadLine(); + + lines.Add(text); + } + + return lines; + } + } + } + + public override MetadataProviderPriority Priority + { + get { return MetadataProviderPriority.Third; } + } + } +} diff --git a/MediaBrowser.Providers/Studios/images.txt b/MediaBrowser.Providers/Studios/images.txt new file mode 100644 index 000000000..927ea30e1 --- /dev/null +++ b/MediaBrowser.Providers/Studios/images.txt @@ -0,0 +1,490 @@ +15 Gigs +19 Entertainment +20th Television +321 Productions +4K Media +4Kids Entertainment +A La Carte Communications +A&E +Aardman +ABC +ABC Family +ABC News +ABC Studios +Above Average +Acacia Fitness +Action Television +Advertising Age +All Channel Films +All3Media +Alli +Alliance Entertainment +Alloy +AllWarriorNetwork +American Pop Classics +Ananey +Anchor Bay Entertainment +Anderson Digital +Animal Planet +Animation Domination High-Def +Anime Network +Aniplex +Anyone But Me, LLC +Artists Den Entertainment +Asian Crush +Atlantic Records +Attention Span +Austin City Limits Music Festival +Australian Broadcasting Corporation +Australian Food TV +Avalon UK +Azteca America +Bandai +Base 79 +BBC Worldwide +Beliefnet +Believe +BET +Beta Film +Big Air Studios +BIGFlix +bio +Blame Society +Blastro Networks +Bloody Disgusting Selects +Bloomberg +Bonnier TV Group +Border Entertainment +Brain Farm +Brainstorm Media +Brave New Films +Bravo +Broadway Video +Brushfire Records +Butaca +BVTV +C3 Entertainment +Canal 13 de Chile +Candlelight Media +Candor TV +Caracol Television +Carsey Werner +CBS +CelebTV +Charlie Rose +Cheflive +CHIC.TV +Chiller +China Lion +Cine Real +Cinedigm +CINELAN +Cinema Guild +Cinema Libre Studio +Cinema Purgatorio +CineSport +Cirque du Soleil +Citizens United Productions No. 3 +CJ Entertainment +Classic Media +Clinton Global Initiative +Cloo +ClubWPT +CNBC +CODA BOOKS +CollegeHumor +Comedy Central +Comedy Time +Conde Nast Digital +Constantin Film +Content and Co +Content Family +Content Media Corporation +Contentino +Cooking Channel +Crackle +Crime & Investigation Network +Criterion Collection +CRM +Cuppa Coffee +Dark Sky Films +Dave Matthews Band +Davis Panzer +Debutante Inc +Digital Artists +Digital Rights Group +Digital Studios +Discovery Channel +Distribber +Diva +DIY Network +DocComTV +DramaFever +Duopoly +E! Entertainment +EA Sports +Eagle Media +Eagle Rock +Echo Bridge Entertainment +Echo Pictures +EchoBoom Sports +Edmunds +ElecPlay +Electric Entertainment +Electric Sky +ELLE +EMI +Enchanted Tales +Endemol +Entertainment Rights +eOne Entertainment Distribution +Epicurious.com +Eqal +Esquire Network +Estrella TV +Everyday Edisons +Evil Global +Exclusive Media +ExerciseTV +Fanclub +Fangoria +FEARnet +Fever Dreams +Fight TV +Film Ideas on Demand +Film Movement +Film Sales Company +FilmBuff +Finley-Holiday Films +First Look Studios +First Run Features +Focus Features +Food Network +FORA.tv +Ford +FOX +Fox Business +Fox College Sports +Fox Movie Channel +Fox News +Fox Reality +Fox Sports +Fox Sports Net +Fox Television Classics +Frantic Films +FremantleMedia +FUEL TV +FUNimation +FX +FXM +FXX +G4 +Gaiam +Galavision +GameTrailers +Generate +George Dickel +Giant Ape Media +Glamour Films +GoDigital +Golf TV +Gong +Gorilla Pictures +Gravitas +Gravitas Horror +GreenLight Media +GT Media +H2 +Handmade TV +Hat Trick +HD Films, Inc +Health Science Channel +HealthiNation +HereTV +HGTV +Historic Films +History +History en Español +HitFix +Hollywood Pictures +How it Works +Howcast +Howdini +Hudsun Media +Hulu Original Series +Hype +Iconix +iCue.com +IFC +IFC Films +IGN +Image Entertainment +Imagina US +Independent Comedy Network +Independent International Pictures Corp +Indie Crush +IndieFlix +itsallinyourhands.tv +ITV +Janson Media +Jim Henson Family TV +K2 +KCET +Kidz Bop +Kino Lorber +KinoNation +Klown +Koan +L Studio +Lagardere +Laguna Productions +Latin Crush +Legend Fighting Championship +Legend Films +Lifetime +Link TV +Lionsgate +Liquid Comics +Litton Entertainment +LMN +Local Food Sustainable Network +Logo +lolflix +Long Way Round +Look +Lou Reda Productions +Lucha Libre USA +LXTV +MAN +Manga Entertainment +Manolin Studios +Mar Vista +Martha Stewart Living +Marvel +Maverick Entertainment +Maya +MBC America +Media Blasters +Mentorn +MGM +MHz Networks +Midnight Pulp +Military History +Millennium Media Services +Modelinia +Mojo +MoMedia +Monterey Media +Moonscoop +Moshcam +Movieola +Movies by OHM +Moving Art +MPI +MSNBC +MTV +MulticomTV +MVD Entertainment Group +My Vortexx +My Yoga +MyNetworkTV +NASA +Nat Geo Wild +National Geographic Channel +NBC +NBC News +NBC Sports +NBC Universal +NBCU TV +NCircle +New Renaissance +NHL +Nickelodeon +NickMom +Nikki Sixx +Nirvana Films +NIS America +Novel Ruby Productions +NowThisNews +nuvoTV +O2 Media +OhmTV +Oops Doughnuts +Ora TV +Orange Lounge +ORF Universum +Oscilloscope Laboratories +Oxygen +Paley Media +Panna +Paranormal TV +Passion River +PBS Kids +Phase 4 Films +Players Network +Plum TV +PopSugar TV +Power Rangers +PPI Releasing +PRO +Pure Adrenaline +Pure History +Pure Nature +Pure Science +Questar +Quintus Media +Quiver +Rajshri Media +Raphael Saadiq +Razor & Tie +RCTV +Real Magic TV +Red Bull +Red Hour Digital +ReelAfrican +ReelzChannel +Revolver +Rick Steves' Network +RiffTrax +Right Network +Riverhorse +Roadside Attractions +Ron Hazelton Productions +RooftopComedy +Rovio +RSA +RT +RTE +S and S Entertainment +Saavn +Sachs Judah +Salient Media +Satelight +Saturday Morning TV +SBS +SBS Australia +Scholastic +Science Channel +Scott Entertainment +Screen Media +Sesame Street +Shaftesbury +Shemaroo +Shochiku +Shout! Factory +Showtime +Shree International +Sky Studios +SnagFilms +SOFA +SOMA +Sonar Entertainment +Sony Pictures Television +SoPeachi +Source Interlink Media +SpaceRip +SPEED +Speed Racer Enterprises +Spike +Stand Up To Cancer +Starz +Strand Releasing +Strike.TV +Sundance Channel +SunWorld Pictures +Sweet Irony +Syfy +Syndicado +Synergetic +Talking Baseball with Ed Randall +Tantao Entertainment +TasteTV +Telepictures +TenduTV +The Cannell Studios +The CW +The Democratic National Convention +The Denis Leary Podcasts +The Global Film Initiative +The Jim Henson Company +The Kitchen Diva +The LXD +The Military Network +The Morning After +The National Film Board of Canada +The New York Times +The Onion +The OnLine Network +The Orchard +The Rebound +The Situation Workout +The Sundance Institute +The Three Stooges +The Weinstein Company +The White House +The Wine Library +The Zalman King Company +This Week In Studios +Thunderbird +Tiny Island Productions +TLA Releasing +TLC +TMS Entertainment +Toei Animation +Tokyopop +Total College Sports +Total Content Digital +Touchstone Pictures +Tr3s +Transworld +Travel Channel +Troma +TV Globo +TV Land +TVF International +TVG Interactive Horseracing +TVGN +Twentieth Century Fox +Uncork'd Entertainment +UniMas +Universal Pictures +Universal Sports +Universal Television +Univision +unwrapped.tv +USA +uStudio +Vanguard Cinema +Venevision +Venus +VH1 +Vibrant Media +Videofashion +viewster +ViKi +Virgil Films +Vision Films +Vivendi Entertainment +VIZ Media +Vogue.TV +Wall Street Journal +Warner Bros. Records +WatchMojo.com +Water.org +WCG +WE tv +Web Therapy +Well Go +WEP +Westchester Films +Wolfe Video +WWE +Yan Can Cook +Young Hollywood +YourTango +ZDF Enterprises +ZED +Zeitgeist Films +Zodiak Kids +Zodiak Rights +ZoomTV
\ No newline at end of file diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs index e54c0af55..9b095a156 100644 --- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs +++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs @@ -106,6 +106,11 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies return FindMovie<AdultVideo>(args.Path, args.FileSystemChildren); } + if (string.Equals(collectionType, CollectionType.HomeVideos, StringComparison.OrdinalIgnoreCase)) + { + return FindMovie<Video>(args.Path, args.FileSystemChildren); + } + if (string.IsNullOrEmpty(collectionType) || string.Equals(collectionType, CollectionType.Movies, StringComparison.OrdinalIgnoreCase) || string.Equals(collectionType, CollectionType.BoxSets, StringComparison.OrdinalIgnoreCase)) diff --git a/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs b/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs index ac9f07dcb..0b2d0c5e9 100644 --- a/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs +++ b/MediaBrowser.Server.Implementations/LiveTv/LiveTvDtoService.cs @@ -301,7 +301,6 @@ namespace MediaBrowser.Server.Implementations.LiveTv OriginalAirDate = program.OriginalAirDate, Audio = program.Audio, CommunityRating = GetClientCommunityRating(program.CommunityRating), - AspectRatio = program.AspectRatio, IsRepeat = program.IsRepeat, EpisodeTitle = program.EpisodeTitle, ChannelName = channelName, |
