Skip to content

Commit

Permalink
Merge pull request #77 from dexX7/oc-0.10-ui-signal-lock
Browse files Browse the repository at this point in the history
Don't notify about Omni events, while waiting
  • Loading branch information
zathras-crypto committed Jun 22, 2015
2 parents bbb537c + 4e8253e commit 2620548
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 3 deletions.
32 changes: 29 additions & 3 deletions src/qt/clientmodel.cpp
Expand Up @@ -30,7 +30,9 @@ ClientModel::ClientModel(OptionsModel *optionsModel, QObject *parent) :
peerTableModel(0),
cachedNumBlocks(0),
cachedReindexing(0), cachedImporting(0),
numBlocksAtStartup(-1), pollTimer(0)
numBlocksAtStartup(-1), pollTimer(0),
lockedOmniStateChanged(false),
lockedOmniBalanceChanged(false)
{
peerTableModel = new PeerTableModel(this);
pollTimer = new QTimer(this);
Expand Down Expand Up @@ -129,14 +131,34 @@ void ClientModel::updateNumConnections(int numConnections)

void ClientModel::updateOmniState()
{
lockedOmniStateChanged = false;
emit refreshOmniState();
}

bool ClientModel::tryLockOmniStateChanged()
{
if (lockedOmniStateChanged) {
return false;
}
lockedOmniStateChanged = true;
return true;
}

void ClientModel::updateOmniBalance()
{
lockedOmniBalanceChanged = false;
emit refreshOmniBalance();
}

bool ClientModel::tryLockOmniBalanceChanged()
{
if (lockedOmniBalanceChanged) {
return false;
}
lockedOmniBalanceChanged = true;
return true;
}

void ClientModel::updateOmniPending(bool pending)
{
emit refreshOmniPending(pending);
Expand Down Expand Up @@ -220,13 +242,17 @@ QString ClientModel::formatClientStartupTime() const
static void OmniStateChanged(ClientModel *clientmodel)
{
// This will be triggered for each block that contains Omni layer transactions
QMetaObject::invokeMethod(clientmodel, "updateOmniState", Qt::QueuedConnection);
if (clientmodel->tryLockOmniStateChanged()) {
QMetaObject::invokeMethod(clientmodel, "updateOmniState", Qt::QueuedConnection);
}
}

static void OmniBalanceChanged(ClientModel *clientmodel)
{
// Triggered when a balance for a wallet address changes
QMetaObject::invokeMethod(clientmodel, "updateOmniBalance", Qt::QueuedConnection);
if (clientmodel->tryLockOmniBalanceChanged()) {
QMetaObject::invokeMethod(clientmodel, "updateOmniBalance", Qt::QueuedConnection);
}
}

static void OmniPendingChanged(ClientModel *clientmodel, bool pending)
Expand Down
6 changes: 6 additions & 0 deletions src/qt/clientmodel.h
Expand Up @@ -69,6 +69,9 @@ class ClientModel : public QObject
QString clientName() const;
QString formatClientStartupTime() const;

bool tryLockOmniStateChanged();
bool tryLockOmniBalanceChanged();

private:
OptionsModel *optionsModel;
PeerTableModel *peerTableModel;
Expand All @@ -84,6 +87,9 @@ class ClientModel : public QObject
void subscribeToCoreSignals();
void unsubscribeFromCoreSignals();

bool lockedOmniStateChanged;
bool lockedOmniBalanceChanged;

signals:
void numConnectionsChanged(int count);
void numBlocksChanged(int count);
Expand Down

0 comments on commit 2620548

Please sign in to comment.