a575963da9
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
76 lines
1.4 KiB
C#
76 lines
1.4 KiB
C#
using System;
|
|
using System.IO;
|
|
|
|
namespace Monodoc.Caches
|
|
{
|
|
public class FileCache : IDocCache
|
|
{
|
|
string baseCacheDir;
|
|
|
|
public FileCache (string baseCacheDir)
|
|
{
|
|
this.baseCacheDir = baseCacheDir;
|
|
if (!Directory.Exists (baseCacheDir))
|
|
Directory.CreateDirectory (baseCacheDir);
|
|
}
|
|
|
|
public bool IsCached (string id)
|
|
{
|
|
return File.Exists (MakePath (id));
|
|
}
|
|
|
|
public bool CanCache (DocEntity entity)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
public Stream GetCachedStream (string id)
|
|
{
|
|
return File.OpenRead (MakePath (id));
|
|
}
|
|
|
|
public string GetCachedString (string id)
|
|
{
|
|
return File.ReadAllText (MakePath (id));
|
|
}
|
|
|
|
public void CacheText (string id, string content)
|
|
{
|
|
File.WriteAllText (MakePath (id), content);
|
|
}
|
|
|
|
public void CacheText (string id, Stream stream)
|
|
{
|
|
using (var file = File.OpenWrite (MakePath (id)))
|
|
stream.CopyTo (file);
|
|
}
|
|
|
|
public void CacheBlob (string id, byte[] data)
|
|
{
|
|
File.WriteAllBytes (MakePath (id), data);
|
|
}
|
|
|
|
public void CacheBlob (string id, Stream stream)
|
|
{
|
|
using (var file = File.OpenWrite (MakePath (id)))
|
|
stream.CopyTo (file);
|
|
}
|
|
|
|
string MakePath (string id)
|
|
{
|
|
id = id.Replace (Path.DirectorySeparatorChar, '_');
|
|
return Path.Combine (baseCacheDir, id);
|
|
}
|
|
|
|
public void Dispose ()
|
|
{
|
|
if (!Directory.Exists (baseCacheDir))
|
|
return;
|
|
|
|
try {
|
|
Directory.Delete (baseCacheDir, true);
|
|
} catch {}
|
|
}
|
|
}
|
|
}
|