-
-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathMailDemonDatabaseFileProvider.cs
More file actions
78 lines (68 loc) · 2.61 KB
/
Copy pathMailDemonDatabaseFileProvider.cs
File metadata and controls
78 lines (68 loc) · 2.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.Caching.Memory;
using Microsoft.Extensions.FileProviders;
using Microsoft.Extensions.Primitives;
namespace MailDemon
{
public class MailDemonDatabaseFileProvider : IFileProvider
{
private class PhysicalDirectoryContents : IDirectoryContents
{
private readonly IMailDemonDatabaseProvider dbProvider;
private readonly string dir;
public PhysicalDirectoryContents(IMailDemonDatabaseProvider dbProvider, string dir)
{
this.dbProvider = dbProvider;
this.dir = dir;
}
public bool Exists => Directory.Exists(dir);
public IEnumerator<IFileInfo> GetEnumerator()
{
foreach (string file in Directory.EnumerateFiles(dir, "*.cshtml"))
{
yield return new MailDemonDatabaseFileInfo(dbProvider, dir, Path.GetFileName(file));
}
}
IEnumerator IEnumerable.GetEnumerator()
{
foreach (string file in Directory.EnumerateFiles(dir, "*.cshtml"))
{
yield return new MailDemonDatabaseFileInfo(dbProvider, dir, Path.GetFileName(file));
}
}
}
private readonly IMailDemonDatabaseProvider dbProvider;
private readonly IMemoryCache memoryCache;
private readonly string rootPath;
public MailDemonDatabaseFileProvider(IMailDemonDatabaseProvider dbProvider,
IMemoryCache memoryCache, string rootPath)
{
this.dbProvider = dbProvider;
this.memoryCache = memoryCache;
this.rootPath = rootPath;
}
public IDirectoryContents GetDirectoryContents(string subPath)
{
return new PhysicalDirectoryContents(dbProvider, rootPath);
}
public IFileInfo GetFileInfo(string subPath)
{
var result = new MailDemonDatabaseFileInfo(dbProvider, rootPath, subPath);
return result.Exists ? result as IFileInfo : new NotFoundFileInfo(subPath);
}
public IChangeToken Watch(string filter)
{
filter = filter.Trim(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar);
if (File.Exists(filter))
{
return new MailDemonFileChangeToken(filter);
}
return new MailDemonDatabaseChangeToken(dbProvider, memoryCache, filter);
}
}
}