Skip to content

Commit aff82d4

Browse files
improve codec specific values on playback urls
1 parent ab32b9f commit aff82d4

File tree

9 files changed

+147
-62
lines changed

9 files changed

+147
-62
lines changed

Emby.Server.Implementations/Data/SqliteItemRepository.cs

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2300,6 +2300,8 @@ private bool HasField(InternalItemsQuery query, ItemFields name)
23002300

23012301
switch (name)
23022302
{
2303+
case ItemFields.Tags:
2304+
return fields.Contains(name) || HasProgramAttributes(query);
23032305
case ItemFields.HomePageUrl:
23042306
case ItemFields.CustomRating:
23052307
case ItemFields.ProductionLocations:
@@ -2308,7 +2310,6 @@ private bool HasField(InternalItemsQuery query, ItemFields name)
23082310
case ItemFields.Taglines:
23092311
case ItemFields.SortName:
23102312
case ItemFields.Studios:
2311-
case ItemFields.Tags:
23122313
case ItemFields.ThemeSongIds:
23132314
case ItemFields.ThemeVideoIds:
23142315
case ItemFields.DateCreated:
@@ -2504,14 +2505,7 @@ private string[] GetFinalColumnsToSelect(InternalItemsQuery query, string[] star
25042505
}
25052506
}
25062507

2507-
if (HasProgramAttributes(query))
2508-
{
2509-
if (!list.Contains("Tags", StringComparer.OrdinalIgnoreCase))
2510-
{
2511-
list.Add("Tags");
2512-
}
2513-
}
2514-
else
2508+
if (!HasProgramAttributes(query))
25152509
{
25162510
list.Remove("IsKids");
25172511
list.Remove("IsMovie");

Emby.Server.Implementations/Library/MediaSourceManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ public async Task<IEnumerable<MediaSourceInfo>> GetPlayackMediaSources(string id
126126

127127
var mediaSources = GetStaticMediaSources(hasMediaSources, enablePathSubstitution, user);
128128

129-
if (mediaSources.Count == 1 && mediaSources[0].MediaStreams.Count == 0 && mediaSources[0].Type != MediaSourceType.Placeholder)
129+
if (mediaSources.Count == 1 && mediaSources[0].Type != MediaSourceType.Placeholder && !mediaSources[0].MediaStreams.Any(i => i.Type == MediaStreamType.Audio || i.Type == MediaStreamType.Video))
130130
{
131131
await item.RefreshMetadata(new MediaBrowser.Controller.Providers.MetadataRefreshOptions(_fileSystem)
132132
{

Emby.Server.Implementations/LiveTv/Listings/SchedulesDirect.cs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -249,8 +249,6 @@ private ProgramInfo GetProgram(string channelId, ScheduleDirect.Program programI
249249
DateTime endAt = startAt.AddSeconds(programInfo.duration);
250250
ProgramAudio audioType = ProgramAudio.Stereo;
251251

252-
bool repeat = programInfo.@new == null;
253-
254252
var programId = programInfo.programID ?? string.Empty;
255253

256254
string newID = programId + "T" + startAt.Ticks + "C" + channelId;
@@ -296,14 +294,17 @@ private ProgramInfo GetProgram(string channelId, ScheduleDirect.Program programI
296294
CommunityRating = null,
297295
EpisodeTitle = episodeTitle,
298296
Audio = audioType,
299-
IsRepeat = repeat,
297+
//IsNew = programInfo.@new ?? false,
298+
IsRepeat = programInfo.repeat,
300299
IsSeries = string.Equals(details.entityType, "episode", StringComparison.OrdinalIgnoreCase),
301300
ImageUrl = details.primaryImage,
302301
ThumbImageUrl = details.thumbImage,
303302
IsKids = string.Equals(details.audience, "children", StringComparison.OrdinalIgnoreCase),
304303
IsSports = string.Equals(details.entityType, "sports", StringComparison.OrdinalIgnoreCase),
305304
IsMovie = IsMovie(details),
306-
Etag = programInfo.md5
305+
Etag = programInfo.md5,
306+
IsLive = string.Equals(programInfo.liveTapeDelay, "live", StringComparison.OrdinalIgnoreCase),
307+
IsPremiere = programInfo.premiere
307308
};
308309

309310
var showId = programId;
@@ -1116,6 +1117,9 @@ public class Program
11161117
public List<Rating> ratings { get; set; }
11171118
public bool? @new { get; set; }
11181119
public Multipart multipart { get; set; }
1120+
public string liveTapeDelay { get; set; }
1121+
public bool premiere { get; set; }
1122+
public bool repeat { get; set; }
11191123
}
11201124

11211125

MediaBrowser.Api/LiveTv/LiveTvService.cs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
using MediaBrowser.Model.Services;
2424
using MediaBrowser.Model.System;
2525
using MediaBrowser.Model.Extensions;
26+
using MediaBrowser.Model.Cryptography;
27+
using System.Text;
2628

2729
namespace MediaBrowser.Api.LiveTv
2830
{
@@ -605,6 +607,7 @@ public class AddListingProvider : ListingsProviderInfo, IReturn<ListingsProvider
605607
{
606608
public bool ValidateLogin { get; set; }
607609
public bool ValidateListings { get; set; }
610+
public string Pw { get; set; }
608611
}
609612

610613
[Route("/LiveTv/ListingProviders", "DELETE", Summary = "Deletes a listing provider")]
@@ -711,8 +714,9 @@ public class LiveTvService : BaseApiService
711714
private readonly IAuthorizationContext _authContext;
712715
private readonly ISessionContext _sessionContext;
713716
private readonly IEnvironmentInfo _environment;
717+
private ICryptoProvider _cryptographyProvider;
714718

715-
public LiveTvService(ILiveTvManager liveTvManager, IUserManager userManager, IServerConfigurationManager config, IHttpClient httpClient, ILibraryManager libraryManager, IDtoService dtoService, IFileSystem fileSystem, IAuthorizationContext authContext, ISessionContext sessionContext, IEnvironmentInfo environment)
719+
public LiveTvService(ICryptoProvider crypto, ILiveTvManager liveTvManager, IUserManager userManager, IServerConfigurationManager config, IHttpClient httpClient, ILibraryManager libraryManager, IDtoService dtoService, IFileSystem fileSystem, IAuthorizationContext authContext, ISessionContext sessionContext, IEnvironmentInfo environment)
716720
{
717721
_liveTvManager = liveTvManager;
718722
_userManager = userManager;
@@ -724,6 +728,7 @@ public LiveTvService(ILiveTvManager liveTvManager, IUserManager userManager, ISe
724728
_authContext = authContext;
725729
_sessionContext = sessionContext;
726730
_environment = environment;
731+
_cryptographyProvider = crypto;
727732
}
728733

729734
public object Get(GetTunerHostTypes request)
@@ -869,10 +874,26 @@ private void AssertUserCanManageLiveTv()
869874

870875
public async Task<object> Post(AddListingProvider request)
871876
{
877+
if (request.Pw != null)
878+
{
879+
request.Password = GetHashedString(request.Pw);
880+
}
881+
882+
request.Pw = null;
883+
872884
var result = await _liveTvManager.SaveListingProvider(request, request.ValidateLogin, request.ValidateListings).ConfigureAwait(false);
873885
return ToOptimizedResult(result);
874886
}
875887

888+
/// <summary>
889+
/// Gets the hashed string.
890+
/// </summary>
891+
private string GetHashedString(string str)
892+
{
893+
// legacy
894+
return BitConverter.ToString(_cryptographyProvider.ComputeSHA1(Encoding.UTF8.GetBytes(str))).Replace("-", string.Empty).ToLower();
895+
}
896+
876897
public void Delete(DeleteListingProvider request)
877898
{
878899
_liveTvManager.DeleteListingsProvider(request.Id);

MediaBrowser.Controller/Entities/BaseItem.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2324,7 +2324,7 @@ protected List<FileSystemMetadata> GetLocalMetadataFilesToDelete()
23242324
}
23252325

23262326
var filename = System.IO.Path.GetFileNameWithoutExtension(Path);
2327-
var extensions = new List<string> { ".nfo", ".xml", ".srt", ".vtt", ".sub", ".idx", ".txt", ".edl" };
2327+
var extensions = new List<string> { ".nfo", ".xml", ".srt", ".vtt", ".sub", ".idx", ".txt", ".edl", ".bif", ".smi", ".ttml" };
23282328
extensions.AddRange(SupportedImageExtensions);
23292329

23302330
return FileSystem.GetFiles(FileSystem.GetDirectoryName(Path), extensions.ToArray(extensions.Count), false, false)

MediaBrowser.Model/Dlna/StreamBuilder.cs

Lines changed: 87 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,7 @@ private StreamInfo BuildAudioItem(MediaSourceInfo item, AudioOptions options)
438438
}
439439
}
440440

441-
ApplyTranscodingConditions(playlistItem, audioTranscodingConditions, null, false);
441+
ApplyTranscodingConditions(playlistItem, audioTranscodingConditions, null, true, true);
442442

443443
// Honor requested max channels
444444
playlistItem.GlobalMaxAudioChannels = options.MaxAudioChannels;
@@ -859,15 +859,15 @@ private StreamInfo BuildVideoItem(MediaSourceInfo item, VideoOptions options)
859859
{
860860
if (i.ContainsAnyCodec(transcodingVideoCodec, transcodingProfile.Container))
861861
{
862-
ApplyTranscodingConditions(playlistItem, i.Conditions, transcodingVideoCodec, !isFirstAppliedCodecProfile);
862+
ApplyTranscodingConditions(playlistItem, i.Conditions, transcodingVideoCodec, true, isFirstAppliedCodecProfile);
863863
isFirstAppliedCodecProfile = false;
864864
}
865865
}
866866
}
867867
}
868868
}
869869

870-
var audioTranscodingConditions = new List<ProfileCondition>();
870+
var audioTranscodingConditions = new List<CodecProfile>();
871871
foreach (CodecProfile i in options.Profile.CodecProfiles)
872872
{
873873
if (i.Type == CodecType.VideoAudio && i.ContainsAnyCodec(playlistItem.TargetAudioCodec, transcodingProfile.Container))
@@ -892,10 +892,7 @@ private StreamInfo BuildVideoItem(MediaSourceInfo item, VideoOptions options)
892892

893893
if (applyConditions)
894894
{
895-
foreach (ProfileCondition c in i.Conditions)
896-
{
897-
audioTranscodingConditions.Add(c);
898-
}
895+
audioTranscodingConditions.Add(i);
899896
break;
900897
}
901898
}
@@ -925,7 +922,7 @@ private StreamInfo BuildVideoItem(MediaSourceInfo item, VideoOptions options)
925922
}
926923

927924
// Do this after initial values are set to account for greater than/less than conditions
928-
ApplyTranscodingConditions(playlistItem, audioTranscodingConditions, null, false);
925+
ApplyTranscodingConditions(playlistItem, audioTranscodingConditions);
929926
}
930927

931928
playlistItem.TranscodeReasons = transcodeReasons;
@@ -1441,7 +1438,33 @@ private void ValidateAudioInput(AudioOptions options)
14411438
}
14421439
}
14431440

1444-
private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCondition> conditions, string qualifier, bool qualifiedOnly)
1441+
private void ApplyTranscodingConditions(StreamInfo item, List<CodecProfile> codecProfiles)
1442+
{
1443+
foreach (var profile in codecProfiles)
1444+
{
1445+
ApplyTranscodingConditions(item, profile);
1446+
}
1447+
}
1448+
1449+
private void ApplyTranscodingConditions(StreamInfo item, CodecProfile codecProfile)
1450+
{
1451+
var codecs = ContainerProfile.SplitValue(codecProfile.Codec);
1452+
if (codecs.Length == 0)
1453+
{
1454+
ApplyTranscodingConditions(item, codecProfile.Conditions, null, true, true);
1455+
return;
1456+
}
1457+
1458+
var enableNonQualified = true;
1459+
1460+
foreach (var codec in codecs)
1461+
{
1462+
ApplyTranscodingConditions(item, codecProfile.Conditions, codec, true, enableNonQualified);
1463+
enableNonQualified = false;
1464+
}
1465+
}
1466+
1467+
private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCondition> conditions, string qualifier, bool enableQualifiedConditions, bool enableNonQualifiedConditions)
14451468
{
14461469
foreach (ProfileCondition condition in conditions)
14471470
{
@@ -1462,7 +1485,7 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
14621485
{
14631486
case ProfileConditionValue.AudioBitrate:
14641487
{
1465-
if (qualifiedOnly)
1488+
if (!enableNonQualifiedConditions)
14661489
{
14671490
continue;
14681491
}
@@ -1487,9 +1510,19 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
14871510
}
14881511
case ProfileConditionValue.AudioChannels:
14891512
{
1490-
if (qualifiedOnly && string.IsNullOrEmpty(qualifier))
1513+
if (string.IsNullOrEmpty(qualifier))
14911514
{
1492-
continue;
1515+
if (!enableNonQualifiedConditions)
1516+
{
1517+
continue;
1518+
}
1519+
}
1520+
else
1521+
{
1522+
if (!enableQualifiedConditions)
1523+
{
1524+
continue;
1525+
}
14931526
}
14941527

14951528
int num;
@@ -1512,7 +1545,7 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
15121545
}
15131546
case ProfileConditionValue.IsAvc:
15141547
{
1515-
if (qualifiedOnly)
1548+
if (!enableNonQualifiedConditions)
15161549
{
15171550
continue;
15181551
}
@@ -1533,7 +1566,7 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
15331566
}
15341567
case ProfileConditionValue.IsAnamorphic:
15351568
{
1536-
if (qualifiedOnly)
1569+
if (!enableNonQualifiedConditions)
15371570
{
15381571
continue;
15391572
}
@@ -1554,9 +1587,19 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
15541587
}
15551588
case ProfileConditionValue.IsInterlaced:
15561589
{
1557-
if (qualifiedOnly && string.IsNullOrEmpty(qualifier))
1590+
if (string.IsNullOrEmpty(qualifier))
15581591
{
1559-
continue;
1592+
if (!enableNonQualifiedConditions)
1593+
{
1594+
continue;
1595+
}
1596+
}
1597+
else
1598+
{
1599+
if (!enableQualifiedConditions)
1600+
{
1601+
continue;
1602+
}
15601603
}
15611604

15621605
bool isInterlaced;
@@ -1586,9 +1629,19 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
15861629
}
15871630
case ProfileConditionValue.RefFrames:
15881631
{
1589-
if (qualifiedOnly && string.IsNullOrEmpty(qualifier))
1632+
if (string.IsNullOrEmpty(qualifier))
15901633
{
1591-
continue;
1634+
if (!enableNonQualifiedConditions)
1635+
{
1636+
continue;
1637+
}
1638+
}
1639+
else
1640+
{
1641+
if (!enableQualifiedConditions)
1642+
{
1643+
continue;
1644+
}
15921645
}
15931646

15941647
int num;
@@ -1611,9 +1664,19 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
16111664
}
16121665
case ProfileConditionValue.VideoBitDepth:
16131666
{
1614-
if (qualifiedOnly && string.IsNullOrEmpty(qualifier))
1667+
if (string.IsNullOrEmpty(qualifier))
16151668
{
1616-
continue;
1669+
if (!enableNonQualifiedConditions)
1670+
{
1671+
continue;
1672+
}
1673+
}
1674+
else
1675+
{
1676+
if (!enableQualifiedConditions)
1677+
{
1678+
continue;
1679+
}
16171680
}
16181681

16191682
int num;
@@ -1658,7 +1721,7 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
16581721
}
16591722
case ProfileConditionValue.Height:
16601723
{
1661-
if (qualifiedOnly)
1724+
if (!enableNonQualifiedConditions)
16621725
{
16631726
continue;
16641727
}
@@ -1683,7 +1746,7 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
16831746
}
16841747
case ProfileConditionValue.VideoBitrate:
16851748
{
1686-
if (qualifiedOnly)
1749+
if (!enableNonQualifiedConditions)
16871750
{
16881751
continue;
16891752
}
@@ -1708,7 +1771,7 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
17081771
}
17091772
case ProfileConditionValue.VideoFramerate:
17101773
{
1711-
if (qualifiedOnly)
1774+
if (!enableNonQualifiedConditions)
17121775
{
17131776
continue;
17141777
}
@@ -1758,7 +1821,7 @@ private void ApplyTranscodingConditions(StreamInfo item, IEnumerable<ProfileCond
17581821
}
17591822
case ProfileConditionValue.Width:
17601823
{
1761-
if (qualifiedOnly)
1824+
if (!enableNonQualifiedConditions)
17621825
{
17631826
continue;
17641827
}

0 commit comments

Comments
 (0)