mirror of
https://github.com/jellyfin/jellyfin.git
synced 2026-04-20 17:14:42 +01:00
introduce presentation unique key
This commit is contained in:
@@ -1149,6 +1149,12 @@ namespace MediaBrowser.Controller.Entities
|
||||
get { return null; }
|
||||
}
|
||||
|
||||
[IgnoreDataMember]
|
||||
public virtual string PresentationUniqueKey
|
||||
{
|
||||
get { return Id.ToString("N"); }
|
||||
}
|
||||
|
||||
private string _userDataKey;
|
||||
/// <summary>
|
||||
/// Gets the user data key.
|
||||
|
||||
@@ -91,6 +91,12 @@ namespace MediaBrowser.Controller.Entities.TV
|
||||
}
|
||||
}
|
||||
|
||||
[IgnoreDataMember]
|
||||
public override string PresentationUniqueKey
|
||||
{
|
||||
get { return GetUserDataKey(); }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the user data key.
|
||||
/// </summary>
|
||||
|
||||
@@ -44,6 +44,20 @@ namespace MediaBrowser.Controller.Entities
|
||||
}
|
||||
}
|
||||
|
||||
[IgnoreDataMember]
|
||||
public override string PresentationUniqueKey
|
||||
{
|
||||
get
|
||||
{
|
||||
if (PrimaryVersionId.HasValue)
|
||||
{
|
||||
return PrimaryVersionId.Value.ToString("N");
|
||||
}
|
||||
|
||||
return base.PresentationUniqueKey;
|
||||
}
|
||||
}
|
||||
|
||||
public long? Size { get; set; }
|
||||
public string Container { get; set; }
|
||||
public int? TotalBitrate { get; set; }
|
||||
@@ -90,6 +104,14 @@ namespace MediaBrowser.Controller.Entities
|
||||
{
|
||||
get
|
||||
{
|
||||
if (PrimaryVersionId.HasValue)
|
||||
{
|
||||
var item = LibraryManager.GetItemById(PrimaryVersionId.Value) as Video;
|
||||
if (item != null)
|
||||
{
|
||||
return item.MediaSourceCount;
|
||||
}
|
||||
}
|
||||
return LinkedAlternateVersions.Count + LocalAlternateVersions.Count + 1;
|
||||
}
|
||||
}
|
||||
@@ -192,21 +214,6 @@ namespace MediaBrowser.Controller.Entities
|
||||
return key;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Gets the linked children.
|
||||
/// </summary>
|
||||
/// <returns>IEnumerable{BaseItem}.</returns>
|
||||
public IEnumerable<Video> GetAlternateVersions()
|
||||
{
|
||||
var filesWithinSameDirectory = GetLocalAlternateVersionIds()
|
||||
.Select(i => LibraryManager.GetItemById(i))
|
||||
.Where(i => i != null)
|
||||
.OfType<Video>();
|
||||
|
||||
return filesWithinSameDirectory.Concat(GetLinkedAlternateVersions())
|
||||
.OrderBy(i => i.SortName);
|
||||
}
|
||||
|
||||
public IEnumerable<Video> GetLinkedAlternateVersions()
|
||||
{
|
||||
var linkedVersions = LinkedAlternateVersions
|
||||
@@ -506,6 +513,36 @@ namespace MediaBrowser.Controller.Entities
|
||||
}).FirstOrDefault();
|
||||
}
|
||||
|
||||
private List<Tuple<Video, MediaSourceType>> GetAllVideosForMediaSources()
|
||||
{
|
||||
var list = new List<Tuple<Video, MediaSourceType>>();
|
||||
|
||||
list.Add(new Tuple<Video, MediaSourceType>(this, MediaSourceType.Default));
|
||||
list.AddRange(GetLinkedAlternateVersions().Select(i => new Tuple<Video, MediaSourceType>(i, MediaSourceType.Grouping)));
|
||||
|
||||
if (PrimaryVersionId.HasValue)
|
||||
{
|
||||
var primary = LibraryManager.GetItemById(PrimaryVersionId.Value) as Video;
|
||||
if (primary != null)
|
||||
{
|
||||
var existingIds = list.Select(i => i.Item1.Id).ToList();
|
||||
list.Add(new Tuple<Video, MediaSourceType>(primary, MediaSourceType.Grouping));
|
||||
list.AddRange(primary.GetLinkedAlternateVersions().Where(i => !existingIds.Contains(i.Id)).Select(i => new Tuple<Video, MediaSourceType>(i, MediaSourceType.Grouping)));
|
||||
}
|
||||
}
|
||||
|
||||
var localAlternates = list
|
||||
.SelectMany(i => i.Item1.GetLocalAlternateVersionIds())
|
||||
.Select(LibraryManager.GetItemById)
|
||||
.Where(i => i != null)
|
||||
.OfType<Video>()
|
||||
.ToList();
|
||||
|
||||
list.AddRange(localAlternates.Select(i => new Tuple<Video, MediaSourceType>(i, MediaSourceType.Default)));
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
public virtual IEnumerable<MediaSourceInfo> GetMediaSources(bool enablePathSubstitution)
|
||||
{
|
||||
if (SourceType == SourceType.Channel)
|
||||
@@ -524,13 +561,8 @@ namespace MediaBrowser.Controller.Entities
|
||||
};
|
||||
}
|
||||
|
||||
var item = this;
|
||||
|
||||
var result = item.GetAlternateVersions()
|
||||
.Select(i => GetVersionInfo(enablePathSubstitution, i, MediaSourceType.Grouping))
|
||||
.ToList();
|
||||
|
||||
result.Add(GetVersionInfo(enablePathSubstitution, item, MediaSourceType.Default));
|
||||
var list = GetAllVideosForMediaSources();
|
||||
var result = list.Select(i => GetVersionInfo(enablePathSubstitution, i.Item1, i.Item2)).ToList();
|
||||
|
||||
return result.OrderBy(i =>
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user