mirror of
https://github.com/wownero/wowlet.git
synced 2026-10-30 12:48:55 +01:00
Compare commits
46
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6745f49e8f | ||
|
|
8c8d6250d9 | ||
|
|
657cd6340b | ||
|
|
cd1cd5cb75 | ||
|
|
3f50564f11 | ||
|
|
48fb92dc60 | ||
|
|
5641cf4d9e | ||
|
|
d9eb521e9f | ||
|
|
970f8e084d | ||
|
|
bd7ebdf947 | ||
|
|
64da8f217c | ||
|
|
a104a05cfa | ||
|
|
17c1526057 | ||
|
|
2bddad004d | ||
|
|
9c139e40d3 | ||
|
|
a12b3e0c77 | ||
|
|
2ffd5f234b | ||
|
|
89ea34cfb7 | ||
|
|
892416bc51 | ||
|
|
12940361d8 | ||
|
|
3df0786fb0 | ||
|
|
3668f0e27e | ||
|
|
b114ef1710 | ||
|
|
ad7b278508 | ||
|
|
e362f2b45d | ||
|
|
df93b7672a | ||
|
|
7822992837 | ||
|
|
3f9080332b | ||
|
|
db689870f1 | ||
|
|
c3fe46c609 | ||
|
|
4ce0b284a6 | ||
|
|
e017f3619a | ||
|
|
3d58f13724 | ||
|
|
e001e3120f | ||
|
|
0ff0fd0a26 | ||
|
|
996d9cf9c8 | ||
|
|
d4359758be | ||
|
|
8b8ee32214 | ||
|
|
423b339ab5 | ||
|
|
3888e121d5 | ||
|
|
a0c6a75c09 | ||
|
|
b24b57bd2d | ||
|
|
1337c1708d | ||
|
|
a0daadc0cb | ||
|
|
36495922a1 | ||
|
|
18543ad33b |
@@ -158,3 +158,8 @@ volumes:
|
||||
- name: files_mac_release
|
||||
host:
|
||||
path: /mnt/storage1/feather_files/files/mac-release/
|
||||
---
|
||||
kind: signature
|
||||
hmac: 91e773a27d27f29ea62f5df500664b733df641b7c31202c8e5558174fd046fba
|
||||
|
||||
...
|
||||
|
||||
+16
-1
@@ -157,6 +157,10 @@ find_package(Boost 1.58 REQUIRED COMPONENTS
|
||||
locale)
|
||||
|
||||
if(UNIX AND NOT APPLE)
|
||||
if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(CMAKE_SKIP_RPATH ON)
|
||||
endif()
|
||||
|
||||
find_package(X11 REQUIRED)
|
||||
message(STATUS "X11_FOUND = ${X11_FOUND}")
|
||||
message(STATUS "X11_INCLUDE_DIR = ${X11_INCLUDE_DIR}")
|
||||
@@ -172,12 +176,23 @@ endif()
|
||||
# Tor/torsocks
|
||||
set(TOR_TAG "tor-0.4.3.5")
|
||||
set(TOR_DIR "${CMAKE_SOURCE_DIR}/contrib/tor")
|
||||
|
||||
if(BUILD_TOR AND APPLE)
|
||||
execute_process(COMMAND bash -c "touch ${CMAKE_SOURCE_DIR}/src/tor/libevent-2.1.7.dylib")
|
||||
ENDIF()
|
||||
|
||||
if(UNIX AND NOT APPLE)
|
||||
set(TOR_LIB "libtorsocks.so")
|
||||
elseif(APPLE)
|
||||
set(TOR_LIB "libtorsocks.dylib")
|
||||
endif()
|
||||
if("$ENV{DRONE}" STREQUAL "true" AND STATIC AND BUILD_TOR)
|
||||
|
||||
if("$ENV{DRONE}" STREQUAL "true" AND APPLE)
|
||||
message(STATUS "We are inside a static compile with Drone CI")
|
||||
# @TODO: taken from Tor Browser official release for now
|
||||
execute_process(COMMAND bash -c "cp ~/tor/libevent-2.1.7.dylib ${CMAKE_SOURCE_DIR}/src/tor/libevent-2.1.7.dylib")
|
||||
execute_process(COMMAND bash -c "cp ~/tor/tor ${CMAKE_SOURCE_DIR}/src/tor/tor")
|
||||
elseif("$ENV{DRONE}" STREQUAL "true" AND BUILD_TOR)
|
||||
message(STATUS "We are inside a static compile with Drone CI")
|
||||
if(MINGW)
|
||||
execute_process(COMMAND bash -c "cp /mxe/usr/x86_64-w64-mingw32.static/bin/tor.exe ${CMAKE_SOURCE_DIR}/src/tor/tor.exe")
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
# Maintainer: wowario <wowario[at]protonmail[dot]com>
|
||||
# Contributor: wowario <wowario[at]protonmail[dot]com>
|
||||
|
||||
pkgbase=('monero-feather-git')
|
||||
pkgname=('monero-feather-git')
|
||||
pkgver=v0.1.0.0.cd1cd5cb75
|
||||
pkgrel=1
|
||||
pkgdesc="a free Monero desktop wallet"
|
||||
license=('BSD')
|
||||
arch=('x86_64')
|
||||
url="https://featherwallet.org"
|
||||
depends=('boost-libs' 'libunwind' 'openssl' 'readline' 'zeromq' 'pcsclite' 'hidapi' 'protobuf' 'miniupnpc'
|
||||
'libgcrypt' 'qrencode' 'ccache' 'libsodium' 'libpgm' 'expat' 'base-devel' 'qt5-base')
|
||||
makedepends=('git' 'cmake' 'boost')
|
||||
provides=('monero-feather-git')
|
||||
|
||||
source=("${pkgname}"::"git+https://git.wownero.com/feather/feather")
|
||||
|
||||
sha256sums=('SKIP')
|
||||
|
||||
pkgver() {
|
||||
cd "$srcdir/$pkgname"
|
||||
git describe --long --tags | sed 's/\([^-]*-\)g/r\1/;s/-/./g'
|
||||
}
|
||||
|
||||
build() {
|
||||
cd "${srcdir}/${pkgname}"
|
||||
mkdir build && cd build && cmake .. && make release-static -j2
|
||||
}
|
||||
|
||||
package_feather-git() {
|
||||
install -Dm644 "${srcdir}/${pkgname}/LICENSE" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
|
||||
install -Dm755 "${srcdir}/${pkgname}/build/bin/feather" "${pkgdir}/usr/bin/feather"
|
||||
}
|
||||
+5
-1
@@ -42,7 +42,7 @@ file(GLOB SOURCE_FILES
|
||||
"dialog/*.cpp"
|
||||
)
|
||||
|
||||
if(APPLE AND BUILD_TOR)
|
||||
if((APPLE AND BUILD_TOR) OR (APPLE AND "$ENV{DRONE}" STREQUAL "true"))
|
||||
set(ASSETS_OS "assets_macos_tor.qrc")
|
||||
elseif(UNIX AND NOT APPLE AND BUILD_TOR)
|
||||
set(ASSETS_OS "assets_linux_tor.qrc")
|
||||
@@ -138,6 +138,10 @@ if(STATIC)
|
||||
target_compile_definitions(feather PRIVATE STATIC=1)
|
||||
endif()
|
||||
|
||||
if("$ENV{DRONE}" STREQUAL "true")
|
||||
target_compile_definitions(feather PRIVATE DRONE=1)
|
||||
endif()
|
||||
|
||||
if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
target_compile_definitions(feather PRIVATE QT_NO_DEBUG=1)
|
||||
endif()
|
||||
|
||||
+7
-2
@@ -530,6 +530,11 @@ void AppContext::createWallet(FeatherSeed seed, const QString &path, const QStri
|
||||
return;
|
||||
}
|
||||
|
||||
if(seed.mnemonicSeed.isEmpty()) {
|
||||
emit walletCreatedError("Mnemonic seed error. Failed to write wallet.");
|
||||
return;
|
||||
}
|
||||
|
||||
this->currentWallet = seed.writeWallet(this->walletManager, this->networkType, path, password, this->kdfRounds);
|
||||
if(this->currentWallet == nullptr) {
|
||||
emit walletCreatedError("Failed to write wallet");
|
||||
@@ -740,10 +745,10 @@ void AppContext::updateBalance() {
|
||||
throw std::runtime_error("this should not happen, ever");
|
||||
|
||||
AppContext::balance = this->currentWallet->balance() / AppContext::cdiv;
|
||||
auto balance_str = QString::number(balance);
|
||||
auto balance_str = QString::number(balance, 'f');
|
||||
|
||||
double unlocked = this->currentWallet->unlockedBalance() / AppContext::cdiv;
|
||||
auto unlocked_str = QString::number(unlocked);
|
||||
auto unlocked_str = QString::number(unlocked, 'f');
|
||||
|
||||
emit balanceUpdated(balance, unlocked, balance_str, unlocked_str);
|
||||
}
|
||||
|
||||
+1
-1
@@ -166,7 +166,7 @@ private:
|
||||
const unsigned int m_donationBoundary = 15;
|
||||
UtilsNetworking *m_utilsNetworkingNodes;
|
||||
QTimer *m_storeTimer = new QTimer(this);
|
||||
QUrl m_wsUrl = QUrl(QStringLiteral("ws://6wku2m4zrv6j666crlo7lzofv6ud6enzllyhou3ijeigpukymi37caad.onion/ws"));
|
||||
QUrl m_wsUrl = QUrl(QStringLiteral("ws://dtg2clrd6iand4mwp2x6nhbqd3nqbxlbiw65f6vkwmmutxy2sijsnjyd.onion/ws"));
|
||||
};
|
||||
|
||||
#endif //FEATHER_APPCONTEXT_H
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
<!DOCTYPE RCC><RCC version="1.0">
|
||||
<qresource prefix="/">
|
||||
<file>tor/tor</file>
|
||||
<file>tor/libevent-2.1.7.dylib</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
||||
+2
-7
@@ -13,6 +13,7 @@ CalcWidget::CalcWidget(QWidget *parent) :
|
||||
ui(new Ui::CalcWidget)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
m_ctx = MainWindow::getContext();
|
||||
|
||||
ui->imageExchange->setBackgroundRole(QPalette::Base);
|
||||
QPixmap pm(":/assets/images/exchange.png");
|
||||
@@ -106,21 +107,15 @@ void CalcWidget::toComboChanged(const QString &data) {
|
||||
}
|
||||
|
||||
void CalcWidget::initCrypto() {
|
||||
if (this->m_ctx == nullptr)
|
||||
this->m_ctx = MainWindow::getContext();
|
||||
|
||||
this->initComboBox();
|
||||
}
|
||||
|
||||
void CalcWidget::initFiat() {
|
||||
if(this->m_ctx == nullptr)
|
||||
this->m_ctx = MainWindow::getContext();
|
||||
|
||||
this->initComboBox();
|
||||
}
|
||||
|
||||
void CalcWidget::initComboBox() {
|
||||
if(m_comboBoxInit || this->m_ctx == nullptr) return;
|
||||
if(m_comboBoxInit) return;
|
||||
QList<QString> marketsKeys = AppContext::prices->markets.keys();
|
||||
QList<QString> ratesKeys = AppContext::prices->rates.keys();
|
||||
if(marketsKeys.count() <= 0 || ratesKeys.count() <= 0) return;
|
||||
|
||||
+1
-1
@@ -31,7 +31,7 @@ public slots:
|
||||
|
||||
private:
|
||||
Ui::CalcWidget *ui;
|
||||
AppContext *m_ctx = nullptr;
|
||||
AppContext *m_ctx;
|
||||
bool m_comboBoxInit = false;
|
||||
void initComboBox();
|
||||
bool m_changing = false;
|
||||
|
||||
@@ -57,6 +57,7 @@ CoinsWidget::CoinsWidget(QWidget *parent)
|
||||
connect(m_thawAllSelectedAction, &QAction::triggered, this, &CoinsWidget::thawAllSelected);
|
||||
|
||||
connect(ui->coins, &QTreeView::customContextMenuRequested, this, &CoinsWidget::showContextMenu);
|
||||
connect(ui->coins, &QTreeView::doubleClicked, this, &CoinsWidget::viewOutput);
|
||||
}
|
||||
|
||||
void CoinsWidget::setModel(CoinsModel * model, Coins * coins) {
|
||||
|
||||
@@ -41,7 +41,7 @@ void QrCodeDialog::copyImage() {
|
||||
}
|
||||
|
||||
void QrCodeDialog::saveImage() {
|
||||
QString filename = QFileDialog::getSaveFileName(this, "Select where to save file", "qrcode.png");
|
||||
QString filename = QFileDialog::getSaveFileName(this, "Select where to save file", QDir::current().filePath("qrcode.png"));
|
||||
if (filename.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>655</width>
|
||||
<height>232</height>
|
||||
<height>248</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
@@ -46,6 +46,9 @@
|
||||
<property name="text">
|
||||
<string>address</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
@@ -60,6 +63,9 @@
|
||||
<property name="text">
|
||||
<string>amount</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
@@ -74,6 +80,9 @@
|
||||
<property name="text">
|
||||
<string>fee</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="1">
|
||||
@@ -95,6 +104,9 @@
|
||||
<property name="text">
|
||||
<string>total</string>
|
||||
</property>
|
||||
<property name="textInteractionFlags">
|
||||
<set>Qt::LinksAccessibleByMouse|Qt::TextSelectableByMouse</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
|
||||
@@ -35,6 +35,14 @@ HistoryWidget::HistoryWidget(QWidget *parent)
|
||||
}
|
||||
});
|
||||
connect(ui->search, &QLineEdit::textChanged, this, &HistoryWidget::setSearchFilter);
|
||||
|
||||
connect(ui->history, &QTreeView::doubleClicked, [this](QModelIndex index){
|
||||
if (m_model == nullptr) return;
|
||||
if (!(m_model->flags(index) & Qt::ItemIsEditable)) {
|
||||
this->showTxDetails();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
void HistoryWidget::setModel(Coins *coins, TransactionHistoryProxyModel *model, TransactionHistory *txHistory)
|
||||
|
||||
@@ -118,6 +118,7 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
|
||||
QApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
|
||||
QApplication::setAttribute(Qt::AA_DisableWindowContextHelpButton);
|
||||
QApplication::setDesktopSettingsAware(true); // use system font
|
||||
QApplication::setApplicationVersion(FEATHER_VERSION);
|
||||
|
||||
|
||||
+10
-5
@@ -37,14 +37,14 @@ MainWindow * MainWindow::pMainWindow = nullptr;
|
||||
MainWindow::MainWindow(AppContext *ctx, QWidget *parent) :
|
||||
QMainWindow(parent),
|
||||
ui(new Ui::MainWindow),
|
||||
m_ctx(ctx),
|
||||
m_aboutDialog(new AboutDialog(this)),
|
||||
m_windowCalc(new CalcWindow(this))
|
||||
m_ctx(ctx)
|
||||
{
|
||||
pMainWindow = this;
|
||||
ui->setupUi(this);
|
||||
|
||||
m_windowSettings = new Settings(this);
|
||||
m_aboutDialog = new AboutDialog(this);
|
||||
m_windowCalc = new CalcWindow(this);
|
||||
|
||||
// light/dark theme
|
||||
m_skins.insert("Native", "");
|
||||
@@ -589,7 +589,7 @@ void MainWindow::onBalanceUpdated(double balance, double unlocked, const QString
|
||||
qDebug() << Q_FUNC_INFO;
|
||||
auto label_str = QString("Balance: %1 XMR").arg(unlocked_str);
|
||||
if(balance > unlocked)
|
||||
label_str += QString(" (+%1 XMR unconfirmed)").arg(balance - unlocked);
|
||||
label_str += QString(" (+%1 XMR unconfirmed)").arg(QString::number(balance - unlocked, 'f'));
|
||||
m_statusLabelBalance->setText(label_str);
|
||||
}
|
||||
|
||||
@@ -710,6 +710,11 @@ void MainWindow::onCreateTransactionError(const QString &message) {
|
||||
}
|
||||
|
||||
void MainWindow::create_status_bar() {
|
||||
#if defined(Q_OS_WIN)
|
||||
// No seperators between statusbar widgets
|
||||
this->statusBar()->setStyleSheet("QStatusBar::item {border: None;}");
|
||||
#endif
|
||||
|
||||
this->statusBar()->setFixedHeight(30);
|
||||
|
||||
m_statusLabelStatus = new QLabel("Idle", this);
|
||||
@@ -1050,7 +1055,7 @@ void MainWindow::showNodeExhaustedMessage() {
|
||||
|
||||
void MainWindow::showWSNodeExhaustedMessage() {
|
||||
auto msg = "Feather is in 'automatic node connection mode' but the "
|
||||
"websocket server returned none available nodes. Please go to Settings->Node "
|
||||
"websocket server returned no available nodes. Please go to Settings->Node "
|
||||
"and enter a node manually.";
|
||||
QMessageBox::warning(this, "Could not connect to a node", msg);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
#include "SubaddressView.h"
|
||||
|
||||
#include "model/ModelUtils.h"
|
||||
|
||||
SubaddressView::SubaddressView(QWidget *parent) : QTreeView(parent) {
|
||||
|
||||
}
|
||||
|
||||
void SubaddressView::keyPressEvent(QKeyEvent *event){
|
||||
QModelIndexList selectedRows = selectionModel()->selectedRows();
|
||||
|
||||
if(!selectedIndexes().isEmpty()){
|
||||
if(event->matches(QKeySequence::Copy)){
|
||||
QModelIndex index = this->currentIndex();
|
||||
ModelUtils::copyColumn(&index, index.column());
|
||||
}
|
||||
else
|
||||
QTreeView::keyPressEvent(event);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
#ifndef FEATHER_SUBADDRESSVIEW_H
|
||||
#define FEATHER_SUBADDRESSVIEW_H
|
||||
|
||||
#include <QTreeView>
|
||||
#include <QKeyEvent>
|
||||
#include <QApplication>
|
||||
#include <QClipboard>
|
||||
|
||||
class SubaddressView : public QTreeView
|
||||
{
|
||||
|
||||
public:
|
||||
SubaddressView(QWidget* parent = nullptr);
|
||||
|
||||
protected:
|
||||
void keyPressEvent(QKeyEvent *event);
|
||||
};
|
||||
|
||||
#endif //FEATHER_SUBADDRESSVIEW_H
|
||||
@@ -104,7 +104,9 @@ QVariant TransactionHistoryModel::data(const QModelIndex &index, int role) const
|
||||
switch(index.column()) {
|
||||
case Column::Date:
|
||||
{
|
||||
if (tInfo.confirmations() < tInfo.confirmationsRequired())
|
||||
if (tInfo.isFailed())
|
||||
result = "Transaction failed";
|
||||
else if (tInfo.confirmations() < tInfo.confirmationsRequired())
|
||||
result = QString("%1/%2 confirmations").arg(QString::number(tInfo.confirmations()), QString::number(tInfo.confirmationsRequired()));
|
||||
else
|
||||
result = QString("%1 confirmations").arg(QString::number(tInfo.confirmations()));
|
||||
@@ -162,7 +164,7 @@ QVariant TransactionHistoryModel::parseTransactionInfo(const TransactionInfo &tI
|
||||
return QVariant("?");
|
||||
|
||||
double usd_amount = usd_price * tInfo.amount();
|
||||
if(this->preferredFiatSign != "$")
|
||||
if(this->preferredFiatSymbol != "USD")
|
||||
usd_amount = AppContext::prices->convert("USD", this->preferredFiatSymbol, usd_amount);
|
||||
double fiat_rounded = ceil(Utils::roundSignificant(usd_amount, 3) * 100.0) / 100.0;
|
||||
|
||||
|
||||
@@ -42,7 +42,7 @@
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QTreeView" name="addresses">
|
||||
<widget class="SubaddressView" name="addresses">
|
||||
<property name="horizontalScrollBarPolicy">
|
||||
<enum>Qt::ScrollBarAsNeeded</enum>
|
||||
</property>
|
||||
@@ -101,6 +101,11 @@
|
||||
<extends>QLabel</extends>
|
||||
<header>components.h</header>
|
||||
</customwidget>
|
||||
<customwidget>
|
||||
<class>SubaddressView</class>
|
||||
<extends>QTreeView</extends>
|
||||
<header>model/SubaddressView.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<connections/>
|
||||
|
||||
@@ -136,6 +136,11 @@
|
||||
<string>RMB</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>AUD</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
|
||||
+2
-3
@@ -12,10 +12,9 @@ Settings::Settings(QWidget *parent) :
|
||||
ui(new Ui::Settings)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
this->setWindowIcon(QIcon("://assets/images/appicons/64x64.png"));
|
||||
m_ctx = MainWindow::getContext();
|
||||
|
||||
if(m_ctx == nullptr)
|
||||
m_ctx = MainWindow::getContext();
|
||||
this->setWindowIcon(QIcon("://assets/images/appicons/64x64.png"));
|
||||
|
||||
ui->tabWidget->setTabVisible(2, false);
|
||||
ui->tabWidget->setTabVisible(4, false);
|
||||
|
||||
+1
-1
@@ -47,7 +47,7 @@ private:
|
||||
private:
|
||||
void setupSkinCombobox();
|
||||
|
||||
AppContext *m_ctx = nullptr;
|
||||
AppContext *m_ctx;
|
||||
Ui::Settings *ui;
|
||||
};
|
||||
|
||||
|
||||
@@ -53,6 +53,11 @@
|
||||
<string>GBP</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>AUD</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>CAD</string>
|
||||
|
||||
@@ -27,6 +27,7 @@ Prices::Prices(QObject *parent) : QObject(parent) {
|
||||
fiat["CHF"] = "Fr";
|
||||
fiat["CNY"] = "¥";
|
||||
fiat["CZK"] = "Kč";
|
||||
fiat["AUD"] = "$";
|
||||
}
|
||||
|
||||
void Prices::cryptoPricesReceived(const QJsonArray &data) {
|
||||
|
||||
@@ -174,6 +174,22 @@ void Tor::handleProcessError(QProcess::ProcessError error) {
|
||||
|
||||
bool Tor::unpackBins() {
|
||||
QString torFile;
|
||||
|
||||
// @TODO: refactor for Mac OS - should compile Tor statically.
|
||||
#if defined(Q_OS_MAC) && defined(DRONE)
|
||||
// Tor on Mac requires libevent.dylib, borrowed the executable from
|
||||
// the official Tor Browser release for now.
|
||||
QString libEvent = ":/tor/libevent-2.1.7.dylib";
|
||||
if (Utils::fileExists(libEvent)) {
|
||||
QFile e(libEvent);
|
||||
QFileInfo eventInfo(e);
|
||||
auto libEventPath = QDir(this->torDir).filePath(eventInfo.fileName());
|
||||
qDebug() << libEventPath;
|
||||
e.copy(libEventPath);
|
||||
e.close();
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(Q_OS_MAC) || defined(Q_OS_LINUX)
|
||||
torFile = ":/tor/tor";
|
||||
#elif defined(Q_OS_WIN)
|
||||
|
||||
+1
-1
@@ -98,7 +98,7 @@ bool Utils::readJsonFile(QIODevice &device, QSettings::SettingsMap &map) {
|
||||
}
|
||||
|
||||
bool Utils::writeJsonFile(QIODevice &device, const QSettings::SettingsMap &map) {
|
||||
device.write(QJsonDocument(QJsonObject::fromVariantMap(map)).toJson());
|
||||
device.write(QJsonDocument(QJsonObject::fromVariantMap(map)).toJson(QJsonDocument::Indented));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
+2
-2
@@ -49,8 +49,8 @@ struct xdgDesktopEntryPaths {
|
||||
};
|
||||
|
||||
const xdgDesktopEntryPaths xdgPaths = {
|
||||
QString("%1/monero-gui.desktop").arg(QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation)),
|
||||
QString("%1/.local/share/icons/monero.png").arg(QDir::homePath()),
|
||||
QString("%1/feather.desktop").arg(QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation)),
|
||||
QString("%1/.local/share/icons/feather.png").arg(QDir::homePath()),
|
||||
QString("/")
|
||||
};
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ TickerWidget::TickerWidget(QWidget *parent, QString symbol, QString title, bool
|
||||
m_convertBalance(convertBalance)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
m_ctx = MainWindow::getContext();
|
||||
|
||||
// default values before API data
|
||||
if (title == "") title = m_symbol;
|
||||
@@ -29,7 +30,7 @@ TickerWidget::TickerWidget(QWidget *parent, QString symbol, QString title, bool
|
||||
connect(AppContext::prices, &Prices::fiatPricesUpdated, this, &TickerWidget::init);
|
||||
connect(AppContext::prices, &Prices::cryptoPricesUpdated, this, &TickerWidget::init);
|
||||
if (convertBalance)
|
||||
connect(MainWindow::getContext(), &AppContext::balanceUpdated, this, &TickerWidget::init);
|
||||
connect(m_ctx, &AppContext::balanceUpdated, this, &TickerWidget::init);
|
||||
}
|
||||
|
||||
void TickerWidget::init() {
|
||||
|
||||
@@ -34,6 +34,7 @@ private:
|
||||
Ui::TickerWidget *ui;
|
||||
QString m_symbol;
|
||||
bool m_convertBalance;
|
||||
AppContext *m_ctx;
|
||||
};
|
||||
|
||||
#endif // TICKERWIDGET_H
|
||||
|
||||
+52
-42
@@ -7,24 +7,24 @@
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>400</width>
|
||||
<height>335</height>
|
||||
<height>321</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Create Wallet</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="6" column="0">
|
||||
<widget class="QLineEdit" name="directory"/>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<item row="4" column="0">
|
||||
<widget class="QLineEdit" name="password">
|
||||
<property name="text">
|
||||
<string>Password (Optional)</string>
|
||||
<string/>
|
||||
</property>
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::Password</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<item row="9" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
@@ -32,11 +32,31 @@
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QLineEdit" name="directory"/>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLineEdit" name="walletPath"/>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="text">
|
||||
<string>Directory</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string>Password (Optional)</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
@@ -47,56 +67,46 @@
|
||||
<item row="1" column="0">
|
||||
<widget class="QLineEdit" name="walletName"/>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_9">
|
||||
<property name="text">
|
||||
<string>Directory</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<widget class="QPushButton" name="btnChange">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>180</width>
|
||||
<height>16777215</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Change directory</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<widget class="QLineEdit" name="password">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="echoMode">
|
||||
<enum>QLineEdit::Password</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLineEdit" name="walletPath"/>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QPushButton" name="btnChange">
|
||||
<property name="text">
|
||||
<string>Change directory</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
<zorder>label_3</zorder>
|
||||
<zorder>label_9</zorder>
|
||||
<zorder>password</zorder>
|
||||
<zorder>btnChange</zorder>
|
||||
<zorder>directory</zorder>
|
||||
<zorder>label</zorder>
|
||||
<zorder>verticalSpacer</zorder>
|
||||
<zorder>walletName</zorder>
|
||||
<zorder>walletPath</zorder>
|
||||
<zorder>horizontalLayoutWidget</zorder>
|
||||
</widget>
|
||||
<tabstops>
|
||||
<tabstop>walletName</tabstop>
|
||||
<tabstop>walletPath</tabstop>
|
||||
<tabstop>password</tabstop>
|
||||
<tabstop>directory</tabstop>
|
||||
<tabstop>btnChange</tabstop>
|
||||
</tabstops>
|
||||
<resources/>
|
||||
<connections/>
|
||||
|
||||
@@ -22,11 +22,7 @@ CreateWalletSeedPage::CreateWalletSeedPage(AppContext *ctx, QWidget *parent) :
|
||||
this->registerField("mnemonicSeed", ui->hiddenMnemonicSeed);
|
||||
ui->hiddenMnemonicSeed->hide();
|
||||
|
||||
auto fontApp = QApplication::font();
|
||||
auto fontFamily = fontApp.family();
|
||||
auto fontSize = fontApp.pointSize() + 2;
|
||||
m_seedFontFamily = fontFamily;
|
||||
m_seedFontSize = fontSize;
|
||||
ui->seed->setFont(Utils::relativeFont(1));
|
||||
|
||||
connect(ui->btnRoulette, &QPushButton::clicked, [=]{
|
||||
this->seedRoulette(0);
|
||||
@@ -52,8 +48,7 @@ void CreateWalletSeedPage::seedRoulette(int count) {
|
||||
}
|
||||
|
||||
void CreateWalletSeedPage::displaySeed(const QString &seed){
|
||||
auto html = R"(<html><head><meta name="qrichtext" content="1" /></head><body style="font-family:'%1'; font-size:%2pt; font-weight:400; font-style:normal;"><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">%3</p></body></html>)";
|
||||
ui->seed->setText(QString(html).arg(m_seedFontFamily).arg(m_seedFontSize).arg(seed));
|
||||
ui->seed->setPlainText(seed);
|
||||
}
|
||||
|
||||
int CreateWalletSeedPage::nextId() const {
|
||||
|
||||
@@ -42,8 +42,6 @@ private:
|
||||
QString m_mnemonic;
|
||||
unsigned int m_restoreHeight;
|
||||
|
||||
int m_seedFontSize;
|
||||
QString m_seedFontFamily;
|
||||
bool m_roulette = false;
|
||||
int m_rouletteSpin = 15;
|
||||
};
|
||||
|
||||
@@ -6,57 +6,44 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>439</width>
|
||||
<height>425</height>
|
||||
<width>438</width>
|
||||
<height>444</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>WizardPage</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="5" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QPlainTextEdit" name="seed">
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>90</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>WARNING:</string>
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::NoFocus</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0" colspan="2">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Please save these 14 words on paper (order is important). This seed will allow you to recover your wallet in case of computer failure.</string>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
<item>
|
||||
<widget class="QLineEdit" name="hiddenMnemonicSeed">
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::NoFocus</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0" colspan="2">
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<spacer name="horizontalSpacer">
|
||||
@@ -73,6 +60,9 @@
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QPushButton" name="btnRoulette">
|
||||
<property name="focusPolicy">
|
||||
<enum>Qt::NoFocus</enum>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Generate</string>
|
||||
</property>
|
||||
@@ -80,7 +70,36 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="6" column="0" colspan="2">
|
||||
<item>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Please save these 14 words on paper (order is important). This seed will allow you to recover your wallet in case of computer failure.</string>
|
||||
</property>
|
||||
<property name="wordWrap">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>WARNING:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="text">
|
||||
<string><html><head/><body><style>p{margin:0}</style><p>• Never disclose your seed.</p><p>• Never type it on a website.</p><p>• Store it safely (offline).</p><p>• <b>Do not lose your seed!</b></p></body></html></string>
|
||||
@@ -90,50 +109,18 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
<property name="text">
|
||||
<string>Your wallet generation seed is:</string>
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0" colspan="2">
|
||||
<widget class="QTextEdit" name="seed">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Expanding" vsizetype="Preferred">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>80</height>
|
||||
<width>20</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="frameShape">
|
||||
<enum>QFrame::Box</enum>
|
||||
</property>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="lineWidth">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<property name="readOnly">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="html">
|
||||
<string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd">
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'.AppleSystemUIFont'; font-size:13pt; font-weight:400; font-style:normal;">
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'Sans Serif'; font-size:9pt;"><br /></p></body></html></string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<widget class="QLineEdit" name="hiddenMnemonicSeed"/>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
|
||||
@@ -20,15 +20,15 @@ WalletWizard::WalletWizard(AppContext *ctx, WalletWizard::Page startPage, QWidge
|
||||
m_ctx(ctx) {
|
||||
this->setWindowTitle("Welcome to feather");
|
||||
this->setWindowIcon(QIcon(":/assets/images/appicons/64x64.png"));
|
||||
auto openWalletPage = new OpenWalletPage(m_ctx);
|
||||
auto createWallet = new CreateWalletPage(m_ctx);
|
||||
auto createWalletSeed = new CreateWalletSeedPage(m_ctx);
|
||||
setPage(Page_Menu, new MenuPage(m_ctx));
|
||||
auto openWalletPage = new OpenWalletPage(m_ctx, this);
|
||||
auto createWallet = new CreateWalletPage(m_ctx, this);
|
||||
auto createWalletSeed = new CreateWalletSeedPage(m_ctx, this);
|
||||
setPage(Page_Menu, new MenuPage(m_ctx, this));
|
||||
setPage(Page_CreateWallet, createWallet);
|
||||
setPage(Page_OpenWallet, openWalletPage);
|
||||
setPage(Page_CreateWalletSeed, createWalletSeed);
|
||||
setPage(Page_Network, new NetworkPage(m_ctx));
|
||||
setPage(Page_Restore, new RestorePage(m_ctx));
|
||||
setPage(Page_Network, new NetworkPage(m_ctx, this));
|
||||
setPage(Page_Restore, new RestorePage(m_ctx, this));
|
||||
|
||||
if(config()->get(Config::firstRun).toUInt())
|
||||
setStartId(Page_Network);
|
||||
@@ -53,7 +53,8 @@ WalletWizard::WalletWizard(AppContext *ctx, WalletWizard::Page startPage, QWidge
|
||||
}
|
||||
|
||||
void WalletWizard::createWallet() {
|
||||
auto mnemonicSeed = this->field("mnemonicSeed").toString();
|
||||
auto mnemonicRestoredSeed = this->field("mnemonicRestoredSeed").toString();
|
||||
auto mnemonicSeed = mnemonicRestoredSeed.isEmpty() ? this->field("mnemonicSeed").toString() : mnemonicRestoredSeed;
|
||||
const auto walletPath = this->field("walletPath").toString();
|
||||
const auto walletPasswd = this->field("walletPasswd").toString();
|
||||
auto restoreHeight = this->field("restoreHeight").toUInt();
|
||||
|
||||
+16
-11
@@ -15,6 +15,7 @@ XMRToWidget::XMRToWidget(QWidget *parent) :
|
||||
ui(new Ui::XMRToWidget)
|
||||
{
|
||||
ui->setupUi(this);
|
||||
m_ctx = MainWindow::getContext();
|
||||
|
||||
QString amount_rx = R"(^\d*\.\d*$)";
|
||||
QRegExp rx;
|
||||
@@ -33,12 +34,7 @@ XMRToWidget::XMRToWidget(QWidget *parent) :
|
||||
m_showDetailsAction = m_contextMenu->addAction("Details");
|
||||
m_viewOnXmrToAction = m_contextMenu->addAction("View order on XMR.to");
|
||||
m_viewOnXmrToAction->setIcon(QIcon(":/assets/images/xmrto.png"));
|
||||
connect(m_showDetailsAction, &QAction::triggered, [&](){
|
||||
QModelIndex index = ui->historyTable->currentIndex();
|
||||
XmrToOrder *order = this->tableModel->orders->at(index.row());
|
||||
auto * dialog = new XmrToInfoDialog(order, this);
|
||||
dialog->exec();
|
||||
});
|
||||
connect(m_showDetailsAction, &QAction::triggered, this, &XMRToWidget::showInfoDialog);
|
||||
connect(m_viewOnXmrToAction, &QAction::triggered, [&](){
|
||||
QModelIndex index = ui->historyTable->currentIndex();
|
||||
XmrToOrder *order = this->tableModel->orders->at(index.row());
|
||||
@@ -62,6 +58,12 @@ XMRToWidget::XMRToWidget(QWidget *parent) :
|
||||
m_contextMenu->popup(ui->historyTable->viewport()->mapToGlobal(point));
|
||||
}
|
||||
});
|
||||
|
||||
if (m_ctx->isTails || m_ctx->isWhonix) {
|
||||
ui->torCheckBox->setDisabled(true);
|
||||
}
|
||||
|
||||
connect(ui->historyTable, &QTreeView::doubleClicked, this, &XMRToWidget::showInfoDialog);
|
||||
}
|
||||
|
||||
void XMRToWidget::setHistoryModel(XmrToModel *model) {
|
||||
@@ -81,8 +83,6 @@ void XMRToWidget::onWalletClosed() {
|
||||
|
||||
void XMRToWidget::onCreateOrder() {
|
||||
// @TODO: regex verify
|
||||
if(m_ctx == nullptr)
|
||||
this->m_ctx = MainWindow::getContext();
|
||||
|
||||
auto amount = ui->lineAmount->text();
|
||||
if(amount.isEmpty()) {
|
||||
@@ -123,9 +123,6 @@ void XMRToWidget::onTorCheckBoxToggled(int state) {
|
||||
}
|
||||
|
||||
void XMRToWidget::updateConversionLabel() {
|
||||
if(m_ctx == nullptr)
|
||||
this->m_ctx = MainWindow::getContext();
|
||||
|
||||
QString amount = ui->lineAmount->text();
|
||||
|
||||
int curIndex = ui->comboBox_currency->currentIndex();
|
||||
@@ -184,6 +181,14 @@ void XMRToWidget::onEndTransaction() {
|
||||
ui->btnCreate->setEnabled(true);
|
||||
}
|
||||
|
||||
void XMRToWidget::showInfoDialog() {
|
||||
QModelIndex index = ui->historyTable->currentIndex();
|
||||
XmrToOrder *order = this->tableModel->orders->at(index.row());
|
||||
auto *dialog = new XmrToInfoDialog(order, this);
|
||||
dialog->exec();
|
||||
dialog->deleteLater();
|
||||
}
|
||||
|
||||
XMRToWidget::~XMRToWidget() {
|
||||
delete ui;
|
||||
}
|
||||
|
||||
+4
-1
@@ -43,6 +43,8 @@ signals:
|
||||
void viewOrder(const QString &orderId);
|
||||
|
||||
private:
|
||||
void showInfoDialog();
|
||||
|
||||
QMap<QString, TickerWidget*> m_tickerWidgets;
|
||||
QMenu *m_contextMenu;
|
||||
QAction *m_viewOnXmrToAction;
|
||||
@@ -51,7 +53,8 @@ private:
|
||||
Ui::XMRToWidget *ui;
|
||||
AppContext *m_ctx;
|
||||
bool m_ratesDisplayed = false;
|
||||
const QString m_regionBlockMessage = "Beware that XMR.To region blocks certain IPs, which can be problematic in combination with Tor. Use the clearnet option if this is a problem.";
|
||||
const QString m_regionBlockMessage = "Beware that XMR.To region blocks certain IPs, which can be problematic in combination with Tor. "
|
||||
"Wait a few minutes for the circuit to switch, or disable the option to relay over Tor if the problem persists.";
|
||||
double m_unlockedBalance = 0;
|
||||
XmrToModel *tableModel;
|
||||
|
||||
|
||||
@@ -3,11 +3,12 @@
|
||||
HASH="$1"
|
||||
echo "[+] hash: $HASH"
|
||||
|
||||
export DRONE=true
|
||||
echo "[+] Building"
|
||||
|
||||
rm ~/feather.zip 2>&1 >/dev/null
|
||||
cd ~/feather
|
||||
git fetch
|
||||
git fetch --all
|
||||
git reset --hard "$HASH"
|
||||
git submodule update --init --depth 50 contrib/tor
|
||||
git submodule update --init --depth 50 contrib/torsocks
|
||||
|
||||
Reference in New Issue
Block a user