aboutsummaryrefslogtreecommitdiff
path: root/BackEnd/Timeline/Services/User/Avatar/DefaultUserAvatarProvider.cs
diff options
context:
space:
mode:
authorcrupest <crupest@outlook.com>2021-04-27 19:37:11 +0800
committercrupest <crupest@outlook.com>2021-04-27 19:37:11 +0800
commite619eac394b4e1c7a3cb0c5902b2776314c7b979 (patch)
tree8f082eedd694d74a1e9944e30ca9d1b3b6ec3f5a /BackEnd/Timeline/Services/User/Avatar/DefaultUserAvatarProvider.cs
parenta665f5d894539cae5f4188e4a72ea9634b8c4ed0 (diff)
downloadtimeline-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.cs51
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!;
+ }
+ }
+}