aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Persistence
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations/Persistence')
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/MediaStreamColumns.cs32
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs183
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs13
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteUserRepository.cs7
4 files changed, 218 insertions, 17 deletions
diff --git a/MediaBrowser.Server.Implementations/Persistence/MediaStreamColumns.cs b/MediaBrowser.Server.Implementations/Persistence/MediaStreamColumns.cs
index f54e702d64..c983dd5470 100644
--- a/MediaBrowser.Server.Implementations/Persistence/MediaStreamColumns.cs
+++ b/MediaBrowser.Server.Implementations/Persistence/MediaStreamColumns.cs
@@ -27,6 +27,38 @@ namespace MediaBrowser.Server.Implementations.Persistence
AddIsCabacColumn();
AddKeyFramesColumn();
AddRefFramesCommand();
+ AddCodecTagColumn();
+ }
+
+ private void AddCodecTagColumn()
+ {
+ using (var cmd = _connection.CreateCommand())
+ {
+ cmd.CommandText = "PRAGMA table_info(mediastreams)";
+
+ using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult))
+ {
+ while (reader.Read())
+ {
+ if (!reader.IsDBNull(1))
+ {
+ var name = reader.GetString(1);
+
+ if (string.Equals(name, "CodecTag", StringComparison.OrdinalIgnoreCase))
+ {
+ return;
+ }
+ }
+ }
+ }
+ }
+
+ var builder = new StringBuilder();
+
+ builder.AppendLine("alter table mediastreams");
+ builder.AppendLine("add column CodecTag TEXT");
+
+ _connection.RunQueries(new[] { builder.ToString() }, _logger);
}
private void AddPixelFormatColumnCommand()
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
index dcf94f737d..167c96185d 100644
--- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
+++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
@@ -19,6 +19,7 @@ using System.Runtime.Serialization;
using System.Threading;
using System.Threading.Tasks;
using MediaBrowser.Controller.Channels;
+using MediaBrowser.Model.LiveTv;
namespace MediaBrowser.Server.Implementations.Persistence
{
@@ -76,7 +77,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
private IDbCommand _deleteStreamsCommand;
private IDbCommand _saveStreamCommand;
- private const int LatestSchemaVersion = 13;
+ private const int LatestSchemaVersion = 17;
/// <summary>
/// Initializes a new instance of the <see cref="SqliteItemRepository"/> class.
@@ -121,7 +122,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
_connection = await SqliteExtensions.ConnectToDb(dbFile, _logger).ConfigureAwait(false);
var createMediaStreamsTableCommand
- = "create table if not exists mediastreams (ItemId GUID, StreamIndex INT, StreamType TEXT, Codec TEXT, Language TEXT, ChannelLayout TEXT, Profile TEXT, AspectRatio TEXT, Path TEXT, IsInterlaced BIT, BitRate INT NULL, Channels INT NULL, SampleRate INT NULL, IsDefault BIT, IsForced BIT, IsExternal BIT, Height INT NULL, Width INT NULL, AverageFrameRate FLOAT NULL, RealFrameRate FLOAT NULL, Level FLOAT NULL, PixelFormat TEXT, BitDepth INT NULL, IsAnamorphic BIT NULL, RefFrames INT NULL, IsCabac BIT NULL, KeyFrames TEXT NULL, PRIMARY KEY (ItemId, StreamIndex))";
+ = "create table if not exists mediastreams (ItemId GUID, StreamIndex INT, StreamType TEXT, Codec TEXT, Language TEXT, ChannelLayout TEXT, Profile TEXT, AspectRatio TEXT, Path TEXT, IsInterlaced BIT, BitRate INT NULL, Channels INT NULL, SampleRate INT NULL, IsDefault BIT, IsForced BIT, IsExternal BIT, Height INT NULL, Width INT NULL, AverageFrameRate FLOAT NULL, RealFrameRate FLOAT NULL, Level FLOAT NULL, PixelFormat TEXT, BitDepth INT NULL, IsAnamorphic BIT NULL, RefFrames INT NULL, IsCabac BIT NULL, KeyFrames TEXT NULL, CodecTag TEXT NULL, PRIMARY KEY (ItemId, StreamIndex))";
string[] queries = {
@@ -198,6 +199,13 @@ namespace MediaBrowser.Server.Implementations.Persistence
_connection.AddColumn(_logger, "TypedBaseItems", "ExternalEtag", "Text");
_connection.AddColumn(_logger, "TypedBaseItems", "DateLastRefreshed", "DATETIME");
+ _connection.AddColumn(_logger, "TypedBaseItems", "DateLastSaved", "DATETIME");
+ _connection.AddColumn(_logger, "TypedBaseItems", "IsInMixedFolder", "BIT");
+ _connection.AddColumn(_logger, "TypedBaseItems", "LockedFields", "Text");
+ _connection.AddColumn(_logger, "TypedBaseItems", "Studios", "Text");
+ _connection.AddColumn(_logger, "TypedBaseItems", "Audio", "Text");
+ _connection.AddColumn(_logger, "TypedBaseItems", "ExternalServiceId", "Text");
+
PrepareStatements();
new MediaStreamColumns(_connection, _logger).AddColumns();
@@ -307,7 +315,27 @@ namespace MediaBrowser.Server.Implementations.Persistence
"PreferredMetadataCountryCode",
"IsHD",
"ExternalEtag",
- "DateLastRefreshed"
+ "DateLastRefreshed",
+ "Name",
+ "Path",
+ "PremiereDate",
+ "Overview",
+ "ParentIndexNumber",
+ "ProductionYear",
+ "OfficialRating",
+ "OfficialRatingDescription",
+ "HomePageUrl",
+ "DisplayMediaType",
+ "ForcedSortName",
+ "RunTimeTicks",
+ "VoteCount",
+ "DateCreated",
+ "DateModified",
+ "guid",
+ "Genres",
+ "ParentId",
+ "Audio",
+ "ExternalServiceId"
};
private readonly string[] _mediaStreamSaveColumns =
@@ -338,7 +366,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
"IsAnamorphic",
"RefFrames",
"IsCabac",
- "KeyFrames"
+ "KeyFrames",
+ "CodecTag"
};
/// <summary>
@@ -394,7 +423,13 @@ namespace MediaBrowser.Server.Implementations.Persistence
"PreferredMetadataCountryCode",
"IsHD",
"ExternalEtag",
- "DateLastRefreshed"
+ "DateLastRefreshed",
+ "DateLastSaved",
+ "IsInMixedFolder",
+ "LockedFields",
+ "Studios",
+ "Audio",
+ "ExternalServiceId"
};
_saveItemCommand = _connection.CreateCommand();
_saveItemCommand.CommandText = "replace into TypedBaseItems (" + string.Join(",", saveColumns.ToArray()) + ") values (";
@@ -623,6 +658,30 @@ namespace MediaBrowser.Server.Implementations.Persistence
_saveItemCommand.GetParameter(index++).Value = item.DateLastRefreshed;
}
+ _saveItemCommand.GetParameter(index++).Value = item.DateLastSaved;
+ _saveItemCommand.GetParameter(index++).Value = item.IsInMixedFolder;
+ _saveItemCommand.GetParameter(index++).Value = string.Join("|", item.LockedFields.Select(i => i.ToString()).ToArray());
+ _saveItemCommand.GetParameter(index++).Value = string.Join("|", item.Studios.ToArray());
+
+ if (item.Audio.HasValue)
+ {
+ _saveItemCommand.GetParameter(index++).Value = item.Audio.Value.ToString();
+ }
+ else
+ {
+ _saveItemCommand.GetParameter(index++).Value = null;
+ }
+
+ var tvItem = item as ILiveTvItem;
+ if (tvItem != null)
+ {
+ _saveItemCommand.GetParameter(index++).Value = tvItem.ServiceName;
+ }
+ else
+ {
+ _saveItemCommand.GetParameter(index++).Value = null;
+ }
+
_saveItemCommand.Transaction = transaction;
_saveItemCommand.ExecuteNonQuery();
@@ -844,6 +903,107 @@ namespace MediaBrowser.Server.Implementations.Persistence
item.DateLastRefreshed = reader.GetDateTime(23).ToUniversalTime();
}
+ if (!reader.IsDBNull(24))
+ {
+ item.Name = reader.GetString(24);
+ }
+
+ if (!reader.IsDBNull(25))
+ {
+ item.Path = reader.GetString(25);
+ }
+
+ if (!reader.IsDBNull(26))
+ {
+ item.PremiereDate = reader.GetDateTime(26).ToUniversalTime();
+ }
+
+ if (!reader.IsDBNull(27))
+ {
+ item.Overview = reader.GetString(27);
+ }
+
+ if (!reader.IsDBNull(28))
+ {
+ item.ParentIndexNumber = reader.GetInt32(28);
+ }
+
+ if (!reader.IsDBNull(29))
+ {
+ item.ProductionYear = reader.GetInt32(29);
+ }
+
+ if (!reader.IsDBNull(30))
+ {
+ item.OfficialRating = reader.GetString(30);
+ }
+
+ if (!reader.IsDBNull(31))
+ {
+ item.OfficialRating = reader.GetString(31);
+ }
+
+ if (!reader.IsDBNull(32))
+ {
+ item.HomePageUrl = reader.GetString(32);
+ }
+
+ if (!reader.IsDBNull(33))
+ {
+ item.DisplayMediaType = reader.GetString(33);
+ }
+
+ if (!reader.IsDBNull(34))
+ {
+ item.ForcedSortName = reader.GetString(34);
+ }
+
+ if (!reader.IsDBNull(35))
+ {
+ item.RunTimeTicks = reader.GetInt64(35);
+ }
+
+ if (!reader.IsDBNull(36))
+ {
+ item.VoteCount = reader.GetInt32(36);
+ }
+
+ if (!reader.IsDBNull(37))
+ {
+ item.DateCreated = reader.GetDateTime(37).ToUniversalTime();
+ }
+
+ if (!reader.IsDBNull(38))
+ {
+ item.DateModified = reader.GetDateTime(38).ToUniversalTime();
+ }
+
+ item.Id = reader.GetGuid(39);
+
+ if (!reader.IsDBNull(40))
+ {
+ item.Genres = reader.GetString(40).Split('|').Where(i => !string.IsNullOrWhiteSpace(i)).ToList();
+ }
+
+ if (!reader.IsDBNull(41))
+ {
+ item.ParentId = reader.GetGuid(41);
+ }
+
+ if (!reader.IsDBNull(42))
+ {
+ item.Audio = (ProgramAudio)Enum.Parse(typeof(ProgramAudio), reader.GetString(42), true);
+ }
+
+ if (!reader.IsDBNull(43))
+ {
+ var tvItem = item as ILiveTvItem;
+ if (tvItem != null)
+ {
+ item.ForcedSortName = reader.GetString(43);
+ }
+ }
+
return item;
}
@@ -1572,6 +1732,12 @@ namespace MediaBrowser.Server.Implementations.Persistence
cmd.Parameters.Add(cmd, "@MinStartDate", DbType.Date).Value = query.MinStartDate.Value;
}
+ if (query.MinPremiereDate.HasValue)
+ {
+ whereClauses.Add("PremiereDate>=@MinPremiereDate");
+ cmd.Parameters.Add(cmd, "@MinPremiereDate", DbType.Date).Value = query.MinPremiereDate.Value;
+ }
+
if (query.MaxStartDate.HasValue)
{
whereClauses.Add("StartDate<=@MaxStartDate");
@@ -2227,6 +2393,8 @@ namespace MediaBrowser.Server.Implementations.Persistence
_saveStreamCommand.GetParameter(index++).Value = string.Join(",", stream.KeyFrames.Select(i => i.ToString(CultureInfo.InvariantCulture)).ToArray());
}
+ _saveStreamCommand.GetParameter(index++).Value = stream.CodecTag;
+
_saveStreamCommand.Transaction = transaction;
_saveStreamCommand.ExecuteNonQuery();
}
@@ -2388,6 +2556,11 @@ namespace MediaBrowser.Server.Implementations.Persistence
}
}
+ if (!reader.IsDBNull(27))
+ {
+ item.CodecTag = reader.GetString(27);
+ }
+
return item;
}
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs
index e7853b4580..a63b93dc78 100644
--- a/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs
+++ b/MediaBrowser.Server.Implementations/Persistence/SqliteProviderInfoRepository.cs
@@ -47,7 +47,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
string[] queries = {
- "create table if not exists MetadataStatus (ItemId GUID PRIMARY KEY, ItemName TEXT, ItemType TEXT, SeriesName TEXT, DateLastMetadataRefresh datetime, DateLastImagesRefresh datetime, LastErrorMessage TEXT, ItemDateModified DateTimeNull)",
+ "create table if not exists MetadataStatus (ItemId GUID PRIMARY KEY, ItemName TEXT, ItemType TEXT, SeriesName TEXT, DateLastMetadataRefresh datetime, DateLastImagesRefresh datetime, ItemDateModified DateTimeNull)",
"create index if not exists idx_MetadataStatus on MetadataStatus(ItemId)",
//pragmas
@@ -71,7 +71,6 @@ namespace MediaBrowser.Server.Implementations.Persistence
"SeriesName",
"DateLastMetadataRefresh",
"DateLastImagesRefresh",
- "LastErrorMessage",
"ItemDateModified"
};
@@ -185,12 +184,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
if (!reader.IsDBNull(6))
{
- result.LastErrorMessage = reader.GetString(6);
- }
-
- if (!reader.IsDBNull(7))
- {
- result.ItemDateModified = reader.GetDateTime(7).ToUniversalTime();
+ result.ItemDateModified = reader.GetDateTime(6).ToUniversalTime();
}
return result;
@@ -219,8 +213,7 @@ namespace MediaBrowser.Server.Implementations.Persistence
_saveStatusCommand.GetParameter(3).Value = status.SeriesName;
_saveStatusCommand.GetParameter(4).Value = status.DateLastMetadataRefresh;
_saveStatusCommand.GetParameter(5).Value = status.DateLastImagesRefresh;
- _saveStatusCommand.GetParameter(6).Value = status.LastErrorMessage;
- _saveStatusCommand.GetParameter(7).Value = status.ItemDateModified;
+ _saveStatusCommand.GetParameter(6).Value = status.ItemDateModified;
_saveStatusCommand.Transaction = transaction;
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteUserRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteUserRepository.cs
index ad784ae5d6..9bd7e47f39 100644
--- a/MediaBrowser.Server.Implementations/Persistence/SqliteUserRepository.cs
+++ b/MediaBrowser.Server.Implementations/Persistence/SqliteUserRepository.cs
@@ -144,15 +144,18 @@ namespace MediaBrowser.Server.Implementations.Persistence
{
using (var cmd = _connection.CreateCommand())
{
- cmd.CommandText = "select data from users";
+ cmd.CommandText = "select guid,data from users";
using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult))
{
while (reader.Read())
{
- using (var stream = reader.GetMemoryStream(0))
+ var id = reader.GetGuid(0);
+
+ using (var stream = reader.GetMemoryStream(1))
{
var user = _jsonSerializer.DeserializeFromStream<User>(stream);
+ user.Id = id;
yield return user;
}
}