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

Loading…
Cancel
Save