aboutsummaryrefslogtreecommitdiff
path: root/MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs
diff options
context:
space:
mode:
Diffstat (limited to 'MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs')
-rw-r--r--MediaBrowser.Server.Implementations/Persistence/SqliteItemRepository.cs59
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)