]> Nutra Git (v2) - gamesguru/feather.git/commitdiff
Utils: cleanup
authortobtoht <thotbot@protonmail.com>
Tue, 6 Jul 2021 19:36:27 +0000 (21:36 +0200)
committertobtoht <thotbot@protonmail.com>
Tue, 6 Jul 2021 19:36:27 +0000 (21:36 +0200)
38 files changed:
src/dialog/AboutDialog.cpp
src/dialog/LocalMoneroInfoDialog.cpp
src/dialog/OutputInfoDialog.cpp
src/dialog/SignVerifyDialog.cpp
src/dialog/TxInfoDialog.cpp
src/dialog/TxProofDialog.cpp
src/dialog/UpdateDialog.cpp
src/dialog/VerifyProofDialog.cpp
src/libwalletqt/TransactionHistory.cpp
src/model/AddressBookModel.cpp
src/model/HistoryView.cpp
src/model/LocalMoneroModel.cpp
src/model/WalletKeysFilesModel.cpp
src/utils/RestoreHeightLookup.h
src/utils/TorManager.cpp
src/utils/Updater.cpp
src/utils/Utils.cpp [moved from src/utils/utils.cpp with 73% similarity]
src/utils/Utils.h [new file with mode: 0644]
src/utils/WebsocketClient.cpp
src/utils/WebsocketNotifier.cpp
src/utils/config.cpp
src/utils/networking.cpp
src/utils/networking.h
src/utils/nodes.cpp
src/utils/nodes.h
src/utils/os/tails.cpp
src/utils/os/whonix.cpp
src/utils/prices.h
src/utils/txfiathistory.cpp
src/utils/utils.h [deleted file]
src/utils/wsclient.cpp
src/utils/xmrig.cpp
src/widgets/PayToEdit.h
src/widgets/RedditWidget.cpp
src/wizard/PageNetwork.cpp
src/wizard/PageWalletFile.cpp
src/wizard/PageWalletSeed.h
src/wizard/WalletWizard.cpp

index 898c353286b762d8750308b323e780d88b8126a4..6825400b6d603ec5c64b8a4ebfaee30e8377efe0 100644 (file)
@@ -5,7 +5,7 @@
 #include "ui_AboutDialog.h"
 
 #include "config-feather.h"
-#include "utils/utils.h"
+#include "utils/Utils.h"
 
 AboutDialog::AboutDialog(QWidget *parent)
         : QDialog(parent)
index f92164298f8f7ed46280ab51f480ff166a2d8213..d3df1a7fd7670d9a04e2008f0e639c1e38b4aa93 100644 (file)
@@ -5,7 +5,7 @@
 #include "ui_LocalMoneroInfoDialog.h"
 
 #include "utils/config.h"
-#include "utils/utils.h"
+#include "utils/Utils.h"
 
 LocalMoneroInfoDialog::LocalMoneroInfoDialog(QWidget *parent, LocalMoneroModel *model, int row)
         : QDialog(parent)
index 1779e3d2ea0cc3255b9faf35bcd719037c817d71..772d1fb46b5cac4bf32443b90be93ec89b81bb63 100644 (file)
@@ -5,7 +5,7 @@
 #include "ui_OutputInfoDialog.h"
 
 #include "model/ModelUtils.h"
-#include "utils/utils.h"
+#include "utils/Utils.h"
 
 OutputInfoDialog::OutputInfoDialog(CoinsInfo *cInfo, QWidget *parent)
         : QDialog(parent)
index 96244e9d3711c5377042f71a24de817ad95b12f1..490aa5669510d68bc5e94e0bdf868c15d2a783e9 100644 (file)
@@ -6,7 +6,7 @@
 
 #include <QMessageBox>
 
-#include "utils/utils.h"
+#include "utils/Utils.h"
 
 SignVerifyDialog::SignVerifyDialog(Wallet *wallet, QWidget *parent)
         : QDialog(parent)
index dc549893460e8a51c5b7647f790f62566d376052..d873530dee3825565777e0465076d01e750284a4 100644 (file)
@@ -15,7 +15,7 @@
 #include "libwalletqt/Transfer.h"
 #include "libwalletqt/WalletManager.h"
 #include "model/ModelUtils.h"
-#include "utils.h"
+#include "Utils.h"
 
 TxInfoDialog::TxInfoDialog(QSharedPointer<AppContext> ctx, TransactionInfo *txInfo, QWidget *parent)
     : QDialog(parent)
index 05b43b14f03d6562fa6f6a3314de2ceb41637667..9299c4d5ac6cff4e947620741a9ef0c4a2341e2f 100644 (file)
@@ -8,7 +8,7 @@
 
 #include "libwalletqt/Transfer.h"
 #include "utils/Icons.h"
-#include "utils/utils.h"
+#include "utils/Utils.h"
 
 TxProofDialog::TxProofDialog(QWidget *parent, QSharedPointer<AppContext> ctx, TransactionInfo *txInfo)
     : QDialog(parent)
index 2dc47a556bf15bbf8254fc6e8d3d0fd7c74fa405..af673d855fa0bcc07ad2801e64b60b73af35bf2e 100644 (file)
@@ -10,7 +10,7 @@
 #include "utils/networking.h"
 #include "utils/NetworkManager.h"
 #include "utils/Updater.h"
-#include "utils/utils.h"
+#include "utils/Utils.h"
 
 #include "zip.h"
 
index 12e592b2608ed05f7ed5d7b772ecb38875642dc8..d696f8f684edeeec45ddf4577697537ddf79e6e8 100644 (file)
@@ -8,7 +8,7 @@
 
 #include "libwalletqt/WalletManager.h"
 #include "model/ModelUtils.h"
-#include "utils/utils.h"
+#include "utils/Utils.h"
 
 VerifyProofDialog::VerifyProofDialog(Wallet *wallet, QWidget *parent)
         : QDialog(parent)
index e355275cf30f5ed8e1044575912b023bc1f5f02c..50a76f06df4658292df949f37d9c05217ab1d49b 100644 (file)
@@ -3,7 +3,7 @@
 
 #include "TransactionHistory.h"
 #include "TransactionInfo.h"
-#include "utils/utils.h"
+#include "utils/Utils.h"
 #include "utils/AppData.h"
 #include "utils/config.h"
 
index 9f96a8f3f35d649c8792d61bfbcb134e611d9e15..84380f10c9519005ecea6d68b43d50286896186d 100644 (file)
@@ -4,7 +4,7 @@
 #include "AddressBookModel.h"
 #include "AddressBook.h"
 #include "ModelUtils.h"
-#include "utils/utils.h"
+#include "utils/Utils.h"
 #include "utils/Icons.h"
 
 AddressBookModel::AddressBookModel(QObject *parent, AddressBook *addressBook)
index bc3f89b1b8c6b41e6955686156900ac0bd46fa31..be1da45bfd773818780442350244ab327c7f602b 100644 (file)
@@ -5,7 +5,7 @@
 
 #include "TransactionHistoryProxyModel.h"
 #include "libwalletqt/TransactionInfo.h"
-#include "utils/utils.h"
+#include "utils/Utils.h"
 
 #include <QHeaderView>
 #include <QMenu>
index 065a7bed2725e85b6a7e30d59c1cdfd4b18382dd..9080ec1016a53f517bb6db0687419bcfc339e6bb 100644 (file)
@@ -3,7 +3,7 @@
 
 #include "LocalMoneroModel.h"
 #include <QColor>
-#include "utils/utils.h"
+#include "utils/Utils.h"
 
 LocalMoneroModel::LocalMoneroModel(QObject *parent)
     : QAbstractTableModel(parent)
index 37fd03d53c539314923894c76cabd591b9812b93..225461a13d3321bfee3f0867f22fd502910d3acf 100644 (file)
@@ -3,7 +3,7 @@
 
 #include "WalletKeysFilesModel.h"
 
-#include "utils/utils.h"
+#include "utils/Utils.h"
 #include <QDir>
 #include <QDateTime>
 #include "config.h"
index b0499f03d7bc1c9b81c412aca1309116048bc4c1..9109be2bd9689f3df56eb1513a3be915ec704dea 100644 (file)
@@ -10,7 +10,7 @@
 #include <monero_seed/monero_seed.hpp>
 
 #include "networktype.h"
-#include "utils/utils.h"
+#include "utils/Utils.h"
 
 struct RestoreHeightLookup {
     NetworkType::Type type;
index 3a9c7bb743e7bb27a8a7acac6024327ad17ff49d..e19ea5417fc9ab9b243d504b01dd1b9f7900bf1b 100644 (file)
@@ -8,7 +8,7 @@
 #include <QDesktopServices>
 #include <QRegularExpression>
 
-#include "utils/utils.h"
+#include "utils/Utils.h"
 #include "utils/os/tails.h"
 #include "appcontext.h"
 #include "config-feather.h"
index 6cd339e3a98e7c1b5a6a758b4e4df991d2c1e486..be00e832cf7ccf1024821a44adf387254ff50dae 100644 (file)
@@ -6,10 +6,10 @@
 #include <common/util.h>
 #include <openpgp/hash.h>
 
-#include "utils.h"
+#include "Utils.h"
 
 Updater::Updater() {
-    std::string featherWallet = Utils::fileGetContents(":/assets/gpg_keys/featherwallet.asc").toStdString();
+    std::string featherWallet = Utils::fileOpen(":/assets/gpg_keys/featherwallet.asc").toStdString();
     m_maintainers.emplace_back(featherWallet);
 }
 
similarity index 73%
rename from src/utils/utils.cpp
rename to src/utils/Utils.cpp
index a779c4a8079df7bd683630fd280fcf408e88cf1e..eb1701698aea07b9df4dd53d756babee955952e0 100644 (file)
@@ -1,54 +1,29 @@
 // SPDX-License-Identifier: BSD-3-Clause
 // Copyright (c) 2020-2021, The Monero Project.
 
-#include <QScreen>
 #include <QMessageBox>
 #include <QtNetwork>
 #include <QClipboard>
-#include <QCompleter>
 #include <QDesktopServices>
-#include <QtWidgets/QStyle>
 #include <QPushButton>
 
 #include "constants.h"
 #include "networktype.h"
-#include "utils.h"
+#include "Utils.h"
 #include "utils/ColorScheme.h"
 #include "utils/config.h"
 #include "utils/os/tails.h"
 #include "utils/os/whonix.h"
 
-QByteArray Utils::fileGetContents(const QString &path)
-{
-    QFile file(path);
-    if (!file.open(QFile::ReadOnly))
-    {
-        throw std::runtime_error(QString("failed to open %1").arg(path).toStdString());
-    }
-
-    QByteArray data;
-    data.resize(file.size());
-    if (file.read(data.data(), data.size()) != data.size())
-    {
-        throw std::runtime_error(QString("failed to read %1").arg(path).toStdString());
-    }
-
-    return data;
-}
-
-bool Utils::fileExists(const QString &path) {
+namespace Utils {
+bool fileExists(const QString &path) {
     QFileInfo check_file(path);
     return check_file.exists() && check_file.isFile();
 }
 
-bool Utils::dirExists(const QString &path) {
-    QDir pathDir(path);
-    return pathDir.exists();
-}
-
-QByteArray Utils::fileOpen(const QString &path) {
+QByteArray fileOpen(const QString &path) {
     QFile file(path);
-    if(!file.open(QFile::ReadOnly | QFile::Text)) {
+    if (!file.open(QFile::ReadOnly | QFile::Text)) {
         return QByteArray();
     }
 
@@ -57,10 +32,11 @@ QByteArray Utils::fileOpen(const QString &path) {
     return data;
 }
 
-QByteArray Utils::fileOpenQRC(const QString &path) {
+QByteArray fileOpenQRC(const QString &path) {
     QFile file(path);
-    if(!file.open(QIODevice::ReadOnly)) {
+    if (!file.open(QIODevice::ReadOnly)) {
         qDebug() << "error: " << file.errorString();
+        return QByteArray();
     }
 
     QByteArray data = file.readAll();
@@ -68,9 +44,9 @@ QByteArray Utils::fileOpenQRC(const QString &path) {
     return data;
 }
 
-bool Utils::fileWrite(const QString &path, const QString &data) {
+bool fileWrite(const QString &path, const QString &data) {
     QFile file(path);
-    if(file.open(QIODevice::WriteOnly)){
+    if (file.open(QIODevice::WriteOnly)) {
         QTextStream out(&file); out << data << Qt::endl;
         file.close();
         return true;
@@ -78,127 +54,27 @@ bool Utils::fileWrite(const QString &path, const QString &data) {
     return false;
 }
 
-bool Utils::validateJSON(const QByteArray &blob) {
-    QJsonDocument doc = QJsonDocument::fromJson(blob);
-    QString jsonString = doc.toJson(QJsonDocument::Indented);
-    return !jsonString.isEmpty();
-}
-
-bool Utils::readJsonFile(QIODevice &device, QSettings::SettingsMap &map) {
-    QJsonDocument json = QJsonDocument::fromJson(device.readAll());
-    map = json.object().toVariantMap();
-    return true;
-}
-
-bool Utils::writeJsonFile(QIODevice &device, const QSettings::SettingsMap &map) {
-    device.write(QJsonDocument(QJsonObject::fromVariantMap(map)).toJson(QJsonDocument::Indented));
-    return true;
-}
-
-void Utils::applicationLogHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg) {
-    const QString fn = context.function ? QString::fromUtf8(context.function) : "";
-    const QString date = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
-    QString line;
-
-    switch (type) {
-        case QtDebugMsg:
-            line = QString("[%1 D] %2(:%3) %4\n").arg(date).arg(fn).arg(context.line).arg(msg);
-            fprintf(stderr, "%s", line.toLatin1().data());
-            break;
-        case QtInfoMsg:
-            line = QString("[%1 I] %2\n").arg(date).arg(msg);
-            fprintf(stdout, "%s", line.toLatin1().data());
-            break;
-        case QtWarningMsg:
-            line = QString("[%1 W] %2(:%3) %4\n").arg(date).arg(fn).arg(context.line).arg(msg);
-            fprintf(stdout, "%s", line.toLatin1().data());
-            break;
-        case QtCriticalMsg:
-            line = QString("[%1 C] %2(:%3) %4\n").arg(date).arg(fn).arg(context.line).arg(msg);
-            fprintf(stderr, "%s", line.toLatin1().data());
-            break;
-        case QtFatalMsg:
-            line = QString("[%1 F] %2(:%3) %4\n").arg(date).arg(fn).arg(context.line).arg(msg);
-            fprintf(stderr, "%s", line.toLatin1().data());
-            break;
-    }
-
-    auto message = logMessage(type, line, fn);
-
-    //emit applicationLogUpdated(message);
-}
-
-void Utils::desktopNotify(const QString &title, const QString &message, int duration) {
-    QStringList notify_send = QStringList() << title << message << "-t" << QString::number(duration);
-    QStringList kdialog = QStringList() << title << message;
-    QStringList macos = QStringList() << "-e" << QString(R"(display notification "%1" with title "%2")").arg(message).arg(title);
-#if defined(Q_OS_LINUX)
-    QProcess process;
-    if (Utils::fileExists("/usr/bin/kdialog"))
-        process.start("/usr/bin/kdialog", kdialog);
-    else if (Utils::fileExists("/usr/bin/notify-send"))
-        process.start("/usr/bin/notify-send", notify_send);
-    process.waitForFinished(-1);
-    QString stdout = process.readAllStandardOutput();
-    QString stderr = process.readAllStandardError();
-#elif defined(Q_OS_MACOS)
-    QProcess process;
-    // @TODO: need to escape special chars with "\"
-    process.start("osascript", macos);
-    process.waitForFinished(-1);
-    QString stdout = process.readAllStandardOutput();
-    QString stderr = process.readAllStandardError();
-#endif
-}
-
-bool Utils::portOpen(const QString &hostname, quint16 port){
-    QTcpSocket socket;
-    socket.connectToHost(hostname, port);
-    return socket.waitForConnected(600);
-}
-
-QString Utils::barrayToString(const QByteArray &data) {
-    return QString(QTextCodec::codecForMib(106)->toUnicode(data));
-}
-
-void Utils::externalLinkWarning(QWidget *parent, const QString &url){
-    if(!config()->get(Config::warnOnExternalLink).toBool()) {
-        QDesktopServices::openUrl(QUrl(url));
-        return;
-    }
-
-    QString body = "You are about to open the following link:\n\n";
-    body += QString("%1").arg(url);
-
-    if (!(TailsOS::detect() || WhonixOS::detect()))
-        body += "\n\nYou will NOT be using Tor.";
-
-
-    QMessageBox linkWarning(parent);
-    linkWarning.setWindowTitle("External link warning");
-    linkWarning.setText(body);
-    QPushButton *copy = linkWarning.addButton("Copy link", QMessageBox::HelpRole);
-    linkWarning.addButton(QMessageBox::Cancel);
-    linkWarning.addButton(QMessageBox::Ok);
-    linkWarning.setDefaultButton(QMessageBox::Ok);
-
-    linkWarning.exec();
-
-    if (linkWarning.clickedButton() == copy) {
-        Utils::copyToClipboard(url);
-    } else if (linkWarning.result() == QMessageBox::Ok) {
-        QDesktopServices::openUrl(QUrl(url));
+bool pixmapWrite(const QString &path, const QPixmap &pixmap) {
+    qDebug() << "Writing xdg icon: " << path;
+    QFile file(path);
+    QFileInfo iconInfo(file);
+    QDir().mkpath(iconInfo.path());
+    if(file.open(QIODevice::WriteOnly)){
+        pixmap.save(&file, "PNG");
+        file.close();
+        return true;
     }
+    return false;
 }
 
-QStringList Utils::fileFind(const QRegExp &pattern, const QString &baseDir, int level, int depth, const int maxPerDir) {
+QStringList fileFind(const QRegExp &pattern, const QString &baseDir, int level, int depth, const int maxPerDir) {
     // like `find /foo -name -maxdepth 2 "*.jpg"`
     QStringList rtn;
     QDir dir(baseDir);
     dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoSymLinks | QDir::NoDot | QDir::NoDotDot);
 
     int fileCount = 0;
-    for(const auto &fileInfo: dir.entryInfoList({"*"})) {
+    for (const auto &fileInfo: dir.entryInfoList({"*"})) {
         fileCount += 1;
         if(fileCount > maxPerDir) return rtn;
         if(!fileInfo.isReadable())
@@ -209,7 +85,7 @@ QStringList Utils::fileFind(const QRegExp &pattern, const QString &baseDir, int
 
         if (fileInfo.isDir()) {
             if (level + 1 <= depth)
-                rtn << Utils::fileFind(pattern, path, level + 1, depth, maxPerDir);
+                rtn << fileFind(pattern, path, level + 1, depth, maxPerDir);
         }
         else if (pattern.exactMatch(fn))
             rtn << path;
@@ -217,7 +93,57 @@ QStringList Utils::fileFind(const QRegExp &pattern, const QString &baseDir, int
     return rtn;
 }
 
-void Utils::copyToClipboard(const QString &string){
+bool dirExists(const QString &path) {
+    QDir pathDir(path);
+    return pathDir.exists();
+}
+
+QString defaultWalletDir() {
+    QString portablePath = QCoreApplication::applicationDirPath().append("/%1");
+    if (QFile::exists(portablePath.arg(".portable"))) {
+        return portablePath.arg("feather_data/wallets");
+    }
+
+    if (TailsOS::detect()) {
+        QString path = []{
+            QString appImagePath = qgetenv("APPIMAGE");
+            if (appImagePath.isEmpty()) {
+                qDebug() << "Not an appimage, using currentPath()";
+                return QDir::currentPath() + "/.feather/Monero/wallets";
+            }
+
+            QFileInfo appImageDir(appImagePath);
+            return appImageDir.absoluteDir().path() + "/.feather/Monero/wallets";
+        }();
+
+        return path;
+    }
+
+#if defined(Q_OS_LINUX) or defined(Q_OS_MAC)
+    return QString("%1/Monero/wallets").arg(QDir::homePath());
+#elif defined(Q_OS_WIN)
+    return QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/Monero/wallets";
+#endif
+}
+
+bool validateJSON(const QByteArray &blob) {
+    QJsonDocument doc = QJsonDocument::fromJson(blob);
+    QString jsonString = doc.toJson(QJsonDocument::Indented);
+    return !jsonString.isEmpty();
+}
+
+bool readJsonFile(QIODevice &device, QSettings::SettingsMap &map) {
+    QJsonDocument json = QJsonDocument::fromJson(device.readAll());
+    map = json.object().toVariantMap();
+    return true;
+}
+
+bool writeJsonFile(QIODevice &device, const QSettings::SettingsMap &map) {
+    device.write(QJsonDocument(QJsonObject::fromVariantMap(map)).toJson(QJsonDocument::Indented));
+    return true;
+}
+
+void copyToClipboard(const QString &string){
     QClipboard * clipboard = QApplication::clipboard();
     if (!clipboard) {
         qWarning() << "Unable to access clipboard";
@@ -232,7 +158,7 @@ void Utils::copyToClipboard(const QString &string){
 #endif
 }
 
-QString Utils::copyFromClipboard() {
+QString copyFromClipboard() {
     QClipboard * clipboard = QApplication::clipboard();
     if (!clipboard) {
         qWarning() << "Unable to access clipboard";
@@ -241,93 +167,37 @@ QString Utils::copyFromClipboard() {
     return clipboard->text();
 }
 
-QString Utils::blockExplorerLink(const QString &blockExplorer, NetworkType::Type nettype, const QString &txid) {
-    if (blockExplorer == "exploremonero.com") {
-        if (nettype == NetworkType::MAINNET) {
-            return QString("https://exploremonero.com/transaction/%1").arg(txid);
-        }
-    }
-    else if (blockExplorer == "moneroblocks.info") {
-        if (nettype == NetworkType::MAINNET) {
-            return QString("https://moneroblocks.info/tx/%1").arg(txid);
-        }
-    }
-    else if (blockExplorer == "blockchair.com") {
-        if (nettype == NetworkType::MAINNET) {
-            return QString("https://blockchair.com/monero/transaction/%1").arg(txid);
-        }
-    }
-
-    switch (nettype) {
-        case NetworkType::MAINNET:
-            return QString("https://xmrchain.net/tx/%1").arg(txid);
-        case NetworkType::STAGENET:
-            return QString("https://stagenet.xmrchain.net/tx/%1").arg(txid);
-        case NetworkType::TESTNET:
-            return QString("https://testnet.xmrchain.net/tx/%1").arg(txid);
-    }
-
-    return QString("");
-}
-
-QStandardItem *Utils::qStandardItem(const QString& text) {
-    auto font = QApplication::font();
-    return Utils::qStandardItem(text, font);
-}
-
-QStandardItem *Utils::qStandardItem(const QString& text, QFont &font) {
-    // stupid Qt doesnt set font sizes correctly on OSX
-    // @TODO: memleak
-    auto item = new QStandardItem(text);
-    item->setFont(font);
-    return item;
-}
-
-QString Utils::getUnixAccountName() {
-    QString accountName = qgetenv("USER"); // mac/linux
-    if (accountName.isEmpty())
-        accountName = qgetenv("USERNAME"); // Windows
-    if (accountName.isEmpty())
-        throw std::runtime_error("Could derive system account name from env vars: USER or USERNAME");
-    return accountName;
-}
-
-QString Utils::xdgDesktopEntry(){
+QString xdgDesktopEntry(){
     return QString(
-        "[Desktop Entry]\n"
-        "Name=Feather\n"
-        "GenericName=Feather\n"
-        "X-GNOME-FullName=Feather\n"
-        "Comment=a free Monero desktop wallet\n"
-        "Keywords=Monero;\n"
-        "Exec=\"%1\" %u\n"
-        "Terminal=false\n"
-        "Type=Application\n"
-        "Icon=monero\n"
-        "Categories=Network;GNOME;Qt;\n"
-        "StartupNotify=true\n"
-        "X-GNOME-Bugzilla-Bugzilla=GNOME\n"
-        "X-GNOME-UsesNotifications=true\n"
+            "[Desktop Entry]\n"
+            "Name=Feather\n"
+            "GenericName=Feather\n"
+            "X-GNOME-FullName=Feather\n"
+            "Comment=a free Monero desktop wallet\n"
+            "Keywords=Monero;\n"
+            "Exec=\"%1\" %u\n"
+            "Terminal=false\n"
+            "Type=Application\n"
+            "Icon=monero\n"
+            "Categories=Network;GNOME;Qt;\n"
+            "StartupNotify=true\n"
     ).arg(QApplication::applicationFilePath());
 }
 
-bool Utils::xdgDesktopEntryWrite(const QString &path){
+bool xdgDesktopEntryWrite(const QString &path){
     QString mime = xdgDesktopEntry();
     QFileInfo file(path);
     QDir().mkpath(file.path());
     qDebug() << "Writing xdg desktop entry: " << path;
-    return Utils::fileWrite(path, mime);
+    return fileWrite(path, mime);
 }
 
-void Utils::xdgRefreshApplications(){
+void xdgRefreshApplications(){
     QStringList args = {QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation)};
-    QProcess process;
-    process.start("update-desktop-database", args);
-    process.waitForFinished(2500);
-    process.close();
+    QProcess::startDetached("update-desktop-database", args);
 }
 
-bool Utils::xdgDesktopEntryRegister() {
+bool xdgDesktopEntryRegister() {
 #if defined(Q_OS_MACOS)
     return false;
 #endif
@@ -335,41 +205,47 @@ bool Utils::xdgDesktopEntryRegister() {
     // @TODO: implement
     return false;
 #endif
-    // no support for Tails here
-    if(TailsOS::detect()) return false;
-
-    QString writeLocations = "Write locations:\n";
-    writeLocations += QString("- %1\n").arg(xdgPaths.pathApp);
-    writeLocations += QString("- %1\n").arg(xdgPaths.pathIcon);
 
     QPixmap appIcon(":assets/images/feather.png");
-    if (!Utils::fileExists(xdgPaths.pathIcon))
-        Utils::pixmapWrite(xdgPaths.pathIcon, appIcon);
-    Utils::xdgDesktopEntryWrite(xdgPaths.pathApp);
-    Utils::xdgRefreshApplications();
+    QString pathIcon = QString("%1/.local/share/icons/feather.png").arg(QDir::homePath());
+    if (!fileExists(pathIcon)) {
+        pixmapWrite(pathIcon, appIcon);
+    }
+    xdgDesktopEntryWrite(QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation));
+
+    xdgRefreshApplications();
     return true;
 }
 
-bool Utils::pixmapWrite(const QString &path, const QPixmap &pixmap) {
-    qDebug() << "Writing xdg icon: " << path;
-    QFile file(path);
-    QFileInfo iconInfo(file);
-    QDir().mkpath(iconInfo.path());
-    if(file.open(QIODevice::WriteOnly)){
-        pixmap.save(&file, "PNG");
-        file.close();
-        return true;
+bool portOpen(const QString &hostname, quint16 port){
+    QTcpSocket socket;
+    socket.connectToHost(hostname, port);
+    return socket.waitForConnected(600);
+}
+
+quint16 getDefaultRpcPort(NetworkType::Type type) {
+    switch (type) {
+        case NetworkType::Type::MAINNET:
+            return 18081;
+        case NetworkType::Type::TESTNET:
+            return 28081;
+        case NetworkType::Type::STAGENET:
+            return 38081;
     }
-    return false;
+    return 18081;
 }
 
-QFont Utils::relativeFont(int delta) {
-    auto font = QApplication::font();
-    font.setPointSize(font.pointSize() + delta);
-    return font;
+bool isTorsocks() {
+#if defined(Q_OS_MAC)
+    return qgetenv("DYLD_INSERT_LIBRARIES").indexOf("libtorsocks") >= 0;
+#elif defined(Q_OS_LINUX)
+    return qgetenv("LD_PRELOAD").indexOf("libtorsocks") >= 0;
+#else
+    return false;
+#endif
 }
 
-double Utils::roundSignificant(double N, double n)
+double roundSignificant(double N, double n)
 {
     int h;
     double b, d, e, i, j, m, f;
@@ -395,7 +271,18 @@ double Utils::roundSignificant(double N, double n)
     return j;
 }
 
-QString Utils::formatBytes(quint64 bytes)
+int maxLength(const QVector<QString> &array) {
+    int maxLength = 0;
+    for (const auto &str: array) {
+        auto length = str.length();
+        if (length > maxLength) {
+            maxLength = length;
+        }
+    }
+    return maxLength;
+}
+
+QString formatBytes(quint64 bytes)
 {
     QVector<QString> sizes = { "B", "KB", "MB", "GB", "TB" };
 
@@ -414,10 +301,8 @@ QString Utils::formatBytes(quint64 bytes)
     return QString("%1 %2").arg(QString::number(_data, 'f', 1), sizes[i]);
 }
 
-
-QMap<QString, QLocale> Utils::localeCache = {};
-
-QLocale Utils::getCurrencyLocale(const QString &currencyCode) {
+QMap<QString, QLocale> localeCache = {};
+QLocale getCurrencyLocale(const QString &currencyCode) {
     QLocale locale;
     if (localeCache.contains(currencyCode)) {
         locale = localeCache[currencyCode];
@@ -433,7 +318,7 @@ QLocale Utils::getCurrencyLocale(const QString &currencyCode) {
     return locale;
 }
 
-QString Utils::amountToCurrencyString(double amount, const QString &currencyCode) {
+QString amountToCurrencyString(double amount, const QString &currencyCode) {
     QLocale locale = getCurrencyLocale(currencyCode);
 
     // \xC2\xA0 = UTF-8 non-breaking space, it looks off.
@@ -443,18 +328,102 @@ QString Utils::amountToCurrencyString(double amount, const QString &currencyCode
     return locale.toCurrencyString(amount).remove("\xC2\xA0");
 }
 
-int Utils::maxLength(const QVector<QString> &array) {
-    int maxLength = 0;
-    for (const auto &str: array) {
-        auto length = str.length();
-        if (length > maxLength) {
-            maxLength = length;
+QStandardItem *qStandardItem(const QString& text) {
+    auto font = QApplication::font();
+    return Utils::qStandardItem(text, font);
+}
+
+QStandardItem *qStandardItem(const QString& text, QFont &font) {
+    // stupid Qt doesnt set font sizes correctly on OSX
+    // @TODO: memleak
+    auto item = new QStandardItem(text);
+    item->setFont(font);
+    return item;
+}
+
+QString blockExplorerLink(const QString &blockExplorer, NetworkType::Type nettype, const QString &txid) {
+    if (blockExplorer == "exploremonero.com") {
+        if (nettype == NetworkType::MAINNET) {
+            return QString("https://exploremonero.com/transaction/%1").arg(txid);
         }
     }
-    return maxLength;
+    else if (blockExplorer == "moneroblocks.info") {
+        if (nettype == NetworkType::MAINNET) {
+            return QString("https://moneroblocks.info/tx/%1").arg(txid);
+        }
+    }
+    else if (blockExplorer == "blockchair.com") {
+        if (nettype == NetworkType::MAINNET) {
+            return QString("https://blockchair.com/monero/transaction/%1").arg(txid);
+        }
+    }
+
+    switch (nettype) {
+        case NetworkType::MAINNET:
+            return QString("https://xmrchain.net/tx/%1").arg(txid);
+        case NetworkType::STAGENET:
+            return QString("https://stagenet.xmrchain.net/tx/%1").arg(txid);
+        case NetworkType::TESTNET:
+            return QString("https://testnet.xmrchain.net/tx/%1").arg(txid);
+    }
+
+    return QString("");
 }
 
-QTextCharFormat Utils::addressTextFormat(const SubaddressIndex &index, quint64 amount) {
+void externalLinkWarning(QWidget *parent, const QString &url){
+    if (!config()->get(Config::warnOnExternalLink).toBool()) {
+        QDesktopServices::openUrl(QUrl(url));
+        return;
+    }
+
+    QString body = "You are about to open the following link:\n\n";
+    body += QString("%1").arg(url);
+
+    if (!(TailsOS::detect() || WhonixOS::detect()))
+        body += "\n\nYou will NOT be using Tor.";
+
+
+    QMessageBox linkWarning(parent);
+    linkWarning.setWindowTitle("External link warning");
+    linkWarning.setText(body);
+    QPushButton *copy = linkWarning.addButton("Copy link", QMessageBox::HelpRole);
+    linkWarning.addButton(QMessageBox::Cancel);
+    linkWarning.addButton(QMessageBox::Ok);
+    linkWarning.setDefaultButton(QMessageBox::Ok);
+
+    linkWarning.exec();
+
+    if (linkWarning.clickedButton() == copy) {
+        Utils::copyToClipboard(url);
+    } else if (linkWarning.result() == QMessageBox::Ok) {
+        QDesktopServices::openUrl(QUrl(url));
+    }
+}
+
+void desktopNotify(const QString &title, const QString &message, int duration) {
+    QStringList notify_send = QStringList() << title << message << "-t" << QString::number(duration);
+    QStringList kdialog = QStringList() << title << message;
+    QStringList macos = QStringList() << "-e" << QString(R"(display notification "%1" with title "%2")").arg(message).arg(title);
+#if defined(Q_OS_LINUX)
+    QProcess process;
+    if (fileExists("/usr/bin/kdialog"))
+        process.start("/usr/bin/kdialog", kdialog);
+    else if (fileExists("/usr/bin/notify-send"))
+        process.start("/usr/bin/notify-send", notify_send);
+    process.waitForFinished(-1);
+    QString stdout = process.readAllStandardOutput();
+    QString stderr = process.readAllStandardError();
+#elif defined(Q_OS_MACOS)
+    QProcess process;
+    // @TODO: need to escape special chars with "\"
+    process.start("osascript", macos);
+    process.waitForFinished(-1);
+    QString stdout = process.readAllStandardOutput();
+    QString stderr = process.readAllStandardError();
+#endif
+}
+
+QTextCharFormat addressTextFormat(const SubaddressIndex &index, quint64 amount) {
     QTextCharFormat rec;
     if (index.isPrimary()) {
         rec.setBackground(QBrush(ColorScheme::YELLOW.asColor(true)));
@@ -471,52 +440,51 @@ QTextCharFormat Utils::addressTextFormat(const SubaddressIndex &index, quint64 a
     return rec;
 }
 
-bool Utils::isTorsocks() {
-#if defined(Q_OS_MAC)
-    return qgetenv("DYLD_INSERT_LIBRARIES").indexOf("libtorsocks") >= 0;
-#elif defined(Q_OS_LINUX)
-    return qgetenv("LD_PRELOAD").indexOf("libtorsocks") >= 0;
-#else
-    return false;
-#endif
-}
+void applicationLogHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg) {
+    const QString fn = context.function ? QString::fromUtf8(context.function) : "";
+    const QString date = QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss");
+    QString line;
 
-QString Utils::defaultWalletDir() {
-    QString portablePath = QCoreApplication::applicationDirPath().append("/%1");
-    if (QFile::exists(portablePath.arg(".portable"))) {
-        return portablePath.arg("feather_data/wallets");
+    switch (type) {
+        case QtDebugMsg:
+            line = QString("[%1 D] %2(:%3) %4\n").arg(date).arg(fn).arg(context.line).arg(msg);
+            fprintf(stderr, "%s", line.toLatin1().data());
+            break;
+        case QtInfoMsg:
+            line = QString("[%1 I] %2\n").arg(date).arg(msg);
+            fprintf(stdout, "%s", line.toLatin1().data());
+            break;
+        case QtWarningMsg:
+            line = QString("[%1 W] %2(:%3) %4\n").arg(date).arg(fn).arg(context.line).arg(msg);
+            fprintf(stdout, "%s", line.toLatin1().data());
+            break;
+        case QtCriticalMsg:
+            line = QString("[%1 C] %2(:%3) %4\n").arg(date).arg(fn).arg(context.line).arg(msg);
+            fprintf(stderr, "%s", line.toLatin1().data());
+            break;
+        case QtFatalMsg:
+            line = QString("[%1 F] %2(:%3) %4\n").arg(date).arg(fn).arg(context.line).arg(msg);
+            fprintf(stderr, "%s", line.toLatin1().data());
+            break;
     }
+}
 
-    if (TailsOS::detect()) {
-        QString path = []{
-            QString appImagePath = qgetenv("APPIMAGE");
-            if (appImagePath.isEmpty()) {
-                qDebug() << "Not an appimage, using currentPath()";
-                return QDir::currentPath() + "/.feather/Monero/wallets";
-            }
-
-            QFileInfo appImageDir(appImagePath);
-            return appImageDir.absoluteDir().path() + "/.feather/Monero/wallets";
-        }();
-
-        return path;
-    }
+QString barrayToString(const QByteArray &data) {
+    return QString(QTextCodec::codecForMib(106)->toUnicode(data));
+}
 
-#if defined(Q_OS_LINUX) or defined(Q_OS_MAC)
-    return QString("%1/Monero/wallets").arg(QDir::homePath());
-#elif defined(Q_OS_WIN)
-    return QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/Monero/wallets";
-#endif
+QString getAccountName() {
+    QString accountName = qgetenv("USER"); // mac/linux
+    if (accountName.isEmpty())
+        accountName = qgetenv("USERNAME"); // Windows
+    if (accountName.isEmpty())
+        throw std::runtime_error("Could derive system account name from env vars: USER or USERNAME");
+    return accountName;
 }
 
-quint16 Utils::getDefaultRpcPort(NetworkType::Type type) {
-    switch (type) {
-        case NetworkType::Type::MAINNET:
-            return 18081;
-        case NetworkType::Type::TESTNET:
-            return 28081;
-        case NetworkType::Type::STAGENET:
-            return 38081;
-    }
-    return 18081;
+QFont relativeFont(int delta) {
+    auto font = QApplication::font();
+    font.setPointSize(font.pointSize() + delta);
+    return font;
+}
 }
\ No newline at end of file
diff --git a/src/utils/Utils.h b/src/utils/Utils.h
new file mode 100644 (file)
index 0000000..2df870f
--- /dev/null
@@ -0,0 +1,69 @@
+// SPDX-License-Identifier: BSD-3-Clause
+// Copyright (c) 2020-2021, The Monero Project.
+
+#ifndef FEATHER_UTILS_H
+#define FEATHER_UTILS_H
+
+#include <QRegExp>
+#include <QStandardItemModel>
+#include <QApplication>
+#include <QTextCharFormat>
+
+#include "libwalletqt/Wallet.h"
+#include "networktype.h"
+
+namespace Utils
+{
+    bool fileExists(const QString &path);
+    QByteArray fileOpen(const QString &path);
+    QByteArray fileOpenQRC(const QString &path);
+    bool fileWrite(const QString &path, const QString &data);
+    bool pixmapWrite(const QString &path, const QPixmap &pixmap);
+    QStringList fileFind(const QRegExp &pattern, const QString &baseDir, int level, int depth, int maxPerDir);
+
+    bool dirExists(const QString &path);
+    QString defaultWalletDir();
+
+    bool validateJSON(const QByteArray &blob);
+    bool readJsonFile(QIODevice &device, QSettings::SettingsMap &map);
+    bool writeJsonFile(QIODevice &device, const QSettings::SettingsMap &map);
+
+    void copyToClipboard(const QString &string);
+    QString copyFromClipboard();
+
+    QString xdgDesktopEntry();
+    bool xdgDesktopEntryWrite(const QString &path);
+    void xdgRefreshApplications();
+    bool xdgDesktopEntryRegister();
+
+    bool portOpen(const QString &hostname, quint16 port);
+    quint16 getDefaultRpcPort(NetworkType::Type type);
+    bool isTorsocks();
+
+    double roundSignificant(double N, double n);
+    int maxLength(const QVector<QString> &array);
+    QString formatBytes(quint64 bytes);
+
+    QLocale getCurrencyLocale(const QString &currencyCode);
+    QString amountToCurrencyString(double amount, const QString &currencyCode);
+
+    QStandardItem *qStandardItem(const QString &text);
+    QStandardItem *qStandardItem(const QString &text, QFont &font);
+
+    QString blockExplorerLink(const QString &blockExplorer, NetworkType::Type nettype, const QString &txid);
+    void externalLinkWarning(QWidget *parent, const QString &url);
+
+    void desktopNotify(const QString &title, const QString &message, int duration);
+    QTextCharFormat addressTextFormat(const SubaddressIndex &index, quint64 amount);
+    void applicationLogHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg);
+    QString barrayToString(const QByteArray &data);
+    QString getAccountName();
+    QFont relativeFont(int delta);
+
+    template<typename QEnum>
+    QString QtEnumToString (QEnum value) {
+        return QString::fromStdString(std::string(QMetaEnum::fromType<QEnum>().valueToKey(value)));
+    }
+}
+
+#endif //FEATHER_UTILS_H
index 00bf16ba1b9a1192cb59aa51d86960ddd20078ad..5855f95d0acefb64aa8428538b230dfa7a002219 100644 (file)
@@ -4,7 +4,7 @@
 #include "WebsocketClient.h"
 
 #include <QCoreApplication>
-#include "utils/utils.h"
+#include "utils/Utils.h"
 
 WebsocketClient::WebsocketClient(QObject *parent)
     : QObject(parent)
index 39a7c450313c9c9c0bce4d266d8a3207d1abd5d4..96140d91db81ec8b83a02cb66d803d4d222d9eec 100644 (file)
@@ -2,7 +2,7 @@
 // Copyright (c) 2020-2021, The Monero Project.
 
 #include "WebsocketNotifier.h"
-#include "utils.h"
+#include "Utils.h"
 #include "utils/os/tails.h"
 #include "utils/os/whonix.h"
 
index 2e4baf96ca9324fdba5161ddc3f4def0a9a8c264..7beda16986579da71baf62a8fb36ab17fb2d8aed 100644 (file)
@@ -4,7 +4,7 @@
 // Copyright (c) 2020-2021, The Monero Project.
 
 #include "config.h"
-#include "utils/utils.h"
+#include "utils/Utils.h"
 #include "utils/os/tails.h"
 
 #define QS QStringLiteral
index 9b7e578b56f170463970f7cae09498eda3bd61f4..5885fd95b5e0fc776a3ddca33bfadb4e7a4589c5 100644 (file)
@@ -4,7 +4,7 @@
 #include <QNetworkAccessManager>
 #include <QNetworkReply>
 
-#include "utils/utils.h"
+#include "utils/Utils.h"
 #include "utils/networking.h"
 
 UtilsNetworking::UtilsNetworking(QNetworkAccessManager *networkAccessManager, QObject *parent) :
index 9452c8a884d0674cf4b322cb964c7737b10f3f01..1799ff1c6e07d2bb8976f63075e8049e585d70d0 100644 (file)
@@ -9,7 +9,7 @@
 #include <QNetworkAccessManager>
 #include <QNetworkReply>
 
-#include "utils/utils.h"
+#include "utils/Utils.h"
 
 class UtilsNetworking : public QObject
 {
index ae976fb4ce0124ce075717d7d579b46e9791da10..98f70fd6b27674064107140e8c27af3a052e9e4c 100644 (file)
@@ -4,7 +4,7 @@
 #include <QObject>
 
 #include "nodes.h"
-#include "utils/utils.h"
+#include "utils/Utils.h"
 #include "utils/os/tails.h"
 #include "appcontext.h"
 #include "constants.h"
index ce60584c22ae7f786e2adfc5bbff43e40a1115c1..07ff6713d87316bf35031c650e98343612b3dc82 100644 (file)
@@ -12,7 +12,7 @@
 #include <QNetworkReply>
 
 #include "model/NodeModel.h"
-#include "utils/utils.h"
+#include "utils/Utils.h"
 #include "utils/config.h"
 
 enum NodeSource {
@@ -106,6 +106,7 @@ struct FeatherNode {
     }
 };
 
+class AppContext;
 class Nodes : public QObject {
     Q_OBJECT
 
index 80c5b378d1322dc540669f23cfb77fd1d12debd7..f65f576942a93890feb4869ce566cb1b9185cd31 100644 (file)
@@ -5,7 +5,7 @@
 #include <QMessageBox>
 
 #include "tails.h"
-#include "utils.h"
+#include "Utils.h"
 
 bool TailsOS::detected = false;
 bool TailsOS::isTails = false;
index 6865f2c2eee66843a7bd6d9d2cf948fece1e3481..b22a0c831c286795d4ecda25ff38bc58f54c975d 100644 (file)
@@ -3,7 +3,7 @@
 
 #include "whonix.h"
 
-#include "utils/utils.h"
+#include "utils/Utils.h"
 
 bool WhonixOS::detect() {
     return !QString::fromLocal8Bit(qgetenv("WHONIX")).isEmpty();
index 03fa06bebd250834c2032933c265a0a092dbbec5..6e6f7f422900c1fe4631f570ae2697e755cc84ca 100644 (file)
@@ -6,7 +6,7 @@
 
 #include <QObject>
 
-#include "utils/utils.h"
+#include "utils/Utils.h"
 
 struct marketStruct {
     QString symbol;
index b0f9fb8382e63c20bfbea741c550d01690ec6b8c..73cd471775bd730c4c7d537314502fd73fefb2d5 100644 (file)
@@ -5,7 +5,7 @@
 #include <iomanip>
 
 #include "txfiathistory.h"
-#include "utils/utils.h"
+#include "utils/Utils.h"
 
 TxFiatHistory::TxFiatHistory(int genesis_timestamp, const QString &configDirectory, QObject *parent)
     : QObject(parent)
diff --git a/src/utils/utils.h b/src/utils/utils.h
deleted file mode 100644 (file)
index 32e5add..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-// SPDX-License-Identifier: BSD-3-Clause
-// Copyright (c) 2020-2021, The Monero Project.
-
-#ifndef FEATHER_UTILS_H
-#define FEATHER_UTILS_H
-
-#include <QRegExp>
-#include <QStandardItemModel>
-#include <QApplication>
-#include <QTextCharFormat>
-
-#include <monero_seed/monero_seed.hpp>
-
-#include "networktype.h"
-#include "libwalletqt/Wallet.h"
-
-struct logMessage
-{
-    logMessage(const QtMsgType &type, const QString &message, const QString &fn){
-        logMessage::type = type;
-        logMessage::message = message;
-        logMessage::fn = fn;
-    }
-    QtMsgType type;
-    QString message;
-    QString fn;
-};
-
-struct xdgDesktopEntryPaths {
-    QString pathApp;
-    QString pathIcon;
-    QString PathMime;
-};
-
-const xdgDesktopEntryPaths xdgPaths = {
-    QString("%1/feather.desktop").arg(QStandardPaths::writableLocation(QStandardPaths::ApplicationsLocation)),
-    QString("%1/.local/share/icons/feather.png").arg(QDir::homePath()),
-    QString("/")
-};
-
-class Utils
-{
-
-public:
-    static QByteArray fileGetContents(const QString &path);
-    static bool portOpen(const QString &hostname, quint16 port);
-    static bool fileExists(const QString &path);
-    static QByteArray fileOpen(const QString &path);
-    static QByteArray fileOpenQRC(const QString &path);
-    static void desktopNotify(const QString &title, const QString &message, int duration);
-    static bool fileWrite(const QString &path, const QString &data);
-    static QStringList fileFind(const QRegExp &pattern, const QString &baseDir, int level, int depth, int maxPerDir);
-    static bool validateJSON(const QByteArray &blob);
-    static bool readJsonFile(QIODevice &device, QSettings::SettingsMap &map);
-    static bool writeJsonFile(QIODevice &device, const QSettings::SettingsMap &map);
-    static void applicationLogHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg);
-    static void externalLinkWarning(QWidget *parent, const QString &url);
-    static bool dirExists(const QString &path);
-    static QString barrayToString(const QByteArray &data);
-    static QStandardItem *qStandardItem(const QString &text);
-    static QStandardItem *qStandardItem(const QString &text, QFont &font);
-    static void copyToClipboard(const QString &string);
-    static QString copyFromClipboard();
-    static QString blockExplorerLink(const QString &blockExplorer, NetworkType::Type nettype, const QString &txid);
-    static QString getUnixAccountName();
-    static QString xdgDesktopEntry();
-    static bool xdgDesktopEntryWrite(const QString &path);
-    static void xdgRefreshApplications();
-    static bool xdgDesktopEntryRegister();
-    static bool pixmapWrite(const QString &path, const QPixmap &pixmap);
-    static QFont relativeFont(int delta);
-    static double roundSignificant(double N, double n);
-    static QString formatBytes(quint64 bytes);
-    static QLocale getCurrencyLocale(const QString &currencyCode);
-    static QString amountToCurrencyString(double amount, const QString &currencyCode);
-    static int maxLength(const QVector<QString> &array);
-    static QMap<QString, QLocale> localeCache;
-    static QTextCharFormat addressTextFormat(const SubaddressIndex &index, quint64 amount);
-    static bool isTorsocks();
-    static QString defaultWalletDir();
-    static quint16 getDefaultRpcPort(NetworkType::Type type);
-
-    template<typename QEnum>
-    static QString QtEnumToString (const QEnum value)
-    {
-        return QString::fromStdString(std::string(QMetaEnum::fromType<QEnum>().valueToKey(value)));
-    }
-};
-
-class AppContext;  // forward declaration
-
-#endif //FEATHER_UTILS_H
index 7ef3aa9d8b4ece7ba71720a0d9feaf6c257098ed..d9977f3c14a63ffaa5b93742042eef3dbe3b8f29 100644 (file)
@@ -4,7 +4,7 @@
 #include <QNetworkAccessManager>
 #include <utility>
 #include "wsclient.h"
-#include "utils/utils.h"
+#include "utils/Utils.h"
 
 WSClient::WSClient(QUrl url, QObject *parent)
     : QObject(parent)
index f9f937f49ff3bc13372b95f434c840979488adaf..2f8b613b5acafc9fbcd226373ea5897d3a54336a 100644 (file)
@@ -5,7 +5,7 @@
 #include <QDesktopWidget>
 #include <QDesktopServices>
 
-#include "utils/utils.h"
+#include "utils/Utils.h"
 #include "utils/xmrig.h"
 #include "utils/TorManager.h"
 #include "appcontext.h"
index 78ffd2354d09cce0ed05b11af79437ec1cd2d29d..0b3bfa7064d171c5037ab40637e10f0467b7f7c4 100644 (file)
@@ -8,7 +8,7 @@
 #include <QObject>
 #include <QPlainTextEdit>
 
-#include "utils/utils.h"
+#include "utils/Utils.h"
 
 struct PartialTxOutput {
     explicit PartialTxOutput(QString address = "", quint64 amount = 0)
index cbdcc3dbc0d91780693672f1f75401047aa50f70..6ebe60d9bdbc51c55ea74100772139fb8e67f6f3 100644 (file)
@@ -9,7 +9,7 @@
 #include <QTableWidget>
 
 #include "model/RedditModel.h"
-#include "utils/utils.h"
+#include "utils/Utils.h"
 #include "utils/config.h"
 
 RedditWidget::RedditWidget(QWidget *parent)
index 586f1054feedbced1fa391dba97b9ab089ec531a..ad4a16cf1d982f5f4e7a93ef41493cc0d46787d9 100644 (file)
@@ -7,7 +7,7 @@
 #include <QtConcurrent/QtConcurrent>
 
 #include "constants.h"
-#include "utils.h"
+#include "Utils.h"
 #include "WalletWizard.h"
 
 PageNetwork::PageNetwork(QWidget *parent)
index 2a9373d6c71cd6e8d6c34b47e76f538504f5df96..a0098c8337b965a64d4e114029e0cf0747b43e11 100644 (file)
@@ -5,7 +5,7 @@
 #include "PageWalletFile.h"
 #include "ui_PageWalletFile.h"
 
-#include "utils/utils.h"
+#include "utils/Utils.h"
 
 #include <QFileDialog>
 #include <QMessageBox>
index 5ed406d35249a3d4b8bcb3a4e561784718ccfc17..f1abdbafcf53f70fbe98233332856bcf66dd880e 100644 (file)
@@ -8,7 +8,7 @@
 #include <QWizardPage>
 #include <QWidget>
 
-#include "utils/utils.h"
+#include "utils/Utils.h"
 
 namespace Ui {
     class PageWalletSeed;
index f169937ad5aebd56b0085703f7dfaabf213795d2..2529ed2af59131e114167a1c05f5d52b4287cbf5 100644 (file)
@@ -1,7 +1,7 @@
 // SPDX-License-Identifier: BSD-3-Clause
 // Copyright (c) 2020-2021, The Monero Project.
 
-#include "utils/utils.h"
+#include "utils/Utils.h"
 
 #include "WalletWizard.h"
 #include "PageMenu.h"