public IEnumerable <Clan> GetAllRecent(bool throwOnError = false) { lock (_clansLock) { if ((_clans != null) && (_clans.Count > 0)) { Log.Debug("Aproveitando clãs em cache."); return(_clans.Values); } var di = new DirectoryInfo(Path.Combine(_dataDirectory, "Clans")); var fis = di.EnumerateFiles("clan.*.json").Where(fi => fi.Length > 100); var allClans = fis .Select(fi => Clan.FromFile(fi.FullName, throwOnError)).Where(c => !c.IsOnError).ToList(); var duplicates = new HashSet <string>(allClans.GroupBy(c => c.ClanTag).Where(g => g.Count() > 1) .Select(g => g.Key)); _clans = allClans.Where(c => !duplicates.Contains(c.ClanTag)).ToDictionary(c => c.ClanTag); Log.DebugFormat("Colocados {0} clãs em cache.", _clans.Count); return(_clans.Values); } }
public Clan GetClan(string clanTag, bool throwOnError = true) { lock (_clansLock) { if (_clans != null && _clans.TryGetValue(clanTag, out var clan)) { Log.DebugFormat("Cache hit para {0}", clanTag); return(clan); } Log.DebugFormat("Cache miss para {0}", clanTag); } var fileName = Path.Combine(_dataDirectory, "Clans", $"clan.{clanTag}.json"); return(!File.Exists(fileName) ? null : Clan.FromFile(fileName)); }