Browse Source

better state management in Qt SpendTab

master
Adam Gibson 9 years ago
parent
commit
c12078e838
No known key found for this signature in database
GPG Key ID: B3AE09F1E9A3197A
  1. 45
      scripts/joinmarket-qt.py

45
scripts/joinmarket-qt.py

@ -270,8 +270,7 @@ class SpendStateMgr(object):
in which the spend tab is being run
"""
def __init__(self, updatecallback):
self.typestate = 'single'
self.runstate = 'ready'
self.reset_vars()
self.updatecallback = updatecallback
def updateType(self, t):
@ -282,9 +281,14 @@ class SpendStateMgr(object):
self.runstate = r
self.updatecallback()
def reset(self):
def reset_vars(self):
self.typestate = 'single'
self.runstate = 'ready'
self.schedule_name = None
self.loaded_schedule = None
def reset(self):
self.reset_vars()
self.updatecallback()
class SpendTab(QWidget):
@ -309,10 +313,9 @@ class SpendTab(QWidget):
#Signal indicating Taker has finished its work
self.jmclient_obj.connect(self.jmclient_obj, QtCore.SIGNAL('JMCLIENT:finished'),
self.takerFinished)
#will be set in 'multiple join' tab if the user chooses to run a schedule
self.loaded_schedule = None
#tracks which mode the spend tab is run in
self.spendstate = SpendStateMgr(self.toggleButtons)
self.spendstate.reset() #trigger callback to 'ready' state
def generateTumbleSchedule(self):
#needs a set of tumbler options and destination addresses, so needs
@ -321,10 +324,10 @@ class SpendTab(QWidget):
wizard_return = wizard.exec_()
if wizard_return == QDialog.Rejected:
return
self.loaded_schedule = wizard.get_schedule()
self.spendstate.loaded_schedule = wizard.get_schedule()
self.spendstate.schedule_name = wizard.get_name()
self.updateSchedView()
self.tumbler_options = wizard.opts
self.sch_label2.setText(wizard.get_name())
self.sched_view.setText(schedule_to_text(self.loaded_schedule))
self.sch_startButton.setEnabled(True)
def selectSchedule(self):
@ -346,13 +349,13 @@ class SpendTab(QWidget):
title='Error')
else:
w.statusBar().showMessage("Schedule loaded OK.")
self.updateSchedView(rawsched, os.path.basename(str(firstarg)))
self.spendstate.updateType('multiple')
self.loaded_schedule = schedule
self.spendstate.loaded_schedule = schedule
self.spendstate.schedule_name = os.path.basename(str(firstarg))
self.updateSchedView()
def updateSchedView(self, text, name):
self.sch_label2.setText(name)
self.sched_view.setText(text)
def updateSchedView(self):
self.sch_label2.setText(self.spendstate.schedule_name)
self.sched_view.setText(schedule_to_text(self.spendstate.loaded_schedule))
def getDonateLayout(self):
donateLayout = QHBoxLayout()
@ -506,10 +509,9 @@ class SpendTab(QWidget):
if not self.spendstate.runstate == 'ready':
log.info("Cannot start join, already running.")
return
if not self.loaded_schedule:
if not self.spendstate.loaded_schedule:
log.info("Cannot start, no schedule loaded.")
return
self.taker_schedule = self.loaded_schedule
#self.qtw.setTabEnabled(0, False)
self.spendstate.updateType('multiple')
self.spendstate.updateRun('running')
@ -528,7 +530,8 @@ class SpendTab(QWidget):
mixdepth = int(self.widgets[2][1].text())
#note 'amount' is integer, so not interpreted as fraction
#see notes in sample testnet schedule for format
self.taker_schedule = [[mixdepth, amount, makercount, destaddr, 0, 0]]
self.spendstate.loaded_schedule = [[mixdepth, amount, makercount,
destaddr, 0, 0]]
self.spendstate.updateType('single')
self.spendstate.updateRun('running')
self.startJoin()
@ -563,7 +566,7 @@ class SpendTab(QWidget):
check_offers_callback = None
self.taker = Taker(w.wallet,
self.taker_schedule,
self.spendstate.loaded_schedule,
order_chooser=weighted_order_choose,
callbacks=[check_offers_callback,
self.callback_takerInfo,
@ -591,7 +594,7 @@ class SpendTab(QWidget):
"""Receives the signal from the JMClient thread
"""
if self.taker.aborted:
log.debug("Not processing orders, user has aborted.")
log.debug("Not processing offers, user has aborted.")
return False
self.offers_fee = offers_fee
self.jmclient_obj.emit(QtCore.SIGNAL('JMCLIENT:offers'))
@ -721,10 +724,10 @@ class SpendTab(QWidget):
self.taker_finished_waittime,
self.taker_finished_txdetails)
self.spendstate.loaded_schedule = self.taker.schedule
#Shows the schedule updates in the GUI; TODO make this more visual
if self.spendstate.typestate == 'multiple':
self.updateSchedView(schedule_to_text(self.taker.schedule),
'TUMBLE.schedule')
self.updateSchedView()
#GUI-specific updates; QTimer.singleShot serves the role
#of reactor.callLater

Loading…
Cancel
Save