Exemple #1
0
 private FragmentInfo[] GetFragments(FragmentInfo F, FragmentHandler Origin)
 {
     if (F.Fragment.SameOrigin)
     {
         return(Origin.GetOrdered(F.Fragment));
     }
     else
     {
         return(Origin.GetOrderedNoOrigin(F.Fragment, Fragments));
     }
 }
Exemple #2
0
        private void MessageReader()
        {
            var Handlers = new List <FragmentHandler>();

            //Get messages from RPC or cache
            var RPC    = Tools.GetRPC(API);
            var IdList = RPC.getAllInboxMessageIds().FromJson <BitmessageIdList>();

            if (IdList.inboxMessageIds != null)
            {
                Messages = new BitmessageMsg[IdList.inboxMessageIds.Length];
                for (var i = 0; i < Messages.Length; i++)
                {
                    var msg = IdList.inboxMessageIds[i];
                    SetStatus($"Reading Message {i + 1} of {Messages.Length}");
                    if (Program.MessageCache.Any(m => m.msgid == msg.msgid))
                    {
                        Messages[i] = Program.MessageCache.First(m => m.msgid == msg.msgid);
                    }
                    else
                    {
                        var container = RPC.getInboxMessageById(msg.msgid, true)
                                        .FromJson <BitmessageInboxMsg>();
                        if (container.inboxMessage != null && container.inboxMessage.Length > 0)
                        {
                            Messages[i] = container.inboxMessage[0].Decode();
                        }
                    }
                }
            }

            //Add messages to cache
            int index = 0;

            foreach (var Msg in Messages)
            {
                SetStatus($"Caching message {++index}...");
                if (!Program.MessageCache.Any(m => m.msgid == Msg.msgid))
                {
                    Program.MessageCache.Add(Msg);
                }
                var F = Tools.GetFragment(Msg.message);
                if (F != null)
                {
                    var Handler = Handlers.FirstOrDefault(m => m.FromAddr == Msg.fromAddress);
                    if (Handler == null)
                    {
                        Handler          = new FragmentHandler();
                        Handler.FromAddr = Msg.fromAddress;
                        Handlers.Add(Handler);
                    }
                    Handler.Add(F, Msg.msgid);
                }
            }

            Fragments = Handlers.ToArray();

            SetStatus("Populating Lists");
            Invoke((MethodInvoker) delegate
            {
                EnableAll(true);
                foreach (var F in Fragments.SelectMany(m => m.GetPrimary()))
                {
                    if (!lbFiles.Items.Contains(F))
                    {
                        lbFiles.Items.Add(F);
                    }
                }
                if (lbFiles.Items.Count > 0)
                {
                    lbFiles.SelectedIndex = 0;
                }
            });
            SetStatus("Done");
        }