blob: 9f8f1c6279444804b27c4e74f2661c70191722f4 (
plain)
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
|
using Microsoft.AspNetCore.Hosting;
using SixLabors.ImageSharp;
using System.IO;
using System.Threading.Tasks;
using Timeline.Helpers.Cache;
using Timeline.Models;
using Timeline.Services.Data;
namespace Timeline.Services.User.Avatar
{
// TODO! : Make this configurable.
public class DefaultUserAvatarProvider : IDefaultUserAvatarProvider
{
private readonly IETagGenerator _eTagGenerator;
private readonly string _avatarPath;
private CacheableDataDigest? _cacheDigest;
private ByteData? _cacheData;
public DefaultUserAvatarProvider(IWebHostEnvironment environment, IETagGenerator eTagGenerator)
{
_avatarPath = Path.Combine(environment.ContentRootPath, "default-avatar.png");
_eTagGenerator = eTagGenerator;
}
private async Task CheckAndInit()
{
var path = _avatarPath;
if (_cacheData == null || File.GetLastWriteTime(path) > _cacheDigest!.LastModified)
{
var data = await File.ReadAllBytesAsync(path);
_cacheDigest = new CacheableDataDigest(await _eTagGenerator.GenerateETagAsync(data), File.GetLastWriteTime(path));
Image.Identify(data, out var format);
_cacheData = new ByteData(data, format.DefaultMimeType);
}
}
public async Task<ICacheableDataDigest> GetDefaultAvatarDigest()
{
await CheckAndInit();
return _cacheDigest!;
}
public async Task<ByteData> GetDefaultAvatar()
{
await CheckAndInit();
return _cacheData!;
}
}
}
|