private FragmentInfo[] GetFragments(FragmentInfo F, FragmentHandler Origin) { if (F.Fragment.SameOrigin) { return(Origin.GetOrdered(F.Fragment)); } else { return(Origin.GetOrderedNoOrigin(F.Fragment, Fragments)); } }
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"); }