async def _draw(self): # TODO: figure out window width etc. if self._pad is None: self._pad = curses.newpad(2, 100) else: self._pad.clear() CYELLOW = curses.color_pair(5) CBOLD = curses.A_BOLD CREVERSE = curses.A_REVERSE x = 1 for mode_string in MODES: first_char, rest = mode_string[0], mode_string[1:] modifier = curses.A_BOLD if self._mode == mode_string: # first_char = first_char.upper() modifier += CREVERSE self._pad.addstr(0, x, first_char, modifier + CYELLOW) self._pad.addstr(0, x + 1, rest, modifier) x += len(mode_string) + 5 if self._dt: self._pad.addstr(0, 81, isoformatseconds(self._dt)[:19], CYELLOW + CBOLD) await self._draw_pad_to_screen()
async def _draw_transaction(self, transaction): CGREEN = curses.color_pair(1) CRED = curses.color_pair(3) CYELLOW = curses.color_pair(5) CBOLD = curses.A_BOLD self._pad.addstr( 0, 1, "time {}".format( isoformatseconds( datetime.datetime.utcfromtimestamp(transaction["time"]))), CBOLD) self._pad.addstr(1, 1, "size {}b".format(transaction["size"]), CBOLD) self._pad.addstr(1, 15, "vsize {}b".format(transaction["vsize"]), CBOLD) self._pad.addstr(2, 1, "locktime {}".format(transaction["locktime"]), CBOLD) self._pad.addstr(2, 23, "v{}".format(transaction["version"]), CBOLD) self._pad.addstr(0, 31, "txid {}".format(transaction["txid"]), CBOLD) self._pad.addstr(1, 31, "hash {}".format(transaction["hash"]), CBOLD) if "blockhash" in transaction: self._pad.addstr(2, 30, "block {}".format(transaction["blockhash"]), CBOLD) else: self._pad.addstr(2, 58, "unconfirmed transaction!", CBOLD + CRED)
async def _draw_wallet(self, wallet): CGREEN = curses.color_pair(1) CRED = curses.color_pair(3) CYELLOW = curses.color_pair(5) CBOLD = curses.A_BOLD CREVERSE = curses.A_REVERSE if "transactions" in wallet: offset = self._tx_offset[0] self._pad.addstr( 0, 1, "Transactions: {}".format(len(wallet["transactions"])), CBOLD) self._pad.addstr(0, 68, "[UP/DOWN: browse, ENTER: select]", CYELLOW) if offset > 0: self._pad.addstr(1, 25, "... ^ ...", CBOLD) if offset < len(wallet["transactions"]) - 11: self._pad.addstr(19, 25, "... v ...", CBOLD) for i, tx in enumerate(wallet["transactions"]): if i < offset: continue if i > offset + 5: break color = CGREEN if tx["amount"] >= 0 else CRED # if i == self._selected_tx[0] and self._hash == self._selected_tx[1]: if i == self._selected_tx[0]: color += CBOLD + CREVERSE # hackerino self._pad.addstr(2 + ((i - offset) * 3), 1, " " * 98, color) self._pad.addstr(2 + ((i - offset) * 3) + 1, 1, " " * 98, color) self._pad.addstr( 2 + ((i - offset) * 3), 1, "{}".format( isoformatseconds( datetime.datetime.utcfromtimestamp( tx["timereceived"]))), color) self._pad.addstr(2 + ((i - offset) * 3), 30, "block: {: 7d}".format(tx["blockindex"]), color) self._pad.addstr(2 + ((i - offset) * 3), 81, "{: 15.8f} VTC".format(tx["amount"], ), color) self._pad.addstr(2 + ((i - offset) * 3) + 1, 1, "{}".format(tx["address"]), color) self._pad.addstr(2 + ((i - offset) * 3) + 1, 36, "{}".format(tx["txid"]), color)
async def _draw_block(self, block, bestblockhash): CGREEN = curses.color_pair(1) CRED = curses.color_pair(3) CYELLOW = curses.color_pair(5) CBOLD = curses.A_BOLD self._pad.addstr( 0, 46, "[J/K: browse, HOME/END: quicker, L: best, TAB: manual]", CYELLOW) self._pad.addstr( 0, 1, "Time {}".format( isoformatseconds( datetime.datetime.utcfromtimestamp(block["time"]))), CBOLD) self._pad.addstr(0, 31, "Height {}".format(block["height"]), CBOLD) self._pad.addstr(1, 1, "Size {} bytes".format(block["size"]), CBOLD) self._pad.addstr(2, 1, "Weight {} WU".format(block["weight"]), CBOLD) self._pad.addstr(3, 1, "Diff {:,d}".format(int(block["difficulty"])), CBOLD) self._pad.addstr(4, 1, "Version 0x{}".format(block["versionHex"]), CBOLD) self._pad.addstr(1, 31, "Hash {}".format(block["hash"]), CBOLD) if "previousblockhash" in block: self._pad.addstr(2, 31, "Prev {}".format(block["previousblockhash"]), CBOLD) else: self._pad.addstr(2, 60, "genesis block!", CBOLD + CRED) if "nextblockhash" in block: self._pad.addstr(3, 31, "Next {}".format(block["nextblockhash"]), CBOLD) elif block["hash"] == bestblockhash: self._pad.addstr(3, 60, "best block!", CBOLD + CGREEN) self._pad.addstr(4, 31, "Root {}".format(block["merkleroot"]), CBOLD)