diff --git a/MediaBrowser.Api/Playback/Progressive/VideoService.cs b/MediaBrowser.Api/Playback/Progressive/VideoService.cs
index 84ae26248f..1dfb433879 100644
--- a/MediaBrowser.Api/Playback/Progressive/VideoService.cs
+++ b/MediaBrowser.Api/Playback/Progressive/VideoService.cs
@@ -17,6 +17,7 @@ namespace MediaBrowser.Api.Playback.Progressive
///
/// Class GetVideoStream
///
+ [Route("/Videos/{Id}/stream.mpegts", "GET")]
[Route("/Videos/{Id}/stream.ts", "GET")]
[Route("/Videos/{Id}/stream.webm", "GET")]
[Route("/Videos/{Id}/stream.asf", "GET")]
diff --git a/MediaBrowser.Api/Reports/Stat/ReportStatBuilder.cs b/MediaBrowser.Api/Reports/Stat/ReportStatBuilder.cs
index c9ee6337ff..fb694d6e13 100644
--- a/MediaBrowser.Api/Reports/Stat/ReportStatBuilder.cs
+++ b/MediaBrowser.Api/Reports/Stat/ReportStatBuilder.cs
@@ -213,7 +213,7 @@ namespace MediaBrowser.Api.Reports
};
foreach (var item in t)
{
- var ps = items.Where(x => x.People != null && x.SupportsPeople).SelectMany(x => x.People)
+ var ps = items.SelectMany(x => _libraryManager.GetPeople(x))
.Where(n => n.Type == item.ToString())
.GroupBy(x => x.Name)
.OrderByDescending(x => x.Count())
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index 5d054c3b9d..6d0a270da6 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -62,6 +62,7 @@ namespace MediaBrowser.Controller.Entities
/// Gets or sets the channel identifier.
///
/// The channel identifier.
+ [IgnoreDataMember]
public string ChannelId { get; set; }
[IgnoreDataMember]
@@ -554,6 +555,7 @@ namespace MediaBrowser.Controller.Entities
/// Gets or sets the end date.
///
/// The end date.
+ [IgnoreDataMember]
public DateTime? EndDate { get; set; }
///
@@ -586,12 +588,6 @@ namespace MediaBrowser.Controller.Entities
/// The overview.
public string Overview { get; set; }
- ///
- /// Gets or sets the people.
- ///
- /// The people.
- public List People { get; set; }
-
///
/// Gets or sets the studios.
///
diff --git a/MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs b/MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs
index 2179c5ecd7..28f6deafaf 100644
--- a/MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs
+++ b/MediaBrowser.Controller/LiveTv/LiveTvAudioRecording.cs
@@ -22,10 +22,13 @@ namespace MediaBrowser.Controller.LiveTv
public string SeriesTimerId { get; set; }
public DateTime StartDate { get; set; }
public RecordingStatus Status { get; set; }
+ [IgnoreDataMember]
public bool IsSports { get; set; }
public bool IsNews { get; set; }
+ [IgnoreDataMember]
public bool IsKids { get; set; }
public bool IsRepeat { get; set; }
+ [IgnoreDataMember]
public bool IsMovie { get; set; }
public bool? IsHD { get; set; }
public bool IsLive { get; set; }
diff --git a/MediaBrowser.Controller/LiveTv/LiveTvProgram.cs b/MediaBrowser.Controller/LiveTv/LiveTvProgram.cs
index 12052905f2..937234b177 100644
--- a/MediaBrowser.Controller/LiveTv/LiveTvProgram.cs
+++ b/MediaBrowser.Controller/LiveTv/LiveTvProgram.cs
@@ -110,12 +110,14 @@ namespace MediaBrowser.Controller.LiveTv
/// Gets or sets a value indicating whether this instance is movie.
///
/// true if this instance is movie; otherwise, false.
+ [IgnoreDataMember]
public bool IsMovie { get; set; }
///
/// Gets or sets a value indicating whether this instance is sports.
///
/// true if this instance is sports; otherwise, false.
+ [IgnoreDataMember]
public bool IsSports { get; set; }
///
@@ -140,6 +142,7 @@ namespace MediaBrowser.Controller.LiveTv
/// Gets or sets a value indicating whether this instance is kids.
///
/// true if this instance is kids; otherwise, false.
+ [IgnoreDataMember]
public bool IsKids { get; set; }
///
diff --git a/MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs b/MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs
index 960f8054a1..7688691090 100644
--- a/MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs
+++ b/MediaBrowser.Controller/LiveTv/LiveTvVideoRecording.cs
@@ -22,10 +22,13 @@ namespace MediaBrowser.Controller.LiveTv
public string SeriesTimerId { get; set; }
public DateTime StartDate { get; set; }
public RecordingStatus Status { get; set; }
+ [IgnoreDataMember]
public bool IsSports { get; set; }
public bool IsNews { get; set; }
+ [IgnoreDataMember]
public bool IsKids { get; set; }
public bool IsRepeat { get; set; }
+ [IgnoreDataMember]
public bool IsMovie { get; set; }
public bool? IsHD { get; set; }
public bool IsLive { get; set; }
diff --git a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
index cc9d9551c2..c8f4725368 100644
--- a/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
+++ b/MediaBrowser.Server.Implementations/Library/LibraryManager.cs
@@ -2181,7 +2181,7 @@ namespace MediaBrowser.Server.Implementations.Library
}
}
- return item.People ?? new List();
+ return new List();
}
public List GetPeopleItems(InternalPeopleQuery query)
diff --git a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs
index 0d1e4202ca..d9f23977cf 100644
--- a/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs
+++ b/MediaBrowser.Server.Implementations/Library/Resolvers/Movies/MovieResolver.cs
@@ -309,20 +309,26 @@ namespace MediaBrowser.Server.Implementations.Library.Resolvers.Movies
//we need to only look at the name of this actual item (not parents)
var justName = item.IsInMixedFolder ? Path.GetFileName(item.Path) : Path.GetFileName(item.ContainingFolderPath);
- // check for tmdb id
- var tmdbid = justName.GetAttributeValue("tmdbid");
-
- if (!string.IsNullOrEmpty(tmdbid))
+ if (!string.IsNullOrWhiteSpace(justName))
{
- item.SetProviderId(MetadataProviders.Tmdb, tmdbid);
- }
+ // check for tmdb id
+ var tmdbid = justName.GetAttributeValue("tmdbid");
- // check for imdb id - we use full media path, as we can assume, that this will match in any use case (wither id in parent dir or in file name)
- var imdbid = item.Path.GetAttributeValue("imdbid");
+ if (!string.IsNullOrWhiteSpace(tmdbid))
+ {
+ item.SetProviderId(MetadataProviders.Tmdb, tmdbid);
+ }
+ }
- if (!string.IsNullOrEmpty(imdbid))
+ if (!string.IsNullOrWhiteSpace(item.Path))
{
- item.SetProviderId(MetadataProviders.Imdb, imdbid);
+ // check for imdb id - we use full media path, as we can assume, that this will match in any use case (wither id in parent dir or in file name)
+ var imdbid = item.Path.GetAttributeValue("imdbid");
+
+ if (!string.IsNullOrWhiteSpace(imdbid))
+ {
+ item.SetProviderId(MetadataProviders.Imdb, imdbid);
+ }
}
}
}
diff --git a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs
index 02b3080e47..bc6ed47ad6 100644
--- a/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs
+++ b/MediaBrowser.Server.Implementations/LiveTv/TunerHosts/HdHomerun/HdHomerunHost.cs
@@ -329,7 +329,10 @@ namespace MediaBrowser.Server.Implementations.LiveTv.TunerHosts.HdHomerun
RequiresClosing = true,
BufferMs = 1000,
Container = "ts",
- Id = profile
+ Id = profile,
+ SupportsDirectPlay = true,
+ SupportsDirectStream = false,
+ SupportsTranscoding = true
};
return mediaSource;
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
index 00ebf7ea6e..86b4e7d1cb 100644
--- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
+++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
@@ -187,11 +187,16 @@ namespace MediaBrowser.Server.Implementations.Persistence
///
private readonly SemaphoreSlim _writeLock = new SemaphoreSlim(1, 1);
- private string[] _retriveItemColumns =
+ private readonly string[] _retriveItemColumns =
{
"type",
"data",
- "IsOffline"
+ "EndDate",
+ "IsOffline",
+ "ChannelId",
+ "IsMovie",
+ "IsSports",
+ "IsKids"
};
///
@@ -511,7 +516,36 @@ namespace MediaBrowser.Server.Implementations.Persistence
if (!reader.IsDBNull(2))
{
- item.IsOffline = reader.GetBoolean(2);
+ item.EndDate = reader.GetDateTime(2).ToUniversalTime();
+ }
+
+ if (!reader.IsDBNull(3))
+ {
+ item.IsOffline = reader.GetBoolean(3);
+ }
+
+ if (!reader.IsDBNull(4))
+ {
+ item.ChannelId = reader.GetString(4);
+ }
+
+ var hasProgramAttributes = item as IHasProgramAttributes;
+ if (hasProgramAttributes != null)
+ {
+ if (!reader.IsDBNull(5))
+ {
+ hasProgramAttributes.IsMovie = reader.GetBoolean(5);
+ }
+
+ if (!reader.IsDBNull(6))
+ {
+ hasProgramAttributes.IsSports = reader.GetBoolean(6);
+ }
+
+ if (!reader.IsDBNull(7))
+ {
+ hasProgramAttributes.IsKids = reader.GetBoolean(7);
+ }
}
return item;
diff --git a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
index 7de14dac17..91a438ff75 100644
--- a/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
+++ b/MediaBrowser.WebDashboard/MediaBrowser.WebDashboard.csproj
@@ -90,9 +90,15 @@
PreserveNewest
+
+ PreserveNewest
+
PreserveNewest
+
+ PreserveNewest
+
PreserveNewest
@@ -159,6 +165,9 @@
PreserveNewest
+
+ PreserveNewest
+
PreserveNewest