Add autoconf checks for platforms without IPv6
[mono.git] / mcs / class / monodoc / Monodoc / caches / FileCache.cs
1 using System;
2 using System.IO;
3
4 namespace Monodoc.Caches
5 {
6         public class FileCache : IDocCache
7         {
8                 string baseCacheDir;
9
10                 public FileCache (string baseCacheDir)
11                 {
12                         this.baseCacheDir = baseCacheDir;
13                         if (!Directory.Exists (baseCacheDir))
14                                 Directory.CreateDirectory (baseCacheDir);
15                 }
16
17                 public bool IsCached (string id)
18                 {
19                         return File.Exists (MakePath (id));
20                 }
21
22                 public bool CanCache (DocEntity entity)
23                 {
24                         return true;
25                 }
26
27                 public Stream GetCachedStream (string id)
28                 {
29                         return File.OpenRead (MakePath (id));
30                 }
31
32                 public string GetCachedString (string id)
33                 {
34                         return File.ReadAllText (MakePath (id));
35                 }
36
37                 public void CacheText (string id, string content)
38                 {
39                         File.WriteAllText (MakePath (id), content);
40                 }
41
42                 public void CacheText (string id, Stream stream)
43                 {
44                         using (var file = File.OpenWrite (MakePath (id)))
45                                 stream.CopyTo (file);
46                 }
47
48                 public void CacheBlob (string id, byte[] data)
49                 {
50                         File.WriteAllBytes (MakePath (id), data);
51                 }
52
53                 public void CacheBlob (string id, Stream stream)
54                 {
55                         using (var file = File.OpenWrite (MakePath (id)))
56                                 stream.CopyTo (file);
57                 }
58
59                 string MakePath (string id)
60                 {
61                         id = id.Replace (Path.DirectorySeparatorChar, '_');
62                         return Path.Combine (baseCacheDir, id);
63                 }
64
65                 public void Dispose ()
66                 {
67                         if (!Directory.Exists (baseCacheDir))
68                                 return;
69
70                         try {
71                                 Directory.Delete (baseCacheDir, true);
72                         } catch {}
73                 }
74         }
75 }