diff --git a/MediaBrowser.Controller/Entities/UserItemData.cs b/MediaBrowser.Controller/Entities/UserItemData.cs
index c039f40149..3bc16a1689 100644
--- a/MediaBrowser.Controller/Entities/UserItemData.cs
+++ b/MediaBrowser.Controller/Entities/UserItemData.cs
@@ -17,13 +17,13 @@ namespace MediaBrowser.Controller.Entities
///
/// The _rating
///
- private float? _rating;
+ private double? _rating;
///
/// Gets or sets the users 0-10 rating
///
/// The rating.
/// Rating;A 0 to 10 rating is required for UserItemData.
- public float? Rating
+ public double? Rating
{
get
{
diff --git a/MediaBrowser.Model/DTO/UserItemDataDto.cs b/MediaBrowser.Model/DTO/UserItemDataDto.cs
index 96e270f21e..e1b534eb12 100644
--- a/MediaBrowser.Model/DTO/UserItemDataDto.cs
+++ b/MediaBrowser.Model/DTO/UserItemDataDto.cs
@@ -12,7 +12,7 @@ namespace MediaBrowser.Model.Dto
/// Gets or sets the rating.
///
/// The rating.
- public float? Rating { get; set; }
+ public double? Rating { get; set; }
///
/// Gets or sets the playback position ticks.
diff --git a/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs b/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs
index 4e3f17750b..8a4c910f2b 100644
--- a/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs
+++ b/MediaBrowser.Server.Implementations/Sqlite/SQLiteUserDataRepository.cs
@@ -94,8 +94,9 @@ namespace MediaBrowser.Server.Implementations.Sqlite
string[] queries = {
- "create table if not exists userdata (key nvarchar, userId GUID, data BLOB)",
- "create unique index if not exists userdataindex on userdata (key, userId)",
+ "create table if not exists useritemdata (key nvarchar, userId GUID, Rating float null, PlaybackPositionTicks bigint, PlayCount int, IsFavorite bit, Played bit, LastPlayedDate bigint null)",
+ "create unique index if not exists useritemdataindex on useritemdata (key, userId)",
+
"create table if not exists schema_version (table_name primary key, version)",
//pragmas
"pragma temp_store = memory"
@@ -180,16 +181,26 @@ namespace MediaBrowser.Server.Implementations.Sqlite
{
cancellationToken.ThrowIfCancellationRequested();
- var serialized = _jsonSerializer.SerializeToBytes(userData);
-
- cancellationToken.ThrowIfCancellationRequested();
-
using (var cmd = connection.CreateCommand())
{
- cmd.CommandText = "replace into userdata (key, userId, data) values (@1, @2, @3)";
+ cmd.CommandText = "replace into useritemdata (key, userId, Rating,PlaybackPositionTicks,PlayCount,IsFavorite,Played,LastPlayedDate) values (@1, @2, @3, @4, @5, @6, @7, @8)";
cmd.AddParam("@1", key);
cmd.AddParam("@2", userId);
- cmd.AddParam("@3", serialized);
+
+ cmd.AddParam("@3", userData.Rating);
+ cmd.AddParam("@4", userData.PlaybackPositionTicks);
+ cmd.AddParam("@5", userData.PlayCount);
+ cmd.AddParam("@6", userData.IsFavorite);
+ cmd.AddParam("@7", userData.Played);
+
+ if (userData.LastPlayedDate.HasValue)
+ {
+ cmd.AddParam("@8", userData.LastPlayedDate.Value.Ticks);
+ }
+ else
+ {
+ cmd.AddParam("@8", null);
+ }
using (var tran = connection.BeginTransaction())
{
@@ -249,7 +260,7 @@ namespace MediaBrowser.Server.Implementations.Sqlite
{
using (var cmd = connection.CreateCommand())
{
- cmd.CommandText = "select data from userdata where key = @key and userId=@userId";
+ cmd.CommandText = "select Rating,PlaybackPositionTicks,PlayCount,IsFavorite,Played,LastPlayedDate from useritemdata where key = @key and userId=@userId";
var idParam = cmd.Parameters.Add("@key", DbType.String);
idParam.Value = key;
@@ -257,18 +268,31 @@ namespace MediaBrowser.Server.Implementations.Sqlite
var userIdParam = cmd.Parameters.Add("@userId", DbType.Guid);
userIdParam.Value = userId;
+ var userdata = new UserItemData();
+
using (var reader = await cmd.ExecuteReaderAsync(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult | CommandBehavior.SingleRow).ConfigureAwait(false))
{
if (reader.Read())
{
- using (var stream = GetStream(reader, 0))
+ if (!reader.IsDBNull(0))
+ {
+ userdata.Rating = reader.GetDouble(0);
+ }
+ userdata.PlaybackPositionTicks = reader.GetInt64(1);
+ userdata.PlayCount = reader.GetInt32(2);
+ userdata.IsFavorite = reader.GetBoolean(3);
+ userdata.Played = reader.GetBoolean(4);
+
+ var ticks = (long?) reader.GetValue(5);
+
+ if (ticks.HasValue)
{
- return _jsonSerializer.DeserializeFromStream(stream);
+ userdata.LastPlayedDate = new DateTime(ticks.Value);
}
}
}
- return new UserItemData();
+ return userdata;
}
}
}