You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
wowlet/src/libwalletqt/Coins.cpp

100 lines
2.0 KiB

// SPDX-License-Identifier: BSD-3-Clause
// Copyright (c) 2020-2021, The Monero Project.
#include "Coins.h"
#include <QDebug>
#include "CoinsInfo.h"
#include <QFile>
bool Coins::coin(int index, std::function<void (CoinsInfo &)> callback)
{
QReadLocker locker(&m_lock);
if (index < 0 || index >= m_tinfo.size()) {
qCritical("%s: no transaction info for index %d", __FUNCTION__, index);
qCritical("%s: there's %d transactions in backend", __FUNCTION__, m_pimpl->count());
return false;
}
callback(*m_tinfo.value(index));
return true;
}
void Coins::refresh(quint32 accountIndex)
{
emit refreshStarted();
{
QWriteLocker locker(&m_lock);
qDeleteAll(m_tinfo);
m_tinfo.clear();
m_pimpl->refresh();
for (const auto i : m_pimpl->getAll()) {
if (i->subaddrAccount() != accountIndex) {
continue;
}
m_tinfo.append(new CoinsInfo(i, this));
}
}
emit refreshFinished();
}
void Coins::refreshUnlocked()
{
QWriteLocker locker(&m_lock);
for (CoinsInfo* c : m_tinfo) {
if (!c->unlocked()) {
bool unlocked = m_pimpl->isTransferUnlocked(c->unlockTime(), c->blockHeight());
c->setUnlocked(unlocked);
}
}
}
quint64 Coins::count() const
{
QReadLocker locker(&m_lock);
return m_tinfo.count();
}
void Coins::freeze(int index) const
{
m_pimpl->setFrozen(index);
emit coinFrozen();
}
void Coins::thaw(int index) const
{
m_pimpl->thaw(index);
emit coinThawed();
}
QStringList Coins::coins_from_txid(const QString &txid)
{
QStringList keyimages;
for (int i = 0; i < this->count(); i++) {
this->coin(i, [&keyimages, &txid](const CoinsInfo &x) {
if (x.hash() == txid) {
keyimages += x.keyImage();
}
});
}
return keyimages;
}
Coins::Coins(Monero::Coins *pimpl, QObject *parent)
: QObject(parent)
, m_pimpl(pimpl)
{
}