public SearchImagesService() { _rng = new Random(); _http = new HttpClient(); _http.AddFakeHeaders(); _cache = new SearchImageCacher(); _db = new ServiceDb <SearchImageContext>(SearchImageContext.BaseOptions.Build()); using (var uow = _db.GetDbContext()) { _blacklistedTags = new ConcurrentDictionary <ulong, HashSet <string> >(uow.BlacklistedTags .ToDictionary(x => x.GuildId, x => new HashSet <string>(x.Tags))); } }
public override Task <BlacklistTagReply> ToggleBlacklistTag(BlacklistTagMessage request, ServerCallContext context) { lock (taglock) { var tag = request.Tag.Trim().ToLowerInvariant(); var blacklistedTags = _blacklistedTags.GetOrAdd(request.GuildId, new HashSet <string>()); var isAdded = blacklistedTags.Add(tag); if (!isAdded) { blacklistedTags.Remove(tag); } var tagArr = blacklistedTags.ToArray(); using (var uow = _db.GetDbContext()) { var bt = uow.BlacklistedTags.FirstOrDefault(x => x.GuildId == request.GuildId); if (bt is null) { uow.BlacklistedTags.Add(new Common.Db.Models.BlacklistedTags { GuildId = request.GuildId, Tags = tagArr }); } else { bt.Tags = tagArr; } uow.SaveChanges(); } return(Task.FromResult(new BlacklistTagReply { IsAdded = isAdded })); } }