diff --git a/MediaBrowser.Api/Playback/BaseStreamingService.cs b/MediaBrowser.Api/Playback/BaseStreamingService.cs
index 5108087789..680aa50c26 100644
--- a/MediaBrowser.Api/Playback/BaseStreamingService.cs
+++ b/MediaBrowser.Api/Playback/BaseStreamingService.cs
@@ -1002,6 +1002,11 @@ namespace MediaBrowser.Api.Playback
/// StreamState.
protected async Task GetState(StreamRequest request, CancellationToken cancellationToken)
{
+ if (request.ThrowDebugError)
+ {
+ throw new InvalidOperationException("You asked for a debug error, you got one.");
+ }
+
var url = Request.PathInfo;
if (!request.AudioCodec.HasValue)
diff --git a/MediaBrowser.Api/Playback/StreamRequest.cs b/MediaBrowser.Api/Playback/StreamRequest.cs
index 1486c0de7a..b0c5220e35 100644
--- a/MediaBrowser.Api/Playback/StreamRequest.cs
+++ b/MediaBrowser.Api/Playback/StreamRequest.cs
@@ -17,7 +17,7 @@ namespace MediaBrowser.Api.Playback
[ApiMember(Name = "DeviceId", Description = "The device id of the client requesting. Used to stop encoding processes when needed.", IsRequired = false, DataType = "string", ParameterType = "query", Verb = "GET")]
public string DeviceId { get; set; }
-
+
///
/// Gets or sets the audio codec.
///
@@ -65,6 +65,11 @@ namespace MediaBrowser.Api.Playback
/// No need to put this in api docs since it's dlna only
///
public bool AlbumArt { get; set; }
+
+ ///
+ /// For testing purposes
+ ///
+ public bool ThrowDebugError { get; set; }
}
public class VideoStreamRequest : StreamRequest
diff --git a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
index 922260c07f..c483a4bb72 100644
--- a/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
+++ b/MediaBrowser.Api/UserLibrary/BaseItemsByNameService.cs
@@ -144,7 +144,7 @@ namespace MediaBrowser.Api.UserLibrary
{
var libraryItems = user.RootFolder.GetRecursiveChildren(user).ToList();
- items = items.Where(i => GetLibraryItems(i, libraryItems).All(l => !l.IsPlayed(user)));
+ items = items.Where(i => GetLibraryItems(i, libraryItems).All(l => l.IsUnplayed(user)));
}
return items;
diff --git a/MediaBrowser.Api/UserLibrary/GenresService.cs b/MediaBrowser.Api/UserLibrary/GenresService.cs
index d1f7fab014..ded9544f8e 100644
--- a/MediaBrowser.Api/UserLibrary/GenresService.cs
+++ b/MediaBrowser.Api/UserLibrary/GenresService.cs
@@ -107,9 +107,7 @@ namespace MediaBrowser.Api.UserLibrary
/// IEnumerable{Tuple{System.StringFunc{System.Int32}}}.
protected override IEnumerable GetAllItems(GetItemsByName request, IEnumerable items)
{
- var itemsList = items.Where(i => i.Genres != null).ToList();
-
- return itemsList
+ return items
.SelectMany(i => i.Genres)
.Distinct(StringComparer.OrdinalIgnoreCase)
.Select(name => LibraryManager.GetGenre(name));
diff --git a/MediaBrowser.Api/UserLibrary/ItemsService.cs b/MediaBrowser.Api/UserLibrary/ItemsService.cs
index 22149df861..7f80f75acf 100644
--- a/MediaBrowser.Api/UserLibrary/ItemsService.cs
+++ b/MediaBrowser.Api/UserLibrary/ItemsService.cs
@@ -446,7 +446,7 @@ namespace MediaBrowser.Api.UserLibrary
return items.Where(item => item.IsPlayed(currentUser));
case ItemFilter.IsUnplayed:
- return items.Where(item => !item.IsPlayed(currentUser));
+ return items.Where(item => item.IsUnplayed(currentUser));
case ItemFilter.IsFolder:
return items.Where(item => item.IsFolder);
diff --git a/MediaBrowser.Controller/Entities/BaseItem.cs b/MediaBrowser.Controller/Entities/BaseItem.cs
index 0fc4f10f19..58d5f1b942 100644
--- a/MediaBrowser.Controller/Entities/BaseItem.cs
+++ b/MediaBrowser.Controller/Entities/BaseItem.cs
@@ -1713,5 +1713,12 @@ namespace MediaBrowser.Controller.Entities
return userdata != null && userdata.Played;
}
+
+ public virtual bool IsUnplayed(User user)
+ {
+ var userdata = UserDataManager.GetUserData(user.Id, GetUserDataKey());
+
+ return userdata == null || !userdata.Played;
+ }
}
}
diff --git a/MediaBrowser.Controller/Entities/Folder.cs b/MediaBrowser.Controller/Entities/Folder.cs
index 7910e99571..a0fefeac77 100644
--- a/MediaBrowser.Controller/Entities/Folder.cs
+++ b/MediaBrowser.Controller/Entities/Folder.cs
@@ -1090,5 +1090,11 @@ namespace MediaBrowser.Controller.Entities
return GetRecursiveChildren(user).Where(i => !i.IsFolder && i.LocationType != LocationType.Virtual)
.All(i => i.IsPlayed(user));
}
+
+ public override bool IsUnplayed(User user)
+ {
+ return GetRecursiveChildren(user).Where(i => !i.IsFolder && i.LocationType != LocationType.Virtual)
+ .All(i => i.IsUnplayed(user));
+ }
}
}
diff --git a/MediaBrowser.Model/Configuration/ServerConfiguration.cs b/MediaBrowser.Model/Configuration/ServerConfiguration.cs
index 281f1350c4..ad65f79b6e 100644
--- a/MediaBrowser.Model/Configuration/ServerConfiguration.cs
+++ b/MediaBrowser.Model/Configuration/ServerConfiguration.cs
@@ -233,7 +233,7 @@ namespace MediaBrowser.Model.Configuration
public ServerConfiguration()
: base()
{
- MediaEncodingQuality = EncodingQuality.HighSpeed;
+ MediaEncodingQuality = EncodingQuality.Auto;
ImageSavingConvention = ImageSavingConvention.Compatible;
HttpServerPortNumber = 8096;
LegacyWebSocketPortNumber = 8945;
diff --git a/MediaBrowser.Server.Implementations/Sorting/IsUnplayedComparer.cs b/MediaBrowser.Server.Implementations/Sorting/IsUnplayedComparer.cs
index 6c757a8a3f..e3053155f5 100644
--- a/MediaBrowser.Server.Implementations/Sorting/IsUnplayedComparer.cs
+++ b/MediaBrowser.Server.Implementations/Sorting/IsUnplayedComparer.cs
@@ -1,6 +1,5 @@
using MediaBrowser.Controller.Entities;
using MediaBrowser.Controller.Library;
-using MediaBrowser.Controller.Persistence;
using MediaBrowser.Controller.Sorting;
using MediaBrowser.Model.Querying;
@@ -32,7 +31,7 @@ namespace MediaBrowser.Server.Implementations.Sorting
/// DateTime.
private int GetValue(BaseItem x)
{
- return x.IsPlayed(User) ? 1 : 0;
+ return x.IsUnplayed(User) ? 0 : 1;
}
///