Browse Source

proto.xmr.tw.unspent: reimplement `accts_data` as tuple

The MMGen Project 1 week ago
parent
commit
4f3595c0a1
1 changed files with 20 additions and 24 deletions
  1. 20 24
      mmgen/proto/xmr/tw/unspent.py

+ 20 - 24
mmgen/proto/xmr/tw/unspent.py

@@ -15,8 +15,7 @@ proto.xmr.tw.unspent: Monero protocol tracking wallet unspent outputs class
 from collections import namedtuple
 from collections import namedtuple
 
 
 from ....tw.unspent import TwUnspentOutputs
 from ....tw.unspent import TwUnspentOutputs
-from ....addr import MMGenID, MoneroIdx
-from ....color import red, green
+from ....addr import MoneroIdx
 
 
 from .view import MoneroTwView
 from .view import MoneroTwView
 
 
@@ -59,24 +58,25 @@ class MoneroTwUnspentOutputs(MoneroTwView, TwUnspentOutputs):
 				for twmmid, data in rpc_data.items())
 				for twmmid, data in rpc_data.items())
 
 
 	def get_disp_data(self):
 	def get_disp_data(self):
-		ad = namedtuple('accts_data', ['total', 'data'])
+		ad = namedtuple('accts_data', ['idx', 'acct_idx', 'total', 'data'])
 		bd = namedtuple('accts_data_data', ['disp_data_idx', 'data'])
 		bd = namedtuple('accts_data_data', ['disp_data_idx', 'data'])
 		def gen_accts_data():
 		def gen_accts_data():
-			acct_id_save, total, d_acc = (None, 0, {})
+			idx, acct_idx, total, d_acc = (None, None, 0, {})
 			for n, d in enumerate(self.data):
 			for n, d in enumerate(self.data):
 				m = d.twmmid.obj
 				m = d.twmmid.obj
-				if acct_id_save != m.acct_id:
-					if acct_id_save:
-						yield (acct_id_save, ad(total, d_acc))
-					acct_id_save = m.acct_id
+				if idx != m.idx or acct_idx != m.acct_idx:
+					if idx:
+						yield ad(idx, acct_idx, total, d_acc)
+					idx = m.idx
+					acct_idx = m.acct_idx
 					total = d.amt
 					total = d.amt
 					d_acc = {m.addr_idx: bd(n, d)}
 					d_acc = {m.addr_idx: bd(n, d)}
 				else:
 				else:
 					total += d.amt
 					total += d.amt
 					d_acc[m.addr_idx] = bd(n, d)
 					d_acc[m.addr_idx] = bd(n, d)
-			if acct_id_save:
-				yield (acct_id_save, ad(total, d_acc))
-		self.accts_data = dict(gen_accts_data())
+			if idx:
+				yield ad(idx, acct_idx, total, d_acc)
+		self.accts_data = tuple(gen_accts_data())
 		return super().get_disp_data()
 		return super().get_disp_data()
 
 
 	class display_type(TwUnspentOutputs.display_type):
 	class display_type(TwUnspentOutputs.display_type):
@@ -109,20 +109,16 @@ class MoneroTwUnspentOutputs(MoneroTwView, TwUnspentOutputs):
 			interactive = interactive)
 			interactive = interactive)
 
 
 	def gen_display(self, data, cw, fs, color, fmt_method):
 	def gen_display(self, data, cw, fs, color, fmt_method):
-		yes, no = (red('Yes '), green('No  ')) if color else ('Yes ', 'No  ')
-		fs_acct = '{:>4} {} {:%s}  {}' % MoneroIdx.max_digits
-		wallet_wid = 15
-		yield '     Wallet        Account  Balance'.ljust(self.term_width)
-		for n, (k, v) in enumerate(self.accts_data.items()):
-			mmid, acct_idx = k.rsplit(':', 1)
-			m = list(v.data.values())[0].data.twmmid.obj
+		fs_acct = '{:>4} {:6} {:7}  {}'
+		yield fs_acct.format('', 'Wallet', 'Account', 'Balance').ljust(self.term_width)
+		for n, d in enumerate(self.accts_data):
 			yield fs_acct.format(
 			yield fs_acct.format(
 				str(n + 1) + ')',
 				str(n + 1) + ')',
-				MMGenID.hlc(mmid.ljust(wallet_wid), color=color),
-				m.acct_idx.fmt(MoneroIdx.max_digits, color=color),
-				v.total.hl(color=color)).ljust(self.term_width)
-			for v in v.data.values():
-				yield fmt_method(None, v.data, cw, fs, color, yes, no)
+				d.idx.fmt(6, color=color),
+				d.acct_idx.fmt(7, color=color),
+				d.total.hl(color=color)).ljust(self.term_width)
+			for v in d.data.values():
+				yield fmt_method(None, v.data, cw, fs, color, None, None)
 
 
 	def squeezed_format_line(self, n, d, cw, fs, color, yes, no):
 	def squeezed_format_line(self, n, d, cw, fs, color, yes, no):
 		return fs.format(
 		return fs.format(
@@ -135,5 +131,5 @@ class MoneroTwUnspentOutputs(MoneroTwView, TwUnspentOutputs):
 		if res := await self.get_idx(f'{self.item_desc} number', self.accts_data):
 		if res := await self.get_idx(f'{self.item_desc} number', self.accts_data):
 			return await self.get_idx(
 			return await self.get_idx(
 				'address index',
 				'address index',
-				list(self.accts_data.values())[res.idx - 1].data,
+				self.accts_data[res.idx - 1].data,
 				is_addr_idx = True)
 				is_addr_idx = True)