non-working cached repository.

pull/6/head
Keivan Beigi 12 years ago
parent 23e9c725f3
commit 5b2410da3f

@ -1,4 +1,5 @@
using System; using System;
using System.Collections.Generic;
using NzbDrone.Common.EnsureThat; using NzbDrone.Common.EnsureThat;
namespace NzbDrone.Common.Cache namespace NzbDrone.Common.Cache
@ -7,15 +8,18 @@ namespace NzbDrone.Common.Cache
{ {
ICached<T> GetCache<T>(Type host, string name); ICached<T> GetCache<T>(Type host, string name);
ICached<T> GetCache<T>(Type host); ICached<T> GetCache<T>(Type host);
//ICollection<ICached<T>> Caches<T> { get;}
void Clear();
ICollection<ICached> Caches { get; }
} }
public class CacheManger : ICacheManger public class CacheManger : ICacheManger
{ {
private readonly ICached<object> _cache; private readonly ICached<ICached> _cache;
public CacheManger() public CacheManger()
{ {
_cache = new Cached<object>(); _cache = new Cached<ICached>();
} }
@ -25,6 +29,14 @@ namespace NzbDrone.Common.Cache
return GetCache<T>(host, host.FullName); return GetCache<T>(host, host.FullName);
} }
public void Clear()
{
_cache.Clear();
}
public ICollection<ICached> Caches { get { return _cache.Values; } }
public ICached<T> GetCache<T>(Type host, string name) public ICached<T> GetCache<T>(Type host, string name)
{ {
Ensure.That(() => host).IsNotNull(); Ensure.That(() => host).IsNotNull();

@ -64,5 +64,20 @@ namespace NzbDrone.Common.Cache
T value; T value;
_store.TryRemove(key, out value); _store.TryRemove(key, out value);
} }
public ICollection<T> Values
{
get
{
return _store.Values;
}
}
public ICollection<string> Keys
{
get
{
return _store.Keys;
}
}
} }
} }

@ -1,15 +1,23 @@
using System; using System;
using System.Collections.Generic;
namespace NzbDrone.Common.Cache namespace NzbDrone.Common.Cache
{ {
public interface ICached<T> public interface ICached
{ {
void Set(string key, T value);
T Get(string key, Func<T> function);
bool ContainsKey(string key); bool ContainsKey(string key);
void Clear(); void Clear();
void Remove(string key); void Remove(string key);
}
public interface ICached<T> : ICached
{
void Set(string key, T value);
T Get(string key, Func<T> function);
T Get(string key); T Get(string key);
T Find(string key); T Find(string key);
ICollection<T> Values { get; }
ICollection<string> Keys { get; }
} }
} }

@ -32,6 +32,7 @@ namespace NzbDrone.Core.Datastore
TModel Single(); TModel Single();
} }
public class BasicRepository<TModel> : IBasicRepository<TModel> where TModel : ModelBase, new() public class BasicRepository<TModel> : IBasicRepository<TModel> where TModel : ModelBase, new()
{ {
private readonly IDatabase _database; private readonly IDatabase _database;
@ -202,6 +203,16 @@ namespace NzbDrone.Core.Datastore
} }
} }
protected virtual void OnModelChanged(IEnumerable<TModel> models)
{
}
protected virtual void OnModelDeleted(IEnumerable<TModel> models)
{
}
protected virtual bool PublishModelEvents protected virtual bool PublishModelEvents
{ {
get { return false; } get { return false; }

@ -0,0 +1,40 @@
using System.Collections.Generic;
using NzbDrone.Common.Cache;
using NzbDrone.Common.Messaging;
namespace NzbDrone.Core.Datastore
{
public abstract class CachedBasicRepository<TModel> : BasicRepository<TModel> where TModel : ModelBase, new()
{
private readonly ICacheManger _cacheManger;
protected CachedBasicRepository(IDatabase database, IMessageAggregator messageAggregator)
: base(database, messageAggregator)
{
_cacheManger = new CacheManger();
}
protected ICached<T> GetCache<T>(string name)
{
return _cacheManger.GetCache<T>(GetType(), name);
}
protected override void OnModelChanged(IEnumerable<TModel> models)
{
PurgeCache();
}
protected override void OnModelDeleted(IEnumerable<TModel> models)
{
PurgeCache();
}
private void PurgeCache()
{
foreach (var model in _cacheManger.Caches)
{
model.Clear();
}
}
}
}

@ -193,6 +193,7 @@
<Compile Include="DataAugmentation\Scene\SceneMappingProxy.cs" /> <Compile Include="DataAugmentation\Scene\SceneMappingProxy.cs" />
<Compile Include="DataAugmentation\Scene\SceneMappingRepository.cs" /> <Compile Include="DataAugmentation\Scene\SceneMappingRepository.cs" />
<Compile Include="DataAugmentation\Scene\UpdateSceneMappingCommand.cs" /> <Compile Include="DataAugmentation\Scene\UpdateSceneMappingCommand.cs" />
<Compile Include="Datastore\CachedBasicRepository.cs" />
<Compile Include="Datastore\Converters\BooleanIntConverter.cs" /> <Compile Include="Datastore\Converters\BooleanIntConverter.cs" />
<Compile Include="Datastore\Converters\QualityIntConverter.cs" /> <Compile Include="Datastore\Converters\QualityIntConverter.cs" />
<Compile Include="Datastore\Converters\Int32Converter.cs" /> <Compile Include="Datastore\Converters\Int32Converter.cs" />

Loading…
Cancel
Save