// // QmlCommerce.cpp // interface/src/commerce // // Created by Howard Stearns on 8/4/17. // Copyright 2017 High Fidelity, Inc. // // Distributed under the Apache License, Version 2.0. // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // #include "QmlCommerce.h" #include "Application.h" #include "DependencyManager.h" #include "Ledger.h" #include "Wallet.h" #include #include "scripting/WalletScriptingInterface.h" HIFI_QML_DEF(QmlCommerce) QmlCommerce::QmlCommerce(QQuickItem* parent) : OffscreenQmlDialog(parent) { auto ledger = DependencyManager::get(); auto wallet = DependencyManager::get(); connect(ledger.data(), &Ledger::buyResult, this, &QmlCommerce::buyResult); connect(ledger.data(), &Ledger::balanceResult, this, &QmlCommerce::balanceResult); connect(ledger.data(), &Ledger::inventoryResult, this, &QmlCommerce::inventoryResult); connect(wallet.data(), &Wallet::securityImageResult, this, &QmlCommerce::securityImageResult); connect(ledger.data(), &Ledger::historyResult, this, &QmlCommerce::historyResult); connect(wallet.data(), &Wallet::keyFilePathIfExistsResult, this, &QmlCommerce::keyFilePathIfExistsResult); connect(ledger.data(), &Ledger::accountResult, this, &QmlCommerce::accountResult); connect(ledger.data(), &Ledger::accountResult, this, [&]() { auto wallet = DependencyManager::get(); auto walletScriptingInterface = DependencyManager::get(); uint status; if (wallet->getKeyFilePath() == "" || !wallet->getSecurityImage()) { status = (uint)WalletStatus::WALLET_STATUS_NOT_SET_UP; } else if (!wallet->walletIsAuthenticatedWithPassphrase()) { status = (uint)WalletStatus::WALLET_STATUS_NOT_AUTHENTICATED; } else { status = (uint)WalletStatus::WALLET_STATUS_READY; } walletScriptingInterface->setWalletStatus(status); emit walletStatusResult(status); }); } void QmlCommerce::getWalletStatus() { auto walletScriptingInterface = DependencyManager::get(); uint status; if (DependencyManager::get()->isLoggedIn()) { // This will set account info for the wallet, allowing us to decrypt and display the security image. account(); } else { status = (uint)WalletStatus::WALLET_STATUS_NOT_LOGGED_IN; emit walletStatusResult(status); walletScriptingInterface->setWalletStatus(status); return; } } void QmlCommerce::getLoginStatus() { emit loginStatusResult(DependencyManager::get()->isLoggedIn()); } void QmlCommerce::getKeyFilePathIfExists() { auto wallet = DependencyManager::get(); emit keyFilePathIfExistsResult(wallet->getKeyFilePath()); } void QmlCommerce::getWalletAuthenticatedStatus() { auto wallet = DependencyManager::get(); emit walletAuthenticatedStatusResult(wallet->walletIsAuthenticatedWithPassphrase()); } void QmlCommerce::getSecurityImage() { auto wallet = DependencyManager::get(); wallet->getSecurityImage(); } void QmlCommerce::chooseSecurityImage(const QString& imageFile) { auto wallet = DependencyManager::get(); wallet->chooseSecurityImage(imageFile); } void QmlCommerce::buy(const QString& assetId, int cost, const bool controlledFailure) { auto ledger = DependencyManager::get(); auto wallet = DependencyManager::get(); QStringList keys = wallet->listPublicKeys(); if (keys.count() == 0) { QJsonObject result{ { "status", "fail" }, { "message", "Uninitialized Wallet." } }; return emit buyResult(result); } QString key = keys[0]; // For now, we receive at the same key that pays for it. ledger->buy(key, cost, assetId, key, controlledFailure); } void QmlCommerce::balance() { auto ledger = DependencyManager::get(); auto wallet = DependencyManager::get(); ledger->balance(wallet->listPublicKeys()); } void QmlCommerce::inventory() { auto ledger = DependencyManager::get(); auto wallet = DependencyManager::get(); ledger->inventory(wallet->listPublicKeys()); } void QmlCommerce::history() { auto ledger = DependencyManager::get(); auto wallet = DependencyManager::get(); ledger->history(wallet->listPublicKeys()); } void QmlCommerce::setPassphrase(const QString& passphrase) { auto wallet = DependencyManager::get(); if(wallet->getPassphrase() && !wallet->getPassphrase()->isEmpty() && !passphrase.isEmpty()) { wallet->changePassphrase(passphrase); } else { wallet->setPassphrase(passphrase); } getWalletAuthenticatedStatus(); } void QmlCommerce::generateKeyPair() { auto wallet = DependencyManager::get(); wallet->generateKeyPair(); getWalletAuthenticatedStatus(); } void QmlCommerce::reset() { auto ledger = DependencyManager::get(); auto wallet = DependencyManager::get(); ledger->reset(); wallet->reset(); } void QmlCommerce::account() { auto ledger = DependencyManager::get(); ledger->account(); }