private void Refresh()
{
var trustSignatures = new HashSet<string>();
{
var linkItems = new HashSet<LinkItem>();
foreach (var leaderSignature in Settings.Instance.Global_TrustSignatures.ToArray())
{
var targetLinkItems = new List<LinkItem>();
var targetSignatures = new HashSet<string>();
var checkedSignatures = new HashSet<string>();
targetSignatures.Add(leaderSignature);
for (int i = 0; i < 32; i++)
{
var tempLinkItems = this.GetLinkItems(targetSignatures).ToList();
if (tempLinkItems.Count == 0) break;
checkedSignatures.UnionWith(targetSignatures);
checkedSignatures.UnionWith(tempLinkItems.SelectMany(n => n.DeleteSignatures));
targetSignatures.Clear();
targetSignatures.UnionWith(tempLinkItems.SelectMany(n => n.TrustSignatures).Where(n => !checkedSignatures.Contains(n)));
targetLinkItems.AddRange(tempLinkItems);
if (targetLinkItems.Count > 1024 * 32) goto End;
}
End:;
linkItems.UnionWith(targetLinkItems.Take(1024 * 32));
}
lock (_cache_LinkItems.ThisLock)
{
_cache_LinkItems.Clear();
foreach (var linkItem in linkItems)
{
_cache_LinkItems.Add(linkItem.Signature, linkItem);
}
}
trustSignatures.UnionWith(linkItems.Select(n => n.Signature).ToArray());
}
{
Inspect.SetTrustSignatures(trustSignatures);
_amoebaManager.SetTrustSignatures(trustSignatures);
foreach (var signature in Settings.Instance.Cache_Links.Keys.ToArray())
{
if (!trustSignatures.Contains(signature)) Settings.Instance.Cache_Links.Remove(signature);
}
foreach (var signature in Settings.Instance.Cache_Profiles.Keys.ToArray())
{
if (!trustSignatures.Contains(signature)) Settings.Instance.Cache_Profiles.Remove(signature);
}
foreach (var signature in Settings.Instance.Cache_Stores.Keys.ToArray())
{
if (!trustSignatures.Contains(signature)) Settings.Instance.Cache_Stores.Remove(signature);
}
}
}