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);
            }
        }
Esempio n. 2
0
        public async Task <string> RetainEntryAsync(byte[] data, CancellationToken cancellationToken = default)
        {
            if (data == null)
            {
                throw new ArgumentNullException(nameof(data));
            }

            var tag = await _eTagGenerator.GenerateETagAsync(data, cancellationToken);

            var entity = await _database.Data.Where(d => d.Tag == tag).SingleOrDefaultAsync(cancellationToken);

            bool create;


            if (entity == null)
            {
                create = true;
                entity = new DataEntity
                {
                    Tag  = tag,
                    Data = data,
                    Ref  = 1
                };
                _database.Data.Add(entity);
            }
            else
            {
                create      = false;
                entity.Ref += 1;
            }

            await _database.SaveChangesAsync(cancellationToken);

            _logger.LogInformation(create ? Resource.LogDataManagerRetainEntryCreate : Resource.LogDataManagerRetainEntryAddRefCount, tag);

            return(tag);
        }