diff options
Diffstat (limited to 'MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs')
| -rw-r--r-- | MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs | 59 |
1 files changed, 46 insertions, 13 deletions
diff --git a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs index 1098dbf6d..70362654e 100644 --- a/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs +++ b/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs @@ -281,25 +281,30 @@ namespace MediaBrowser.Server.Implementations.Persistence { if (reader.Read()) { - var typeString = reader.GetString(0); + return GetItem(reader); + } + } + return null; + } + } - var type = _typeMapper.GetType(typeString); + private BaseItem GetItem(IDataReader reader) + { + var typeString = reader.GetString(0); - if (type == null) - { - _logger.Debug("Unknown type {0}", typeString); + var type = _typeMapper.GetType(typeString); - return null; - } + if (type == null) + { + _logger.Debug("Unknown type {0}", typeString); - using (var stream = reader.GetMemoryStream(1)) - { - return _jsonSerializer.DeserializeFromStream(stream, type) as BaseItem; - } - } - } return null; } + + using (var stream = reader.GetMemoryStream(1)) + { + return _jsonSerializer.DeserializeFromStream(stream, type) as BaseItem; + } } /// <summary> @@ -468,6 +473,34 @@ namespace MediaBrowser.Server.Implementations.Persistence } } + public IEnumerable<BaseItem> GetItemsOfType(Type type) + { + if (type == null) + { + throw new ArgumentNullException("type"); + } + + using (var cmd = _connection.CreateCommand()) + { + cmd.CommandText = "select type,data from TypedBaseItems where type = @type"; + + cmd.Parameters.Add(cmd, "@type", DbType.String).Value = type.FullName; + + using (var reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess | CommandBehavior.SingleResult)) + { + while (reader.Read()) + { + var item = GetItem(reader); + + if (item != null) + { + yield return item; + } + } + } + } + } + public async Task DeleteItem(Guid id, CancellationToken cancellationToken) { if (id == Guid.Empty) |
