diff options
author | crupest <crupest@outlook.com> | 2021-04-27 19:37:11 +0800 |
---|---|---|
committer | crupest <crupest@outlook.com> | 2021-04-27 19:37:11 +0800 |
commit | e619eac394b4e1c7a3cb0c5902b2776314c7b979 (patch) | |
tree | 8f082eedd694d74a1e9944e30ca9d1b3b6ec3f5a /BackEnd/Timeline/Services/User/Avatar/DefaultUserAvatarProvider.cs | |
parent | a665f5d894539cae5f4188e4a72ea9634b8c4ed0 (diff) | |
download | timeline-e619eac394b4e1c7a3cb0c5902b2776314c7b979.tar.gz timeline-e619eac394b4e1c7a3cb0c5902b2776314c7b979.tar.bz2 timeline-e619eac394b4e1c7a3cb0c5902b2776314c7b979.zip |
refactor: ...
Diffstat (limited to 'BackEnd/Timeline/Services/User/Avatar/DefaultUserAvatarProvider.cs')
-rw-r--r-- | BackEnd/Timeline/Services/User/Avatar/DefaultUserAvatarProvider.cs | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/BackEnd/Timeline/Services/User/Avatar/DefaultUserAvatarProvider.cs b/BackEnd/Timeline/Services/User/Avatar/DefaultUserAvatarProvider.cs new file mode 100644 index 00000000..9f8f1c62 --- /dev/null +++ b/BackEnd/Timeline/Services/User/Avatar/DefaultUserAvatarProvider.cs @@ -0,0 +1,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!;
+ }
+ }
+}
|