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)); }
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); } }
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()); }
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); }
public void Rescan(RescanRequest rescanRequest, CancellationToken cancellation = default) { RescanAsync(rescanRequest, cancellation).GetAwaiter().GetResult(); }
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); } }
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"); } }