コード例 #1
0
        public RelationSignatureViewModel(TreeViewModelBase parent, RelationSignatureInfo model)
            : base(parent)
        {
            this.Model = model;

            this.Name       = model.ObserveProperty(n => n.Signature).Select(n => n.ToString()).ToReactiveProperty().AddTo(_disposable);
            this.IsSelected = new ReactiveProperty <bool>().AddTo(_disposable);
            this.IsExpanded = new ReactiveProperty <bool>(true).AddTo(_disposable);
            this.Children   = model.Children.ToReadOnlyReactiveCollection(n => new RelationSignatureViewModel(this, n)).AddTo(_disposable);
        }
コード例 #2
0
ファイル: MessageManager.cs プロジェクト: qq932024214/Amoeba
        private RelationSignatureInfo GetRelationSignatureInfo(Signature leaderSignature)
        {
            var infos     = new List <RelationSignatureInfo>();
            var workInfos = new List <RelationSignatureInfo>();

            var checkedSignatures     = new HashSet <Signature>();
            var workCheckedSignatures = new HashSet <Signature>();

            {
                _cacheProfiles.TryGetValue(leaderSignature, out var leaderProfile);

                var info = new RelationSignatureInfo();
                info.Signature = leaderSignature;
                info.Profile   = leaderProfile;

                infos.Add(info);
                checkedSignatures.Add(leaderSignature);
            }

            {
                int index = 0;

                for (; ;)
                {
                    for (; index < infos.Count && index < 32 * 1024; index++)
                    {
                        var targetInfo = infos[index];
                        if (targetInfo.Profile == null)
                        {
                            continue;
                        }

                        var sortedList = targetInfo.Profile.Value.TrustSignatures.ToList();
                        sortedList.Sort((x, y) => x.ToString().CompareTo(y.ToString()));

                        foreach (var trustSignature in sortedList)
                        {
                            if (checkedSignatures.Contains(trustSignature))
                            {
                                continue;
                            }

                            _cacheProfiles.TryGetValue(trustSignature, out var trustProfile);

                            var info = new RelationSignatureInfo();
                            info.Signature = trustSignature;
                            info.Profile   = trustProfile;

                            infos[index].Children.Add(info);

                            workInfos.Add(info);
                            workCheckedSignatures.Add(trustSignature);
                        }
                    }

                    if (workInfos.Count == 0)
                    {
                        break;
                    }

                    infos.AddRange(workInfos);
                    workInfos.Clear();

                    checkedSignatures.UnionWith(workCheckedSignatures);
                    workCheckedSignatures.Clear();
                }
            }

            return(infos[0]);
        }