Exemplo n.º 1
0
 public Task RescanAsync(RescanRequest rescanRequest, CancellationToken cancellation = default)
 {
     if (rescanRequest == null)
     {
         throw new ArgumentNullException(nameof(rescanRequest));
     }
     return(SendAsync <byte[]>(HttpMethod.Post, rescanRequest, $"v1/cryptos/{CryptoCode}/rescan", null, cancellation));
 }
Exemplo n.º 2
0
        public async Task RescanFromBlockHeightAsync(int beginHeight, Action <int> progressCallback = null)
        {
            var client  = new WalletService.WalletServiceClient(_channel);
            var request = new RescanRequest {
                BeginHeight = beginHeight
            };
            var responseServer = client.Rescan(request, cancellationToken: _tokenSource.Token);

            while (await responseServer.ResponseStream.MoveNext())
            {
                progressCallback?.Invoke(responseServer.ResponseStream.Current.RescannedThrough);
            }
        }
Exemplo n.º 3
0
        public async Task <IActionResult> Rescan(string cryptoCode, [FromBody] RescanRequest rescanRequest)
        {
            if (rescanRequest == null)
            {
                throw new ArgumentNullException(nameof(rescanRequest));
            }
            if (rescanRequest?.Transactions == null)
            {
                throw new NBXplorerException(new NBXplorerError(400, "transactions-missing", "You must specify 'transactions'"));
            }

            bool willFetchTransactions = rescanRequest.Transactions.Any(t => t.Transaction == null);
            bool needTxIndex           = rescanRequest.Transactions.Any(t => t.Transaction == null && t.BlockId == null);
            var  network = GetNetwork(cryptoCode, willFetchTransactions);

            var rpc  = Waiters.GetWaiter(cryptoCode).RPC.PrepareBatch();
            var repo = RepositoryProvider.GetRepository(network);

            var fetchingTransactions = rescanRequest
                                       .Transactions
                                       .Select(t => FetchTransaction(rpc, t))
                                       .ToArray();

            await rpc.SendBatchAsync();

            await Task.WhenAll(fetchingTransactions);

            var transactions = fetchingTransactions.Select(t => t.GetAwaiter().GetResult())
                               .Where(tx => tx.Transaction != null)
                               .ToArray();

            foreach (var txs in transactions.GroupBy(t => t.BlockId, t => (t.Transaction, t.BlockTime))
                     .OrderBy(t => t.First().BlockTime))
            {
                repo.SaveTransactions(txs.First().BlockTime, txs.Select(t => t.Transaction).ToArray(), txs.Key);
                foreach (var tx in txs)
                {
                    var matches = repo.GetMatches(tx.Transaction).Select(m => new MatchedTransaction()
                    {
                        BlockId = txs.Key, Match = m
                    }).ToArray();
                    repo.SaveMatches(tx.BlockTime, matches);
                    AddressPoolService.RefillAddressPoolIfNeeded(network, matches);
                }
            }

            return(Ok());
        }
Exemplo n.º 4
0
        public bool RescanNBXplorer(IEnumerable <TxScan> txs)
        {
            var req = new RescanRequest();

            foreach (var tx in txs)
            {
                if (tx.BlockHash != null)
                {
                    req.Transactions.Add(new RescanRequest.TransactionToRescan {
                        TransactionId = uint256.Parse(tx.TxId), BlockId = uint256.Parse(tx.BlockHash)
                    });
                }
            }
            GetClient().Rescan(req);
            return(true);
        }
Exemplo n.º 5
0
 public void Rescan(RescanRequest rescanRequest, CancellationToken cancellation = default)
 {
     RescanAsync(rescanRequest, cancellation).GetAwaiter().GetResult();
 }
Exemplo n.º 6
0
 public async Task RescanFromBlockHeightAsync(int beginHeight, Action<int> progressCallback = null)
 {
     var client = new WalletService.WalletServiceClient(_channel);
     var request = new RescanRequest { BeginHeight = beginHeight };
     var responseServer = client.Rescan(request, cancellationToken: _tokenSource.Token);
     while (await responseServer.ResponseStream.MoveNext())
     {
         progressCallback?.Invoke(responseServer.ResponseStream.Current.RescannedThrough);
     }
 }
Exemplo n.º 7
0
        public TrayAccess()
        {
            // BUILD UI
            Tray = new NotifyIcon
            {
                Text = System.Windows.Forms.Application.ProductName + "!",                                                   // Tooltip so people know WTF I am.
                Icon = System.Drawing.Icon.ExtractAssociatedIcon(System.Reflection.Assembly.GetExecutingAssembly().Location) // is this really the best way?
            };
            Tray.BalloonTipText = Tray.Text;
            Tray.Disposed      += (object sender, EventArgs e) => { Tray = null; };

            if (Taskmaster.Trace)
            {
                Log.Verbose("Generating tray icon.");
            }

            ms = new ContextMenuStrip();
            menu_windowopen = new ToolStripMenuItem("Open", null, RestoreMainWindow);
            menu_rescan     = new ToolStripMenuItem("Rescan", null, (o, s) =>
            {
                menu_rescan.Enabled = false;
                RescanRequest?.Invoke(this, null);
                menu_rescan.Enabled = true;
            });
            menu_configuration = new ToolStripMenuItem("Configuration");
            var menu_configuration_autopower = new ToolStripMenuItem("Power auto-adjust", null, ShowPowerConfig);
            var menu_configuration_folder    = new ToolStripMenuItem("Open in file manager", null, ShowConfigRequest);

            menu_configuration.DropDownItems.Add(menu_configuration_autopower);
            menu_configuration.DropDownItems.Add(new ToolStripSeparator());
            menu_configuration.DropDownItems.Add(menu_configuration_folder);

            menu_runatstart_reg = new ToolStripMenuItem("Run at start (RegRun)", null, RunAtStartMenuClick_Reg);
            menu_runatstart_sch = new ToolStripMenuItem("Schedule at login (Admin)", null, RunAtStartMenuClick_Sch);

            bool runatstartreg = RunAtStartRegRun(enabled: false, dryrun: true);
            bool runatstartsch = RunAtStartScheduler(enabled: false, dryrun: true);

            menu_runatstart_reg.Checked = runatstartreg;
            menu_runatstart_sch.Checked = runatstartsch;
            Log.Information("<Core> Run-at-start – Registry: {Enabled}, Scheduler: {Found}",
                            (runatstartreg ? "Enabled" : "Disabled"), (runatstartsch ? "Found" : "Missing"));

            if (Taskmaster.PowerManagerEnabled)
            {
                power_auto              = new ToolStripMenuItem("Auto", null, SetAutoPower);
                power_auto.Checked      = false;
                power_auto.CheckOnClick = true;
                power_auto.Enabled      = false;

                power_highperf = new ToolStripMenuItem(PowerManager.GetModeName(PowerInfo.PowerMode.HighPerformance), null, (s, e) => { ResetPower(PowerInfo.PowerMode.HighPerformance); });
                power_balanced = new ToolStripMenuItem(PowerManager.GetModeName(PowerInfo.PowerMode.Balanced), null, (s, e) => { ResetPower(PowerInfo.PowerMode.Balanced); });
                power_saving   = new ToolStripMenuItem(PowerManager.GetModeName(PowerInfo.PowerMode.PowerSaver), null, (s, e) => { ResetPower(PowerInfo.PowerMode.PowerSaver); });
                power_manual   = new ToolStripMenuItem("Manual override", null, SetManualPower)
                {
                    CheckOnClick = true
                };
            }

            ToolStripMenuItem menu_restart = null;

            menu_restart = new ToolStripMenuItem("Restart", null, (o, s) =>
            {
                menu_restart.Enabled = false;
                Taskmaster.ConfirmExit(restart: true);
                menu_restart.Enabled = true;
            });
            menu_exit = new ToolStripMenuItem("Exit", null, (o, s) =>
            {
                menu_restart.Enabled = false;
                Taskmaster.ConfirmExit(restart: false);
                menu_restart.Enabled = true;
            });
            ms.Items.Add(menu_windowopen);
            ms.Items.Add(new ToolStripSeparator());
            ms.Items.Add(menu_rescan);
            ms.Items.Add(new ToolStripSeparator());
            ms.Items.Add(menu_configuration);
            ms.Items.Add(menu_runatstart_reg);
            ms.Items.Add(menu_runatstart_sch);
            if (Taskmaster.PowerManagerEnabled)
            {
                ms.Items.Add(new ToolStripSeparator());
                var plab = new ToolStripLabel("--- Power Plan ---");
                plab.ForeColor = System.Drawing.SystemColors.GrayText;
                ms.Items.Add(plab);
                ms.Items.Add(power_auto);
                ms.Items.Add(power_highperf);
                ms.Items.Add(power_balanced);
                ms.Items.Add(power_saving);
                ms.Items.Add(power_manual);
            }

            ms.Items.Add(new ToolStripSeparator());
            ms.Items.Add(menu_restart);
            ms.Items.Add(menu_exit);
            Tray.ContextMenuStrip = ms;

            if (Taskmaster.Trace)
            {
                Log.Verbose("Tray menu ready");
            }

            if (!RegisterExplorerExit())
            {
                throw new InitFailure("<Tray> Explorer registeriong failed; not running?");
            }

            ms.Enabled = false;

            // Tray.Click += RestoreMainWindow;
            Tray.MouseClick += ShowWindow;

            // TODO: Toast Notifications

            if (Tray.Icon == null)
            {
                Log.Fatal("<Tray> Icon missing, setting system default.");
                Tray.Icon = System.Drawing.SystemIcons.Application;
            }

            Microsoft.Win32.SystemEvents.SessionEnding += SessionEndingEvent;             // depends on messagepump

            if (Taskmaster.Trace)
            {
                Log.Verbose("<Tray> Initialized");
            }
        }