mirror of
https://git.wownero.com/wowlet/wowlet.git
synced 2024-08-15 01:03:14 +00:00
107 lines
2.9 KiB
C
107 lines
2.9 KiB
C
|
// SPDX-License-Identifier: BSD-3-Clause
|
||
|
// Copyright (c) 2020, The Monero Project.
|
||
|
|
||
|
#ifndef FEATHER_XMRTOORDER_H
|
||
|
#define FEATHER_XMRTOORDER_H
|
||
|
|
||
|
#include <QObject>
|
||
|
|
||
|
#include "utils/networking.h"
|
||
|
#include "PendingTransaction.h"
|
||
|
#include "utils/xmrtoapi.h"
|
||
|
|
||
|
enum OrderState {
|
||
|
Status_Idle,
|
||
|
Status_OrderCreating,
|
||
|
Status_OrderToBeCreated,
|
||
|
Status_OrderUnpaid,
|
||
|
Status_OrderXMRSent,
|
||
|
Status_OrderUnderPaid,
|
||
|
Status_OrderPaidUnconfirmed,
|
||
|
Status_OrderPaid,
|
||
|
Status_OrderBTCSent,
|
||
|
Status_OrderTimedOut,
|
||
|
Status_OrderFailed
|
||
|
};
|
||
|
|
||
|
struct XmrToRates {
|
||
|
double price;
|
||
|
double upper_limit;
|
||
|
double lower_limit;
|
||
|
double ln_upper_limit;
|
||
|
double ln_lower_limit;
|
||
|
double zero_conf_max_amount;
|
||
|
bool zero_conf_enabled;
|
||
|
};
|
||
|
|
||
|
class XmrToOrder : public QObject {
|
||
|
Q_OBJECT
|
||
|
|
||
|
public:
|
||
|
explicit XmrToOrder(AppContext *ctx, UtilsNetworking *network, QString baseUrl, bool clearnet, XmrToRates *rates, QObject *parent = nullptr);
|
||
|
void create(double btcAmount, const QString ¤cy, const QString &btcAddress);
|
||
|
void changeState(OrderState state);
|
||
|
void changeState(const QString &state);
|
||
|
void stop();
|
||
|
|
||
|
int state;
|
||
|
int countdown = -1; // seconds remaining calculated from `seconds_till_timeout`
|
||
|
QString uuid;
|
||
|
QString errorMsg;
|
||
|
QString errorCode;
|
||
|
|
||
|
double btc_amount = 0;
|
||
|
QString btc_dest_address;
|
||
|
QString btc_txid;
|
||
|
QString xmr_txid;
|
||
|
bool uses_lightning = false;
|
||
|
|
||
|
QString receiving_subaddress;
|
||
|
QString created_at;
|
||
|
QString expires_at;
|
||
|
int seconds_till_timeout = -1;
|
||
|
double incoming_amount_total = 0; // amount_in_incoming_currency_for_this_order_as_string
|
||
|
double remaining_amount_incoming; // amount_in_incoming_currency_that_the_user_must_still_send_as_string
|
||
|
double incoming_price_btc = 0; // price_of_1_incoming_in_btc_currency_as_offered_by_service
|
||
|
|
||
|
public slots:
|
||
|
void onCountdown();
|
||
|
void onTransactionCancelled(const QString &address, double amount);
|
||
|
void onTransactionCommitted(bool status, PendingTransaction *tx, const QStringList& txid);
|
||
|
|
||
|
void onCreatedError();
|
||
|
void onChecked(const QJsonObject &object);
|
||
|
void onCheckedError(const XmrToError& err);
|
||
|
void check();
|
||
|
|
||
|
private:
|
||
|
bool m_created = false;
|
||
|
QString m_baseUrl;
|
||
|
QTimer m_checkTimer;
|
||
|
QTimer m_countdownTimer;
|
||
|
int m_checkFailures = 0;
|
||
|
bool m_clearnet;
|
||
|
bool m_paymentSent = false;
|
||
|
bool m_paymentRequested = false;
|
||
|
UtilsNetworking *m_network;
|
||
|
AppContext *m_ctx;
|
||
|
XmrToRates *m_rates;
|
||
|
XmrToApi *m_api;
|
||
|
|
||
|
~XmrToOrder();
|
||
|
|
||
|
signals:
|
||
|
void orderChanged();
|
||
|
void orderPaymentRequired(XmrToOrder *order);
|
||
|
void orderPaid(XmrToOrder *order);
|
||
|
void orderPaidUnconfirmed(XmrToOrder *order);
|
||
|
void orderFailed(XmrToOrder *order);
|
||
|
|
||
|
private slots:
|
||
|
void onCreated(const QJsonObject &object);
|
||
|
void onApiFailure(const XmrToResponse &resp);
|
||
|
void onApiResponse(const XmrToResponse &resp);
|
||
|
};
|
||
|
|
||
|
#endif //FEATHER_XMRTOORDER_H
|