From 5ea944c0d51d776332b1d3c7894ad2b5fe3bd42b Mon Sep 17 00:00:00 2001 From: Tong Van Linh Date: Thu, 15 Aug 2024 15:54:42 +0700 Subject: [PATCH] 1.9.37 --- CMakeLists.txt | 5 +- Images/create-hot-wallet.png | Bin 6392 -> 0 bytes Images/create-hot-wallet.svg | 36 - Images/groups-dark.svg | 10 + Images/health-check-light.svg | 3 + Images/person-add-24px.svg | 4 + Models/AppModel.cpp | 34 +- Models/AppModel.h | 4 + Models/Chats/QNunchukRoomModel.cpp | 7 +- Models/Commons/ReplaceKeyFreeUser.cpp | 14 + Models/Commons/ReplaceKeyFreeUser.h | 6 + Models/Premiums/QAssistedDraftWallets.cpp | 12 + Models/Premiums/QGroupDashboard.cpp | 195 ++- Models/Premiums/QGroupDashboard.h | 15 + Models/Premiums/QGroupWalletHealthCheck.cpp | 18 +- Models/Premiums/QGroupWallets.cpp | 16 +- Models/Premiums/QKeyRecovery.cpp | 2 +- Models/Premiums/QWalletManagement.cpp | 6 +- Models/Premiums/QWalletServicesTag.cpp | 9 +- Models/Premiums/QWalletServicesTag.h | 1 + Models/ServiceSetting.h | 2 +- Models/TransactionModel.cpp | 12 +- Models/WalletModel.cpp | 161 ++- Models/WalletModel.h | 8 + Models/Worker.cpp | 4 +- .../LeftPannel/QServiceLeftPannel.qml | 12 +- ...ceFacilitatorAdminSubscriberLeftPannel.qml | 117 ++ .../QServiceSubscriberRightPannel.qml | 29 +- ...icePlatformKeyCoSigningPoliciesDetails.qml | 2 +- .../customizes/Members/QMemberRole.qml | 1 + .../customizes/QAreaWalletDetail.qml | 23 +- .../customizes/QHomeInitialStep1.qml | 2 +- .../customizes/QHomeInitialStep2.qml | 2 +- .../customizes/QHomeInitialStep3.qml | 38 +- .../customizes/QHomePendingWallet.qml | 24 +- Qml/Components/customizes/QSendDelegate.qml | 6 +- .../customizes/Signers/QAddRequestKey.qml | 9 +- .../Transactions/QCreateTransaction.qml | 2 +- .../QOnScreenCancelPendingTransaction.qml | 2 +- .../QOnScreenCustomizeDestination.qml | 2 +- .../customizes/Wallets/QWalletConfig.qml | 22 +- .../customizes/Wallets/QWalletInfo.qml | 20 +- .../customizes/Wallets/QWalletKeyDelegate.qml | 2 +- .../LocalMode/Onboarding/QAddAWallet.qml | 57 +- .../LocalMode/Onboarding/QCreateHotWallet.qml | 38 +- .../LocalMode/SCR_ADD_NEW_SOFTWARE_SIGNER.qml | 2 +- Qml/Screens/LocalMode/SCR_CREATE_NEW_SEED.qml | 29 +- .../LocalMode/SCR_TRANSACTION_INFO.qml | 11 +- .../EditMembers/QEditMemberConfirmEmail.qml | 80 ++ .../EditMembers/QEditMemberDelegate.qml | 118 ++ .../QEditMemberNewMemberDelegate.qml | 89 ++ .../EditMembers/QEditMemberRole.qml | 120 ++ .../QEditMemberSelectRoleDelegate.qml | 85 ++ .../EditMembers/QEditMemberSuccess.qml | 69 + .../OnlineMode/EditMembers/QEditMembers.qml | 146 ++ .../QPopupEditMemberSelectARole.qml | 99 ++ .../Healths/QSavingAccountDelegate.qml | 1 + Qml/Screens/OnlineMode/SCR_EDIT_MEMBERS.qml | 67 + Qml/Screens/OnlineMode/SCR_HOME_ONLINE.qml | 2 +- Views/Common/ViewStates.h | 1 + Views/Common/ViewsDefines.h | 1 + Views/Common/ViewsEnums.h | 1193 +++++++++-------- Views/Diagram/NunchuckDiagram.asta | Bin 102905 -> 104420 bytes Views/Diagram/NunchuckDiagram.xml | 810 ++++++++--- Views/STATE_ID_ROOT.cpp | 7 + Views/STATE_ID_ROOT.h | 1 + Views/STATE_ID_SCR_CREATE_TRANSACTION.cpp | 11 +- Views/STATE_ID_SCR_EDIT_MEMBERS.cpp | 73 + Views/STATE_ID_SCR_EDIT_MEMBERS.h | 35 + Views/STATE_ID_SCR_HOME.cpp | 4 +- Views/STATE_ID_SCR_REENTER_YOUR_PASSWORD.cpp | 81 +- Views/STATE_ID_SCR_SEND.cpp | 12 +- Views/STATE_ID_SCR_SIGN_IN_VIA_XPUB.cpp | 3 + Views/STATE_ID_SCR_SIGN_IN_VIA_XPUB.h | 1 + Views/Views.h | 21 +- contrib/libnunchuk | 2 +- ifaces/Servers/Byzantine.cpp | 99 ++ ifaces/Servers/Byzantine.h | 15 + ifaces/Servers/Draco.cpp | 63 +- ifaces/Servers/Draco.h | 5 +- ifaces/Servers/DracoDefines.h | 12 +- ifaces/bridgeifaces.cpp | 17 +- localization/STR_QML.js | 46 +- main.cpp | 2 +- qml.qrc | 15 +- 85 files changed, 3332 insertions(+), 1110 deletions(-) delete mode 100644 Images/create-hot-wallet.png delete mode 100644 Images/create-hot-wallet.svg create mode 100644 Images/groups-dark.svg create mode 100644 Images/health-check-light.svg create mode 100644 Images/person-add-24px.svg create mode 100644 Qml/Components/LeftPannel/Service/Byzantine/QServiceFacilitatorAdminSubscriberLeftPannel.qml create mode 100644 Qml/Screens/OnlineMode/EditMembers/QEditMemberConfirmEmail.qml create mode 100644 Qml/Screens/OnlineMode/EditMembers/QEditMemberDelegate.qml create mode 100644 Qml/Screens/OnlineMode/EditMembers/QEditMemberNewMemberDelegate.qml create mode 100644 Qml/Screens/OnlineMode/EditMembers/QEditMemberRole.qml create mode 100644 Qml/Screens/OnlineMode/EditMembers/QEditMemberSelectRoleDelegate.qml create mode 100644 Qml/Screens/OnlineMode/EditMembers/QEditMemberSuccess.qml create mode 100644 Qml/Screens/OnlineMode/EditMembers/QEditMembers.qml create mode 100644 Qml/Screens/OnlineMode/EditMembers/QPopupEditMemberSelectARole.qml create mode 100644 Qml/Screens/OnlineMode/SCR_EDIT_MEMBERS.qml create mode 100644 Views/STATE_ID_SCR_EDIT_MEMBERS.cpp create mode 100644 Views/STATE_ID_SCR_EDIT_MEMBERS.h diff --git a/CMakeLists.txt b/CMakeLists.txt index a75870e0..99e69f1b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,9 @@ cmake_minimum_required( VERSION 3.1 ) #set(CMAKE_OSX_DEPLOYMENT_TARGET "10.14" CACHE STRING "Minimum OS X deployment version") if(UNIX AND APPLE) - project(Nunchuk VERSION 1.9.36) + project(Nunchuk VERSION 1.9.37) else() - project(nunchuk-qt VERSION 1.9.36) + project(nunchuk-qt VERSION 1.9.37) endif() set( CMAKE_CXX_STANDARD 20 ) @@ -176,6 +176,7 @@ set(Views_SRCS Views/STATE_ID_SCR_REPLACE_SELECT_KEY.cpp Views/STATE_ID_SCR_REPLACE_KEYS.cpp Views/STATE_ID_SCR_SIGN_IN_VIA_XPUB.cpp + Views/STATE_ID_SCR_EDIT_MEMBERS.cpp ) set(Views_MOCS diff --git a/Images/create-hot-wallet.png b/Images/create-hot-wallet.png deleted file mode 100644 index d5e81f72f0de6e8c967fb6f0a13026bd179a6538..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6392 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 diff --git a/Images/create-hot-wallet.svg b/Images/create-hot-wallet.svg deleted file mode 100644 index b35ceeb0..00000000 --- a/Images/create-hot-wallet.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Images/groups-dark.svg b/Images/groups-dark.svg new file mode 100644 index 00000000..6f958c4b --- /dev/null +++ b/Images/groups-dark.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/Images/health-check-light.svg b/Images/health-check-light.svg new file mode 100644 index 00000000..65f35f22 --- /dev/null +++ b/Images/health-check-light.svg @@ -0,0 +1,3 @@ + + + diff --git a/Images/person-add-24px.svg b/Images/person-add-24px.svg new file mode 100644 index 00000000..31e4f0d1 --- /dev/null +++ b/Images/person-add-24px.svg @@ -0,0 +1,4 @@ + + + + diff --git a/Models/AppModel.cpp b/Models/AppModel.cpp index 2584d290..d9f4b8d4 100644 --- a/Models/AppModel.cpp +++ b/Models/AppModel.cpp @@ -474,6 +474,11 @@ void AppModel::setSoftwareSignerDeviceList(const QDeviceListModelPtr &value) emit softwareSignerDeviceListChanged(); } +qint64 AppModel::hourFeeOrigin() const +{ + return hourFee_; +} + QString AppModel::hourFeeCurrency() const { double fee = (double)hourFee_/1000; @@ -498,6 +503,11 @@ void AppModel::setHourFee(qint64 fee) } } +qint64 AppModel::minFeeOrigin() const +{ + return minFee_; +} + QString AppModel::minFeeCurrency() const { double btcRate = btcRates()/100000000; @@ -532,6 +542,11 @@ void AppModel::resetSignersChecked() } } +qint64 AppModel::halfHourFeeOrigin() const +{ + return halfHourFee_; +} + QString AppModel::halfHourFeeCurrency() const { double btcRate = btcRates()/100000000; @@ -556,6 +571,11 @@ void AppModel::setHalfHourFee(qint64 fee) } } +qint64 AppModel::fastestFeeOrigin() const +{ + return fastestFee_; +} + QString AppModel::fastestFeeCurrency() const { double btcRate = btcRates()/100000000; @@ -699,12 +719,8 @@ void AppModel::requestCreateUserWallets() WalletsMng->GetListWallet(USER_WALLET); WalletsMng->GetListWallet(GROUP_WALLET); AppModel::instance()->startReloadUserDb(); - static bool needCheckOnboarding = true; - if(needCheckOnboarding){ - needCheckOnboarding = false; - AppModel::instance()->requestOnboarding(); - } }); + AppModel::instance()->requestOnboarding(); } void AppModel::requestSyncSharedWallets() @@ -765,11 +781,10 @@ void AppModel::requestClearData() void AppModel::requestOnboarding() { - timeoutHandler(1000,[=]{ - if (CLIENT_INSTANCE->isSubscribed() || !QGroupWallets::instance()->existGroupPending()) { + timeoutHandler(1000,[=, this]{ + if (CLIENT_INSTANCE->isSubscribed() || QGroupWallets::instance()->existGroupPending() || AppModel::instance()->walletListPtr()->existGroupWallet()) { AppSetting::instance()->setIsFirstTimeOnboarding(true); - } - else { + } else { DBG_INFO << "Checking Onboarding " << AppSetting::instance()->isFirstTimeOnboarding(); if (!AppSetting::instance()->isFirstTimeOnboarding()) { OnBoardingModel::instance()->setState("onboarding"); @@ -991,6 +1006,7 @@ void AppModel::setWalletInfo(const QWalletPtr &d, bool force) << "Wallet Role:" << walletInfo_.data()->myRole() << "Wallet Slug:" << walletInfo_.data()->slug() << "Wallet Status:" << walletInfo_.data()->status(); + QGroupWallets::instance()->setDashboardInfo(walletInfo_); } } diff --git a/Models/AppModel.h b/Models/AppModel.h index 1484df7e..ffff5865 100644 --- a/Models/AppModel.h +++ b/Models/AppModel.h @@ -175,18 +175,22 @@ class AppModel final : public Controller, QString getTxidReplacing() const; void setTxidReplacing(const QString &txidReplacing); + qint64 fastestFeeOrigin() const; QString fastestFeeCurrency() const; QString fastestFee() const; void setFastestFee(qint64 fee); + qint64 halfHourFeeOrigin() const; QString halfHourFeeCurrency() const; QString halfHourFee() const; void setHalfHourFee(qint64 fee); + qint64 hourFeeOrigin() const; QString hourFeeCurrency() const; QString hourFee() const; void setHourFee(qint64 fee); + qint64 minFeeOrigin() const; QString minFeeCurrency() const; QString minFee() const; void setMinFee(qint64 fee); diff --git a/Models/Chats/QNunchukRoomModel.cpp b/Models/Chats/QNunchukRoomModel.cpp index 1dc49580..4d26becb 100755 --- a/Models/Chats/QNunchukRoomModel.cpp +++ b/Models/Chats/QNunchukRoomModel.cpp @@ -1871,15 +1871,18 @@ void QNunchukRoom::nunchukNoticeEvent(const RoomEvent &evt) msgtype.contains("io.nunchuk.custom.key_name_changed", Qt::CaseInsensitive) || msgtype.contains("io.nunchuk.custom.key_updated", Qt::CaseInsensitive)) { + if (dashboard) { + dashboard->GetAlertsInfo(); + } AppModel::instance()->requestCreateUserWallets(); } else if(msgtype.contains("io.nunchuk.custom.transaction", Qt::CaseInsensitive)) { QJsonObject content = evt.fullJson()["content"].toObject(); + DBG_INFO << content; QString wallet_id = content["wallet_local_id"].toString(); if (wallet_id != "") { if(msgtype.contains("io.nunchuk.custom.transaction_canceled") || msgtype.contains("io.nunchuk.custom.transaction_batch_created")){ - DBG_INFO << content; AppModel::instance()->startSyncWalletDb(wallet_id); } else { @@ -1897,6 +1900,7 @@ void QNunchukRoom::nunchukNoticeEvent(const RoomEvent &evt) if(!data.isEmpty()){ trans->setServerKeyMessage(data); } + DBG_INFO << trans.data()->memo(); wallet.data()->transactionHistory()->updateTransaction(trans->txid(), trans); if(AppModel::instance()->transactionInfo()){ QString current_tx_wallet_id = AppModel::instance()->transactionInfo()->walletId(); @@ -2003,6 +2007,7 @@ void QNunchukRoom::nunchukNoticeEvent(const RoomEvent &evt) dashboard->GetWalletInfo(); if(dashboard->isReplaced()){ dashboard->setShowDashBoard(false); + AppModel::instance()->requestCreateUserWallets(); } if (auto walletList = AppModel::instance()->walletListPtr()) { walletList->refresh(); diff --git a/Models/Commons/ReplaceKeyFreeUser.cpp b/Models/Commons/ReplaceKeyFreeUser.cpp index 410eee43..c7af8250 100644 --- a/Models/Commons/ReplaceKeyFreeUser.cpp +++ b/Models/Commons/ReplaceKeyFreeUser.cpp @@ -8,6 +8,7 @@ #include "Premiums/QAssistedDraftWallets.h" #include "Premiums/QWalletServicesTag.h" +bool ReplaceKeyFreeUser::m_tranReplace = false; void ReplaceKeyFreeUser::MixMasterSignerAndSingleSignerAll() { m_replaceFree = true; @@ -173,6 +174,19 @@ bool ReplaceKeyFreeUser::updateKeyReplace(const QString &xfp, const int index) return false; } +bool ReplaceKeyFreeUser::tranReplace() const +{ + return m_tranReplace; +} + +void ReplaceKeyFreeUser::setTranReplace(bool newTranReplace) +{ + if (m_tranReplace == newTranReplace) + return; + m_tranReplace = newTranReplace; + emit tranReplaceChanged(); +} + bool ReplaceKeyFreeUser::replaceFree() const { return m_replaceFree; diff --git a/Models/Commons/ReplaceKeyFreeUser.h b/Models/Commons/ReplaceKeyFreeUser.h index 05959b1b..29ae59b7 100644 --- a/Models/Commons/ReplaceKeyFreeUser.h +++ b/Models/Commons/ReplaceKeyFreeUser.h @@ -29,6 +29,10 @@ class ReplaceKeyFreeUser QString deviceType(const QString &xfp); bool ImportColdcardViaFile(const QString &fileName, int new_index); + + bool tranReplace() const; + void setTranReplace(bool newTranReplace); + public slots: virtual int reuseKeyGetCurrentIndex(const QString &xfp); virtual QString bip32path(const QString &xfp, int index); @@ -38,6 +42,7 @@ public slots: virtual void replaceFlowChanged() = 0; virtual void deviceListChanged() = 0; virtual void deviceTypeChanged() = 0; + virtual void tranReplaceChanged() = 0; private: QJsonArray m_signerExistList {}; QString m_replaceFlow {"replace-key-info"}; @@ -49,6 +54,7 @@ public slots: bool m_replaceFree {false}; QDeviceListModelPtr deviceList_; QString m_deviceType; + static bool m_tranReplace; }; #endif // REPLACEKEYFREEUSER_H diff --git a/Models/Premiums/QAssistedDraftWallets.cpp b/Models/Premiums/QAssistedDraftWallets.cpp index 5d21af8a..5052516d 100644 --- a/Models/Premiums/QAssistedDraftWallets.cpp +++ b/Models/Premiums/QAssistedDraftWallets.cpp @@ -162,6 +162,12 @@ bool QAssistedDraftWallets::RequestAddOrUpdateAKeyToDraftWallet(StructAddHardwar } else { ret = Byzantine::instance()->DraftWalletAddKey(hardware.mGroupId, hardware.mRequestId, data, isDuplicateKey, error_msg); DBG_INFO << data << ret << error_msg << isDuplicateKey; + if (ret) { + if (auto dashboard = QGroupWallets::instance()->dashboardInfoPtr()) { + dashboard->GetAlertsInfo(); + dashboard->GetHealthCheckInfo(); + } + } } if (ret) { AppModel::instance()->setAddSignerWizard(3); @@ -218,6 +224,12 @@ bool QAssistedDraftWallets::RequestAddOrUpdateReuseKeyToDraftWallet(StructAddHar else { ret = Byzantine::instance()->DraftWalletAddKey(hardware.mGroupId, hardware.mRequestId, data, isDuplicateKey, error_msg); DBG_INFO << data << ret << error_msg << isDuplicateKey; + if (ret) { + if (auto dashboard = QGroupWallets::instance()->dashboardInfoPtr()) { + dashboard->GetAlertsInfo(); + dashboard->GetHealthCheckInfo(); + } + } } if (ret) { return true; diff --git a/Models/Premiums/QGroupDashboard.cpp b/Models/Premiums/QGroupDashboard.cpp index fe4750f1..09717fee 100644 --- a/Models/Premiums/QGroupDashboard.cpp +++ b/Models/Premiums/QGroupDashboard.cpp @@ -84,7 +84,8 @@ QString QGroupDashboard::groupStatus() const QString QGroupDashboard::myRole() const { - DBG_INFO << myInfo()["role"].toString(); + // return "FACILITATOR_ADMIN"; //FIXME TBD + // DBG_INFO << myInfo()["role"].toString(); return myInfo()["role"].toString(); } @@ -720,6 +721,50 @@ void QGroupDashboard::setGroupChatExisted(bool existed) } } +bool QGroupDashboard::EditGroupMembers() +{ + QJsonObject output; + QString error_msg = ""; + bool ret = Byzantine::instance()->EditGroupMembers(groupId(), + servicesTagPtr()->confirmCodeNonceBody(), + {}, + servicesTagPtr()->passwordToken(), + servicesTagPtr()->secQuesToken(), + servicesTagPtr()->confirmToken(), + output, + error_msg); + if(ret){ + DBG_INFO << output; + QEventProcessor::instance()->sendEvent(E::EVT_ONS_CLOSE_REQUEST); + GetMemberInfo(); + } + return ret; +} + +bool QGroupDashboard::CalculateRequireSignaturesForEditingMembers() +{ + QJsonObject output; + QString error_msg = ""; + bool ret = Byzantine::instance()->CalculateRequireSignaturesForEditingMembers(groupId(), bodyEditMembers(), output, error_msg); + if(ret){ + DBG_INFO << output; + QJsonObject resultObj = output["result"].toObject(); + servicesTagPtr()->setReqiredSignatures(resultObj); + auto info = servicesTagPtr()->reqiredSignaturesInfo(); + if (info.type == (int)REQUIRED_SIGNATURE_TYPE_INT::CONFIRMATION_CODE) { + if (RequestConfirmationCodeEditMembers()) { + emit editMembersSuccessChanged(); + } + } else if (info.type == (int)REQUIRED_SIGNATURE_TYPE_INT::SECURITY_QUESTION) { + emit editMembersSuccessChanged(); + } else { + QString message = QString("Not Support Dummy Transaction"); + AppModel::instance()->showToast(0, message, EWARNING::WarningType::EXCEPTION_MSG); + } + } + return ret; +} + bool QGroupDashboard::requestStartKeyReplacement(const QString &tag) { if (ServiceSetting::instance()->existHardware(tag)) { @@ -815,6 +860,33 @@ void QGroupDashboard::requestShowLetAddYourKeys() QEventProcessor::instance()->sendEvent(E::EVT_SHOW_GROUP_WALLET_CONFIG_REQUEST); } +bool QGroupDashboard::isDowngrade(QString email_or_username, QString roleNew) +{ + QString roleOld = ""; + for (auto js : groupInfo()["members"].toArray()) { + auto email_or_username_tmp = js.toObject()["email_or_username"].toString(); + if (qUtils::strCompare(email_or_username, email_or_username_tmp)) { + roleOld = js.toObject()["role"].toString(); + } + } + DBG_INFO << email_or_username << roleOld << roleNew; + if (roleOld.isEmpty()) return false; + + static QMap maps = { + {"MASTER", 1}, + {"ADMIN", 2}, + {"KEYHOLDER", 3}, + {"KEYHOLDER_LIMITED", 4}, + {"FACILITATOR_ADMIN", 5}, + {"OBSERVER", 6}, + {"CUSTOMIZE", 7} + }; + if (qUtils::strCompare(roleOld, "FACILITATOR_ADMIN") && qUtils::strCompare(myRole(), "FACILITATOR_ADMIN")) { + return false; + } + return maps[roleOld] < maps[roleNew] && qUtils::strCompare(myRole(), "FACILITATOR_ADMIN"); +} + bool QGroupDashboard::deviceExport(const QStringList tags, nunchuk::SignerType type) { DBG_INFO << tags << qUtils::GetSignerTypeString(type); @@ -942,6 +1014,17 @@ int QGroupDashboard::nInfo() const QJsonObject QGroupDashboard::GetSigner(const QString &xfp) const { + QJsonArray origin = groupInfo()["members"].toArray(); + QString our_id = ""; + for (auto member : origin) { + QJsonObject it = member.toObject(); + QString user_id = it["user"].toObject()["id"].toString(); + QString email_or_username = it["email_or_username"].toString(); + if (qUtils::strCompare(ClientController::instance()->getMe().email, email_or_username)) { + our_id = user_id; + break; + } + } for (QJsonValue js : m_signerInfo) { QJsonObject signer = js.toObject(); if (signer["xfp"].toString() == xfp) { @@ -963,6 +1046,11 @@ QJsonObject QGroupDashboard::GetSigner(const QString &xfp) const } } signer["signer_is_primary"] = qUtils::isPrimaryKey(xfp); + QString added_by_user_id = signer["added_by_user_id"].toString(); + signer["ourAccount"] = false; + if (our_id == added_by_user_id) { + signer["ourAccount"] = true; + } return signer; } } @@ -1057,6 +1145,8 @@ bool QGroupDashboard::FinishKeyReplacement(const QJsonObject &requestBody) if(ret){ DBG_INFO << ret << error_msg; // Handle preparing model here. + GetAlertsInfo(); + GetHealthCheckInfo(); } else{ //Show error @@ -1095,4 +1185,107 @@ QJsonObject QGroupDashboard::alertJson() const return m_currentAlertInfo; } +QVariantList QGroupDashboard::editMembers() const +{ + return m_editMembers.toVariantList(); +} +void QGroupDashboard::initMembers() +{ + m_editMembers = groupInfo()["members"].toArray(); + emit editMembersChanged(); +} + +bool QGroupDashboard::addMember(const QJsonObject &aEditMember) +{ + QJsonObject obj = aEditMember; + obj["isNew"] = true; + DBG_INFO << obj; + m_editMembers.append(obj); + emit editMembersChanged(); + return true; +} + +bool QGroupDashboard::removeMember(const QJsonObject &aEditMember) +{ + QString email_or_username = aEditMember["email_or_username"].toString(); + for (int i = 0; i < m_editMembers.size(); i++) { + auto js = m_editMembers.at(i); + auto email_or_username_tmp = js.toObject()["email_or_username"].toString(); + if (qUtils::strCompare(email_or_username, email_or_username_tmp)) { + m_editMembers.removeAt(i); + emit editMembersChanged(); + return true; + } + } + return false; +} + +bool QGroupDashboard::editMembers(const QJsonObject &aEditMember, int index) +{ + QString email_or_username = aEditMember["email_or_username"].toString(); + auto old = m_editMembers.at(index).toObject(); + QString email_or_username_old = old["email_or_username"].toString(); + DBG_INFO << aEditMember << index; + QJsonObject replace = old; + for (auto it = aEditMember.begin(); it != aEditMember.end(); ++it) { + replace[it.key()] = aEditMember[it.key()]; + } + if (qUtils::strCompare(email_or_username, email_or_username_old)) { + m_editMembers.replace(index, replace); + emit editMembersChanged(); + return true; + } else { + if (containEditMeber(replace)) { + return false; + } else { + m_editMembers.replace(index, replace); + emit editMembersChanged(); + return true; + } + } +} + +bool QGroupDashboard::containEditMeber(const QJsonObject &aEditMember) +{ + QString email_or_username = aEditMember["email_or_username"].toString(); + for (auto js : m_editMembers) { + auto email_or_username_tmp = js.toObject()["email_or_username"].toString(); + if (qUtils::strCompare(email_or_username, email_or_username_tmp)) { + return true; + } + } + return false; +} + +bool QGroupDashboard::RequestConfirmationCodeEditMembers() +{ + QJsonObject data; + data["nonce"] = Draco::instance()->randomNonce(); + data["body"] = bodyEditMembers(); + servicesTagPtr()->setConfirmCodeNonceBody(data); + QString errormsg; + QJsonObject output; + bool ret = Draco::instance()->RequestConfirmationCode("EDIT_GROUP_MEMBERS", data, output, errormsg); + if (ret) { + QString code_id = output["code_id"].toString(); + servicesTagPtr()->setCode_id(code_id); + } + return ret; +} + +QJsonObject QGroupDashboard::bodyEditMembers() +{ + QJsonArray arrays; + for (auto js : m_editMembers) { + auto member = js.toObject(); + QJsonObject newMember; + newMember["email_or_username"] = member["email_or_username"]; + newMember["role"] = member["role"]; + newMember["permissions"] = member["permissions"]; + arrays.append(newMember); + } + QJsonObject requestBody; + requestBody["members"] = arrays; + return requestBody; +} diff --git a/Models/Premiums/QGroupDashboard.h b/Models/Premiums/QGroupDashboard.h index 1300be77..fb4b3ac0 100644 --- a/Models/Premiums/QGroupDashboard.h +++ b/Models/Premiums/QGroupDashboard.h @@ -114,6 +114,7 @@ class QGroupDashboard : public QBasePremium Q_PROPERTY(int inheritanceCount READ inheritanceCount NOTIFY inheritanceCountChanged) Q_PROPERTY(QString historyPeriodId READ historyPeriodId NOTIFY historyPeriodIdChanged) Q_PROPERTY(bool groupChatExisted READ groupChatExisted NOTIFY groupChatExistedChanged) + Q_PROPERTY(QVariantList editMembers READ editMembers NOTIFY editMembersChanged) public: QGroupDashboard(const QString& wallet_id); @@ -211,6 +212,16 @@ class QGroupDashboard : public QBasePremium bool groupChatExisted(); void setGroupChatExisted(bool existed); + bool EditGroupMembers(); + bool CalculateRequireSignaturesForEditingMembers(); + QVariantList editMembers() const; + void initMembers(); + bool addMember(const QJsonObject &aEditMember); + bool removeMember(const QJsonObject &aEditMember); + bool editMembers(const QJsonObject &aEditMember, int index); + bool containEditMeber(const QJsonObject &aEditMember); + bool RequestConfirmationCodeEditMembers(); + QJsonObject bodyEditMembers(); public slots: bool requestStartKeyReplacement(const QString &tag); void requestHealthCheck(const QString &xfp); @@ -220,6 +231,7 @@ public slots: void byzantineRoomDeleted(QString room_id, QString group_id); void requestShowLetAddYourKeys(); + bool isDowngrade(QString email_or_username, QString roleNew); private: bool deviceExport(const QStringList tags, nunchuk::SignerType type); bool xfpExport(const QString xfp); @@ -235,6 +247,8 @@ public slots: void historyPeriodIdChanged(); void groupChatExistedChanged(); + void editMembersChanged(); + void editMembersSuccessChanged(); private: QJsonObject m_groupInfo {}; QJsonObject m_alertInfo {}; @@ -255,5 +269,6 @@ public slots: int m_inheritanceCount {0}; QString mHistoryPeriodId {}; bool m_groupChatExisted {false}; + QJsonArray m_editMembers; }; #endif // QGROUPDASHBOARD_H diff --git a/Models/Premiums/QGroupWalletHealthCheck.cpp b/Models/Premiums/QGroupWalletHealthCheck.cpp index 264f07c3..0d7e44e6 100644 --- a/Models/Premiums/QGroupWalletHealthCheck.cpp +++ b/Models/Premiums/QGroupWalletHealthCheck.cpp @@ -317,6 +317,11 @@ bool QGroupWalletHealthCheck::SkipKeyHealthReminder() ret = Byzantine::instance()->SkipKeyHealthReminder(dashboard->groupId(), wallet_id(), xfp, output, errormsg); } DBG_INFO << ret << output; + if (ret) { + if (auto dash = dashBoardPtr()) { + dash->GetAlertsInfo(); + } + } return ret; } return false; @@ -343,7 +348,18 @@ bool QGroupWalletHealthCheck::CancelHealthCheckPending() QVariantList QGroupWalletHealthCheck::healthStatuses() const { - return m_healthStatuses.toVariantList(); + if (qUtils::strCompare(dashBoardPtr()->myRole(), "FACILITATOR_ADMIN")) { + return m_healthStatuses.toVariantList(); + } else { + QJsonArray list; + for (auto js : m_healthStatuses) { + auto key = js.toObject()["keyinfo"].toObject(); + if (key["ourAccount"].toBool()) { + list.append(js); + } + } + return list.toVariantList(); + } } QVariant QGroupWalletHealthCheck::aKeyStatus() const diff --git a/Models/Premiums/QGroupWallets.cpp b/Models/Premiums/QGroupWallets.cpp index faa40b47..9f485fc9 100644 --- a/Models/Premiums/QGroupWallets.cpp +++ b/Models/Premiums/QGroupWallets.cpp @@ -397,23 +397,13 @@ void QGroupWallets::reset() bool QGroupWallets::AddOrUpdateAKeyToDraftWallet() { - bool ret = QAssistedDraftWallets::AddOrUpdateAKeyToDraftWallet(); - if (ret && mDashboard) { - mDashboard->GetAlertsInfo(); - mDashboard->GetHealthCheckInfo(); - } - return ret; + return QAssistedDraftWallets::AddOrUpdateAKeyToDraftWallet(); } bool QGroupWallets::requestKeyReplacement(QSingleSignerPtr signer) { - bool ret = QAssistedDraftWallets::requestKeyReplacement(signer); - if (ret && mDashboard) { - mDashboard->GetAlertsInfo(); - mDashboard->GetHealthCheckInfo(); - } - return ret; + return QAssistedDraftWallets::requestKeyReplacement(signer); } @@ -459,6 +449,8 @@ void QGroupWallets::findPermissionAccount() currentMember = new_role == "KEYHOLDER" ? dash->myInfo() : currentMember; } else if (new_role == "KEYHOLDER_LIMITED" || cur_role == "KEYHOLDER_LIMITED") { currentMember = new_role == "KEYHOLDER_LIMITED" ? dash->myInfo() : currentMember; + } else if (new_role == "FACILITATOR_ADMIN" || cur_role == "FACILITATOR_ADMIN") { + currentMember = new_role == "FACILITATOR_ADMIN" ? dash->myInfo() : currentMember; } else if (new_role == "OBSERVER" || cur_role == "OBSERVER") { currentMember = new_role == "OBSERVER" ? dash->myInfo() : currentMember; } else if (new_role == "CUSTOMIZE" || cur_role == "CUSTOMIZE") { diff --git a/Models/Premiums/QKeyRecovery.cpp b/Models/Premiums/QKeyRecovery.cpp index fccc8546..c6b9056a 100644 --- a/Models/Premiums/QKeyRecovery.cpp +++ b/Models/Premiums/QKeyRecovery.cpp @@ -347,7 +347,7 @@ bool QKeyRecovery::UpdateSecurityQuestions() output, errormsg); if (ret) { - UpdateRequiredQuestion(); + AutomaticGenerateSecurityQuestions(); } return ret; } diff --git a/Models/Premiums/QWalletManagement.cpp b/Models/Premiums/QWalletManagement.cpp index ad916527..4c5e0c4f 100644 --- a/Models/Premiums/QWalletManagement.cpp +++ b/Models/Premiums/QWalletManagement.cpp @@ -258,7 +258,11 @@ void QWalletManagement::GetListWallet(int mode) else if (status == "DELETED" && bridge::nunchukHasWallet(wallet_id)){ QWarningMessage msgwarning; bridge::nunchukDeleteWallet(wallet_id, msgwarning); - AppSetting::instance()->deleteWalletCached(wallet_id); + if((int)EWARNING::WarningType::NONE_MSG == msgwarning.type()){ + AppModel::instance()->removeWallet(wallet_id); + AppModel::instance()->setWalletListCurrentIndex(0); + AppSetting::instance()->deleteWalletCached(wallet_id); + } } else{} } diff --git a/Models/Premiums/QWalletServicesTag.cpp b/Models/Premiums/QWalletServicesTag.cpp index 82c7fa52..4ae2b670 100644 --- a/Models/Premiums/QWalletServicesTag.cpp +++ b/Models/Premiums/QWalletServicesTag.cpp @@ -80,6 +80,11 @@ bool QWalletServicesTag::requestReplaceKeysVerifyPassword(const QString &passwor return requestVerifyPassword(password,(int)TARGET_ACTION::REPLACE_KEYS); } +bool QWalletServicesTag::requestEditMemberVerifyPassword(const QString &password) +{ + return requestVerifyPassword(password,(int)TARGET_ACTION::EDIT_GROUP_MEMBERS); +} + bool QWalletServicesTag::RequestConfirmationCodeEmergencyLockdown() { QWalletPtr w = ServiceSetting::instance()->walletInfoPtr(); @@ -105,7 +110,7 @@ bool QWalletServicesTag::RequestConfirmationCodeEmergencyLockdown() bool QWalletServicesTag::verifyConfirmationCode(const QString &code) { - DBG_INFO << code; + DBG_INFO << "id: " << m_code_id << "code: " << code; QString errormsg; QJsonObject output; bool ret = Draco::instance()->VerifyConfirmationCode(m_code_id, code, output, errormsg); @@ -772,7 +777,7 @@ void QWalletServicesTag::setListPolicy() if (!server->hasServerKey()) continue; } if (auto dash = w->dashboard()) { - auto hasPermission = dash->role() == "KEYHOLDER" || dash->role() == "MASTER" || dash->role() == "ADMIN"; + auto hasPermission = dash->role() == "KEYHOLDER" || dash->role() == "MASTER" || dash->role() == "ADMIN" || dash->role() == "FACILITATOR_ADMIN"; if (hasPermission) { setuped << wallet_id; } diff --git a/Models/Premiums/QWalletServicesTag.h b/Models/Premiums/QWalletServicesTag.h index 8e8201be..60795ddd 100644 --- a/Models/Premiums/QWalletServicesTag.h +++ b/Models/Premiums/QWalletServicesTag.h @@ -88,6 +88,7 @@ class QWalletServicesTag : public QSwitchAPI bool requestDeleteWalletVerifyPassword(const QString &password); bool requestChangeEmailVerifyPassword(const QString &password); bool requestReplaceKeysVerifyPassword(const QString &password); + bool requestEditMemberVerifyPassword(const QString &password); Q_INVOKABLE bool verifyConfirmationCode(const QString &code); QVariantList securityQuestions(); diff --git a/Models/ServiceSetting.h b/Models/ServiceSetting.h index 2de7a9db..02ff5f8b 100644 --- a/Models/ServiceSetting.h +++ b/Models/ServiceSetting.h @@ -13,7 +13,7 @@ class ServiceSetting : public QObject Q_OBJECT Q_PROPERTY(int optionIndex READ optionIndex WRITE setOptionIndex NOTIFY optionIndexChanged) Q_PROPERTY(int claimInheritanceFlow READ claimInheritanceFlow WRITE setClaimInheritanceFlow NOTIFY claimInheritanceFlowChanged) - Q_PROPERTY(QVariant servicesTag READ servicesTag CONSTANT) + Q_PROPERTY(QVariant servicesTag READ servicesTag NOTIFY walletInfoChanged) Q_PROPERTY(Wallet* walletInfo READ walletInfo NOTIFY walletInfoChanged) public: diff --git a/Models/TransactionModel.cpp b/Models/TransactionModel.cpp index 16c43217..f5f93f08 100644 --- a/Models/TransactionModel.cpp +++ b/Models/TransactionModel.cpp @@ -225,8 +225,12 @@ QString Transaction::memo() const { void Transaction::setMemo(const QString &memo) { - m_transaction.set_memo(memo.toStdString()); - emit memoChanged(); + DBG_INFO << memo; + if(!qUtils::strCompare(memo, QString::fromStdString(m_transaction.get_memo()))){ + m_transaction.set_memo(memo.toStdString()); + bridge::nunchukUpdateTransactionMemo(walletId(), txid(), memo); + emit memoChanged(); + } } int Transaction::status() const { @@ -935,7 +939,7 @@ void TransactionListModel::addTransaction(const QTransactionPtr &d){ void TransactionListModel::updateTransactionMemo(const QString &tx_id, const QString &memo) { for (int i = 0; i < m_data.count(); i++) { - if(m_data.at(i) && (0 == QString::compare(tx_id, m_data.at(i).data()->txid(), Qt::CaseInsensitive))){ + if(m_data.at(i) && qUtils::strCompare(tx_id, m_data.at(i).data()->txid())){ m_data.at(i)->setMemo(memo); emit dataChanged(index(i),index(i)); } @@ -947,7 +951,7 @@ void TransactionListModel::updateTransaction(const QString &tx_id, const QTransa if(tx){ bool existed = false; for (int i = 0; i < m_data.count(); i++) { - if(m_data.at(i) && (0 == QString::compare(tx_id, m_data.at(i).data()->txid(), Qt::CaseInsensitive))){ + if(m_data.at(i) && qUtils::strCompare(tx_id, m_data.at(i).data()->txid())){ m_data.at(i)->setNunchukTransaction(tx.data()->nunchukTransaction()); emit dataChanged(index(i),index(i)); existed = true; diff --git a/Models/WalletModel.cpp b/Models/WalletModel.cpp index 63ae67ce..72be4431 100644 --- a/Models/WalletModel.cpp +++ b/Models/WalletModel.cpp @@ -788,7 +788,7 @@ QVariantList Wallet::ownerMembers() const QJsonObject it = member.toObject(); QJsonObject user = it["user"].toObject(); QString role = it["role"].toString(); - if (role == "KEYHOLDER" || role == "MASTER" || role == "ADMIN") { + if (role == "KEYHOLDER" || role == "MASTER" || role == "ADMIN" || role == "FACILITATOR_ADMIN") { if (!user.isEmpty()) { arrs.append(member); } @@ -960,24 +960,23 @@ void Wallet::GetUserTxs() if(isUserWallet()){ QString wallet_id = id(); QJsonObject data = Draco::instance()->assistedWalletGetListTx(wallet_id); - QJsonArray transactions = data.value("transactions").toArray(); + QJsonArray transactions = data["transactions"].toArray(); for(QJsonValue js_value : transactions){ QJsonObject transaction = js_value.toObject(); QString status = transaction.value("status").toString(); QString psbt = transaction.value("psbt").toString(); - QString note = transaction.value("note").toString(); - QString memo = note; + QString memo = transaction.value("note").toString();; QString type = transaction.value("type").toString(); QString transaction_id = transaction.value("transaction_id").toString(); if (status == "READY_TO_BROADCAST" || status == "PENDING_SIGNATURES" ) { QWarningMessage _msg; QTransactionPtr tran = bridge::nunchukImportPsbt(wallet_id, psbt, _msg); if(tran && (int)EWARNING::WarningType::NONE_MSG == _msg.type()){ - if(transactionHistory()){ - QTransactionPtr tx = transactionHistory()->getTransactionByTxid(transaction_id); - if(tx && 0 != QString::compare(memo, tx.data()->memo(), Qt::CaseInsensitive)){ - bridge::nunchukUpdateTransactionMemo(wallet_id, transaction_id, memo); - } + if(transactionHistory() && transactionHistory()->contains(transaction_id)){ + transactionHistory()->updateTransactionMemo(transaction_id, memo); + } + else { + bridge::nunchukUpdateTransactionMemo(wallet_id, transaction_id, memo); } long int broadcast_time_milis = static_cast(transaction.value("broadcast_time_milis").toDouble()); // honey badger feature: schedule broadcast @@ -990,6 +989,7 @@ void Wallet::GetUserTxs() } //Remove cancelled txs GetUserCancelledTxs(); + GetUserTxNotes(); } } @@ -1018,6 +1018,43 @@ void Wallet::GetUserCancelledTxs() } } +void Wallet::GetUserTxNotes() +{ + if(isUserWallet()){ + QString wallet_id = id(); + QJsonObject output; + QString errormsg = ""; + bool ret = Draco::instance()->assistedWalletGetTxNotes(wallet_id, output, errormsg); + if(ret && transactionHistory() && output.contains("notes")){ + QJsonArray notes = output["notes"].toArray(); + for (auto i : notes) { + QJsonObject note = i.toObject(); + transactionHistory()->updateTransactionMemo(note["transaction_id"].toString(), note["note"].toString()); + } + } + } +} + +QString Wallet::GetUserTxNote(const QString &txid) +{ + if(isUserWallet()){ + QString wallet_id = id(); + QJsonObject output; + QString errormsg = ""; + bool ret = Draco::instance()->assistedWalletGetTxNotes(wallet_id, output, errormsg); + if(ret && transactionHistory() && output.contains("notes")){ + QJsonArray notes = output["notes"].toArray(); + for (auto i : notes) { + QJsonObject note = i.toObject(); + if(qUtils::strCompare(note["transaction_id"].toString(), txid)){ + return note["note"].toString(); + } + } + } + } + return ""; +} + QTransactionPtr Wallet::SyncUserTxs(const nunchuk::Transaction &tx) { QString wallet_id = id(); @@ -1036,18 +1073,17 @@ QTransactionPtr Wallet::SyncUserTxs(const nunchuk::Transaction &tx) QString reject_msg = transaction.value("reject_msg").toString(); QString note = transaction.value("note").toString(); QString replace_txid = transaction.value("replace_txid").toString(); - long int broadcast_time_milis = static_cast(transaction.value("broadcast_time_milis").toDouble()); // honey badger feature: schedule broadcast long int current_time_stamp_milis = static_cast(std::time(nullptr)) * 1000; - if(type == "SCHEDULED" && broadcast_time_milis > current_time_stamp_milis && broadcast_time_milis / 1000 != tx.get_schedule_time()) { bridge::nunchukUpdateTransactionSchedule(wallet_id, QString::fromStdString(tx.get_txid()), broadcast_time_milis/1000,msg); - } else if (type != "SCHEDULED" && tx.get_schedule_time() != -1) { + } + else if (type != "SCHEDULED" && tx.get_schedule_time() != -1) { bridge::nunchukUpdateTransactionSchedule(wallet_id, QString::fromStdString(tx.get_txid()), -1,msg); } - + else{} if (status == "PENDING_CONFIRMATION" || status == "CONFIRMED" || status == "NETWORK_REJECTED") { msg.resetWarningMessage(); bridge::nunchukImportPsbt(wallet_id, psbt,msg); @@ -1067,8 +1103,22 @@ QTransactionPtr Wallet::SyncUserTxs(const nunchuk::Transaction &tx) } } else{} - return bridge::nunchukGetTransaction(wallet_id, transaction_id); + QTransactionPtr trans = bridge::nunchukGetTransaction(wallet_id, transaction_id); + if(trans){ + if (status == "READY_TO_BROADCAST" || status == "PENDING_SIGNATURES" ) { + trans.data()->setMemo(note); + } + } + return trans; + } + } + else { + QString note = GetUserTxNote(QString::fromStdString(tx.get_txid())); + QTransactionPtr trans = bridge::convertTransaction(tx, wallet_id); + if(trans){ + trans.data()->setMemo(note); } + return trans; } } return bridge::convertTransaction(tx, wallet_id); @@ -1162,27 +1212,18 @@ void Wallet::GetGroupTxs() QJsonObject transaction = i.toObject(); QString status = transaction.value("status").toString(); QString psbt = transaction.value("psbt").toString(); - QString note = transaction.value("note").toString(); - QString memo = note; + QString memo = transaction.value("note").toString();; QString type = transaction.value("type").toString(); QString transaction_id = transaction.value("transaction_id").toString(); if (status == "READY_TO_BROADCAST" || status == "PENDING_SIGNATURES" ) { QWarningMessage warningmsg; QTransactionPtr tran = bridge::nunchukImportPsbt(wallet_id, psbt, warningmsg); if(tran && (int)EWARNING::WarningType::NONE_MSG == warningmsg.type()){ - DBG_INFO << ">>>>>>>>>>>" << name() << transaction_id << status << memo << tran.data()->txid(); - QString old_memo = ""; - if(transactionHistory()){ - QTransactionPtr tx = transactionHistory()->getTransactionByTxid(transaction_id); - if(tx){ - old_memo = tx.data()->memo(); - } - else { - old_memo = tran.data()->memo(); - } - if(!qUtils::strCompare(memo, old_memo)){ - bridge::nunchukUpdateTransactionMemo(wallet_id, transaction_id, memo); - } + if(transactionHistory() && transactionHistory()->contains(transaction_id)){ + transactionHistory()->updateTransactionMemo(transaction_id, memo); + } + else { + bridge::nunchukUpdateTransactionMemo(wallet_id, transaction_id, memo); } long int broadcast_time_milis = static_cast(transaction.value("broadcast_time_milis").toDouble()); // honey badger feature: schedule broadcast @@ -1198,6 +1239,7 @@ void Wallet::GetGroupTxs() } //Remove cancelled txs GetGroupCancelledTxs(); + GetGroupTxNotes(); } } @@ -1234,6 +1276,44 @@ void Wallet::GetGroupCancelledTxs() } } +void Wallet::GetGroupTxNotes() +{ + if(isGroupWallet()){ + QString wallet_id = id(); + QString group_id = groupId(); + QJsonObject output; + QString errormsg = ""; + bool ret = Byzantine::instance()->GetAllTransactionNotes(group_id, wallet_id, output, errormsg); + if(ret && transactionHistory() && output.contains("notes")){ + QJsonArray notes = output["notes"].toArray(); + for (auto i : notes) { + QJsonObject note = i.toObject(); + transactionHistory()->updateTransactionMemo(note["transaction_id"].toString(), note["note"].toString()); + } + } + } +} + +QString Wallet::GetGroupTxNote(const QString &txid) { + if(isGroupWallet()){ + QString wallet_id = id(); + QString group_id = groupId(); + QJsonObject output; + QString errormsg = ""; + bool ret = Byzantine::instance()->GetAllTransactionNotes(group_id, wallet_id, output, errormsg); + if(ret && transactionHistory() && output.contains("notes")){ + QJsonArray notes = output["notes"].toArray(); + for (auto i : notes) { + QJsonObject note = i.toObject(); + if(qUtils::strCompare(note["transaction_id"].toString(), txid)){ + return note["note"].toString(); + } + } + } + } + return ""; +} + QTransactionPtr Wallet::SyncGroupTxs(const nunchuk::Transaction &tx) { QString wallet_id = id(); @@ -1254,16 +1334,17 @@ QTransactionPtr Wallet::SyncGroupTxs(const nunchuk::Transaction &tx) QString hex = transaction.value("hex").toString(); QString reject_msg = transaction.value("reject_msg").toString(); QString note = transaction.value("note").toString(); - long int broadcast_time_milis = static_cast(transaction.value("broadcast_time_milis").toDouble()); // honey badger feature: schedule broadcast long int current_time_stamp_milis = static_cast(std::time(nullptr)) * 1000; if(type == "SCHEDULED" && broadcast_time_milis > current_time_stamp_milis && broadcast_time_milis / 1000 != tx.get_schedule_time()) { bridge::nunchukUpdateTransactionSchedule(wallet_id, QString::fromStdString(tx.get_txid()), broadcast_time_milis/1000,msg); - } else if (type != "SCHEDULED" && tx.get_schedule_time() != -1) { + } + else if (type != "SCHEDULED" && tx.get_schedule_time() != -1) { bridge::nunchukUpdateTransactionSchedule(wallet_id, QString::fromStdString(tx.get_txid()), -1,msg); } + else{} if (status == "PENDING_CONFIRMATION" || status == "CONFIRMED" || status == "NETWORK_REJECTED") { bridge::nunchukImportPsbt(wallet_id, psbt, msg); @@ -1283,8 +1364,22 @@ QTransactionPtr Wallet::SyncGroupTxs(const nunchuk::Transaction &tx) } } else{} - return bridge::nunchukGetTransaction(wallet_id, transaction_id); + QTransactionPtr trans = bridge::nunchukGetTransaction(wallet_id, transaction_id); + if(trans ){ + if (status == "READY_TO_BROADCAST" || status == "PENDING_SIGNATURES" ) { + trans.data()->setMemo(note); + } + } + return trans; + } + } + else { + QString note = GetGroupTxNote(QString::fromStdString(tx.get_txid())); + QTransactionPtr trans = bridge::convertTransaction(tx, wallet_id); + if(trans){ + trans.data()->setMemo(note); } + return trans; } } return bridge::convertTransaction(tx, wallet_id); @@ -1598,8 +1693,6 @@ QString Wallet::slug() const QString Wallet::myRole() const { - // return "FACILITATOR_ADMIN"; //FIXME TBD - QString role = ""; if(dashboard()){ role = dashboard().data()->myRole(); diff --git a/Models/WalletModel.h b/Models/WalletModel.h index 10f76c63..1656c37b 100644 --- a/Models/WalletModel.h +++ b/Models/WalletModel.h @@ -89,6 +89,9 @@ class Wallet : public QObject, public Slugs, public ReplaceKeyFreeUser Q_PROPERTY(QString replaceFlow READ replaceFlow NOTIFY replaceFlowChanged) Q_PROPERTY(DeviceListModel* deviceList READ deviceList NOTIFY deviceListChanged) Q_PROPERTY(QString deviceType READ deviceType NOTIFY deviceTypeChanged) + Q_PROPERTY(bool tranReplace READ tranReplace NOTIFY tranReplaceChanged) + Q_PROPERTY(bool isHoneyBadger READ isHoneyBadger CONSTANT) + Q_PROPERTY(bool isIronHand READ isIronHand CONSTANT) public: Wallet(); Wallet(const nunchuk::Wallet &w); @@ -245,6 +248,8 @@ class Wallet : public QObject, public Slugs, public ReplaceKeyFreeUser //User wallet void GetUserTxs(); void GetUserCancelledTxs(); + void GetUserTxNotes(); + QString GetUserTxNote(const QString &txid); QTransactionPtr SyncUserTxs(const nunchuk::Transaction &tx); void UpdateUserTxs(const QString &txid, const QString &memo); void CancelUserTxs(const QString &txid); @@ -255,6 +260,8 @@ class Wallet : public QObject, public Slugs, public ReplaceKeyFreeUser //Group wallet void GetGroupTxs(); void GetGroupCancelledTxs(); + void GetGroupTxNotes(); + QString GetGroupTxNote(const QString &txid); QTransactionPtr SyncGroupTxs(const nunchuk::Transaction &tx); void UpdateGroupTxs(const QString &txid, const QString &memo); void CancelGroupTxs(const QString &txid); @@ -334,6 +341,7 @@ class Wallet : public QObject, public Slugs, public ReplaceKeyFreeUser void replaceFlowChanged() override; void deviceListChanged() override; void deviceTypeChanged() override; + void tranReplaceChanged() override; void rollOverProcess(const QString& address); public slots: void slotSyncCollabKeyname(QList users); diff --git a/Models/Worker.cpp b/Models/Worker.cpp index 8f5e4a53..90ae31d0 100644 --- a/Models/Worker.cpp +++ b/Models/Worker.cpp @@ -473,9 +473,7 @@ void Worker::slotStartGetTransactionHistory(const QString wallet_id) void Worker::slotStartGetEstimatedFee() { - if(AppSetting::instance()->primaryServer() == (int)AppSetting::Chain::MAIN){ - Draco::instance()->feeRates(); - } + Draco::instance()->feeRates(); } void Worker::slotStartSendPinToDevice(const int state_id, const int device_idx, const QString &pin) diff --git a/Qml/Components/LeftPannel/QServiceLeftPannel.qml b/Qml/Components/LeftPannel/QServiceLeftPannel.qml index 4c9bac90..847a78f0 100644 --- a/Qml/Components/LeftPannel/QServiceLeftPannel.qml +++ b/Qml/Components/LeftPannel/QServiceLeftPannel.qml @@ -29,23 +29,25 @@ Item { property bool hasGroupPending: highestPermissionAccount.hasGroupPending property bool isObserver: highestPermissionAccount.role === "OBSERVER" property bool hasWalletLockdown: ServiceSetting.servicesTag.listLockdown.length > 0 + property bool isFacilitatorAdmin: highestPermissionAccount.role === "FACILITATOR_ADMIN" + Loader { anchors.fill: parent sourceComponent: { var user = ClientController.user if (user.isMultiSubscriptions) { - if (hasGroupWallet) { return isObserver ? b_observer_subscriber : b_subscriber } + if (hasGroupWallet) { return isFacilitatorAdmin ? b_facilitator_admin_subscriber : isObserver ? b_observer_subscriber : b_subscriber } else { return b_empty_state } } else if (user.isHoneyBadgerUser) { return hb_subscriber } else if (user.isIronHandUser) { return ih_subscriber } else if (user.isByzantineUser || user.isFinneyUser) { - if (hasGroupWallet) { return isObserver ? b_observer_subscriber : b_subscriber } + if (hasGroupWallet) { return isFacilitatorAdmin ? b_facilitator_admin_subscriber : isObserver ? b_observer_subscriber : b_subscriber } else { return b_empty_state } } else { if (!hasGroupWallet && hasGroupPending) { return b_empty_state } - if (hasGroupWallet) { return isObserver ? b_observer_subscriber : b_subscriber } + if (hasGroupWallet) { return isFacilitatorAdmin ? b_facilitator_admin_subscriber : isObserver ? b_observer_subscriber : b_subscriber } else { return notSubscriber } } } @@ -70,6 +72,10 @@ Item { id: b_observer_subscriber B.QServiceObserverIterationLeftPannel { } } + Component { + id: b_facilitator_admin_subscriber + B.QServiceFacilitatorAdminSubscriberLeftPannel { } + } Component { id: b_empty_state B.QServiceEmptyStateLeftPannel { } diff --git a/Qml/Components/LeftPannel/Service/Byzantine/QServiceFacilitatorAdminSubscriberLeftPannel.qml b/Qml/Components/LeftPannel/Service/Byzantine/QServiceFacilitatorAdminSubscriberLeftPannel.qml new file mode 100644 index 00000000..1f606e6d --- /dev/null +++ b/Qml/Components/LeftPannel/Service/Byzantine/QServiceFacilitatorAdminSubscriberLeftPannel.qml @@ -0,0 +1,117 @@ +/************************************************************************** + * This file is part of the Nunchuk software (https://nunchuk.io/) * + * Copyright (C) 2020-2022 Enigmo * + * Copyright (C) 2022 Nunchuk * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 3 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + **************************************************************************/ +import QtQuick 2.12 +import QtQuick.Controls 2.0 +import QtGraphicalEffects 1.0 +import Qt.labs.platform 1.1 +import HMIEVENTS 1.0 +import NUNCHUCKTYPE 1.0 +import QRCodeItem 1.0 +import DataPool 1.0 +import DRACO_CODE 1.0 +import EWARNING 1.0 +import "../../../origins" +import "../../../customizes" +import "../../../customizes/Chats" +import "../../../customizes/Texts" +import "../../../customizes/Buttons" +import "../../../../../localization/STR_QML.js" as STR + +Item { + id: leftpanel1 + readonly property var option_map: [ + {screen:_EMERGENCY, visible: true, enable:false, title:STR.STR_QML_702, icon: "qrc:/Images/Images/emergency-light.svg" ,action: function(){ return true; } }, + {screen:_KEY_RECOVERY, visible: true, enable:true, title:STR.STR_QML_698, icon: "" ,action: function(){ return true;} }, + {screen:_INHERITANCE_PLANING, visible: true, enable:false, title:STR.STR_QML_736, icon: "qrc:/Images/Images/inheritance-light.svg" ,action: function(){ return true;} }, + {screen:_CLAIM_AN_INHERITANCE, visible: true, enable:true, title:STR.STR_QML_737, icon: "" ,action: function(){ ServiceSetting.servicesTag.clearClaimAnInheritance(); return true; }}, + ] + property var itemOption: option_map.find(function(e) { if (e.screen === ServiceSetting.optionIndex) return true; else return false } ) + Component.onCompleted: { + ServiceSetting.optionIndex = 2 + var access = option_map.find(function(e) { if (e.screen === ServiceSetting.optionIndex) return true; else return false } ) + if (access) { + var isOK = access.visible && access.enable + if (!isOK) { + var index = option_map.find(function(e) { if (e.visible && e.enable) return true; else return false } ).screen + ServiceSetting.optionIndex = index + } + } + } + + Column { + anchors.fill: parent + anchors.topMargin: 24 + spacing: 12 + Column { + spacing: 0 + Repeater { + model: option_map.length + Rectangle { + id: _item + width: leftpanel1.width + height: 48 + visible: option_map[index].visible + enabled: option_map[index].enable + color: itemOption.screen === option_map[index].screen ? Qt.rgba(255, 255, 255, 0.3) : itemSetingMouse.containsMouse ? Qt.rgba(255, 255, 255, 0.1) : "transparent" + Row { + spacing: 8 + anchors.fill: parent + Item { + width: 8; + height: parent.height + Rectangle { + width: 4 + height: parent.height + color: itemOption.screen === option_map[index].screen ? "#F6D65D" : "transparent" + anchors.verticalCenter: parent.verticalCenter + } + } + QIcon { + id:_icon + iconSize: 24 + anchors.verticalCenter: parent.verticalCenter + source: option_map[index].icon + visible: source != "" + } + QText { + anchors.verticalCenter: parent.verticalCenter + text: option_map[index].title + color: "#FFFFFF" + font.family: "Lato" + font.pixelSize: 16 + font.weight: _icon.visible ? Font.DemiBold : Font.Normal + } + } + MouseArea { + id: itemSetingMouse + anchors.fill: parent + hoverEnabled: true + onClicked: { + var _item = option_map[index] + if (_item.action()) { + ServiceSetting.optionIndex = _item.screen + } + } + } + } + } + } + } +} diff --git a/Qml/Components/RightPannel/Service/Byzantine/QServiceSubscriberRightPannel.qml b/Qml/Components/RightPannel/Service/Byzantine/QServiceSubscriberRightPannel.qml index 24620c41..1df59dc4 100644 --- a/Qml/Components/RightPannel/Service/Byzantine/QServiceSubscriberRightPannel.qml +++ b/Qml/Components/RightPannel/Service/Byzantine/QServiceSubscriberRightPannel.qml @@ -19,6 +19,8 @@ **************************************************************************/ import QtQuick 2.12 import "../Common" +import "../Byzantine" as B +import "../HoneyBadger-IronHand" as HBIR Item { readonly property var option_map: [ @@ -26,16 +28,30 @@ Item { {screen:_KEY_RECOVERY, screen_component: _key_recovery }, {screen:_VIEW_INHERITANCE_PLANING, screen_component: _view_inheritance_planing }, {screen:_CLAIM_AN_INHERITANCE, screen_component: _claim_an_inheritance }, - {screen:_PLATFORM_KEY_CO_SIGNING_POLICIES, screen_component: _platform_key_co_signing_policies }, + {screen:_PLATFORM_KEY_CO_SIGNING_POLICIES, screen_component: _platform_key_co_signing_policies_B }, {screen:_GET_ADDITIONAL_WALLETS, screen_component: "" }, {screen:_REPLACE_KEY_IN_AN_ASSISTED_WALLET, screen_component: "" }, {screen:_ORDER_NEW_HARDWARE, screen_component: "" }, {screen:_MANAGE_SUBSCRIPTION, screen_component: "" }, ] property var itemOption: option_map.find(function(e) {if (e.screen === ServiceSetting.optionIndex) return true; else return false}) + + function platform_key_co_signing_policies() { + if (ServiceSetting.walletInfo === null) { + return _platform_key_co_signing_policies_B + } else { + return (ServiceSetting.walletInfo.isHoneyBadger || ServiceSetting.walletInfo.isIronHand) ? _platform_key_co_signing_policies_HBIR : _platform_key_co_signing_policies_B + } + } + Loader { anchors.fill: parent - sourceComponent: itemOption.screen_component + sourceComponent: if(ServiceSetting.optionIndex !== _PLATFORM_KEY_CO_SIGNING_POLICIES) { + itemOption.screen_component + } + else { + platform_key_co_signing_policies() + } } Component { id: _claim_an_inheritance @@ -58,8 +74,13 @@ Item { } } Component { - id: _platform_key_co_signing_policies - QServicePlatformKeyCoSigningPolicies { + id: _platform_key_co_signing_policies_B + B.QServicePlatformKeyCoSigningPolicies { + } + } + Component { + id: _platform_key_co_signing_policies_HBIR + HBIR.QServicePlatformKeyCoSigningPolicies { } } } diff --git a/Qml/Components/RightPannel/Service/HoneyBadger-IronHand/QServicePlatformKeyCoSigningPoliciesDetails.qml b/Qml/Components/RightPannel/Service/HoneyBadger-IronHand/QServicePlatformKeyCoSigningPoliciesDetails.qml index c2a533a9..3b79e5a7 100644 --- a/Qml/Components/RightPannel/Service/HoneyBadger-IronHand/QServicePlatformKeyCoSigningPoliciesDetails.qml +++ b/Qml/Components/RightPannel/Service/HoneyBadger-IronHand/QServicePlatformKeyCoSigningPoliciesDetails.qml @@ -82,7 +82,7 @@ Item { } Column { id: honey_badger - visible: ClientController.user.isHoneyBadgerUser + visible: ServiceSetting.walletInfo.isHoneyBadger spacing: 16 Item { width: 627 diff --git a/Qml/Components/customizes/Members/QMemberRole.qml b/Qml/Components/customizes/Members/QMemberRole.qml index 2310f380..9b537f26 100644 --- a/Qml/Components/customizes/Members/QMemberRole.qml +++ b/Qml/Components/customizes/Members/QMemberRole.qml @@ -28,6 +28,7 @@ QBadge { "ADMIN": STR.STR_QML_950, "KEYHOLDER": STR.STR_QML_951, "KEYHOLDER_LIMITED": STR.STR_QML_952, + "FACILITATOR_ADMIN": STR.STR_QML_1396, "OBSERVER": STR.STR_QML_953, "CUSTOMIZE": STR.STR_QML_849, } diff --git a/Qml/Components/customizes/QAreaWalletDetail.qml b/Qml/Components/customizes/QAreaWalletDetail.qml index 09788d61..71acbcbf 100644 --- a/Qml/Components/customizes/QAreaWalletDetail.qml +++ b/Qml/Components/customizes/QAreaWalletDetail.qml @@ -30,8 +30,8 @@ Item { property bool isHotWallet: false property bool isLocked: false property bool isReplaced: false - property bool isFacilitatorAdmin: false property real ratio: 0.55 + property string myRole: AppModel.walletInfo.myRole Item { id: area_wldetail anchors.fill: parent @@ -46,13 +46,6 @@ Item { GradientStop { position: 0.0; color: isHotWallet ? "#A66800" : (isReplaced || isLocked) ? "#595959" : (isAssisted ? "#2F766D" : "#2F466C") } GradientStop { position: 1.0; color: isHotWallet ? "#A66800" : (isReplaced || isLocked) ? "#595959" : (isAssisted ? "#1C4A21" : "#031F2B") } } - Rectangle { - width: parent.width * (1.0 - ratio) - height: parent.height - anchors.right: parent.right - color: "#F5F5F5" - visible: !isFacilitatorAdmin - } } } Rectangle { @@ -76,4 +69,18 @@ Item { color: "#80000000" source: realBalanceCard } + Rectangle { + width: parent.width * (1.0 - ratio) + height: parent.height + anchors.right: parent.right + color: "#F5F5F5" + visible: (myRole !== "FACILITATOR_ADMIN") + radius: 24 + Rectangle { + width: 24 + height: parent.height + anchors.left: parent.left + color: "#F5F5F5" + } + } } diff --git a/Qml/Components/customizes/QHomeInitialStep1.qml b/Qml/Components/customizes/QHomeInitialStep1.qml index 4e2e3903..c707edf6 100644 --- a/Qml/Components/customizes/QHomeInitialStep1.qml +++ b/Qml/Components/customizes/QHomeInitialStep1.qml @@ -45,7 +45,7 @@ Rectangle { titleSuggest: STR.STR_QML_1251 content: STR.STR_QML_1252 height: 180 - icon:"qrc:/Images/Images/create-hot-wallet.png" + icon:"qrc:/Images/Images/person-add-24px.svg" onBtnClicked: { OnBoarding.state = "hotWallet" QMLHandle.sendEvent(EVT.EVT_ONBOARDING_REQUEST) diff --git a/Qml/Components/customizes/QHomeInitialStep2.qml b/Qml/Components/customizes/QHomeInitialStep2.qml index c6ce19b0..61fc8c4d 100644 --- a/Qml/Components/customizes/QHomeInitialStep2.qml +++ b/Qml/Components/customizes/QHomeInitialStep2.qml @@ -45,7 +45,7 @@ Rectangle { titleSuggest: STR.STR_QML_1251 content: STR.STR_QML_1252 height: 180 - icon:"qrc:/Images/Images/create-hot-wallet.png" + icon:"qrc:/Images/Images/person-add-24px.svg" onBtnClicked: { OnBoarding.state = "hotWallet" QMLHandle.sendEvent(EVT.EVT_ONBOARDING_REQUEST) diff --git a/Qml/Components/customizes/QHomeInitialStep3.qml b/Qml/Components/customizes/QHomeInitialStep3.qml index f42033dd..475e02cc 100644 --- a/Qml/Components/customizes/QHomeInitialStep3.qml +++ b/Qml/Components/customizes/QHomeInitialStep3.qml @@ -97,12 +97,11 @@ Item { isHotWallet: AppModel.walletInfo.needBackup isLocked: AppModel.walletInfo.isLocked isReplaced: AppModel.walletInfo.isReplaced - isFacilitatorAdmin: (myRole === "FACILITATOR_ADMIN") Row{ anchors.fill: parent Item { height: parent.height - width: parent.width * _walletDes.ratio + width: parent.width * (myRole === "FACILITATOR_ADMIN" ? 1 : _walletDes.ratio) QText { id: displayWalletname width: 380 @@ -120,22 +119,36 @@ Item { topMargin: 24 } } - QIconButton{ - id:_more - width: 24 - height: 24 + Row { + spacing: 8 anchors{ right: parent.right rightMargin: 36 top: parent.top topMargin: 30*QAPP_DEVICE_HEIGHT_RATIO } - visible: (myRole !== "OBSERVER") && (myRole !== "FACILITATOR_ADMIN") - icon: "qrc:/Images/Images/OnlineMode/more_horiz_24px.png" - onClicked: { - optionMenu.popup(_more,mouse.x - 250 + 24,24) + QIconButton{ + id: _group + width: 24 + height: 24 + visible: (myRole !== "OBSERVER") && (myRole !== "") + icon: (AppModel.walletInfo.isHoneyBadger || AppModel.walletInfo.isIronHand) ? "qrc:/Images/Images/health-check-light.svg" : "qrc:/Images/Images/groups-dark.svg" + onClicked: { + GroupWallet.dashboardInfo.isShowDashBoard = true + } + } + QIconButton{ + id:_more + width: 24 + height: 24 + visible: (myRole !== "OBSERVER") && (myRole !== "FACILITATOR_ADMIN") + icon: "qrc:/Images/Images/OnlineMode/more_horiz_24px.png" + onClicked: { + optionMenu.popup(_more,mouse.x - 250 + 24,24) + } } } + QText { id: displayDescription text: AppModel.walletInfo.walletDescription @@ -303,9 +316,10 @@ Item { } Row { id: buttongHandles - spacing: parent.width - 204 *2 - 24*2 + spacing: 12 anchors { - horizontalCenter: parent.horizontalCenter + left: parent.left + leftMargin: 24 bottom: parent.bottom bottomMargin: 24*QAPP_DEVICE_HEIGHT_RATIO } diff --git a/Qml/Components/customizes/QHomePendingWallet.qml b/Qml/Components/customizes/QHomePendingWallet.qml index 83d0a446..432c4ead 100644 --- a/Qml/Components/customizes/QHomePendingWallet.qml +++ b/Qml/Components/customizes/QHomePendingWallet.qml @@ -108,7 +108,7 @@ Rectangle { height: 48 bgColor: "#F5F5F5" icon: "qrc:/Images/Images/more-horizontal-dark.svg" - visible: !AppModel.walletInfo.isLocked + visible: !AppModel.walletInfo.isLocked && myRole !== "FACILITATOR_ADMIN" onClicked: { if("PENDING_WALLET" === pendingDashboard.groupStatus){ pendingOptionMenu.popup() @@ -224,6 +224,7 @@ Rectangle { } } Item { + id: alertGroup width: parent.width height: Math.min(224, 24 + 12 + 12 + 88*_alert.count) visible: _alert.count > 0 @@ -308,6 +309,7 @@ Rectangle { } } Item { + id: healthyGroup width: parent.width height: 104 visible: (_healthy.count > 0) @@ -377,9 +379,10 @@ Rectangle { width: parent.width height: 1 color: "#EAEAEA" - visible: (myRole !== "KEYHOLDER_LIMITED") + visible: memberGroup.visible && (alertGroup.visible || healthyGroup.visible) } Column { + id: memberGroup width: parent.width height: childrenRect.height spacing: 12 @@ -387,7 +390,7 @@ Rectangle { Item { width: parent.width height: 24 - visible: dashboardInfo.members.count > 0 + visible: _members.count > 0 Row { anchors.fill: parent spacing: 8 @@ -405,6 +408,21 @@ Rectangle { horizontalAlignment: Text.AlignLeft } } + QTextLink { + id: _edit + width: _edit.paintedWidth + height: 20 + text: STR.STR_QML_849 + visible: (myRole === "MASTER" || myRole === "ADMIN" || myRole === "FACILITATOR_ADMIN") + anchors { + verticalCenter: parent.verticalCenter + right: parent.right + rightMargin: 12 + } + onTextClicked: { + QMLHandle.sendEvent(EVT.EVT_EDIT_MEMBERS_REQUEST) + } + } } QListView { id: _members diff --git a/Qml/Components/customizes/QSendDelegate.qml b/Qml/Components/customizes/QSendDelegate.qml index 4aca578c..62be8551 100644 --- a/Qml/Components/customizes/QSendDelegate.qml +++ b/Qml/Components/customizes/QSendDelegate.qml @@ -53,7 +53,6 @@ Rectangle { signal qrCodeRequest() signal removeItemRequest() signal favoriteRequest() - signal monneyRequest() function setFavorite(fav) { if ((fav.toType === "Address") || (fav.toType === "Wallet")){ @@ -166,7 +165,7 @@ Rectangle { QTextInputBoxTypeB { id: amountInput label: STR.STR_QML_214 - boxWidth: parent.width - 1 + boxWidth: 620 boxHeight: 48 isValid: true validator: (AppSetting.unit === NUNCHUCKTYPE.SATOSHI) ? intvalidator : doubleValidator @@ -201,17 +200,14 @@ Rectangle { source: "qrc:/Images/Images/fav_swapt-24px.png" transformOrigin: Item.Center scale: moneyMouse.pressed ? 0.95 : 1 - visible: false MouseArea { id: moneyMouse property bool onCurrency: false - enabled: false hoverEnabled: true cursorShape: Qt.PointingHandCursor anchors.fill: parent onClicked: { onCurrency = !onCurrency - monneyRequest() } } } diff --git a/Qml/Components/customizes/Signers/QAddRequestKey.qml b/Qml/Components/customizes/Signers/QAddRequestKey.qml index f8c7493a..1d27a1e5 100644 --- a/Qml/Components/customizes/Signers/QAddRequestKey.qml +++ b/Qml/Components/customizes/Signers/QAddRequestKey.qml @@ -33,11 +33,10 @@ import "../../../../localization/STR_QML.js" as STR Item { width: 322 - height: 84 + height: 72 signal tapsignerClicked() signal serkeyClicked() signal hardwareClicked() - property bool ourAccount: modelData.added_by_user_id === ClientController.user.email Loader { id: _source anchors.fill: parent @@ -97,7 +96,7 @@ Item { rightMargin: 12 } width: label.paintedWidth + 2*20 - height: 48 + height: 36 type: eTypeB label.text: STR.STR_QML_941 label.font.pixelSize: 16 @@ -237,7 +236,7 @@ Item { rightMargin: 12 } width: label.paintedWidth + 2*20 - height: 48 + height: 36 type: eTypeB label.text: STR.STR_QML_941 label.font.pixelSize: 16 @@ -375,7 +374,7 @@ Item { rightMargin: 12 } width: label.paintedWidth + 2*20 - height: 48 + height: 36 type: eTypeB label.text: STR.STR_QML_958 label.font.pixelSize: 16 diff --git a/Qml/Components/customizes/Transactions/QCreateTransaction.qml b/Qml/Components/customizes/Transactions/QCreateTransaction.qml index c7312df6..1d1580df 100644 --- a/Qml/Components/customizes/Transactions/QCreateTransaction.qml +++ b/Qml/Components/customizes/Transactions/QCreateTransaction.qml @@ -926,7 +926,7 @@ QOnScreenContent { QTextButton { width: 265 height: 48 - label.text: STR.STR_QML_235 + label.text: AppModel.walletInfo.tranReplace ? STR.STR_QML_784 : STR.STR_QML_235 label.font.pixelSize: 16 label.font.family: "Lato" type: eTypeE diff --git a/Qml/Components/customizes/Transactions/QOnScreenCancelPendingTransaction.qml b/Qml/Components/customizes/Transactions/QOnScreenCancelPendingTransaction.qml index a003156f..c976e7b6 100644 --- a/Qml/Components/customizes/Transactions/QOnScreenCancelPendingTransaction.qml +++ b/Qml/Components/customizes/Transactions/QOnScreenCancelPendingTransaction.qml @@ -76,7 +76,7 @@ QOnScreenContent { QTextButton { width: 254 height: 48 - label.text: STR.STR_QML_235 + label.text: AppModel.walletInfo.tranReplace ? STR.STR_QML_784 : STR.STR_QML_235 label.font.pixelSize: 16 type: eTypeE enabled: contenCenter.contentItem.new_fee !== 0 diff --git a/Qml/Components/customizes/Transactions/QOnScreenCustomizeDestination.qml b/Qml/Components/customizes/Transactions/QOnScreenCustomizeDestination.qml index 5a39cc80..7020b227 100644 --- a/Qml/Components/customizes/Transactions/QOnScreenCustomizeDestination.qml +++ b/Qml/Components/customizes/Transactions/QOnScreenCustomizeDestination.qml @@ -62,7 +62,7 @@ QOnScreenContent { bottomRight: QTextButton { width: 254 height: 48 - label.text: STR.STR_QML_235 + label.text: AppModel.walletInfo.tranReplace ? STR.STR_QML_784 : STR.STR_QML_235 label.font.pixelSize: 16 type: eTypeE onButtonClicked: { diff --git a/Qml/Components/customizes/Wallets/QWalletConfig.qml b/Qml/Components/customizes/Wallets/QWalletConfig.qml index a5aefcf6..a8d13b5c 100644 --- a/Qml/Components/customizes/Wallets/QWalletConfig.qml +++ b/Qml/Components/customizes/Wallets/QWalletConfig.qml @@ -294,9 +294,8 @@ QOnScreenContent { } QContextMenu { id: othersContextMenu - property string myRole: AppModel.walletInfo.groupId !== "" ? AppModel.walletInfo.myRole : "" + property string myRole: AppModel.walletInfo.myRole property bool isAssisted: { - var isAss = AppModel.walletInfo.isAssistedWallet && parseFloat(AppModel.walletInfo.walletBalance) === 0 if (AppModel.walletInfo.isGroupWallet) { return isAss && (AppModel.walletInfo.groupId !== "" ? myRole === "MASTER" : true) @@ -340,7 +339,24 @@ QOnScreenContent { } return ls } - enables: [true, true, true , true, true, true, true] + enables: [ + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN"), + true, + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN") + ] + visibles: [ + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN"), + true, + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN") + ] functions: { var ls = []; ls.push(function(){ QMLHandle.sendEvent(EVT.EVT_WALLET_INFO_UTXOS_REQUEST); }) diff --git a/Qml/Components/customizes/Wallets/QWalletInfo.qml b/Qml/Components/customizes/Wallets/QWalletInfo.qml index 216b267c..5e1c8090 100644 --- a/Qml/Components/customizes/Wallets/QWalletInfo.qml +++ b/Qml/Components/customizes/Wallets/QWalletInfo.qml @@ -526,7 +526,7 @@ QOnScreenContent { } QContextMenu { id: othersContextMenu - property string myRole: AppModel.walletInfo.groupId !== "" ? AppModel.walletInfo.myRole : "" + property string myRole: AppModel.walletInfo.myRole property bool isAssisted: { if (AppModel.walletInfo.isAssistedWallet && parseFloat(AppModel.walletInfo.walletBalance) === 0) { if (AppModel.walletInfo.isAssistedWallet) { @@ -565,7 +565,23 @@ QOnScreenContent { } return ls } - enables: [true, true, true , true, true, true] + enables: [ + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN"), + true, + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN") + ] + visibles: [ + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN"), + true, + (myRole !== "FACILITATOR_ADMIN"), + (myRole !== "FACILITATOR_ADMIN") + ] + functions: { var ls = []; ls.push(function(){ QMLHandle.sendEvent(EVT.EVT_WALLET_INFO_UTXOS_REQUEST); }) diff --git a/Qml/Components/customizes/Wallets/QWalletKeyDelegate.qml b/Qml/Components/customizes/Wallets/QWalletKeyDelegate.qml index 8e1ece9c..b99bf286 100644 --- a/Qml/Components/customizes/Wallets/QWalletKeyDelegate.qml +++ b/Qml/Components/customizes/Wallets/QWalletKeyDelegate.qml @@ -137,7 +137,7 @@ Item { label.font.pixelSize: 12 type: eTypeB enabled: !AppModel.walletInfo.isLocked - visible: signerType === NUNCHUCKTYPE.SERVER && !AppModel.walletInfo.isReplaced + visible: signerType === NUNCHUCKTYPE.SERVER && !AppModel.walletInfo.isReplaced && myRole !== "FACILITATOR_ADMIN" onButtonClicked: { viewPoliciesRequest() } diff --git a/Qml/Screens/LocalMode/Onboarding/QAddAWallet.qml b/Qml/Screens/LocalMode/Onboarding/QAddAWallet.qml index aeef08a6..5d093b04 100644 --- a/Qml/Screens/LocalMode/Onboarding/QAddAWallet.qml +++ b/Qml/Screens/LocalMode/Onboarding/QAddAWallet.qml @@ -41,57 +41,42 @@ QOnScreenContentTypeA { onCloseClicked: closeTo(NUNCHUCKTYPE.WALLET_TAB) content: Item { Column { - anchors.horizontalCenter: parent.horizontalCenter - width: 500 + anchors.left: parent.left + width: 539 spacing: 24 - QImage { - width: 96 - height: 96 - anchors.horizontalCenter: parent.horizontalCenter - source: "qrc:/Images/Images/wallet.svg" - } QLato { + anchors.left: parent.left width: parent.width text: STR.STR_QML_1250 lineHeightMode: Text.FixedHeight lineHeight: 28 wrapMode: Text.WordWrap - horizontalAlignment: Text.AlignHCenter + horizontalAlignment: Text.AlignLeft verticalAlignment: Text.AlignVCenter } - Column { - width: 500 - spacing: 16 - QTextButton { - width: 343 - height: 48 - label.text: STR.STR_QML_1262 - label.font.pixelSize: 16 - type: eTypeE - anchors.horizontalCenter: parent.horizontalCenter - onButtonClicked: { - var _input = { - type: "create-new-wallet" - } - QMLHandle.sendEvent(EVT.EVT_ONBOARDING_ACTION_REQUEST, _input) + QCreateHotWallet { + width: 539 + height: 92 + anchors.left: parent.left + color: "#FFFFFF" + title: STR.STR_QML_1262 + description: STR.STR_QML_1405 + desImg: "qrc:/Images/Images/wallet.svg" + onItemclicked: { + var _input = { + type: "create-new-wallet" } - } - QLato { - anchors.horizontalCenter: parent.horizontalCenter - width: parent.width - text: "Or" - horizontalAlignment: Text.AlignHCenter - verticalAlignment: Text.AlignVCenter + QMLHandle.sendEvent(EVT.EVT_ONBOARDING_ACTION_REQUEST, _input) } } QCreateHotWallet { - width: 500 - height: 128 - anchors.horizontalCenter: parent.horizontalCenter + width: 539 + height: 120 + anchors.left: parent.left color: "#FFFFFF" title: STR.STR_QML_1251 description: STR.STR_QML_1252 - desImg: "qrc:/Images/Images/create-hot-wallet.png" + desImg: "qrc:/Images/Images/person-add-24px.svg" onItemclicked: { OnBoarding.state = "hotWallet" } @@ -99,7 +84,7 @@ QOnScreenContentTypeA { } } - onPrevClicked: closeTo(NUNCHUCKTYPE.WALLET_TAB) + bottomLeft: Item {} bottomRight: Row { spacing: 12 QTextButton { diff --git a/Qml/Screens/LocalMode/Onboarding/QCreateHotWallet.qml b/Qml/Screens/LocalMode/Onboarding/QCreateHotWallet.qml index 630b3504..00bfadf7 100644 --- a/Qml/Screens/LocalMode/Onboarding/QCreateHotWallet.qml +++ b/Qml/Screens/LocalMode/Onboarding/QCreateHotWallet.qml @@ -51,26 +51,26 @@ QBoxShadow { } Row { anchors { - fill: parent + left: parent.left leftMargin: 28 - topMargin: 24 - bottomMargin: 24 - rightMargin: 28 + verticalCenter: parent.verticalCenter + } + spacing: 24 + QImage { + source: desImg + width: 48 + height: 48 + anchors.verticalCenter: parent.verticalCenter } - spacing: 16 Item { - anchors { - left: parent.left - bottom: parent.bottom - } - width: 308 + width: 363 height: _col.childrenRect.height - + anchors.verticalCenter: parent.verticalCenter Column { id: _col spacing: 8 QLato { - width: 308 + width: 363 height: 28 text: title font.bold: true @@ -80,7 +80,7 @@ QBoxShadow { horizontalAlignment: Text.AlignLeft } QLato { - width: 308 + width: 363 height: paintedHeight text: description font.pixelSize: 16 @@ -92,15 +92,11 @@ QBoxShadow { } } } - QImage { - anchors { - right: parent.right - verticalCenter: parent.verticalCenter - } - source: desImg - width: 96 - height: 96 + source: "qrc:/Images/Images/right-arrow-dark.svg" + width: 24 + height: 24 + anchors.verticalCenter: parent.verticalCenter } } } diff --git a/Qml/Screens/LocalMode/SCR_ADD_NEW_SOFTWARE_SIGNER.qml b/Qml/Screens/LocalMode/SCR_ADD_NEW_SOFTWARE_SIGNER.qml index e43dc959..2c496d3c 100644 --- a/Qml/Screens/LocalMode/SCR_ADD_NEW_SOFTWARE_SIGNER.qml +++ b/Qml/Screens/LocalMode/SCR_ADD_NEW_SOFTWARE_SIGNER.qml @@ -42,7 +42,7 @@ QScreen { QMLHandle.sendEvent(EVT.EVT_ONS_CLOSE_ALL_REQUEST) } QText { - width: 540 + width: 646 height: 56 text: STR.STR_QML_143 anchors { diff --git a/Qml/Screens/LocalMode/SCR_CREATE_NEW_SEED.qml b/Qml/Screens/LocalMode/SCR_CREATE_NEW_SEED.qml index 78d5141a..8900d070 100644 --- a/Qml/Screens/LocalMode/SCR_CREATE_NEW_SEED.qml +++ b/Qml/Screens/LocalMode/SCR_CREATE_NEW_SEED.qml @@ -30,6 +30,7 @@ import "../../Components/origins" import "../../Components/customizes" import "../../Components/customizes/Texts" import "../../Components/customizes/Buttons" +import "../../Components/customizes/Popups" import "../../../localization/STR_QML.js" as STR QScreen { @@ -121,13 +122,7 @@ QScreen { label.font.pixelSize: 16 type: eTypeE onButtonClicked: { - var valid = random1.correct && random2.correct && random3.correct - if(valid){ - QMLHandle.sendEvent(EVT.EVT_CREATE_NEW_SEED_SUCCEED) - } - else{ - AppModel.showToast(-1, STR.STR_QML_207, EWARNING.EXCEPTION_MSG); - } + _InfoReview.open() } } } @@ -168,4 +163,24 @@ QScreen { console.log(randomValues) return randomValues; } + QPopupInfoTwoButtons { + id: _InfoReview + title: STR.STR_QML_339 + contentText: STR.STR_QML_1406 + labels: [STR.STR_QML_1274,STR.STR_QML_1275] + funcs: [ + function() { + QMLHandle.sendEvent(EVT.EVT_CREATE_NEW_SEED_BACK) + }, + function() { + var valid = random1.correct && random2.correct && random3.correct + if(valid){ + QMLHandle.sendEvent(EVT.EVT_CREATE_NEW_SEED_SUCCEED) + } + else{ + AppModel.showToast(-1, STR.STR_QML_207, EWARNING.EXCEPTION_MSG); + } + } + ] + } } diff --git a/Qml/Screens/LocalMode/SCR_TRANSACTION_INFO.qml b/Qml/Screens/LocalMode/SCR_TRANSACTION_INFO.qml index 48f91f3a..4bd3663f 100644 --- a/Qml/Screens/LocalMode/SCR_TRANSACTION_INFO.qml +++ b/Qml/Screens/LocalMode/SCR_TRANSACTION_INFO.qml @@ -45,7 +45,7 @@ QScreen { width: popupWidth height: popupHeight anchors.centerIn: parent - label.text: STR.STR_QML_282 + label.text: STR.STR_QML_785 label.font.pixelSize: 32 label.font.weight: Font.Medium extraHeader: Row { @@ -109,8 +109,7 @@ QScreen { return receiveTxBtnLeft } else { - if(AppModel.transactionInfo.status === NUNCHUCKTYPE.PENDING_CONFIRMATION){ return btnPendingConfirmationLeft } - else { return null } + return btnPendingConfirmationLeft } } bottomRight: { @@ -261,7 +260,7 @@ QScreen { enableCancelTransaction: AppModel.walletInfo.isGroupWallet ? allowMoreOption : true isAssisedWallet: AppModel.walletInfo.isAssistedWallet isSharedWallet: AppModel.walletInfo.isSharedWallet - visible: myRole !== "OBSERVER" + visible: myRole !== "OBSERVER" && !AppModel.walletInfo.tranReplace funcs: [ function(){ // Request signature groupMembers.open() @@ -324,6 +323,7 @@ QScreen { enableCancelTransaction: true isAssisedWallet: AppModel.walletInfo.isAssistedWallet isSharedWallet: AppModel.walletInfo.isSharedWallet + visible: false funcs: [ function(){ // Request signature @@ -354,6 +354,7 @@ QScreen { type: eSECONDARY label: STR.STR_QML_294 optionVisible: imExContextMenu.visible + visible: false onButtonClicked: { imExContextMenu.x = 20 imExContextMenu.y = 20 - imExContextMenu.height @@ -391,7 +392,7 @@ QScreen { id: startbroatcast width: 180 height: 48 - label.text: STR.STR_QML_295 + label.text: STR.STR_QML_497 label.font.pixelSize: 16 type: eTypeE onButtonClicked: { diff --git a/Qml/Screens/OnlineMode/EditMembers/QEditMemberConfirmEmail.qml b/Qml/Screens/OnlineMode/EditMembers/QEditMemberConfirmEmail.qml new file mode 100644 index 00000000..ce75de96 --- /dev/null +++ b/Qml/Screens/OnlineMode/EditMembers/QEditMemberConfirmEmail.qml @@ -0,0 +1,80 @@ +/************************************************************************** + * This file is part of the Nunchuk software (https://nunchuk.io/) * + * Copyright (C) 2020-2022 Enigmo * + * Copyright (C) 2022 Nunchuk * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 3 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + **************************************************************************/ +import QtQuick 2.4 +import QtQuick.Controls 2.3 +import QtGraphicalEffects 1.12 +import HMIEVENTS 1.0 +import EWARNING 1.0 +import NUNCHUCKTYPE 1.0 +import DataPool 1.0 +import "../../../Components/origins" +import "../../../Components/customizes" +import "../../../Components/customizes/Chats" +import "../../../Components/customizes/Texts" +import "../../../Components/customizes/Buttons" +import "../../../../localization/STR_QML.js" as STR + +QOnScreenContentTypeB { + id:_content + width: popupWidth + height: popupHeight + anchors.centerIn: parent + label.text: STR.STR_QML_1305 + extraHeader: Item {} + onCloseClicked: closeTo(NUNCHUCKTYPE.CURRENT_TAB) + property string code_email: "" + content: Item { + Column { + anchors.fill: parent + spacing: 24 + QTextInputBoxTypeB { + id: _name + label: STR.STR_QML_1027 + boxWidth: 539 + boxHeight: 48 + textInputted: code_email + onTextInputtedChanged: { + if(!_name.isValid){ + _name.isValid = true + _name.errorText = "" + } + _name.showError = false; + code_email = _name.textInputted + } + } + } + QWarningBg { + width: 728 + iSize: 60 + icon: "qrc:/Images/Images/info-60px.png" + txt.text: STR.STR_QML_1028_bottom.arg(ClientController.user.email) + anchors.bottom: parent.bottom + } + } + onPrevClicked: closeTo(NUNCHUCKTYPE.CURRENT_TAB) + nextEnable: code_email !== "" + onNextClicked: { + var _input = { + type: "edit-member-email-code", + codeEmail: code_email + } + QMLHandle.sendEvent(EVT.EVT_EDIT_MEMBERS_ENTER_REQUEST, _input) + } +} diff --git a/Qml/Screens/OnlineMode/EditMembers/QEditMemberDelegate.qml b/Qml/Screens/OnlineMode/EditMembers/QEditMemberDelegate.qml new file mode 100644 index 00000000..c3f664ea --- /dev/null +++ b/Qml/Screens/OnlineMode/EditMembers/QEditMemberDelegate.qml @@ -0,0 +1,118 @@ +/************************************************************************** + * This file is part of the Nunchuk software (https://nunchuk.io/) * + * Copyright (C) 2020-2022 Enigmo * + * Copyright (C) 2022 Nunchuk * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 3 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + **************************************************************************/ +import QtQuick 2.0 +import "../../../Components/customizes" +import "../../../Components/customizes/Texts" +import "../../../Components/customizes/Members" +import "../../../../localization/STR_QML.js" as STR + +Column { + id: _colId + spacing: 12 + width: 539 + property var member + property int roleHeight: 24 + signal arrowClicked() + QLato { + height: 20 + text: modelData.role === "MASTER" ? STR.STR_QML_949 : STR.STR_QML_1031.arg(1 + index) + font.pixelSize: 16 + font.weight: Font.Bold + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + Rectangle { + color: "#F5F5F5" + radius: 12 + width: 539 + height: 164 + Item { + anchors.fill: parent + anchors.margins: 16 + Column { + spacing: 16 + Item { + width: 507 + height: 48 + QAvatar { + width: 48 + height: 48 + avatarLocal: member.user ? member.user.avatar : "" + avatarUrl: member.user ? member.user.avatar : "" + username: member.user ? member.user.name : "" + displayStatus: false + activeStatus: member.status === "PENDING" ? false : true + anchors.verticalCenter: parent.verticalCenter + color: member.status === "PENDING" ? "#EAEAEA" : "#FDD95C" + } + Column { + id: _col + anchors { + left: parent.left + leftMargin: 48 + 12 + verticalCenter: parent.verticalCenter + } + spacing: 4 + QLato { + height: 20 + text: member.user ? member.user.name : member.email_or_username + font.pixelSize: 16 + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + QLato { + height: 16 + font.pixelSize: 12 + color: "#595959" + text: member.user ? member.user.email : member.email_or_username + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + QLato { + anchors { + right: parent.right + rightMargin: 0 + verticalCenter: parent.verticalCenter + } + height: 16 + font.pixelSize: 12 + text: member.status === "PENDING" ? STR.STR_QML_469 : "" + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + } + QEditMemberRole { + boxWidth: 507 + boxHeight: 48 + label: STR.STR_QML_1395 + textInputted: roles.find(function(e) { if (e.id === member.role) return true; else return false }).name + enabled: modelData.role !== "MASTER" + showArrow: modelData.role !== "MASTER" + input.readOnly: true + onArrowClicked: { + _colId.arrowClicked() + } + } + } + } + } +} + diff --git a/Qml/Screens/OnlineMode/EditMembers/QEditMemberNewMemberDelegate.qml b/Qml/Screens/OnlineMode/EditMembers/QEditMemberNewMemberDelegate.qml new file mode 100644 index 00000000..22c1b670 --- /dev/null +++ b/Qml/Screens/OnlineMode/EditMembers/QEditMemberNewMemberDelegate.qml @@ -0,0 +1,89 @@ +/************************************************************************** + * This file is part of the Nunchuk software (https://nunchuk.io/) * + * Copyright (C) 2020-2022 Enigmo * + * Copyright (C) 2022 Nunchuk * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 3 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + **************************************************************************/ +import QtQuick 2.0 +import "../../../Components/customizes" +import "../../../Components/customizes/Texts" +import "../../../Components/customizes/Members" +import "../../../../localization/STR_QML.js" as STR + +Column { + id: _colId + spacing: 12 + width: 539 + property var member + property int roleHeight: 24 + signal arrowClicked() + QLato { + height: 20 + text: modelData.role === "MASTER" ? STR.STR_QML_949 : STR.STR_QML_1031.arg(1 + index) + font.pixelSize: 16 + font.weight: Font.Bold + horizontalAlignment: Text.AlignHCenter + verticalAlignment: Text.AlignVCenter + } + Rectangle { + color: "#F5F5F5" + radius: 12 + width: 539 + height: 192 + Item { + anchors.fill: parent + anchors.margins: 16 + Column { + spacing: 16 + QTextInputBoxTypeB { + id: email + label: STR.STR_QML_394 + boxWidth: 507 + boxHeight: 48 + isValid: true + textInputted: modelData.email_or_username + onTextInputtedChanged: { + if(!email.isValid){ + email.isValid = true + email.errorText = "" + } + email.showError = false; + memberIndex = index + memberEmail = email.textInputted + memberRole = modelData.role + } + onEnterKeyRequest: { + replaceMember() + } + } + QEditMemberRole { + boxWidth: 507 + boxHeight: 48 + label: STR.STR_QML_1395 + textInputted: roles.find(function(e) { if (e.id === member.role) return true; else return false }).name + enabled: modelData.role !== "MASTER" + showArrow: modelData.role !== "MASTER" + input.readOnly: true + onArrowClicked: { + replaceMember() + _colId.arrowClicked() + } + } + } + } + } +} + diff --git a/Qml/Screens/OnlineMode/EditMembers/QEditMemberRole.qml b/Qml/Screens/OnlineMode/EditMembers/QEditMemberRole.qml new file mode 100644 index 00000000..8e3811f8 --- /dev/null +++ b/Qml/Screens/OnlineMode/EditMembers/QEditMemberRole.qml @@ -0,0 +1,120 @@ +/************************************************************************** + * This file is part of the Nunchuk software (https://nunchuk.io/) * + * Copyright (C) 2020-2022 Enigmo * + * Copyright (C) 2022 Nunchuk * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 3 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + **************************************************************************/ +import QtQuick 2.4 +import QtGraphicalEffects 1.0 +import "../../../Components/origins" +import "../../../Components/customizes" +import "../../../Components/customizes/Texts" + +Column { + id: textipboxType + property string label: "This is label" + property alias textInputted: _input.text + property alias validator: _input.validator + property alias acceptableInput : _input.acceptableInput + property var textweight: Font.Bold + property alias echoMode: _input.echoMode + property alias maxLength: _input.maximumLength + property alias length: _input.length + property bool enableLengthLimit: false + property int boxWidth: 338 + property int boxHeight: 48 + property bool isValid: true + property bool showError: false + property bool showWarning: false + signal typingFinished(var currentText) + property alias textBoxFocus: _input.focus + property alias input: _input + property int titleFontSize: 16 + property string disabledColor: "#EAEAEA" + property bool showArrow: false + spacing: 4 + + signal downKeyRequest() + signal upKeyRequest() + signal enterKeyRequest() + signal pasteKeyRequest() + signal tabKeyRequest() + signal arrowClicked() + + Row { + width: parent.width + QLato { + id:txt1 + width: paintedWidth + font.family: "Lato" + font.pixelSize: titleFontSize + font.weight: Font.Bold + text: label + visible: label != "" + anchors.bottom: parent.bottom + } + } + Item { + width: myRectangle.width+2 + height: myRectangle.height+2 + Item { + id: _background + width: myRectangle.width+2 + height: myRectangle.height+2 + Rectangle { + id: myRectangle + anchors.centerIn: parent + width: boxWidth + height: boxHeight + radius: 8 + color: textipboxType.enabled ? (isValid ? "#FFFFFF" : "#FFD7D9") : disabledColor + border.color: isValid ? "#DEDEDE" : "#CF4018" + } + } + QTextField { + id: _input + anchors.fill: parent + background: _background + color: "#031F2B" + font.pixelSize: 16 + clip: true + echoMode: TextInput.Normal + onTypingFinished: textipboxType.typingFinished(currentText) + Keys.onDownPressed: { downKeyRequest() } + Keys.onUpPressed: { upKeyRequest() } + Keys.onReturnPressed: { enterKeyRequest() } + Keys.onEnterPressed: { enterKeyRequest() } + Keys.onPressed: function (keyEvent) { + if (keyEvent.matches(StandardKey.Paste)) { pasteKeyRequest() } + if (keyEvent.key === Qt.Key_Tab) { keyEvent.accepted = false; tabKeyRequest() } + } + } + QIcon { + iconSize: 24 + source: "qrc:/Images/Images/right-arrow-dark.svg" + anchors.verticalCenter: parent.verticalCenter + anchors.right: parent.right + anchors.rightMargin: 12 + visible: showArrow + MouseArea { + anchors.fill: parent + onClicked: { + arrowClicked() + } + } + } + } +} diff --git a/Qml/Screens/OnlineMode/EditMembers/QEditMemberSelectRoleDelegate.qml b/Qml/Screens/OnlineMode/EditMembers/QEditMemberSelectRoleDelegate.qml new file mode 100644 index 00000000..3aea3a65 --- /dev/null +++ b/Qml/Screens/OnlineMode/EditMembers/QEditMemberSelectRoleDelegate.qml @@ -0,0 +1,85 @@ +/************************************************************************** + * This file is part of the Nunchuk software (https://nunchuk.io/) * + * Copyright (C) 2020-2022 Enigmo * + * Copyright (C) 2022 Nunchuk * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 3 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + **************************************************************************/ +import QtQuick 2.0 +import "../../../Components/customizes" +import "../../../Components/customizes/Texts" +import "../../../Components/customizes/Members" +import "../../../Components/customizes/Buttons" +import "../../../../localization/STR_QML.js" as STR + +Rectangle { + border.width: 1 + border.color: "#DEDEDE" + height: _col.childrenRect.height + 18 + radius: 12 + Item { + id: _col + anchors { + top: parent.top + left: parent.left + leftMargin: 18 + } + QRadioButtonTypeA { + id: _radio + width: 538 + height: 48 + label: modelData.name + fontPixelSize: 16 + fontWeight: Font.Bold + selected: option === modelData.id + layoutDirection: Qt.RightToLeft + onButtonClicked: { + option = modelData.id + } + } + + QLato { + anchors { + top: _radio.bottom + topMargin: -8 + left: parent.left + leftMargin: 54 - 18 + } + height: modelData.des1 !== "" ? 20 : 0 + text: modelData.des1 + font.pixelSize: 12 + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + visible: modelData.des1 !== "" + color: "#595959" + } + QLato { + anchors { + top: _radio.bottom + topMargin: modelData.des1 !== "" ? 24 : -4 + left: parent.left + leftMargin: 54 - 18 + } + width: parent.width + height: modelData.des1 !== "" ? (paintedHeight - 12) : (paintedHeight - 8) + text: modelData.des2 + lineHeightMode: Text.FixedHeight + lineHeight: 28 + wrapMode: Text.WordWrap + horizontalAlignment: Text.AlignLeft + verticalAlignment: Text.AlignVCenter + } + } +} diff --git a/Qml/Screens/OnlineMode/EditMembers/QEditMemberSuccess.qml b/Qml/Screens/OnlineMode/EditMembers/QEditMemberSuccess.qml new file mode 100644 index 00000000..e7e3a5ea --- /dev/null +++ b/Qml/Screens/OnlineMode/EditMembers/QEditMemberSuccess.qml @@ -0,0 +1,69 @@ +/************************************************************************** + * This file is part of the Nunchuk software (https://nunchuk.io/) * + * Copyright (C) 2020-2022 Enigmo * + * Copyright (C) 2022 Nunchuk * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 3 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + **************************************************************************/ +import QtQuick 2.4 +import QtQuick.Controls 2.3 +import QtGraphicalEffects 1.12 +import Qt.labs.platform 1.1 +import HMIEVENTS 1.0 +import EWARNING 1.0 +import NUNCHUCKTYPE 1.0 +import DataPool 1.0 +import "../../../Components/origins" +import "../../../Components/customizes" +import "../../../Components/customizes/Chats" +import "../../../Components/customizes/Texts" +import "../../../Components/customizes/Buttons" +import "../../../Components/customizes/services" +import "../../../../localization/STR_QML.js" as STR + +Item { + id:_screen + property var reqiredSignature: ServiceSetting.servicesTag.reqiredSignatures + Loader { + width: popupWidth + height: popupHeight + anchors.centerIn: parent + sourceComponent: { + if (reqiredSignature.type === "SECURITY_QUESTION") { + return security_question + } else { + return _ConfirmEmail + } + } + } + + Component { + id: security_question + QAnswerSecurityQuestion { + onCloseClicked: closeTo(NUNCHUCKTYPE.CURRENT_TAB) + + onPrevClicked: closeTo(NUNCHUCKTYPE.CURRENT_TAB) + + onNextClicked: { + ProfileSetting.seccurityQuestion() + } + } + } + + Component { + id: _ConfirmEmail + QEditMemberConfirmEmail {} + } +} diff --git a/Qml/Screens/OnlineMode/EditMembers/QEditMembers.qml b/Qml/Screens/OnlineMode/EditMembers/QEditMembers.qml new file mode 100644 index 00000000..22b3cb72 --- /dev/null +++ b/Qml/Screens/OnlineMode/EditMembers/QEditMembers.qml @@ -0,0 +1,146 @@ +/************************************************************************** + * This file is part of the Nunchuk software (https://nunchuk.io/) * + * Copyright (C) 2020-2022 Enigmo * + * Copyright (C) 2022 Nunchuk * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 3 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + **************************************************************************/ +import QtQuick 2.4 +import QtQuick.Controls 2.3 +import QtQuick.Controls 1.4 +import QtGraphicalEffects 1.12 +import QtQuick.Controls.Styles 1.4 +import HMIEVENTS 1.0 +import EWARNING 1.0 +import NUNCHUCKTYPE 1.0 +import DataPool 1.0 +import "../../../Components/origins" +import "../../../Components/customizes" +import "../../../Components/customizes/Chats" +import "../../../Components/customizes/Texts" +import "../../../Components/customizes/Buttons" +import "../../../../localization/STR_QML.js" as STR + +QOnScreenContentTypeB { + id: _Message + width: popupWidth + height: popupHeight + anchors.centerIn: parent + label.text: STR.STR_QML_472 + onCloseClicked: closeTo(NUNCHUCKTYPE.WALLET_TAB) + readonly property var roles: [ + {id: "MASTER", name: STR.STR_QML_949 }, + {id: "ADMIN", name: STR.STR_QML_950 }, + {id: "KEYHOLDER", name: STR.STR_QML_951 }, + {id: "KEYHOLDER_LIMITED", name: STR.STR_QML_952 }, + {id: "FACILITATOR_ADMIN", name: STR.STR_QML_1396 }, + {id: "OBSERVER", name: STR.STR_QML_953 }, + {id: "NEW-MEMBER", name: STR.STR_QML_1403 } + ] + property int memberIndex: 0 + property string memberRole: "" + property string memberEmail: "" + content: Item { + QListView { + id: _members + width: 539 + 24 + height: 506 + model: dashboardInfo.editMembers + clip: true + ScrollBar.vertical: ScrollBar { active: true } + spacing: 25 + delegate: Loader { + sourceComponent: modelData.isNew ? _editNew : _edit + Component { + id: _edit + QEditMemberDelegate { + width: ListView.view.width - 24 + member: modelData + onArrowClicked: { + memberIndex = index + memberRole = modelData.role + memberEmail = modelData.email_or_username + _editMemberSelectARole.open() + } + } + } + Component { + id: _editNew + QEditMemberNewMemberDelegate { + width: ListView.view.width - 24 + member: modelData + onArrowClicked: { + memberIndex = index + memberRole = modelData.role + memberEmail = modelData.email_or_username + _editMemberSelectARole.open() + } + } + } + + } + } + } + function replaceMember() { + var _input = { + type: "replace-new-member", + roleId: memberRole, + email_or_username: memberEmail, + indexMember: memberIndex + } + QMLHandle.notifySendEvent(EVT.EVT_EDIT_MEMBERS_ENTER_REQUEST, _input) + } + isShowLine: true + onPrevClicked: closeTo(NUNCHUCKTYPE.WALLET_TAB) + bottomRight: Row { + spacing: 12 + QIconTextButton { + width: 154 + height: 48 + label: STR.STR_QML_386 + icons: ["add-dark.svg", "add-dark.svg", "add-dark.svg","add-dark.svg"] + fontPixelSize: 16 + iconSize: 16 + type: eTypeB + onButtonClicked: { + var _input = { + type: "add-new-member", + roleId: "NEW-MEMBER", + } + QMLHandle.notifySendEvent(EVT.EVT_EDIT_MEMBERS_ENTER_REQUEST, _input) + } + } + QTextButton { + width: 66 + height: 48 + label.text: STR.STR_QML_835 + label.font.pixelSize: 16 + type: eTypeE + onButtonClicked: { + var _input = { + type: "save-member-changed" + } + QMLHandle.notifySendEvent(EVT.EVT_EDIT_MEMBERS_ENTER_REQUEST, _input) + } + } + } + QPopupEditMemberSelectARole { + id: _editMemberSelectARole + anchors.centerIn: parent + width: 600 + height: 600 + } +} + diff --git a/Qml/Screens/OnlineMode/EditMembers/QPopupEditMemberSelectARole.qml b/Qml/Screens/OnlineMode/EditMembers/QPopupEditMemberSelectARole.qml new file mode 100644 index 00000000..2f805fe8 --- /dev/null +++ b/Qml/Screens/OnlineMode/EditMembers/QPopupEditMemberSelectARole.qml @@ -0,0 +1,99 @@ +/************************************************************************** + * This file is part of the Nunchuk software (https://nunchuk.io/) * + * Copyright (C) 2020-2022 Enigmo * + * Copyright (C) 2022 Nunchuk * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 3 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + **************************************************************************/ +import QtQuick 2.4 +import QtQuick.Controls 2.3 +import QtGraphicalEffects 1.12 +import Qt.labs.platform 1.1 +import HMIEVENTS 1.0 +import EWARNING 1.0 +import NUNCHUCKTYPE 1.0 +import DataPool 1.0 +import "../../../Components/origins" +import "../../../Components/customizes" +import "../../../Components/customizes/Chats" +import "../../../Components/customizes/Texts" +import "../../../Components/customizes/Buttons" +import "../../../Components/customizes/QRCodes" +import "../../../Components/customizes/Popups" +import "../../../Components/customizes/services" +import "../../../../localization/STR_QML.js" as STR + + +QPopupEmpty { + id: _select_a_role + readonly property var roles: [ + {id: "ADMIN", name: STR.STR_QML_950, des1: "", des2: STR.STR_QML_1397}, + {id: "KEYHOLDER", name: STR.STR_QML_951, des1: "", des2: STR.STR_QML_1398}, + {id: "KEYHOLDER_LIMITED", name: STR.STR_QML_952, des1: STR.STR_QML_1402, des2: STR.STR_QML_1399}, + {id: "FACILITATOR_ADMIN", name: STR.STR_QML_1396, des1: "", des2: STR.STR_QML_1400}, + {id: "OBSERVER", name: STR.STR_QML_953, des1: "", des2: STR.STR_QML_1401}, + ] + property string option: "" + onOpened: { + option = memberRole + } + closePolicy:Popup.NoAutoClose + content: QOnScreenContentTypeB { + width: 600 + height: 600 + anchors.centerIn: parent + label.text: STR.STR_QML_1403 + extraHeader: Item {} + onCloseClicked: { _select_a_role.close() } + content: Item { + anchors.fill: parent + QListView { + id: _list + width: 528 + height: parent.height + model: roles + clip: true + spacing: 16 + ScrollBar.vertical: ScrollBar { active: true } + delegate: QEditMemberSelectRoleDelegate { + width: parent.width - 18 + } + } + } + isShowLine: true + onPrevClicked: { _select_a_role.close() } + bottomRight: QTextButton { + width: 66 + height: 48 + label.text: STR.STR_QML_835 + label.font.pixelSize: 16 + type: eTypeE + onButtonClicked: { + if (dashboardInfo.isDowngrade(memberEmail, option)) { + _info1.open() + } else { + memberRole = option + replaceMember() + _select_a_role.close() + } + } + } + } + QPopupInfo{ + id:_info1 + title: STR.STR_QML_339 + contentText: STR.STR_QML_1404 + } +} diff --git a/Qml/Screens/OnlineMode/Healths/QSavingAccountDelegate.qml b/Qml/Screens/OnlineMode/Healths/QSavingAccountDelegate.qml index a526bc4c..cc3c1e0f 100644 --- a/Qml/Screens/OnlineMode/Healths/QSavingAccountDelegate.qml +++ b/Qml/Screens/OnlineMode/Healths/QSavingAccountDelegate.qml @@ -91,6 +91,7 @@ Rectangle { label.font.pixelSize: 16 type: eTypeB onButtonClicked: healthCheck() + enabled: AppModel.walletInfo.myRole !== "FACILITATOR_ADMIN" } QTextButton { width: 200 diff --git a/Qml/Screens/OnlineMode/SCR_EDIT_MEMBERS.qml b/Qml/Screens/OnlineMode/SCR_EDIT_MEMBERS.qml new file mode 100644 index 00000000..b995c008 --- /dev/null +++ b/Qml/Screens/OnlineMode/SCR_EDIT_MEMBERS.qml @@ -0,0 +1,67 @@ +/************************************************************************** + * This file is part of the Nunchuk software (https://nunchuk.io/) * + * Copyright (C) 2020-2022 Enigmo * + * Copyright (C) 2022 Nunchuk * + * * + * This program is free software; you can redistribute it and/or * + * modify it under the terms of the GNU General Public License * + * as published by the Free Software Foundation; either version 3 * + * of the License, or (at your option) any later version. * + * * + * This program is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU General Public License for more details. * + * * + * You should have received a copy of the GNU General Public License * + * along with this program. If not, see . * + * * + **************************************************************************/ +import QtQuick 2.4 +import QtQuick.Controls 2.3 +import QtGraphicalEffects 1.12 +import HMIEVENTS 1.0 +import EWARNING 1.0 +import NUNCHUCKTYPE 1.0 +import DataPool 1.0 +import "../../Components/origins" +import "../../Components/customizes" +import "../../Components/customizes/Chats" +import "../../Components/customizes/Texts" +import "../../Components/customizes/Buttons" +import "../../Components/customizes/Signers" +import "../OnlineMode/EditMembers" +import "../../Components/customizes/services" +import "../../../localization/STR_QML.js" as STR + +QScreen { + property var dashboardInfo: GroupWallet.dashboardInfo + property string config_flow: "edit_members" + readonly property var map_screens: [ + {screen_name: "edit_members", screen_component: _edit_members}, + {screen_name: "edit_members_success", screen_component: _edit_members_success}, + ] + + Loader { + width: popupWidth + height: popupHeight + anchors.centerIn: parent + sourceComponent: map_screens.find(function(e) {if (e.screen_name === config_flow) return true; else return false}).screen_component + } + Connections { + target: dashboardInfo + onEditMembersSuccessChanged: { + config_flow = "edit_members_success" + } + } + Component { + id: _edit_members + QEditMembers {} + } + Component { + id: _edit_members_success + QEditMemberSuccess { + + } + } +} diff --git a/Qml/Screens/OnlineMode/SCR_HOME_ONLINE.qml b/Qml/Screens/OnlineMode/SCR_HOME_ONLINE.qml index 03f95fc6..ddbd6f02 100644 --- a/Qml/Screens/OnlineMode/SCR_HOME_ONLINE.qml +++ b/Qml/Screens/OnlineMode/SCR_HOME_ONLINE.qml @@ -624,7 +624,7 @@ QScreen { titleSuggest: STR.STR_QML_1251 content: STR.STR_QML_1252 height: 180 - icon:"qrc:/Images/Images/create-hot-wallet.png" + icon:"qrc:/Images/Images/person-add-24px.svg" onBtnClicked: { OnBoarding.state = "hotWallet" QMLHandle.sendEvent(EVT.EVT_ONBOARDING_REQUEST) diff --git a/Views/Common/ViewStates.h b/Views/Common/ViewStates.h index 7017eb2f..523bfdec 100644 --- a/Views/Common/ViewStates.h +++ b/Views/Common/ViewStates.h @@ -52,6 +52,7 @@ #include "STATE_ID_SCR_DASHBOARD_ALERT_INFO.h" #include "STATE_ID_SCR_DASHBOARD_ALERT_SUCCESS.h" #include "STATE_ID_SCR_DUMMY_TRANSACTION_INFO.h" +#include "STATE_ID_SCR_EDIT_MEMBERS.h" #include "STATE_ID_SCR_EDIT_YOUR_INHERITANCE_PLAN.h" #include "STATE_ID_SCR_ENTER_BACKUP_PASSWORD.h" #include "STATE_ID_SCR_HEALTH_CHECK_STARTING.h" diff --git a/Views/Common/ViewsDefines.h b/Views/Common/ViewsDefines.h index 6b09e155..435ab49b 100644 --- a/Views/Common/ViewsDefines.h +++ b/Views/Common/ViewsDefines.h @@ -111,6 +111,7 @@ namespace OnlineMode { #define SCR_RECURRING_PAYMENTS "qrc:/Qml/Screens/OnlineMode/SCR_RECURRING_PAYMENTS.qml" #define SCR_REPLACE_KEYS "qrc:/Qml/Screens/OnlineMode/SCR_REPLACE_KEYS.qml" #define SCR_SIGN_IN_VIA_XPUB "qrc:/Qml/Screens/OnlineMode/SCR_SIGN_IN_VIA_XPUB.qml" +#define SCR_EDIT_MEMBERS "qrc:/Qml/Screens/OnlineMode/SCR_EDIT_MEMBERS.qml" } namespace Popups { diff --git a/Views/Common/ViewsEnums.h b/Views/Common/ViewsEnums.h index b36c1911..c14257dd 100644 --- a/Views/Common/ViewsEnums.h +++ b/Views/Common/ViewsEnums.h @@ -113,6 +113,7 @@ class E: public QObject Q_ENUMS(EVT_STATE_ID_SCR_CHANGE_EMAIL) Q_ENUMS(EVT_STATE_ID_SCR_REPLACE_SELECT_KEY) Q_ENUMS(EVT_STATE_ID_SCR_REPLACE_KEYS) + Q_ENUMS(EVT_STATE_ID_SCR_EDIT_MEMBERS) Q_ENUMS(EVT_STATE_ID_SCR_SIGN_IN_VIA_XPUB) public: enum EVT_STATE_ID_REGISTED @@ -204,858 +205,868 @@ class E: public QObject STATE_ID_SCR_CHANGE_EMAIL , // 84 STATE_ID_SCR_REPLACE_SELECT_KEY , // 85 STATE_ID_SCR_REPLACE_KEYS , // 86 - STATE_ID_SCR_SIGN_IN_VIA_XPUB , // 87 - EVT_STATE_ID_REGISTED_MAX , // 88 + STATE_ID_SCR_EDIT_MEMBERS , // 87 + STATE_ID_SCR_SIGN_IN_VIA_XPUB , // 88 + EVT_STATE_ID_REGISTED_MAX , // 89 }; enum EVT_STATE_ID_ROOT { - EVT_STATE_ID_ROOT_MIN=EVT_STATE_ID_REGISTED_MAX+1, // 89 - EVT_STARTING_APPLICATION_LOCALMODE , // 90 - EVT_STARTING_APPLICATION_ONLINEMODE , // 91 - EVT_STARTING_APPLICATION_ONLINE_HWL , // 92 - EVT_SETTING_ACCOUNT_CHANGE_PASSWORD , // 93 - EVT_ONS_CLOSE_ALL_REQUEST , // 94 - EVT_ROOT_SIGN_IN_PRIMARY_KEY_REQUEST , // 95 - EVT_ROOT_CREATE_PRIMARY_KEY_REQUEST , // 96 - EVT_GOTO_HOME_WALLET_TAB , // 97 - EVT_ONS_CLOSE_REQUEST , // 98 - EVT_LOGIN_DB_REQUEST , // 99 - EVT_ROOT_PROMT_PIN , // 100 - EVT_ROOT_PROMT_PASSPHRASE , // 101 - EVT_LOGIN_MATRIX_REQUEST , // 102 - EVT_GOTO_HOME_CHAT_TAB , // 103 - EVT_ONLINE_ONS_CLOSE_REQUEST , // 104 - EVT_SHOW_TOAST_MESSAGE , // 105 - EVT_ROOT_UPDATE_PROFILE , // 106 - EVT_SHOW_CREATE_ACCOUNT_REQUEST , // 107 - EVT_GOTO_APP_SETTINGS_TAB , // 108 - EVT_SIGN_IN_REQUEST , // 109 - EVT_ROOT_ENTRY_PRIMARY_KEY_REQUEST , // 110 - EVT_LOGIN_WITH_SOFTWARE_KEY_REQUEST , // 111 - EVT_GOTO_SERVICE_SETTING_TAB , // 112 - EVT_CLOSE_TO_SERVICE_SETTINGS_REQUEST , // 113 - EVT_NUNCHUK_LOGIN_SUCCEEDED , // 114 - EVT_HEALTH_CHECK_STARTING_REQUEST , // 115 - EVT_DUMMY_TRANSACTION_INFO_REQUEST , // 116 - EVT_DASHBOARD_ALERT_SUCCESS_REQUEST , // 117 - EVT_SHARE_YOUR_SECRET_REQUEST , // 118 - EVT_REENTER_YOUR_PASSWORD_REQUEST , // 119 - EVT_ONBOARDING_REQUEST , // 120 - EVT_REPLACE_SELECT_KEY_REQUEST , // 121 - EVT_SIGN_IN_VIA_XPUB_REQUEST , // 122 - EVT_STATE_ID_ROOT_MAX , // 123 + EVT_STATE_ID_ROOT_MIN=EVT_STATE_ID_REGISTED_MAX+1, // 90 + EVT_STARTING_APPLICATION_LOCALMODE , // 91 + EVT_STARTING_APPLICATION_ONLINEMODE , // 92 + EVT_STARTING_APPLICATION_ONLINE_HWL , // 93 + EVT_SETTING_ACCOUNT_CHANGE_PASSWORD , // 94 + EVT_ONS_CLOSE_ALL_REQUEST , // 95 + EVT_ROOT_SIGN_IN_PRIMARY_KEY_REQUEST , // 96 + EVT_ROOT_CREATE_PRIMARY_KEY_REQUEST , // 97 + EVT_GOTO_HOME_WALLET_TAB , // 98 + EVT_ONS_CLOSE_REQUEST , // 99 + EVT_LOGIN_DB_REQUEST , // 100 + EVT_ROOT_PROMT_PIN , // 101 + EVT_ROOT_PROMT_PASSPHRASE , // 102 + EVT_LOGIN_MATRIX_REQUEST , // 103 + EVT_GOTO_HOME_CHAT_TAB , // 104 + EVT_ONLINE_ONS_CLOSE_REQUEST , // 105 + EVT_SHOW_TOAST_MESSAGE , // 106 + EVT_ROOT_UPDATE_PROFILE , // 107 + EVT_SHOW_CREATE_ACCOUNT_REQUEST , // 108 + EVT_GOTO_APP_SETTINGS_TAB , // 109 + EVT_SIGN_IN_REQUEST , // 110 + EVT_ROOT_ENTRY_PRIMARY_KEY_REQUEST , // 111 + EVT_LOGIN_WITH_SOFTWARE_KEY_REQUEST , // 112 + EVT_GOTO_SERVICE_SETTING_TAB , // 113 + EVT_CLOSE_TO_SERVICE_SETTINGS_REQUEST , // 114 + EVT_NUNCHUK_LOGIN_SUCCEEDED , // 115 + EVT_HEALTH_CHECK_STARTING_REQUEST , // 116 + EVT_DUMMY_TRANSACTION_INFO_REQUEST , // 117 + EVT_DASHBOARD_ALERT_SUCCESS_REQUEST , // 118 + EVT_SHARE_YOUR_SECRET_REQUEST , // 119 + EVT_REENTER_YOUR_PASSWORD_REQUEST , // 120 + EVT_ONBOARDING_REQUEST , // 121 + EVT_REPLACE_SELECT_KEY_REQUEST , // 122 + EVT_EDIT_MEMBERS_REQUEST , // 123 + EVT_SIGN_IN_VIA_XPUB_REQUEST , // 124 + EVT_STATE_ID_ROOT_MAX , // 125 }; enum EVT_STATE_ID_SCR_HOME { - EVT_STATE_ID_SCR_HOME_MIN=EVT_STATE_ID_ROOT_MAX+1, // 124 - EVT_HOME_WALLET_SELECTED , // 125 - EVT_HOME_WALLET_COPY_ADDRESS , // 126 - EVT_HOME_SETTING_REQUEST , // 127 - EVT_HOME_DISPLAY_ADDRESS , // 128 - EVT_HOME_IMPORT_PSBT , // 129 - EVT_HOME_EXPORT_BSMS , // 130 - EVT_HOME_ADD_WALLET_REQUEST , // 131 - EVT_HOME_MASTER_SIGNER_INFO_REQUEST , // 132 - EVT_HOME_SEND_REQUEST , // 133 - EVT_HOME_RECEIVE_REQUEST , // 134 - EVT_HOME_TRANSACTION_HISTORY_REQUEST , // 135 - EVT_HOME_WALLET_INFO_REQUEST , // 136 - EVT_HOME_TRANSACTION_INFO_REQUEST , // 137 - EVT_HOME_REMOTE_SIGNER_INFO_REQUEST , // 138 - EVT_HOME_ADD_NEW_SIGNER_REQUEST , // 139 - EVT_HOME_COLDCARD_NFC_SIGNER_INFO_REQUEST , // 140 - EVT_ASK_HARDWARE_REQ , // 141 - EVT_EXIST_HARDWARE_REQ , // 142 - EVT_SHOW_GROUP_WALLET_CONFIG_REQUEST , // 143 - EVT_KEY_HEALTH_CHECK_STATUS_REQUEST , // 144 - EVT_RECURRING_PAYMENTS_REQUEST , // 145 - EVT_ADD_HARDWARE_REQUEST , // 146 - EVT_ADD_SOFTWARE_SIGNER_RESULT , // 147 - EVT_REPLACE_KEYS_REQUEST , // 148 - EVT_STATE_ID_SCR_HOME_MAX , // 149 + EVT_STATE_ID_SCR_HOME_MIN=EVT_STATE_ID_ROOT_MAX+1, // 126 + EVT_HOME_WALLET_SELECTED , // 127 + EVT_HOME_WALLET_COPY_ADDRESS , // 128 + EVT_HOME_SETTING_REQUEST , // 129 + EVT_HOME_DISPLAY_ADDRESS , // 130 + EVT_HOME_IMPORT_PSBT , // 131 + EVT_HOME_EXPORT_BSMS , // 132 + EVT_HOME_ADD_WALLET_REQUEST , // 133 + EVT_HOME_MASTER_SIGNER_INFO_REQUEST , // 134 + EVT_HOME_SEND_REQUEST , // 135 + EVT_HOME_RECEIVE_REQUEST , // 136 + EVT_HOME_TRANSACTION_HISTORY_REQUEST , // 137 + EVT_HOME_WALLET_INFO_REQUEST , // 138 + EVT_HOME_TRANSACTION_INFO_REQUEST , // 139 + EVT_HOME_REMOTE_SIGNER_INFO_REQUEST , // 140 + EVT_HOME_ADD_NEW_SIGNER_REQUEST , // 141 + EVT_HOME_COLDCARD_NFC_SIGNER_INFO_REQUEST , // 142 + EVT_ASK_HARDWARE_REQ , // 143 + EVT_EXIST_HARDWARE_REQ , // 144 + EVT_SHOW_GROUP_WALLET_CONFIG_REQUEST , // 145 + EVT_KEY_HEALTH_CHECK_STATUS_REQUEST , // 146 + EVT_RECURRING_PAYMENTS_REQUEST , // 147 + EVT_ADD_HARDWARE_REQUEST , // 148 + EVT_ADD_SOFTWARE_SIGNER_RESULT , // 149 + EVT_REPLACE_KEYS_REQUEST , // 150 + EVT_STATE_ID_SCR_HOME_MAX , // 151 }; enum EVT_STATE_ID_SCR_ADD_WALLET { - EVT_STATE_ID_SCR_ADD_WALLET_MIN=EVT_STATE_ID_SCR_HOME_MAX+1, // 150 - EVT_ADD_WALLET_IMPORT , // 151 - EVT_ADD_WALLET_BACK_REQUEST , // 152 - EVT_ADD_WALLET_SIGNER_CONFIGURATION_REQUEST , // 153 - EVT_ADD_WALLET_IMPORT_SUCCEED , // 154 - EVT_STATE_ID_SCR_ADD_WALLET_MAX , // 155 + EVT_STATE_ID_SCR_ADD_WALLET_MIN=EVT_STATE_ID_SCR_HOME_MAX+1, // 152 + EVT_ADD_WALLET_IMPORT , // 153 + EVT_ADD_WALLET_BACK_REQUEST , // 154 + EVT_ADD_WALLET_SIGNER_CONFIGURATION_REQUEST , // 155 + EVT_ADD_WALLET_IMPORT_SUCCEED , // 156 + EVT_STATE_ID_SCR_ADD_WALLET_MAX , // 157 }; enum EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER { - EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_MIN=EVT_STATE_ID_SCR_ADD_WALLET_MAX+1, // 156 - EVT_ADD_HARDWARE_SIGNER_ADD_MASTER_SIGNER_REQUEST , // 157 - EVT_ADD_HARDWARE_SIGNER_REFRESH_REQUEST , // 158 - EVT_ADD_HARDWARE_SIGNER_ADD_REMOTE_SIGNER_REQUEST , // 159 - EVT_ADD_HARDWARE_SIGNER_PROMT_PIN_REQUEST , // 160 - EVT_ADD_HARDWARE_SIGNER_SEND_PIN_REQUEST , // 161 - EVT_ADD_MASTER_SIGNER_RESULT , // 162 - EVT_ADD_REMOTE_SIGNER_RESULT , // 163 - EVT_ADD_HARDWARE_SIGNER_BACK_REQUEST , // 164 - EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_MAX , // 165 + EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_MIN=EVT_STATE_ID_SCR_ADD_WALLET_MAX+1, // 158 + EVT_ADD_HARDWARE_SIGNER_ADD_MASTER_SIGNER_REQUEST , // 159 + EVT_ADD_HARDWARE_SIGNER_REFRESH_REQUEST , // 160 + EVT_ADD_HARDWARE_SIGNER_ADD_REMOTE_SIGNER_REQUEST , // 161 + EVT_ADD_HARDWARE_SIGNER_PROMT_PIN_REQUEST , // 162 + EVT_ADD_HARDWARE_SIGNER_SEND_PIN_REQUEST , // 163 + EVT_ADD_MASTER_SIGNER_RESULT , // 164 + EVT_ADD_REMOTE_SIGNER_RESULT , // 165 + EVT_ADD_HARDWARE_SIGNER_BACK_REQUEST , // 166 + EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_MAX , // 167 }; enum EVT_STATE_ID_SCR_MASTER_SIGNER_INFO { - EVT_STATE_ID_SCR_MASTER_SIGNER_INFO_MIN=EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_MAX+1, // 166 - EVT_MASTER_SIGNER_INFO_EDIT_NAME , // 167 - EVT_MASTER_SIGNER_INFO_HEALTH_CHECK , // 168 - EVT_MASTER_SIGNER_INFO_REMOVE_REQUEST , // 169 - EVT_MASTER_SIGNER_INFO_PROMT_PIN , // 170 - EVT_MASTER_SIGNER_INFO_SEND_PIN , // 171 - EVT_MASTER_SIGNER_INFO_SEND_PASSPHRASE , // 172 - EVT_MASTER_SIGNER_INFO_GET_XPUBS , // 173 - EVT_MASTER_SIGNER_INFO_BACK_REQUEST , // 174 - EVT_MASTER_SIGNER_INFO_BACK_WALLET_INFO , // 175 - EVT_STATE_ID_SCR_MASTER_SIGNER_INFO_MAX , // 176 + EVT_STATE_ID_SCR_MASTER_SIGNER_INFO_MIN=EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_MAX+1, // 168 + EVT_MASTER_SIGNER_INFO_EDIT_NAME , // 169 + EVT_MASTER_SIGNER_INFO_HEALTH_CHECK , // 170 + EVT_MASTER_SIGNER_INFO_REMOVE_REQUEST , // 171 + EVT_MASTER_SIGNER_INFO_PROMT_PIN , // 172 + EVT_MASTER_SIGNER_INFO_SEND_PIN , // 173 + EVT_MASTER_SIGNER_INFO_SEND_PASSPHRASE , // 174 + EVT_MASTER_SIGNER_INFO_GET_XPUBS , // 175 + EVT_MASTER_SIGNER_INFO_BACK_REQUEST , // 176 + EVT_MASTER_SIGNER_INFO_BACK_WALLET_INFO , // 177 + EVT_STATE_ID_SCR_MASTER_SIGNER_INFO_MAX , // 178 }; enum EVT_STATE_ID_SCR_ADD_WALLET_SIGNER_CONFIGURATION { - EVT_STATE_ID_SCR_ADD_WALLET_SIGNER_CONFIGURATION_MIN=EVT_STATE_ID_SCR_MASTER_SIGNER_INFO_MAX+1, // 177 - EVT_SIGNER_CONFIGURATION_SELECT_MASTER_SIGNER , // 178 - EVT_SIGNER_CONFIGURATION_REMOVE_SIGNER , // 179 - EVT_SIGNER_CONFIGURATION_SELECT_REMOTE_SIGNER , // 180 - EVT_SIGNER_CONFIGURATION_MASTER_SIGNER_SEND_PASSPHRASE , // 181 - EVT_SIGNER_CONFIGURATION_TRY_REVIEW , // 182 - EVT_ADD_WALLET_SIGNER_CONFIGURATION_BACK , // 183 - EVT_ADD_WALLET_SIGNER_CONFIGURATION_REVIEW , // 184 - EVT_ADD_SIGNER_TO_WALLET_REQUEST , // 185 - EVT_STATE_ID_SCR_ADD_WALLET_SIGNER_CONFIGURATION_MAX , // 186 + EVT_STATE_ID_SCR_ADD_WALLET_SIGNER_CONFIGURATION_MIN=EVT_STATE_ID_SCR_MASTER_SIGNER_INFO_MAX+1, // 179 + EVT_SIGNER_CONFIGURATION_SELECT_MASTER_SIGNER , // 180 + EVT_SIGNER_CONFIGURATION_REMOVE_SIGNER , // 181 + EVT_SIGNER_CONFIGURATION_SELECT_REMOTE_SIGNER , // 182 + EVT_SIGNER_CONFIGURATION_MASTER_SIGNER_SEND_PASSPHRASE , // 183 + EVT_SIGNER_CONFIGURATION_TRY_REVIEW , // 184 + EVT_ADD_WALLET_SIGNER_CONFIGURATION_BACK , // 185 + EVT_ADD_WALLET_SIGNER_CONFIGURATION_REVIEW , // 186 + EVT_ADD_SIGNER_TO_WALLET_REQUEST , // 187 + EVT_STATE_ID_SCR_ADD_WALLET_SIGNER_CONFIGURATION_MAX , // 188 }; enum EVT_STATE_ID_SCR_RECEIVE { - EVT_STATE_ID_SCR_RECEIVE_MIN=EVT_STATE_ID_SCR_ADD_WALLET_SIGNER_CONFIGURATION_MAX+1, // 187 - EVT_BTN_GEN_NEW_ADDRESS , // 188 - EVT_RECEIVE_COPY_ADDRESS , // 189 - EVT_RECEIVE_SET_QUICK_RECEIVE_ADDRESS , // 190 - EVT_RECEIVE_DISPLAY_ADDRESS , // 191 - EVT_RECEIVE_ADDRESS_BALANCE , // 192 - EVT_RECEIVE_BACK_REQUEST , // 193 - EVT_STATE_ID_SCR_RECEIVE_MAX , // 194 + EVT_STATE_ID_SCR_RECEIVE_MIN=EVT_STATE_ID_SCR_ADD_WALLET_SIGNER_CONFIGURATION_MAX+1, // 189 + EVT_BTN_GEN_NEW_ADDRESS , // 190 + EVT_RECEIVE_COPY_ADDRESS , // 191 + EVT_RECEIVE_SET_QUICK_RECEIVE_ADDRESS , // 192 + EVT_RECEIVE_DISPLAY_ADDRESS , // 193 + EVT_RECEIVE_ADDRESS_BALANCE , // 194 + EVT_RECEIVE_BACK_REQUEST , // 195 + EVT_STATE_ID_SCR_RECEIVE_MAX , // 196 }; enum EVT_STATE_ID_SCR_SEND { - EVT_STATE_ID_SCR_SEND_MIN=EVT_STATE_ID_SCR_RECEIVE_MAX+1, // 195 - EVT_SEND_ADD_DESTINATION_REQUEST , // 196 - EVT_SEND_CREATE_TRANSACTION_REQUEST , // 197 - EVT_SEND_BACK_REQUEST , // 198 - EVT_SEND_CREATE_TRANSACTION_SUCCEED , // 199 - EVT_SEND_BACK_HOME_SHARED_WL , // 200 - EVT_STATE_ID_SCR_SEND_MAX , // 201 + EVT_STATE_ID_SCR_SEND_MIN=EVT_STATE_ID_SCR_RECEIVE_MAX+1, // 197 + EVT_SEND_ADD_DESTINATION_REQUEST , // 198 + EVT_SEND_CREATE_TRANSACTION_REQUEST , // 199 + EVT_SEND_BACK_REQUEST , // 200 + EVT_SEND_CREATE_TRANSACTION_SUCCEED , // 201 + EVT_SEND_BACK_HOME_SHARED_WL , // 202 + EVT_STATE_ID_SCR_SEND_MAX , // 203 }; enum EVT_STATE_ID_SCR_CREATE_TRANSACTION { - EVT_STATE_ID_SCR_CREATE_TRANSACTION_MIN=EVT_STATE_ID_SCR_SEND_MAX+1, // 202 - EVT_CREATE_TRANSACTION_MAKE_DRAFT_TX , // 203 - EVT_CREATE_TRANSACTION_SAVE_REQUEST , // 204 - EVT_CREATE_TRANSACTION_UTXO_SORT_REQUEST , // 205 - EVT_CREATE_TRANSACTION_SIGN_REQUEST , // 206 - EVT_CREATE_TRANSACTION_BACK_REQUEST , // 207 - EVT_CREATE_TRANSACTION_SIGN_SUCCEED , // 208 - EVR_CREATE_TRANSACTION_BACK_UTXO_CONSILIDATE , // 209 - EVT_STATE_ID_SCR_CREATE_TRANSACTION_MAX , // 210 + EVT_STATE_ID_SCR_CREATE_TRANSACTION_MIN=EVT_STATE_ID_SCR_SEND_MAX+1, // 204 + EVT_CREATE_TRANSACTION_MAKE_DRAFT_TX , // 205 + EVT_CREATE_TRANSACTION_SAVE_REQUEST , // 206 + EVT_CREATE_TRANSACTION_UTXO_SORT_REQUEST , // 207 + EVT_CREATE_TRANSACTION_SIGN_REQUEST , // 208 + EVT_CREATE_TRANSACTION_BACK_REQUEST , // 209 + EVT_CREATE_TRANSACTION_SIGN_SUCCEED , // 210 + EVR_CREATE_TRANSACTION_BACK_UTXO_CONSILIDATE , // 211 + EVT_STATE_ID_SCR_CREATE_TRANSACTION_MAX , // 212 }; enum EVT_STATE_ID_SCR_TRANSACTION_INFO { - EVT_STATE_ID_SCR_TRANSACTION_INFO_MIN=EVT_STATE_ID_SCR_CREATE_TRANSACTION_MAX+1, // 211 - EVT_TRANSACTION_SIGN_REQUEST , // 212 - EVT_TRANSACTION_EXPORT_REQUEST , // 213 - EVT_TRANSACTION_EXPORT_QRCODE , // 214 - EVT_TRANSACTION_IMPORT_REQUEST , // 215 - EVT_TRANSACTION_IMPORT_QRCODE , // 216 - EVT_TRANSACTION_BROADCAST_REQUEST , // 217 - EVT_TRANSACTION_SET_MEMO_REQUEST , // 218 - EVT_TRANSACTION_SCAN_DEVICE_REQUEST , // 219 - EVT_TRANSACTION_REMOVE_REQUEST , // 220 - EVT_TRANSACTION_SEND_PIN_REQUEST , // 221 - EVT_TRANSACTION_PROMT_PIN_REQUEST , // 222 - EVT_TRANSACTION_VERIFY_ADDRESS , // 223 - EVT_TRANSACTION_SEND_PASSPHRASE , // 224 - EVT_TRANSACTION_CANCEL_REQUEST , // 225 - EVT_TRANSACTION_INFO_BACK_REQUEST , // 226 - EVT_TRANSACTION_INFO_BACK_TO_CREATE_TRANSACTION_REQUEST , // 227 - EVT_TRANSACTION_REPLACE_BY_FEE_REQUEST , // 228 - EVT_TRANSACTION_INFO_BACK_UTXO_INFO , // 229 - EVT_STATE_ID_SCR_TRANSACTION_INFO_MAX , // 230 + EVT_STATE_ID_SCR_TRANSACTION_INFO_MIN=EVT_STATE_ID_SCR_CREATE_TRANSACTION_MAX+1, // 213 + EVT_TRANSACTION_SIGN_REQUEST , // 214 + EVT_TRANSACTION_EXPORT_REQUEST , // 215 + EVT_TRANSACTION_EXPORT_QRCODE , // 216 + EVT_TRANSACTION_IMPORT_REQUEST , // 217 + EVT_TRANSACTION_IMPORT_QRCODE , // 218 + EVT_TRANSACTION_BROADCAST_REQUEST , // 219 + EVT_TRANSACTION_SET_MEMO_REQUEST , // 220 + EVT_TRANSACTION_SCAN_DEVICE_REQUEST , // 221 + EVT_TRANSACTION_REMOVE_REQUEST , // 222 + EVT_TRANSACTION_SEND_PIN_REQUEST , // 223 + EVT_TRANSACTION_PROMT_PIN_REQUEST , // 224 + EVT_TRANSACTION_VERIFY_ADDRESS , // 225 + EVT_TRANSACTION_SEND_PASSPHRASE , // 226 + EVT_TRANSACTION_CANCEL_REQUEST , // 227 + EVT_TRANSACTION_INFO_BACK_REQUEST , // 228 + EVT_TRANSACTION_INFO_BACK_TO_CREATE_TRANSACTION_REQUEST , // 229 + EVT_TRANSACTION_REPLACE_BY_FEE_REQUEST , // 230 + EVT_TRANSACTION_INFO_BACK_UTXO_INFO , // 231 + EVT_STATE_ID_SCR_TRANSACTION_INFO_MAX , // 232 }; enum EVT_STATE_ID_SCR_TRANSACTION_HISTORY { - EVT_STATE_ID_SCR_TRANSACTION_HISTORY_MIN=EVT_STATE_ID_SCR_TRANSACTION_INFO_MAX+1, // 231 - EVT_TRANSACTION_HISTORY_SORT_REQUEST , // 232 - EVT_TRANSACTION_HISTORY_BACK_REQUEST , // 233 - EVT_TRANSACTION_INFO_ITEM_SELECTED , // 234 - EVT_STATE_ID_SCR_TRANSACTION_HISTORY_MAX , // 235 + EVT_STATE_ID_SCR_TRANSACTION_HISTORY_MIN=EVT_STATE_ID_SCR_TRANSACTION_INFO_MAX+1, // 233 + EVT_TRANSACTION_HISTORY_SORT_REQUEST , // 234 + EVT_TRANSACTION_HISTORY_BACK_REQUEST , // 235 + EVT_TRANSACTION_INFO_ITEM_SELECTED , // 236 + EVT_STATE_ID_SCR_TRANSACTION_HISTORY_MAX , // 237 }; enum EVT_STATE_ID_SCR_APP_SETTINGS { - EVT_STATE_ID_SCR_APP_SETTINGS_MIN=EVT_STATE_ID_SCR_TRANSACTION_HISTORY_MAX+1, // 236 - EVT_APP_SETTING_DELETE_ACCOUNT_REQUEST , // 237 - EVT_APP_SETTING_CHANGE_PASSPHRASE , // 238 - EVT_APP_SETTING_REQUEST_RESTART , // 239 - EVT_APP_SETTING_REQUEST_RESCAN , // 240 - EVT_APP_SETTING_DELETE_PRIMARY_KEY_ACCOUNT_REQUEST , // 241 - EVT_APP_SETTING_BACK_REQUEST , // 242 - EVT_APP_SETTING_BACK_TO_ONLINE_MODE , // 243 - EVT_SHOW_REPLACE_PRIMARY_KEY_REQUEST , // 244 - EVT_SELECT_SERVER_REQUEST , // 245 - EVT_CHANGE_EMAIL_REQUEST , // 246 - EVT_STATE_ID_SCR_APP_SETTINGS_MAX , // 247 + EVT_STATE_ID_SCR_APP_SETTINGS_MIN=EVT_STATE_ID_SCR_TRANSACTION_HISTORY_MAX+1, // 238 + EVT_APP_SETTING_DELETE_ACCOUNT_REQUEST , // 239 + EVT_APP_SETTING_CHANGE_PASSPHRASE , // 240 + EVT_APP_SETTING_REQUEST_RESTART , // 241 + EVT_APP_SETTING_REQUEST_RESCAN , // 242 + EVT_APP_SETTING_DELETE_PRIMARY_KEY_ACCOUNT_REQUEST , // 243 + EVT_APP_SETTING_BACK_REQUEST , // 244 + EVT_APP_SETTING_BACK_TO_ONLINE_MODE , // 245 + EVT_SHOW_REPLACE_PRIMARY_KEY_REQUEST , // 246 + EVT_SELECT_SERVER_REQUEST , // 247 + EVT_CHANGE_EMAIL_REQUEST , // 248 + EVT_STATE_ID_SCR_APP_SETTINGS_MAX , // 249 }; enum EVT_STATE_ID_SCR_ADD_REMOTE_SIGNER_RESULT { - EVT_STATE_ID_SCR_ADD_REMOTE_SIGNER_RESULT_MIN=EVT_STATE_ID_SCR_APP_SETTINGS_MAX+1, // 248 - EVT_REMOTE_SIGNER_RESULT_HEALTH_CHECK , // 249 - EVT_REMOTE_SIGNER_RESULT_EDIT_NAME , // 250 - EVT_REMOTE_SIGNER_RESULT_IMPORT_SIGNATURE , // 251 - EVT_REMOTE_SIGNER_RESULT_EXPORT_MESSAGE , // 252 - EVT_REMOTE_SIGNER_RESULT_GET_XPUBS , // 253 - EVT_REMOTE_SIGNER_RESULT_DELETE_REQUEST , // 254 - EVT_REMOTE_SIGNER_RESULT_CONFIRM_ADD_TO_WALLET_SIGNER_CONFIG , // 255 - EVT_STATE_ID_SCR_ADD_REMOTE_SIGNER_RESULT_MAX , // 256 + EVT_STATE_ID_SCR_ADD_REMOTE_SIGNER_RESULT_MIN=EVT_STATE_ID_SCR_APP_SETTINGS_MAX+1, // 250 + EVT_REMOTE_SIGNER_RESULT_HEALTH_CHECK , // 251 + EVT_REMOTE_SIGNER_RESULT_EDIT_NAME , // 252 + EVT_REMOTE_SIGNER_RESULT_IMPORT_SIGNATURE , // 253 + EVT_REMOTE_SIGNER_RESULT_EXPORT_MESSAGE , // 254 + EVT_REMOTE_SIGNER_RESULT_GET_XPUBS , // 255 + EVT_REMOTE_SIGNER_RESULT_DELETE_REQUEST , // 256 + EVT_REMOTE_SIGNER_RESULT_CONFIRM_ADD_TO_WALLET_SIGNER_CONFIG , // 257 + EVT_STATE_ID_SCR_ADD_REMOTE_SIGNER_RESULT_MAX , // 258 }; enum EVT_STATE_ID_SCR_UTXOS { - EVT_STATE_ID_SCR_UTXOS_MIN=EVT_STATE_ID_SCR_ADD_REMOTE_SIGNER_RESULT_MAX+1, // 257 - EVT_UTXOS_SORT_REQUEST , // 258 - EVT_UTXOS_BACK_REQUEST , // 259 - EVT_UTXOS_CONSOLIDATE_REQUEST , // 260 - EVT_UTXOS_ITEM_SELECTED , // 261 - EVT_UTXO_OUTPUT_BACK_SHARED_WALLET , // 262 - EVT_STATE_ID_SCR_UTXOS_MAX , // 263 + EVT_STATE_ID_SCR_UTXOS_MIN=EVT_STATE_ID_SCR_ADD_REMOTE_SIGNER_RESULT_MAX+1, // 259 + EVT_UTXOS_SORT_REQUEST , // 260 + EVT_UTXOS_BACK_REQUEST , // 261 + EVT_UTXOS_CONSOLIDATE_REQUEST , // 262 + EVT_UTXOS_ITEM_SELECTED , // 263 + EVT_UTXO_OUTPUT_BACK_SHARED_WALLET , // 264 + EVT_STATE_ID_SCR_UTXOS_MAX , // 265 }; enum EVT_STATE_ID_SCR_WALLET_INFO { - EVT_STATE_ID_SCR_WALLET_INFO_MIN=EVT_STATE_ID_SCR_UTXOS_MAX+1, // 264 - EVT_WALLET_INFO_EDIT_NAME , // 265 - EVT_WALLET_INFO_REMOVE , // 266 - EVT_WALLET_INFO_EXPORT_DB , // 267 - EVT_WALLET_INFO_EXPORT_CSV , // 268 - EVT_WALLET_INFO_EXPORT_DESCRIPTOR , // 269 - EVT_WALLET_INFO_EXPORT_COLDCARD , // 270 - EVT_WALLET_INFO_EXPORT_QRCODE , // 271 - EVT_WALLET_INFO_SIGNER_INFO_REQUEST , // 272 - EVT_WALLET_INFO_EDIT_DESCRIPTION , // 273 - EVT_WALLET_INFO_IMPORT_PSBT , // 274 - EVT_WALLET_INFO_REFRESH_WALLET_REQUEST , // 275 - EVT_WALLET_INFO_GAP_LIMIT_REQUEST , // 276 - EVT_WALLET_INFO_BACK_REQUEST , // 277 - EVT_WALLET_INFO_UTXOS_REQUEST , // 278 - EVT_WALLET_INFO_CHANGE_ADDRESS_REQUEST , // 279 - EVT_WALLET_INFO_MASTER_SIGNER_INFO_REQUEST , // 280 - EVT_WALLET_INFO_REMOTE_SIGNER_INFO_REQUEST , // 281 - EVT_STATE_ID_SCR_WALLET_INFO_MAX , // 282 + EVT_STATE_ID_SCR_WALLET_INFO_MIN=EVT_STATE_ID_SCR_UTXOS_MAX+1, // 266 + EVT_WALLET_INFO_EDIT_NAME , // 267 + EVT_WALLET_INFO_REMOVE , // 268 + EVT_WALLET_INFO_EXPORT_DB , // 269 + EVT_WALLET_INFO_EXPORT_CSV , // 270 + EVT_WALLET_INFO_EXPORT_DESCRIPTOR , // 271 + EVT_WALLET_INFO_EXPORT_COLDCARD , // 272 + EVT_WALLET_INFO_EXPORT_QRCODE , // 273 + EVT_WALLET_INFO_SIGNER_INFO_REQUEST , // 274 + EVT_WALLET_INFO_EDIT_DESCRIPTION , // 275 + EVT_WALLET_INFO_IMPORT_PSBT , // 276 + EVT_WALLET_INFO_REFRESH_WALLET_REQUEST , // 277 + EVT_WALLET_INFO_GAP_LIMIT_REQUEST , // 278 + EVT_WALLET_INFO_BACK_REQUEST , // 279 + EVT_WALLET_INFO_UTXOS_REQUEST , // 280 + EVT_WALLET_INFO_CHANGE_ADDRESS_REQUEST , // 281 + EVT_WALLET_INFO_MASTER_SIGNER_INFO_REQUEST , // 282 + EVT_WALLET_INFO_REMOTE_SIGNER_INFO_REQUEST , // 283 + EVT_STATE_ID_SCR_WALLET_INFO_MAX , // 284 }; enum EVT_STATE_ID_SCR_ADD_WALLET_CONFIRMATION { - EVT_STATE_ID_SCR_ADD_WALLET_CONFIRMATION_MIN=EVT_STATE_ID_SCR_WALLET_INFO_MAX+1, // 283 - EVT_ADD_WALLET_CONFIRM_CREATE , // 284 - EVT_ADD_WALLET_TOP_UP_XPUBS_REQUEST , // 285 - EVT_ADD_WALLET_DOWNLOAD_DESCRIPTOR , // 286 - EVT_ADD_WALLET_GENERATE_SIGNER , // 287 - EVT_ADD_WALLET_GET_WALLET_DESCRIPTOR , // 288 - EVT_ADD_WALLET_COPY_WALLET_DESCRIPTOR , // 289 - EVT_ADD_WALLET_CONFIRMATION_BACK_REQUEST , // 290 - EVT_ADD_WALLET_SUCCESSFULLY , // 291 - EVT_STATE_ID_SCR_ADD_WALLET_CONFIRMATION_MAX , // 292 + EVT_STATE_ID_SCR_ADD_WALLET_CONFIRMATION_MIN=EVT_STATE_ID_SCR_WALLET_INFO_MAX+1, // 285 + EVT_ADD_WALLET_CONFIRM_CREATE , // 286 + EVT_ADD_WALLET_TOP_UP_XPUBS_REQUEST , // 287 + EVT_ADD_WALLET_DOWNLOAD_DESCRIPTOR , // 288 + EVT_ADD_WALLET_GENERATE_SIGNER , // 289 + EVT_ADD_WALLET_GET_WALLET_DESCRIPTOR , // 290 + EVT_ADD_WALLET_COPY_WALLET_DESCRIPTOR , // 291 + EVT_ADD_WALLET_CONFIRMATION_BACK_REQUEST , // 292 + EVT_ADD_WALLET_SUCCESSFULLY , // 293 + EVT_STATE_ID_SCR_ADD_WALLET_CONFIRMATION_MAX , // 294 }; enum EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_TO_WALLET { - EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_TO_WALLET_MIN=EVT_STATE_ID_SCR_ADD_WALLET_CONFIRMATION_MAX+1, // 293 - EVT_ADD_HARDWARE_SIGNER_TO_WALLET_MASTER_SIGNER , // 294 - EVT_ADD_HARDWARE_SIGNER_TO_WALLET_REMOTE_SIGNER , // 295 - EVT_ADD_HARDWARE_SIGNER_TO_WALLET_MASTER_SIGNER_REFRESH , // 296 - EVT_ADD_HARDWARE_SIGNER_TO_WALLET_SEND_PIN , // 297 - EVT_ADD_HARDWARE_SIGNER_TO_WALLET_PROMT_PIN , // 298 - EVT_ADD_HARDWARE_SIGNER_TO_WALLET_REMOTE_SIGNER_RESULT , // 299 - EVT_ADD_HARDWARE_SIGNER_TO_WALLET_MASTER_SIGNER_RESULT , // 300 - EVT_ADD_HARDWARE_SIGNER_TO_WALLET_BACK , // 301 - EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_TO_WALLET_MAX , // 302 + EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_TO_WALLET_MIN=EVT_STATE_ID_SCR_ADD_WALLET_CONFIRMATION_MAX+1, // 295 + EVT_ADD_HARDWARE_SIGNER_TO_WALLET_MASTER_SIGNER , // 296 + EVT_ADD_HARDWARE_SIGNER_TO_WALLET_REMOTE_SIGNER , // 297 + EVT_ADD_HARDWARE_SIGNER_TO_WALLET_MASTER_SIGNER_REFRESH , // 298 + EVT_ADD_HARDWARE_SIGNER_TO_WALLET_SEND_PIN , // 299 + EVT_ADD_HARDWARE_SIGNER_TO_WALLET_PROMT_PIN , // 300 + EVT_ADD_HARDWARE_SIGNER_TO_WALLET_REMOTE_SIGNER_RESULT , // 301 + EVT_ADD_HARDWARE_SIGNER_TO_WALLET_MASTER_SIGNER_RESULT , // 302 + EVT_ADD_HARDWARE_SIGNER_TO_WALLET_BACK , // 303 + EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_TO_WALLET_MAX , // 304 }; enum EVT_STATE_ID_SCR_WALLET_CHANGE_ADDRESSES { - EVT_STATE_ID_SCR_WALLET_CHANGE_ADDRESSES_MIN=EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_TO_WALLET_MAX+1, // 303 - EVT_WALLET_CHANGE_ADDRESSES_GEN_NEW_ADDRESS , // 304 - EVT_WALLET_CHANGE_ADDRESSES_COPY , // 305 - EVT_WALLET_CHANGE_ADDRESS_BACK_REQUEST , // 306 - EVT_CHANGE_ADDRESS_BACK_SHARED_WALLET , // 307 - EVT_STATE_ID_SCR_WALLET_CHANGE_ADDRESSES_MAX , // 308 + EVT_STATE_ID_SCR_WALLET_CHANGE_ADDRESSES_MIN=EVT_STATE_ID_SCR_ADD_HARDWARE_SIGNER_TO_WALLET_MAX+1, // 305 + EVT_WALLET_CHANGE_ADDRESSES_GEN_NEW_ADDRESS , // 306 + EVT_WALLET_CHANGE_ADDRESSES_COPY , // 307 + EVT_WALLET_CHANGE_ADDRESS_BACK_REQUEST , // 308 + EVT_CHANGE_ADDRESS_BACK_SHARED_WALLET , // 309 + EVT_STATE_ID_SCR_WALLET_CHANGE_ADDRESSES_MAX , // 310 }; enum EVT_STATE_ID_SCR_ADD_MASTER_SIGNER_RESULT { - EVT_STATE_ID_SCR_ADD_MASTER_SIGNER_RESULT_MIN=EVT_STATE_ID_SCR_WALLET_CHANGE_ADDRESSES_MAX+1, // 309 - EVT_ADD_MASTER_SIGNER_RESULT_RUN_HEALTHCHECK , // 310 - EVT_ADD_MASTER_SIGNER_RESULT_PROMT_PIN , // 311 - EVT_ADD_MASTER_SIGNER_RESULT_GET_XPUBS , // 312 - EVT_ADD_MASTER_SIGNER_INFO_REMOVE_REQUEST , // 313 - EVT_ADD_MASTER_SIGNER_FINISHED , // 314 - EVT_ADD_MASTER_SIGNER_RESULT_CONFIRM_ADD_TO_WALLET_CONFIGURATION , // 315 - EVT_STATE_ID_SCR_ADD_MASTER_SIGNER_RESULT_MAX , // 316 + EVT_STATE_ID_SCR_ADD_MASTER_SIGNER_RESULT_MIN=EVT_STATE_ID_SCR_WALLET_CHANGE_ADDRESSES_MAX+1, // 311 + EVT_ADD_MASTER_SIGNER_RESULT_RUN_HEALTHCHECK , // 312 + EVT_ADD_MASTER_SIGNER_RESULT_PROMT_PIN , // 313 + EVT_ADD_MASTER_SIGNER_RESULT_GET_XPUBS , // 314 + EVT_ADD_MASTER_SIGNER_INFO_REMOVE_REQUEST , // 315 + EVT_ADD_MASTER_SIGNER_FINISHED , // 316 + EVT_ADD_MASTER_SIGNER_RESULT_CONFIRM_ADD_TO_WALLET_CONFIGURATION , // 317 + EVT_STATE_ID_SCR_ADD_MASTER_SIGNER_RESULT_MAX , // 318 }; enum EVT_STATE_ID_SCR_REMOTE_SIGNER_INFO { - EVT_STATE_ID_SCR_REMOTE_SIGNER_INFO_MIN=EVT_STATE_ID_SCR_ADD_MASTER_SIGNER_RESULT_MAX+1, // 317 - EVT_REMOTE_SIGNER_INFO_HEALTH_CHECK , // 318 - EVT_REMOTE_SIGNER_INFO_EDIT_NAME , // 319 - EVT_REMOTE_SIGNER_INFO_IMPORT_SIGNATURE , // 320 - EVT_REMOTE_SIGNER_INFO_EXPORT_MESSAGE , // 321 - EVT_REMOTE_SIGNER_INFO_DELETE_REQUEST , // 322 - EVT_REMOTE_SIGNER_INFO_GET_XPUBS , // 323 - EVT_REMOTE_SIGNER_INFO_BACK_WALLET_INFO , // 324 - EVT_REMOTE_SIGNER_INFO_BACK_HOME , // 325 - EVT_STATE_ID_SCR_REMOTE_SIGNER_INFO_MAX , // 326 + EVT_STATE_ID_SCR_REMOTE_SIGNER_INFO_MIN=EVT_STATE_ID_SCR_ADD_MASTER_SIGNER_RESULT_MAX+1, // 319 + EVT_REMOTE_SIGNER_INFO_HEALTH_CHECK , // 320 + EVT_REMOTE_SIGNER_INFO_EDIT_NAME , // 321 + EVT_REMOTE_SIGNER_INFO_IMPORT_SIGNATURE , // 322 + EVT_REMOTE_SIGNER_INFO_EXPORT_MESSAGE , // 323 + EVT_REMOTE_SIGNER_INFO_DELETE_REQUEST , // 324 + EVT_REMOTE_SIGNER_INFO_GET_XPUBS , // 325 + EVT_REMOTE_SIGNER_INFO_BACK_WALLET_INFO , // 326 + EVT_REMOTE_SIGNER_INFO_BACK_HOME , // 327 + EVT_STATE_ID_SCR_REMOTE_SIGNER_INFO_MAX , // 328 }; enum EVT_STATE_ID_SCR_UNLOCK_DB { - EVT_STATE_ID_SCR_UNLOCK_DB_MIN=EVT_STATE_ID_SCR_REMOTE_SIGNER_INFO_MAX+1, // 327 - EVT_LOGIN_PERFORM_PASSWORD_REQUEST , // 328 - EVT_STATE_ID_SCR_UNLOCK_DB_MAX , // 329 + EVT_STATE_ID_SCR_UNLOCK_DB_MIN=EVT_STATE_ID_SCR_REMOTE_SIGNER_INFO_MAX+1, // 329 + EVT_LOGIN_PERFORM_PASSWORD_REQUEST , // 330 + EVT_STATE_ID_SCR_UNLOCK_DB_MAX , // 331 }; enum EVT_STATE_ID_SCR_CONSOLIDATE_OUTPUT { - EVT_STATE_ID_SCR_CONSOLIDATE_OUTPUT_MIN=EVT_STATE_ID_SCR_UNLOCK_DB_MAX+1, // 330 - EVT_CONSOLIDATE_MAKE_TRANSACTION , // 331 - EVT_CONSOLIDATE_BACK_REQUEST , // 332 - EVT_CONSOLIDATE_MAKE_TRANSACTION_SUCCEED , // 333 - EVT_STATE_ID_SCR_CONSOLIDATE_OUTPUT_MAX , // 334 + EVT_STATE_ID_SCR_CONSOLIDATE_OUTPUT_MIN=EVT_STATE_ID_SCR_UNLOCK_DB_MAX+1, // 332 + EVT_CONSOLIDATE_MAKE_TRANSACTION , // 333 + EVT_CONSOLIDATE_BACK_REQUEST , // 334 + EVT_CONSOLIDATE_MAKE_TRANSACTION_SUCCEED , // 335 + EVT_STATE_ID_SCR_CONSOLIDATE_OUTPUT_MAX , // 336 }; enum EVT_STATE_ID_SCR_UTXO_OUTPUT { - EVT_STATE_ID_SCR_UTXO_OUTPUT_MIN=EVT_STATE_ID_SCR_CONSOLIDATE_OUTPUT_MAX+1, // 335 - EVT_UTXO_INFO_CHECKOUT_TX_RELATED , // 336 - EVT_UTXO_INFO_BACK_REQUEST , // 337 - EVT_UTXO_INFO_VIEW_TX_RELATED , // 338 - EVT_STATE_ID_SCR_UTXO_OUTPUT_MAX , // 339 + EVT_STATE_ID_SCR_UTXO_OUTPUT_MIN=EVT_STATE_ID_SCR_CONSOLIDATE_OUTPUT_MAX+1, // 337 + EVT_UTXO_INFO_CHECKOUT_TX_RELATED , // 338 + EVT_UTXO_INFO_BACK_REQUEST , // 339 + EVT_UTXO_INFO_VIEW_TX_RELATED , // 340 + EVT_STATE_ID_SCR_UTXO_OUTPUT_MAX , // 341 }; enum EVT_STATE_ID_SCR_INPUT_PIN { - EVT_STATE_ID_SCR_INPUT_PIN_MIN=EVT_STATE_ID_SCR_UTXO_OUTPUT_MAX+1, // 340 - EVT_INPUT_PIN_SEND_PIN , // 341 - EVT_INPUT_PIN_CLOSE , // 342 - EVT_STATE_ID_SCR_INPUT_PIN_MAX , // 343 + EVT_STATE_ID_SCR_INPUT_PIN_MIN=EVT_STATE_ID_SCR_UTXO_OUTPUT_MAX+1, // 342 + EVT_INPUT_PIN_SEND_PIN , // 343 + EVT_INPUT_PIN_CLOSE , // 344 + EVT_STATE_ID_SCR_INPUT_PIN_MAX , // 345 }; enum EVT_STATE_ID_SCR_ADD_NEW_SIGNER { - EVT_STATE_ID_SCR_ADD_NEW_SIGNER_MIN=EVT_STATE_ID_SCR_INPUT_PIN_MAX+1, // 344 - EVT_ADD_HARDWARE_SIGNER_REQUEST , // 345 - EVT_ADD_NEW_SIGNER_BACK_REQUEST , // 346 - EVT_ADD_NEW_SIGNER_SOFTWARE_SIGNER_NEW_SEED , // 347 - EVT_ADD_NEW_SIGNER_SOFTWARE_SIGNER_EXIST_SEED , // 348 - EVT_ADD_NEW_SIGNER_BACK_TO_HOME_ONLINE , // 349 - EVT_STATE_ID_SCR_ADD_NEW_SIGNER_MAX , // 350 + EVT_STATE_ID_SCR_ADD_NEW_SIGNER_MIN=EVT_STATE_ID_SCR_INPUT_PIN_MAX+1, // 346 + EVT_ADD_HARDWARE_SIGNER_REQUEST , // 347 + EVT_ADD_NEW_SIGNER_BACK_REQUEST , // 348 + EVT_ADD_NEW_SIGNER_SOFTWARE_SIGNER_NEW_SEED , // 349 + EVT_ADD_NEW_SIGNER_SOFTWARE_SIGNER_EXIST_SEED , // 350 + EVT_ADD_NEW_SIGNER_BACK_TO_HOME_ONLINE , // 351 + EVT_STATE_ID_SCR_ADD_NEW_SIGNER_MAX , // 352 }; enum EVT_STATE_ID_SCR_ADD_NEW_SOFTWARE_SIGNER { - EVT_STATE_ID_SCR_ADD_NEW_SOFTWARE_SIGNER_MIN=EVT_STATE_ID_SCR_ADD_NEW_SIGNER_MAX+1, // 351 - EVT_ADD_NEW_SOFTWARE_SIGNER_BACK , // 352 - EVT_CREATE_NEW_SEED , // 353 - EVT_ADD_NEW_SOFTWARE_SIGNER_TO_WALLET_BACK , // 354 - EVT_NEW_SOFTWARE_SIGNER_BACK_TO_WALLET_SIGNER_CONFIGURATION , // 355 - EVT_STATE_ID_SCR_ADD_NEW_SOFTWARE_SIGNER_MAX , // 356 + EVT_STATE_ID_SCR_ADD_NEW_SOFTWARE_SIGNER_MIN=EVT_STATE_ID_SCR_ADD_NEW_SIGNER_MAX+1, // 353 + EVT_ADD_NEW_SOFTWARE_SIGNER_BACK , // 354 + EVT_CREATE_NEW_SEED , // 355 + EVT_ADD_NEW_SOFTWARE_SIGNER_TO_WALLET_BACK , // 356 + EVT_NEW_SOFTWARE_SIGNER_BACK_TO_WALLET_SIGNER_CONFIGURATION , // 357 + EVT_STATE_ID_SCR_ADD_NEW_SOFTWARE_SIGNER_MAX , // 358 }; enum EVT_STATE_ID_SCR_RECOVER_SOFTWARE_SIGNER { - EVT_STATE_ID_SCR_RECOVER_SOFTWARE_SIGNER_MIN=EVT_STATE_ID_SCR_ADD_NEW_SOFTWARE_SIGNER_MAX+1, // 357 - EVT_RECOVER_SOFTWARE_SIGNER_REQUEST , // 358 - EVT_RECOVER_SOFTWARE_SIGNER_BACK , // 359 - EVT_RECOVER_SOFTWARE_SIGNER_SUCCEED , // 360 - EVT_RECOVER_SOFTWARE_SIGNER_TO_WALLET_BACK , // 361 - EVT_RECOVER_SOFTWARE_SIGNER_BACK_TO_WALLET_SIGNER_CONFIGURATION , // 362 - EVT_STATE_ID_SCR_RECOVER_SOFTWARE_SIGNER_MAX , // 363 + EVT_STATE_ID_SCR_RECOVER_SOFTWARE_SIGNER_MIN=EVT_STATE_ID_SCR_ADD_NEW_SOFTWARE_SIGNER_MAX+1, // 359 + EVT_RECOVER_SOFTWARE_SIGNER_REQUEST , // 360 + EVT_RECOVER_SOFTWARE_SIGNER_BACK , // 361 + EVT_RECOVER_SOFTWARE_SIGNER_SUCCEED , // 362 + EVT_RECOVER_SOFTWARE_SIGNER_TO_WALLET_BACK , // 363 + EVT_RECOVER_SOFTWARE_SIGNER_BACK_TO_WALLET_SIGNER_CONFIGURATION , // 364 + EVT_STATE_ID_SCR_RECOVER_SOFTWARE_SIGNER_MAX , // 365 }; enum EVT_STATE_ID_SCR_CREATE_NEW_SEED { - EVT_STATE_ID_SCR_CREATE_NEW_SEED_MIN=EVT_STATE_ID_SCR_RECOVER_SOFTWARE_SIGNER_MAX+1, // 364 - EVT_CREATE_NEW_SEED_BACK , // 365 - EVT_CREATE_NEW_SEED_SUCCEED , // 366 - EVT_NEW_SEED_BACK_TO_WALLET_SIGNER_CONFIGURATION , // 367 - EVT_STATE_ID_SCR_CREATE_NEW_SEED_MAX , // 368 + EVT_STATE_ID_SCR_CREATE_NEW_SEED_MIN=EVT_STATE_ID_SCR_RECOVER_SOFTWARE_SIGNER_MAX+1, // 366 + EVT_CREATE_NEW_SEED_BACK , // 367 + EVT_CREATE_NEW_SEED_SUCCEED , // 368 + EVT_NEW_SEED_BACK_TO_WALLET_SIGNER_CONFIGURATION , // 369 + EVT_STATE_ID_SCR_CREATE_NEW_SEED_MAX , // 370 }; enum EVT_STATE_ID_SCR_SOFTWARE_SIGNER_CONFIGURATION { - EVT_STATE_ID_SCR_SOFTWARE_SIGNER_CONFIGURATION_MIN=EVT_STATE_ID_SCR_CREATE_NEW_SEED_MAX+1, // 369 - EVT_SOFTWARE_SIGNER_REQUEST_CREATE , // 370 - EVT_SOFTWARE_SIGNER_CONFIGURATION_BACK , // 371 - EVT_SOFTWARE_SIGNER_CONFIGURATION_BACK_TO_WALLET_SIGNER_CONFIGURATION , // 372 - EVT_PRIMARY_KEY_CONFIGURATION_REQUEST , // 373 - EVT_STATE_ID_SCR_SOFTWARE_SIGNER_CONFIGURATION_MAX , // 374 + EVT_STATE_ID_SCR_SOFTWARE_SIGNER_CONFIGURATION_MIN=EVT_STATE_ID_SCR_CREATE_NEW_SEED_MAX+1, // 371 + EVT_SOFTWARE_SIGNER_REQUEST_CREATE , // 372 + EVT_SOFTWARE_SIGNER_CONFIGURATION_BACK , // 373 + EVT_SOFTWARE_SIGNER_CONFIGURATION_BACK_TO_WALLET_SIGNER_CONFIGURATION , // 374 + EVT_PRIMARY_KEY_CONFIGURATION_REQUEST , // 375 + EVT_STATE_ID_SCR_SOFTWARE_SIGNER_CONFIGURATION_MAX , // 376 }; enum EVT_STATE_ID_SCR_ADD_NEW_SIGNER_TO_WALLET { - EVT_STATE_ID_SCR_ADD_NEW_SIGNER_TO_WALLET_MIN=EVT_STATE_ID_SCR_SOFTWARE_SIGNER_CONFIGURATION_MAX+1, // 375 - EVT_ADD_SIGNER_TO_WALLET_BACK_REQUEST , // 376 - EVT_ADD_HARDWARE_SIGNER_TO_WALLET , // 377 - EVT_ADD_NEW_SOFTWARE_SIGNER_TO_WALLET , // 378 - EVT_RECOVER_SOFTWARE_SIGNER_TO_WALLET , // 379 - EVT_STATE_ID_SCR_ADD_NEW_SIGNER_TO_WALLET_MAX , // 380 + EVT_STATE_ID_SCR_ADD_NEW_SIGNER_TO_WALLET_MIN=EVT_STATE_ID_SCR_SOFTWARE_SIGNER_CONFIGURATION_MAX+1, // 377 + EVT_ADD_SIGNER_TO_WALLET_BACK_REQUEST , // 378 + EVT_ADD_HARDWARE_SIGNER_TO_WALLET , // 379 + EVT_ADD_NEW_SOFTWARE_SIGNER_TO_WALLET , // 380 + EVT_RECOVER_SOFTWARE_SIGNER_TO_WALLET , // 381 + EVT_STATE_ID_SCR_ADD_NEW_SIGNER_TO_WALLET_MAX , // 382 }; enum EVT_STATE_ID_SCR_INPUT_PASSPHRASE { - EVT_STATE_ID_SCR_INPUT_PASSPHRASE_MIN=EVT_STATE_ID_SCR_ADD_NEW_SIGNER_TO_WALLET_MAX+1, // 381 - EVT_INPUT_PASSPHRASE_SEND_PASSPHRASE , // 382 - EVT_INPUT_PASSPHRASE_CLOSE , // 383 - EVT_STATE_ID_SCR_INPUT_PASSPHRASE_MAX , // 384 + EVT_STATE_ID_SCR_INPUT_PASSPHRASE_MIN=EVT_STATE_ID_SCR_ADD_NEW_SIGNER_TO_WALLET_MAX+1, // 383 + EVT_INPUT_PASSPHRASE_SEND_PASSPHRASE , // 384 + EVT_INPUT_PASSPHRASE_CLOSE , // 385 + EVT_STATE_ID_SCR_INPUT_PASSPHRASE_MAX , // 386 }; enum EVT_STATE_ID_SCR_LOGIN_ONLINE { - EVT_STATE_ID_SCR_LOGIN_ONLINE_MIN=EVT_STATE_ID_SCR_INPUT_PASSPHRASE_MAX+1, // 385 - EVT_LOGIN_ONLINE_CREATE_ACCOUNT , // 386 - EVT_LOGIN_ONLINE_SIGN_IN , // 387 - EVT_LOGIN_ONLINE_SWITCH_LOCAL_MODE , // 388 - EVT_LOGIN_ONLINE_CHANGE_PASSWORD , // 389 - EVT_LOGIN_ONLINE_FORGOT_PASSWORD , // 390 - EVT_LOGIN_ONLINE_RECOVER_PASSWORD , // 391 - EVT_LOGIN_ONLINE_STAY_SIGNED_IN , // 392 - EVT_LOGIN_ONLINE_VERIFY_NEW_DEVICE , // 393 - EVT_LOGIN_ONLINE_RESEND_CONFIRM_CODE , // 394 - EVT_STATE_ID_SCR_LOGIN_ONLINE_MAX , // 395 + EVT_STATE_ID_SCR_LOGIN_ONLINE_MIN=EVT_STATE_ID_SCR_INPUT_PASSPHRASE_MAX+1, // 387 + EVT_LOGIN_ONLINE_CREATE_ACCOUNT , // 388 + EVT_LOGIN_ONLINE_SIGN_IN , // 389 + EVT_LOGIN_ONLINE_SWITCH_LOCAL_MODE , // 390 + EVT_LOGIN_ONLINE_CHANGE_PASSWORD , // 391 + EVT_LOGIN_ONLINE_FORGOT_PASSWORD , // 392 + EVT_LOGIN_ONLINE_RECOVER_PASSWORD , // 393 + EVT_LOGIN_ONLINE_STAY_SIGNED_IN , // 394 + EVT_LOGIN_ONLINE_VERIFY_NEW_DEVICE , // 395 + EVT_LOGIN_ONLINE_RESEND_CONFIRM_CODE , // 396 + EVT_STATE_ID_SCR_LOGIN_ONLINE_MAX , // 397 }; enum EVT_STATE_ID_SCR_HOME_ONLINE { - EVT_STATE_ID_SCR_HOME_ONLINE_MIN=EVT_STATE_ID_SCR_LOGIN_ONLINE_MAX+1, // 396 - EVT_HOME_ONLINE_ADD_SIGNER , // 397 - EVT_HOME_ONLINE_CREATE_CHAT_ROOM , // 398 - EVT_HOME_ONLINE_CREATE_DIRECT_CHAT , // 399 - EVT_HOME_ONLINE_DELETE_DIRECT_ROOM , // 400 - EVT_HOME_ONLINE_DELETE_ROOM , // 401 - EVT_HOME_ONLINE_SEND_CHAT_CONTENT , // 402 - EVT_HOME_ONLINE_CANCEL_SHARED_WL , // 403 - EVT_HOME_ONLINE_CREATE_SHARED_WALLET , // 404 - EVT_HOME_ONLINE_CANCEL_TRANSACTION , // 405 - EVT_HOME_ONLINE_SERVICE_SUPPORT_REQ , // 406 - EVT_HOME_ONLINE_ADD_CONTACT , // 407 - EVT_HOME_SHOW_ALL_PENDING_CONTACT , // 408 - EVT_HOME_ONLINE_SIGNER_AVAILABLE_FOR_SWL , // 409 - EVT_HOME_SHARED_WALLET_CONFIGURE , // 410 - EVT_HOME_BACKUP_SHARED_WALLET , // 411 - EVT_HOME_ONLINE_SIGNER_UNAVAILABLE_FOR_SWL , // 412 - EVT_HOME_SHARED_WL_SEND_REQUEST , // 413 - EVT_HOME_ONLINE_TRANSACTION_INFO_REQUEST , // 414 - EVT_STATE_ID_SCR_HOME_ONLINE_MAX , // 415 + EVT_STATE_ID_SCR_HOME_ONLINE_MIN=EVT_STATE_ID_SCR_LOGIN_ONLINE_MAX+1, // 398 + EVT_HOME_ONLINE_ADD_SIGNER , // 399 + EVT_HOME_ONLINE_CREATE_CHAT_ROOM , // 400 + EVT_HOME_ONLINE_CREATE_DIRECT_CHAT , // 401 + EVT_HOME_ONLINE_DELETE_DIRECT_ROOM , // 402 + EVT_HOME_ONLINE_DELETE_ROOM , // 403 + EVT_HOME_ONLINE_SEND_CHAT_CONTENT , // 404 + EVT_HOME_ONLINE_CANCEL_SHARED_WL , // 405 + EVT_HOME_ONLINE_CREATE_SHARED_WALLET , // 406 + EVT_HOME_ONLINE_CANCEL_TRANSACTION , // 407 + EVT_HOME_ONLINE_SERVICE_SUPPORT_REQ , // 408 + EVT_HOME_ONLINE_ADD_CONTACT , // 409 + EVT_HOME_SHOW_ALL_PENDING_CONTACT , // 410 + EVT_HOME_ONLINE_SIGNER_AVAILABLE_FOR_SWL , // 411 + EVT_HOME_SHARED_WALLET_CONFIGURE , // 412 + EVT_HOME_BACKUP_SHARED_WALLET , // 413 + EVT_HOME_ONLINE_SIGNER_UNAVAILABLE_FOR_SWL , // 414 + EVT_HOME_SHARED_WL_SEND_REQUEST , // 415 + EVT_HOME_ONLINE_TRANSACTION_INFO_REQUEST , // 416 + EVT_STATE_ID_SCR_HOME_ONLINE_MAX , // 417 }; enum EVT_STATE_ID_SCR_ONLINE_ADD_CONTACTS { - EVT_STATE_ID_SCR_ONLINE_ADD_CONTACTS_MIN=EVT_STATE_ID_SCR_HOME_ONLINE_MAX+1, // 416 - EVT_ONLINE_ADD_CONTACTS_SEARCH_ID , // 417 - EVT_ONLINE_ADD_CONTACTS_SEND_INVITATION , // 418 - EVT_ONLINE_ADD_CONTACTS_BACK , // 419 - EVT_STATE_ID_SCR_ONLINE_ADD_CONTACTS_MAX , // 420 + EVT_STATE_ID_SCR_ONLINE_ADD_CONTACTS_MIN=EVT_STATE_ID_SCR_HOME_ONLINE_MAX+1, // 418 + EVT_ONLINE_ADD_CONTACTS_SEARCH_ID , // 419 + EVT_ONLINE_ADD_CONTACTS_SEND_INVITATION , // 420 + EVT_ONLINE_ADD_CONTACTS_BACK , // 421 + EVT_STATE_ID_SCR_ONLINE_ADD_CONTACTS_MAX , // 422 }; enum EVT_STATE_ID_SCR_PENDING_REQUEST { - EVT_STATE_ID_SCR_PENDING_REQUEST_MIN=EVT_STATE_ID_SCR_ONLINE_ADD_CONTACTS_MAX+1, // 421 - EVT_PENDING_REQUEST_ACCEPT , // 422 - EVT_PENDING_REQUEST_IGNORE , // 423 - EVT_PENDING_REQUEST_BACK , // 424 - EVT_STATE_ID_SCR_PENDING_REQUEST_MAX , // 425 + EVT_STATE_ID_SCR_PENDING_REQUEST_MIN=EVT_STATE_ID_SCR_ONLINE_ADD_CONTACTS_MAX+1, // 423 + EVT_PENDING_REQUEST_ACCEPT , // 424 + EVT_PENDING_REQUEST_IGNORE , // 425 + EVT_PENDING_REQUEST_BACK , // 426 + EVT_STATE_ID_SCR_PENDING_REQUEST_MAX , // 427 }; enum EVT_STATE_ID_SCR_CREATE_SHARED_WALLET { - EVT_STATE_ID_SCR_CREATE_SHARED_WALLET_MIN=EVT_STATE_ID_SCR_PENDING_REQUEST_MAX+1, // 426 - EVT_CREATE_SHARED_WALLET_REQUEST , // 427 - EVT_CANCEL_SHARED_WALLET_REQUEST , // 428 - EVT_CREATE_SHARED_WALLET_BACK , // 429 - EVT_CREATE_SHARED_WALLET_REQUEST_CONFIGURATION , // 430 - EVT_RECOVER_SHARED_WALLET_REQUEST , // 431 - EVT_STATE_ID_SCR_CREATE_SHARED_WALLET_MAX , // 432 + EVT_STATE_ID_SCR_CREATE_SHARED_WALLET_MIN=EVT_STATE_ID_SCR_PENDING_REQUEST_MAX+1, // 428 + EVT_CREATE_SHARED_WALLET_REQUEST , // 429 + EVT_CANCEL_SHARED_WALLET_REQUEST , // 430 + EVT_CREATE_SHARED_WALLET_BACK , // 431 + EVT_CREATE_SHARED_WALLET_REQUEST_CONFIGURATION , // 432 + EVT_RECOVER_SHARED_WALLET_REQUEST , // 433 + EVT_STATE_ID_SCR_CREATE_SHARED_WALLET_MAX , // 434 }; enum EVT_STATE_ID_SCR_CONFIGURE_SHARED_WALLET { - EVT_STATE_ID_SCR_CONFIGURE_SHARED_WALLET_MIN=EVT_STATE_ID_SCR_CREATE_SHARED_WALLET_MAX+1, // 433 - EVT_CONFIGURE_SHARED_WALLET_REQUEST , // 434 - EVT_CONFIGURE_SHARED_WALLET_BACK , // 435 - EVT_CONFIGURE_SHARED_WALLET_REVIEW_REQUEST , // 436 - EVT_STATE_ID_SCR_CONFIGURE_SHARED_WALLET_MAX , // 437 + EVT_STATE_ID_SCR_CONFIGURE_SHARED_WALLET_MIN=EVT_STATE_ID_SCR_CREATE_SHARED_WALLET_MAX+1, // 435 + EVT_CONFIGURE_SHARED_WALLET_REQUEST , // 436 + EVT_CONFIGURE_SHARED_WALLET_BACK , // 437 + EVT_CONFIGURE_SHARED_WALLET_REVIEW_REQUEST , // 438 + EVT_STATE_ID_SCR_CONFIGURE_SHARED_WALLET_MAX , // 439 }; enum EVT_STATE_ID_SCR_REVIEW_SHARED_WALLET { - EVT_STATE_ID_SCR_REVIEW_SHARED_WALLET_MIN=EVT_STATE_ID_SCR_CONFIGURE_SHARED_WALLET_MAX+1, // 438 - EVT_REVIEW_SHARED_WALLET_BACK , // 439 - EVT_REVIEW_SHARED_WALLET_INVITE_SIGNER , // 440 - EVT_STATE_ID_SCR_REVIEW_SHARED_WALLET_MAX , // 441 + EVT_STATE_ID_SCR_REVIEW_SHARED_WALLET_MIN=EVT_STATE_ID_SCR_CONFIGURE_SHARED_WALLET_MAX+1, // 440 + EVT_REVIEW_SHARED_WALLET_BACK , // 441 + EVT_REVIEW_SHARED_WALLET_INVITE_SIGNER , // 442 + EVT_STATE_ID_SCR_REVIEW_SHARED_WALLET_MAX , // 443 }; enum EVT_STATE_ID_SCR_ASSIGN_SIGNER_TO_SHARED_WALLET { - EVT_STATE_ID_SCR_ASSIGN_SIGNER_TO_SHARED_WALLET_MIN=EVT_STATE_ID_SCR_REVIEW_SHARED_WALLET_MAX+1, // 442 - EVT_ASSIGN_SIGNER_TO_SHARED_REQUEST , // 443 - EVT_ASSIGN_SIGNER_TO_SHARED_WALLET_BACK_REVIEW_WALLET , // 444 - EVT_ASSIGN_SIGNER_TO_SHARED_BACK_WALLET_CONFIG , // 445 - EVT_STATE_ID_SCR_ASSIGN_SIGNER_TO_SHARED_WALLET_MAX , // 446 + EVT_STATE_ID_SCR_ASSIGN_SIGNER_TO_SHARED_WALLET_MIN=EVT_STATE_ID_SCR_REVIEW_SHARED_WALLET_MAX+1, // 444 + EVT_ASSIGN_SIGNER_TO_SHARED_REQUEST , // 445 + EVT_ASSIGN_SIGNER_TO_SHARED_WALLET_BACK_REVIEW_WALLET , // 446 + EVT_ASSIGN_SIGNER_TO_SHARED_BACK_WALLET_CONFIG , // 447 + EVT_STATE_ID_SCR_ASSIGN_SIGNER_TO_SHARED_WALLET_MAX , // 448 }; enum EVT_STATE_ID_SCR_SHARED_WALLET_CONFIGURE { - EVT_STATE_ID_SCR_SHARED_WALLET_CONFIGURE_MIN=EVT_STATE_ID_SCR_ASSIGN_SIGNER_TO_SHARED_WALLET_MAX+1, // 447 - EVT_SHARED_WALLET_FINALIZE_WALLET , // 448 - EVT_SHARED_WALLET_CONFIGURE_CANCEL , // 449 - EVT_SHARED_WALLET_CONFIGURE_EXPORT_COLDCARD , // 450 - EVT_SHARED_WALLET_CONFIGURE_EXPORT_QRCODE , // 451 - EVT_SHARED_WALLET_CONFIGURE_DELETE_SWL , // 452 - EVT_SHARED_WALLET_CONFIGURE_EXPORT_BSMS , // 453 - EVT_SHARED_WALLET_CONFIGURE_BACK , // 454 - EVT_SHARED_WALLET_ADD_SIGNER_REQUEST , // 455 - EVT_SHARED_WALLET_UTXO_OUTPUT , // 456 - EVT_SHARED_WALLET_CHANGE_ADDRESS , // 457 - EVT_STATE_ID_SCR_SHARED_WALLET_CONFIGURE_MAX , // 458 + EVT_STATE_ID_SCR_SHARED_WALLET_CONFIGURE_MIN=EVT_STATE_ID_SCR_ASSIGN_SIGNER_TO_SHARED_WALLET_MAX+1, // 449 + EVT_SHARED_WALLET_FINALIZE_WALLET , // 450 + EVT_SHARED_WALLET_CONFIGURE_CANCEL , // 451 + EVT_SHARED_WALLET_CONFIGURE_EXPORT_COLDCARD , // 452 + EVT_SHARED_WALLET_CONFIGURE_EXPORT_QRCODE , // 453 + EVT_SHARED_WALLET_CONFIGURE_DELETE_SWL , // 454 + EVT_SHARED_WALLET_CONFIGURE_EXPORT_BSMS , // 455 + EVT_SHARED_WALLET_CONFIGURE_BACK , // 456 + EVT_SHARED_WALLET_ADD_SIGNER_REQUEST , // 457 + EVT_SHARED_WALLET_UTXO_OUTPUT , // 458 + EVT_SHARED_WALLET_CHANGE_ADDRESS , // 459 + EVT_STATE_ID_SCR_SHARED_WALLET_CONFIGURE_MAX , // 460 }; enum EVT_STATE_ID_SCR_BACKUP_SHARED_WALLET { - EVT_STATE_ID_SCR_BACKUP_SHARED_WALLET_MIN=EVT_STATE_ID_SCR_SHARED_WALLET_CONFIGURE_MAX+1, // 459 - EVT_BACKUP_SHARED_WALLET_REQUEST , // 460 - EVT_BACKUP_SHARED_WALLET_SKIP , // 461 - EVT_BACKUP_SHARED_WALLET_EXPORT_BSMS , // 462 - EVT_BACKUP_SHARED_WALLET_BACK , // 463 - EVT_BACKUP_WALLET_DEVICE_REGISTRATION , // 464 - EVT_STATE_ID_SCR_BACKUP_SHARED_WALLET_MAX , // 465 + EVT_STATE_ID_SCR_BACKUP_SHARED_WALLET_MIN=EVT_STATE_ID_SCR_SHARED_WALLET_CONFIGURE_MAX+1, // 461 + EVT_BACKUP_SHARED_WALLET_REQUEST , // 462 + EVT_BACKUP_SHARED_WALLET_SKIP , // 463 + EVT_BACKUP_SHARED_WALLET_EXPORT_BSMS , // 464 + EVT_BACKUP_SHARED_WALLET_BACK , // 465 + EVT_BACKUP_WALLET_DEVICE_REGISTRATION , // 466 + EVT_STATE_ID_SCR_BACKUP_SHARED_WALLET_MAX , // 467 }; enum EVT_STATE_ID_SCR_SHARED_WL_DEVICE_REGISTRATION { - EVT_STATE_ID_SCR_SHARED_WL_DEVICE_REGISTRATION_MIN=EVT_STATE_ID_SCR_BACKUP_SHARED_WALLET_MAX+1, // 466 - EVT_SHARED_WALLET_EXPORT_COLDCARD , // 467 - EVT_SHARED_WALLET_EXPORT_QRCODE , // 468 - EVT_SHARED_WALLET_SKIP_REGISTRATION , // 469 - EVT_SHARED_WL_DEVICE_REGISTRAION_BACK , // 470 - EVT_STATE_ID_SCR_SHARED_WL_DEVICE_REGISTRATION_MAX , // 471 + EVT_STATE_ID_SCR_SHARED_WL_DEVICE_REGISTRATION_MIN=EVT_STATE_ID_SCR_BACKUP_SHARED_WALLET_MAX+1, // 468 + EVT_SHARED_WALLET_EXPORT_COLDCARD , // 469 + EVT_SHARED_WALLET_EXPORT_QRCODE , // 470 + EVT_SHARED_WALLET_SKIP_REGISTRATION , // 471 + EVT_SHARED_WL_DEVICE_REGISTRAION_BACK , // 472 + EVT_STATE_ID_SCR_SHARED_WL_DEVICE_REGISTRATION_MAX , // 473 }; enum EVT_STATE_ID_SCR_STARTING_CREATE_SIGNER { - EVT_STATE_ID_SCR_STARTING_CREATE_SIGNER_MIN=EVT_STATE_ID_SCR_SHARED_WL_DEVICE_REGISTRATION_MAX+1, // 472 - EVT_STARTING_CREATE_SIGNER_DUMMY , // 473 - EVT_STARTING_CREATE_SIGNER_BACK , // 474 - EVT_ONLINE_MODE_ADD_NEW_SIGNER , // 475 - EVT_STATE_ID_SCR_STARTING_CREATE_SIGNER_MAX , // 476 + EVT_STATE_ID_SCR_STARTING_CREATE_SIGNER_MIN=EVT_STATE_ID_SCR_SHARED_WL_DEVICE_REGISTRATION_MAX+1, // 474 + EVT_STARTING_CREATE_SIGNER_DUMMY , // 475 + EVT_STARTING_CREATE_SIGNER_BACK , // 476 + EVT_ONLINE_MODE_ADD_NEW_SIGNER , // 477 + EVT_STATE_ID_SCR_STARTING_CREATE_SIGNER_MAX , // 478 }; enum EVT_STATE_ID_TOAST_MESSAGE_DISPLAY { - EVT_STATE_ID_TOAST_MESSAGE_DISPLAY_MIN=EVT_STATE_ID_SCR_STARTING_CREATE_SIGNER_MAX+1, // 477 - EVT_CLOSE_TOAST_MESSAGE , // 478 - EVT_STATE_ID_TOAST_MESSAGE_DISPLAY_MAX , // 479 + EVT_STATE_ID_TOAST_MESSAGE_DISPLAY_MIN=EVT_STATE_ID_SCR_STARTING_CREATE_SIGNER_MAX+1, // 479 + EVT_CLOSE_TOAST_MESSAGE , // 480 + EVT_STATE_ID_TOAST_MESSAGE_DISPLAY_MAX , // 481 }; enum EVT_STATE_ID_SCR_RECOVER_SHARED_WALLET { - EVT_STATE_ID_SCR_RECOVER_SHARED_WALLET_MIN=EVT_STATE_ID_TOAST_MESSAGE_DISPLAY_MAX+1, // 480 - EVT_IMPORT_BSMS_SHARED_WALLET , // 481 - EVT_IMPORT_QR_SHARED_WALLET , // 482 - EVT_IMPORT_SHARED_WALLET_SUCCEED , // 483 - EVT_RECOVER_SHARED_WALLET_BACK , // 484 - EVT_STATE_ID_SCR_RECOVER_SHARED_WALLET_MAX , // 485 + EVT_STATE_ID_SCR_RECOVER_SHARED_WALLET_MIN=EVT_STATE_ID_TOAST_MESSAGE_DISPLAY_MAX+1, // 482 + EVT_IMPORT_BSMS_SHARED_WALLET , // 483 + EVT_IMPORT_QR_SHARED_WALLET , // 484 + EVT_IMPORT_SHARED_WALLET_SUCCEED , // 485 + EVT_RECOVER_SHARED_WALLET_BACK , // 486 + EVT_STATE_ID_SCR_RECOVER_SHARED_WALLET_MAX , // 487 }; enum EVT_STATE_ID_SCR_PRIMARY_KEY_ACCOUNT { - EVT_STATE_ID_SCR_PRIMARY_KEY_ACCOUNT_MIN=EVT_STATE_ID_SCR_RECOVER_SHARED_WALLET_MAX+1, // 486 - EVT_SELECT_PRIMARY_KEY_ACCOUNT_REQUEST , // 487 - EVT_PRIMARY_KEY_BACK_TO_CREATE_ACCOUNT , // 488 - EVT_PRIMARY_KEY_ACCOUNT_BACK , // 489 - EVT_ADD_PRIMARY_KEY_REQUEST , // 490 - EVT_SHOW_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY_REQUEST , // 491 - EVT_SCR_SIGN_IN_MANUALLY_REQUEST , // 492 - EVT_PRIMARY_KEY_BACK_TO_SIGN_IN , // 493 - EVT_STATE_ID_SCR_PRIMARY_KEY_ACCOUNT_MAX , // 494 + EVT_STATE_ID_SCR_PRIMARY_KEY_ACCOUNT_MIN=EVT_STATE_ID_SCR_RECOVER_SHARED_WALLET_MAX+1, // 488 + EVT_SELECT_PRIMARY_KEY_ACCOUNT_REQUEST , // 489 + EVT_PRIMARY_KEY_BACK_TO_CREATE_ACCOUNT , // 490 + EVT_PRIMARY_KEY_ACCOUNT_BACK , // 491 + EVT_ADD_PRIMARY_KEY_REQUEST , // 492 + EVT_SHOW_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY_REQUEST , // 493 + EVT_SCR_SIGN_IN_MANUALLY_REQUEST , // 494 + EVT_PRIMARY_KEY_BACK_TO_SIGN_IN , // 495 + EVT_STATE_ID_SCR_PRIMARY_KEY_ACCOUNT_MAX , // 496 }; enum EVT_STATE_ID_SCR_CREATE_ACCOUNT { - EVT_STATE_ID_SCR_CREATE_ACCOUNT_MIN=EVT_STATE_ID_SCR_PRIMARY_KEY_ACCOUNT_MAX+1, // 495 - EVT_CREATE_ACCOUNT_REQUEST , // 496 - EVT_CREATE_PRIMARY_KEY_REQUEST , // 497 - EVT_CREATE_ACCOUNT_PRIMARY_KEY_REQUEST , // 498 - EVT_CHANGE_PASSWORD_SHOW_REQUEST , // 499 - EVT_STATE_ID_SCR_CREATE_ACCOUNT_MAX , // 500 + EVT_STATE_ID_SCR_CREATE_ACCOUNT_MIN=EVT_STATE_ID_SCR_PRIMARY_KEY_ACCOUNT_MAX+1, // 497 + EVT_CREATE_ACCOUNT_REQUEST , // 498 + EVT_CREATE_PRIMARY_KEY_REQUEST , // 499 + EVT_CREATE_ACCOUNT_PRIMARY_KEY_REQUEST , // 500 + EVT_CHANGE_PASSWORD_SHOW_REQUEST , // 501 + EVT_STATE_ID_SCR_CREATE_ACCOUNT_MAX , // 502 }; enum EVT_STATE_ID_SCR_CHANGE_PASSWORD { - EVT_STATE_ID_SCR_CHANGE_PASSWORD_MIN=EVT_STATE_ID_SCR_CREATE_ACCOUNT_MAX+1, // 501 - EVT_CHANGE_PASSWORD_REQUEST , // 502 - EVT_CHANGE_PASSWORD_BACK , // 503 - EVT_CHANGE_PASSWORD_SUCCESS , // 504 - EVT_STATE_ID_SCR_CHANGE_PASSWORD_MAX , // 505 + EVT_STATE_ID_SCR_CHANGE_PASSWORD_MIN=EVT_STATE_ID_SCR_CREATE_ACCOUNT_MAX+1, // 503 + EVT_CHANGE_PASSWORD_REQUEST , // 504 + EVT_CHANGE_PASSWORD_BACK , // 505 + EVT_CHANGE_PASSWORD_SUCCESS , // 506 + EVT_STATE_ID_SCR_CHANGE_PASSWORD_MAX , // 507 }; enum EVT_STATE_ID_SCR_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY { - EVT_STATE_ID_SCR_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY_MIN=EVT_STATE_ID_SCR_CHANGE_PASSWORD_MAX+1, // 506 - EVT_PRIMARY_KEY_ENTER_PASSPHRASE_REQUEST , // 507 - EVT_PRIMARY_KEY_ENTER_PASSPHRASE_SIGN_IN_REQUEST , // 508 - EVT_IMPORT_PRIMARY_KEY_WITH_SEED_REQUEST , // 509 - EVT_PRIMARY_KEY_ENTER_PASSPHRASE_SUCCEED , // 510 - EVT_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY_BACK , // 511 - EVT_STATE_ID_SCR_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY_MAX , // 512 + EVT_STATE_ID_SCR_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY_MIN=EVT_STATE_ID_SCR_CHANGE_PASSWORD_MAX+1, // 508 + EVT_PRIMARY_KEY_ENTER_PASSPHRASE_REQUEST , // 509 + EVT_PRIMARY_KEY_ENTER_PASSPHRASE_SIGN_IN_REQUEST , // 510 + EVT_IMPORT_PRIMARY_KEY_WITH_SEED_REQUEST , // 511 + EVT_PRIMARY_KEY_ENTER_PASSPHRASE_SUCCEED , // 512 + EVT_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY_BACK , // 513 + EVT_STATE_ID_SCR_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY_MAX , // 514 }; enum EVT_STATE_ID_SCR_SIGN_IN_MANUALLY { - EVT_STATE_ID_SCR_SIGN_IN_MANUALLY_MIN=EVT_STATE_ID_SCR_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY_MAX+1, // 513 - EVT_ADD_PRIMARY_KEY_ACCOUNT_REQUEST , // 514 - EVT_PRIMARY_KEY_CHECK_USERNAME_REQUEST , // 515 - EVT_CHALLENGE_MESSAGE_REFRESH_REQUEST , // 516 - EVT_ADD_PRIMARY_KEY_ACCOUNT_SUCCEED , // 517 - EVT_STATE_ID_SCR_SIGN_IN_MANUALLY_MAX , // 518 + EVT_STATE_ID_SCR_SIGN_IN_MANUALLY_MIN=EVT_STATE_ID_SCR_SIGN_IN_BY_IMPORTING_THE_PRIMARY_KEY_MAX+1, // 515 + EVT_ADD_PRIMARY_KEY_ACCOUNT_REQUEST , // 516 + EVT_PRIMARY_KEY_CHECK_USERNAME_REQUEST , // 517 + EVT_CHALLENGE_MESSAGE_REFRESH_REQUEST , // 518 + EVT_ADD_PRIMARY_KEY_ACCOUNT_SUCCEED , // 519 + EVT_STATE_ID_SCR_SIGN_IN_MANUALLY_MAX , // 520 }; enum EVT_STATE_ID_SCR_LOGIN_WITH_SOFTWARE_KEY { - EVT_STATE_ID_SCR_LOGIN_WITH_SOFTWARE_KEY_MIN=EVT_STATE_ID_SCR_SIGN_IN_MANUALLY_MAX+1, // 519 - EVT_PRIMARY_KEY_SIGNIN_ACCOUNT_REQUEST , // 520 - EVT_LOGIN_WITH_SOFTWARE_KEY_BACK , // 521 - EVT_LOGIN_WITH_SOFTWARE_KEY_SUCCEED , // 522 - EVT_STATE_ID_SCR_LOGIN_WITH_SOFTWARE_KEY_MAX , // 523 + EVT_STATE_ID_SCR_LOGIN_WITH_SOFTWARE_KEY_MIN=EVT_STATE_ID_SCR_SIGN_IN_MANUALLY_MAX+1, // 521 + EVT_PRIMARY_KEY_SIGNIN_ACCOUNT_REQUEST , // 522 + EVT_LOGIN_WITH_SOFTWARE_KEY_BACK , // 523 + EVT_LOGIN_WITH_SOFTWARE_KEY_SUCCEED , // 524 + EVT_STATE_ID_SCR_LOGIN_WITH_SOFTWARE_KEY_MAX , // 525 }; enum EVT_STATE_ID_SCR_REPLACE_PRIMARY_KEY { - EVT_STATE_ID_SCR_REPLACE_PRIMARY_KEY_MIN=EVT_STATE_ID_SCR_LOGIN_WITH_SOFTWARE_KEY_MAX+1, // 524 - EVT_REPLACE_PRIMARY_KEY_REQUEST , // 525 - EVT_STATE_ID_SCR_REPLACE_PRIMARY_KEY_MAX , // 526 + EVT_STATE_ID_SCR_REPLACE_PRIMARY_KEY_MIN=EVT_STATE_ID_SCR_LOGIN_WITH_SOFTWARE_KEY_MAX+1, // 526 + EVT_REPLACE_PRIMARY_KEY_REQUEST , // 527 + EVT_STATE_ID_SCR_REPLACE_PRIMARY_KEY_MAX , // 528 }; enum EVT_STATE_ID_SCR_PRIMARY_KEY_CONFIGURATION { - EVT_STATE_ID_SCR_PRIMARY_KEY_CONFIGURATION_MIN=EVT_STATE_ID_SCR_REPLACE_PRIMARY_KEY_MAX+1, // 527 - EVT_PRIMARY_KEY_SIGN_IN_REQUEST , // 528 - EVT_PRIMARY_KEY_SIGN_IN_SUCCEED , // 529 - EVT_PRIMARY_KEY_CONFIGURATION_BACK , // 530 - EVT_PRIMARY_KEY_CONFIGURATION_FINISHED , // 531 - EVT_STATE_ID_SCR_PRIMARY_KEY_CONFIGURATION_MAX , // 532 + EVT_STATE_ID_SCR_PRIMARY_KEY_CONFIGURATION_MIN=EVT_STATE_ID_SCR_REPLACE_PRIMARY_KEY_MAX+1, // 529 + EVT_PRIMARY_KEY_SIGN_IN_REQUEST , // 530 + EVT_PRIMARY_KEY_SIGN_IN_SUCCEED , // 531 + EVT_PRIMARY_KEY_CONFIGURATION_BACK , // 532 + EVT_PRIMARY_KEY_CONFIGURATION_FINISHED , // 533 + EVT_STATE_ID_SCR_PRIMARY_KEY_CONFIGURATION_MAX , // 534 }; enum EVT_STATE_ID_SCR_SIGN_IN { - EVT_STATE_ID_SCR_SIGN_IN_MIN=EVT_STATE_ID_SCR_PRIMARY_KEY_CONFIGURATION_MAX+1, // 533 - EVT_SIGN_IN_PASSWORD_REQUEST , // 534 - EVT_SIGN_IN_PRIMARY_KEY_REQUEST , // 535 - EVT_SHOW_SIGN_IN_PRIMARY_KEY_REQUEST , // 536 - EVT_STATE_ID_SCR_SIGN_IN_MAX , // 537 + EVT_STATE_ID_SCR_SIGN_IN_MIN=EVT_STATE_ID_SCR_PRIMARY_KEY_CONFIGURATION_MAX+1, // 535 + EVT_SIGN_IN_PASSWORD_REQUEST , // 536 + EVT_SIGN_IN_PRIMARY_KEY_REQUEST , // 537 + EVT_SHOW_SIGN_IN_PRIMARY_KEY_REQUEST , // 538 + EVT_STATE_ID_SCR_SIGN_IN_MAX , // 539 }; enum EVT_STATE_ID_SCR_UPDATE_PROFILE { - EVT_STATE_ID_SCR_UPDATE_PROFILE_MIN=EVT_STATE_ID_SCR_SIGN_IN_MAX+1, // 538 - EVT_UPDATE_PROFILE_REQUEST , // 539 - EVT_UPDATE_PROFILE_BACK , // 540 - EVT_STATE_ID_SCR_UPDATE_PROFILE_MAX , // 541 + EVT_STATE_ID_SCR_UPDATE_PROFILE_MIN=EVT_STATE_ID_SCR_SIGN_IN_MAX+1, // 540 + EVT_UPDATE_PROFILE_REQUEST , // 541 + EVT_UPDATE_PROFILE_BACK , // 542 + EVT_STATE_ID_SCR_UPDATE_PROFILE_MAX , // 543 }; enum EVT_STATE_ID_SCR_TAPSIGNER_RECOVERED_SUCCESS { - EVT_STATE_ID_SCR_TAPSIGNER_RECOVERED_SUCCESS_MIN=EVT_STATE_ID_SCR_UPDATE_PROFILE_MAX+1, // 542 - EVT_TAPSIGNER_RECOVERED_KEY_INFO_REQUEST , // 543 - EVT_STATE_ID_SCR_TAPSIGNER_RECOVERED_SUCCESS_MAX , // 544 + EVT_STATE_ID_SCR_TAPSIGNER_RECOVERED_SUCCESS_MIN=EVT_STATE_ID_SCR_UPDATE_PROFILE_MAX+1, // 544 + EVT_TAPSIGNER_RECOVERED_KEY_INFO_REQUEST , // 545 + EVT_STATE_ID_SCR_TAPSIGNER_RECOVERED_SUCCESS_MAX , // 546 }; enum EVT_STATE_ID_SCR_ENTER_BACKUP_PASSWORD { - EVT_STATE_ID_SCR_ENTER_BACKUP_PASSWORD_MIN=EVT_STATE_ID_SCR_TAPSIGNER_RECOVERED_SUCCESS_MAX+1, // 545 - EVT_INPUT_BACKUP_PASSWORD_REQUEST , // 546 - EVT_ENTER_BACKUP_PASSWORD_BACK , // 547 - EVT_TAPSIGNER_RECOVERED_SUCCESS_REQUEST , // 548 - EVT_STATE_ID_SCR_ENTER_BACKUP_PASSWORD_MAX , // 549 + EVT_STATE_ID_SCR_ENTER_BACKUP_PASSWORD_MIN=EVT_STATE_ID_SCR_TAPSIGNER_RECOVERED_SUCCESS_MAX+1, // 547 + EVT_INPUT_BACKUP_PASSWORD_REQUEST , // 548 + EVT_ENTER_BACKUP_PASSWORD_BACK , // 549 + EVT_TAPSIGNER_RECOVERED_SUCCESS_REQUEST , // 550 + EVT_STATE_ID_SCR_ENTER_BACKUP_PASSWORD_MAX , // 551 }; enum EVT_STATE_ID_SCR_KEY_RECOVERY_ANSER_SECURITY_QUESTION { - EVT_STATE_ID_SCR_KEY_RECOVERY_ANSER_SECURITY_QUESTION_MIN=EVT_STATE_ID_SCR_ENTER_BACKUP_PASSWORD_MAX+1, // 550 - EVT_INPUT_KEY_RECOVERY_ANSER_REQUEST , // 551 - EVT_ANSER_SECURITY_QUESTION_BACK , // 552 - EVT_ENTER_BACKUP_PASSWORD_RERQUEST , // 553 - EVT_STATE_ID_SCR_KEY_RECOVERY_ANSER_SECURITY_QUESTION_MAX , // 554 + EVT_STATE_ID_SCR_KEY_RECOVERY_ANSER_SECURITY_QUESTION_MIN=EVT_STATE_ID_SCR_ENTER_BACKUP_PASSWORD_MAX+1, // 552 + EVT_INPUT_KEY_RECOVERY_ANSER_REQUEST , // 553 + EVT_ANSER_SECURITY_QUESTION_BACK , // 554 + EVT_ENTER_BACKUP_PASSWORD_RERQUEST , // 555 + EVT_STATE_ID_SCR_KEY_RECOVERY_ANSER_SECURITY_QUESTION_MAX , // 556 }; enum EVT_STATE_ID_SCR_KEY_RECOVERY { - EVT_STATE_ID_SCR_KEY_RECOVERY_MIN=EVT_STATE_ID_SCR_KEY_RECOVERY_ANSER_SECURITY_QUESTION_MAX+1, // 555 - EVT_INPUT_TAPSIGNER_SELECT_REQUEST , // 556 - EVT_ANSER_SECURITY_QUESTION_REQUEST , // 557 - EVT_STATE_ID_SCR_KEY_RECOVERY_MAX , // 558 + EVT_STATE_ID_SCR_KEY_RECOVERY_MIN=EVT_STATE_ID_SCR_KEY_RECOVERY_ANSER_SECURITY_QUESTION_MAX+1, // 557 + EVT_INPUT_TAPSIGNER_SELECT_REQUEST , // 558 + EVT_ANSER_SECURITY_QUESTION_REQUEST , // 559 + EVT_STATE_ID_SCR_KEY_RECOVERY_MAX , // 560 }; enum EVT_STATE_ID_SCR_REENTER_YOUR_PASSWORD { - EVT_STATE_ID_SCR_REENTER_YOUR_PASSWORD_MIN=EVT_STATE_ID_SCR_KEY_RECOVERY_MAX+1, // 559 - EVT_INPUT_PASSWORD_REQUEST , // 560 - EVT_REENTER_YOUR_PASSWORD_BACK , // 561 - EVT_STATE_ID_SCR_REENTER_YOUR_PASSWORD_MAX , // 562 + EVT_STATE_ID_SCR_REENTER_YOUR_PASSWORD_MIN=EVT_STATE_ID_SCR_KEY_RECOVERY_MAX+1, // 561 + EVT_INPUT_PASSWORD_REQUEST , // 562 + EVT_REENTER_YOUR_PASSWORD_BACK , // 563 + EVT_STATE_ID_SCR_REENTER_YOUR_PASSWORD_MAX , // 564 }; enum EVT_STATE_ID_SCR_SERVICE_SETTINGS { - EVT_STATE_ID_SCR_SERVICE_SETTINGS_MIN=EVT_STATE_ID_SCR_REENTER_YOUR_PASSWORD_MAX+1, // 563 - EVT_CLAIM_INHERITANCE_CHECK_REQUEST , // 564 - EVT_CO_SIGNING_SERVER_KEY_UPDATE_REQUEST , // 565 - EVT_CO_SIGNING_SERVER_KEY_UPDATE_SUCCEED , // 566 - EVT_SERVICE_SELECT_WALLET_REQUEST , // 567 - EVT_INHERITANCE_PLAN_FINALIZE_REQUEST , // 568 - EVT_SERVICE_SUPPORT_REQUEST , // 569 - EVT_INHERITANCE_WITHDRAW_BALANCE_REQUEST , // 570 - EVT_EDIT_YOUR_INHERITANCE_PLAN_REQUEST , // 571 - EVT_KEY_RECOVERY_REQUEST , // 572 - EVT_SELECT_YOUR_LOCKDOWN_PERIOD_REQUEST , // 573 - EVT_WALLET_CO_SIGN_POLICE_REQUEST , // 574 - EVT_LOCKDOWN_SUCCESS_REQUEST , // 575 - EVT_SETUP_SECURITY_QUESTION_REQUEST , // 576 - EVT_STATE_ID_SCR_SERVICE_SETTINGS_MAX , // 577 + EVT_STATE_ID_SCR_SERVICE_SETTINGS_MIN=EVT_STATE_ID_SCR_REENTER_YOUR_PASSWORD_MAX+1, // 565 + EVT_CLAIM_INHERITANCE_CHECK_REQUEST , // 566 + EVT_CO_SIGNING_SERVER_KEY_UPDATE_REQUEST , // 567 + EVT_CO_SIGNING_SERVER_KEY_UPDATE_SUCCEED , // 568 + EVT_SERVICE_SELECT_WALLET_REQUEST , // 569 + EVT_INHERITANCE_PLAN_FINALIZE_REQUEST , // 570 + EVT_SERVICE_SUPPORT_REQUEST , // 571 + EVT_INHERITANCE_WITHDRAW_BALANCE_REQUEST , // 572 + EVT_EDIT_YOUR_INHERITANCE_PLAN_REQUEST , // 573 + EVT_KEY_RECOVERY_REQUEST , // 574 + EVT_SELECT_YOUR_LOCKDOWN_PERIOD_REQUEST , // 575 + EVT_WALLET_CO_SIGN_POLICE_REQUEST , // 576 + EVT_LOCKDOWN_SUCCESS_REQUEST , // 577 + EVT_SETUP_SECURITY_QUESTION_REQUEST , // 578 + EVT_STATE_ID_SCR_SERVICE_SETTINGS_MAX , // 579 }; enum EVT_STATE_ID_SCR_SELECT_YOUR_LOCKDOWN_PERIOD { - EVT_STATE_ID_SCR_SELECT_YOUR_LOCKDOWN_PERIOD_MIN=EVT_STATE_ID_SCR_SERVICE_SETTINGS_MAX+1, // 578 - EVT_INPUT_DAYS_VALUE_REQUEST , // 579 - EVT_LOCKDOWN_ANSER_SECURITY_QUESTION_REQUEST , // 580 - EVT_STATE_ID_SCR_SELECT_YOUR_LOCKDOWN_PERIOD_MAX , // 581 + EVT_STATE_ID_SCR_SELECT_YOUR_LOCKDOWN_PERIOD_MIN=EVT_STATE_ID_SCR_SERVICE_SETTINGS_MAX+1, // 580 + EVT_INPUT_DAYS_VALUE_REQUEST , // 581 + EVT_LOCKDOWN_ANSER_SECURITY_QUESTION_REQUEST , // 582 + EVT_STATE_ID_SCR_SELECT_YOUR_LOCKDOWN_PERIOD_MAX , // 583 }; enum EVT_STATE_ID_SCR_LOCKDOWN_ANSER_SECURITY_QUESTION { - EVT_STATE_ID_SCR_LOCKDOWN_ANSER_SECURITY_QUESTION_MIN=EVT_STATE_ID_SCR_SELECT_YOUR_LOCKDOWN_PERIOD_MAX+1, // 582 - EVT_INPUT_LOCKDOWN_ANSER_REQUEST , // 583 - EVT_LOCKDOWN_ANSER_SECURITY_QUESTION_BACK , // 584 - EVT_STATE_ID_SCR_LOCKDOWN_ANSER_SECURITY_QUESTION_MAX , // 585 + EVT_STATE_ID_SCR_LOCKDOWN_ANSER_SECURITY_QUESTION_MIN=EVT_STATE_ID_SCR_SELECT_YOUR_LOCKDOWN_PERIOD_MAX+1, // 584 + EVT_INPUT_LOCKDOWN_ANSER_REQUEST , // 585 + EVT_LOCKDOWN_ANSER_SECURITY_QUESTION_BACK , // 586 + EVT_STATE_ID_SCR_LOCKDOWN_ANSER_SECURITY_QUESTION_MAX , // 587 }; enum EVT_STATE_ID_SCR_LOCKDOWN_SUCCESS { - EVT_STATE_ID_SCR_LOCKDOWN_SUCCESS_MIN=EVT_STATE_ID_SCR_LOCKDOWN_ANSER_SECURITY_QUESTION_MAX+1, // 586 - EVT_LOCKDOWN_SUCCESS_CLOSE_REQUEST , // 587 - EVT_CLOSE_LOCKDOWN_SUCCESS , // 588 - EVT_STATE_ID_SCR_LOCKDOWN_SUCCESS_MAX , // 589 + EVT_STATE_ID_SCR_LOCKDOWN_SUCCESS_MIN=EVT_STATE_ID_SCR_LOCKDOWN_ANSER_SECURITY_QUESTION_MAX+1, // 588 + EVT_LOCKDOWN_SUCCESS_CLOSE_REQUEST , // 589 + EVT_CLOSE_LOCKDOWN_SUCCESS , // 590 + EVT_STATE_ID_SCR_LOCKDOWN_SUCCESS_MAX , // 591 }; enum EVT_STATE_ID_SCR_DUMMY_TRANSACTION_INFO { - EVT_STATE_ID_SCR_DUMMY_TRANSACTION_INFO_MIN=EVT_STATE_ID_SCR_LOCKDOWN_SUCCESS_MAX+1, // 590 - EVT_DUMMY_TRANSACTION_ACTION_ENTER_REQUEST , // 591 - EVT_DUMMY_TRANSACTION_INFO_BACK , // 592 - EVT_STATE_ID_SCR_DUMMY_TRANSACTION_INFO_MAX , // 593 + EVT_STATE_ID_SCR_DUMMY_TRANSACTION_INFO_MIN=EVT_STATE_ID_SCR_LOCKDOWN_SUCCESS_MAX+1, // 592 + EVT_DUMMY_TRANSACTION_ACTION_ENTER_REQUEST , // 593 + EVT_DUMMY_TRANSACTION_INFO_BACK , // 594 + EVT_STATE_ID_SCR_DUMMY_TRANSACTION_INFO_MAX , // 595 }; enum EVT_STATE_ID_SCR_INHERITANCE_CONFIRM_TRANSACTION { - EVT_STATE_ID_SCR_INHERITANCE_CONFIRM_TRANSACTION_MIN=EVT_STATE_ID_SCR_DUMMY_TRANSACTION_INFO_MAX+1, // 594 - EVT_INHERITANCE_CREATE_DRAFT_TX_FEE_REQ , // 595 - EVT_INHERITANCE_TRANSACTION_DETAILS_REQUEST , // 596 - EVT_INHERITANCE_CONFIRM_TRANSACTION_BACK , // 597 - EVT_STATE_ID_SCR_INHERITANCE_CONFIRM_TRANSACTION_MAX , // 598 + EVT_STATE_ID_SCR_INHERITANCE_CONFIRM_TRANSACTION_MIN=EVT_STATE_ID_SCR_DUMMY_TRANSACTION_INFO_MAX+1, // 596 + EVT_INHERITANCE_CREATE_DRAFT_TX_FEE_REQ , // 597 + EVT_INHERITANCE_TRANSACTION_DETAILS_REQUEST , // 598 + EVT_INHERITANCE_CONFIRM_TRANSACTION_BACK , // 599 + EVT_STATE_ID_SCR_INHERITANCE_CONFIRM_TRANSACTION_MAX , // 600 }; enum EVT_STATE_ID_SCR_INHERITANCE_TRANSACTION_DETAILS { - EVT_STATE_ID_SCR_INHERITANCE_TRANSACTION_DETAILS_MIN=EVT_STATE_ID_SCR_INHERITANCE_CONFIRM_TRANSACTION_MAX+1, // 599 - EVT_INHERITANCE_TRANSACTION_DETAILS_BACK , // 600 - EVT_STATE_ID_SCR_INHERITANCE_TRANSACTION_DETAILS_MAX , // 601 + EVT_STATE_ID_SCR_INHERITANCE_TRANSACTION_DETAILS_MIN=EVT_STATE_ID_SCR_INHERITANCE_CONFIRM_TRANSACTION_MAX+1, // 601 + EVT_INHERITANCE_TRANSACTION_DETAILS_BACK , // 602 + EVT_STATE_ID_SCR_INHERITANCE_TRANSACTION_DETAILS_MAX , // 603 }; enum EVT_STATE_ID_SCR_INHERITANCE_WITHDRAW_BALANCE { - EVT_STATE_ID_SCR_INHERITANCE_WITHDRAW_BALANCE_MIN=EVT_STATE_ID_SCR_INHERITANCE_TRANSACTION_DETAILS_MAX+1, // 602 - EVT_INHERITANCE_CREATE_DRAFT_TX_REQUEST , // 603 - EVT_INHERITANCE_NEW_TRANSACTION_REQ , // 604 - EVT_INHERITANCE_WITHDRAW_BALANCE_BACK , // 605 - EVT_INHERITANCE_CONFIRM_TRANSACTION_REQUEST , // 606 - EVT_STATE_ID_SCR_INHERITANCE_WITHDRAW_BALANCE_MAX , // 607 + EVT_STATE_ID_SCR_INHERITANCE_WITHDRAW_BALANCE_MIN=EVT_STATE_ID_SCR_INHERITANCE_TRANSACTION_DETAILS_MAX+1, // 604 + EVT_INHERITANCE_CREATE_DRAFT_TX_REQUEST , // 605 + EVT_INHERITANCE_NEW_TRANSACTION_REQ , // 606 + EVT_INHERITANCE_WITHDRAW_BALANCE_BACK , // 607 + EVT_INHERITANCE_CONFIRM_TRANSACTION_REQUEST , // 608 + EVT_STATE_ID_SCR_INHERITANCE_WITHDRAW_BALANCE_MAX , // 609 }; enum EVT_STATE_ID_SCR_ADD_HARDWARE_ASK { - EVT_STATE_ID_SCR_ADD_HARDWARE_ASK_MIN=EVT_STATE_ID_SCR_INHERITANCE_WITHDRAW_BALANCE_MAX+1, // 608 - EVT_ADD_HARDWARE_ASK_ENTER , // 609 - EVT_STATE_ID_SCR_ADD_HARDWARE_ASK_MAX , // 610 + EVT_STATE_ID_SCR_ADD_HARDWARE_ASK_MIN=EVT_STATE_ID_SCR_INHERITANCE_WITHDRAW_BALANCE_MAX+1, // 610 + EVT_ADD_HARDWARE_ASK_ENTER , // 611 + EVT_STATE_ID_SCR_ADD_HARDWARE_ASK_MAX , // 612 }; enum EVT_STATE_ID_SCR_ADD_HARDWARE { - EVT_STATE_ID_SCR_ADD_HARDWARE_MIN=EVT_STATE_ID_SCR_ADD_HARDWARE_ASK_MAX+1, // 611 - EVT_SCAN_HARDWARE_DEVICE_REQUEST , // 612 - EVT_ADD_HARDWARE_DEVICE_REQUEST , // 613 - EVT_STATE_ID_SCR_ADD_HARDWARE_MAX , // 614 + EVT_STATE_ID_SCR_ADD_HARDWARE_MIN=EVT_STATE_ID_SCR_ADD_HARDWARE_ASK_MAX+1, // 613 + EVT_SCAN_HARDWARE_DEVICE_REQUEST , // 614 + EVT_ADD_HARDWARE_DEVICE_REQUEST , // 615 + EVT_STATE_ID_SCR_ADD_HARDWARE_MAX , // 616 }; enum EVT_STATE_ID_SCR_SELECT_WALLET_CO_SIGN_POLICE { - EVT_STATE_ID_SCR_SELECT_WALLET_CO_SIGN_POLICE_MIN=EVT_STATE_ID_SCR_ADD_HARDWARE_MAX+1, // 615 - EVT_SELECT_WALLET_REQUEST , // 616 - EVT_STATE_ID_SCR_SELECT_WALLET_CO_SIGN_POLICE_MAX , // 617 + EVT_STATE_ID_SCR_SELECT_WALLET_CO_SIGN_POLICE_MIN=EVT_STATE_ID_SCR_ADD_HARDWARE_MAX+1, // 617 + EVT_SELECT_WALLET_REQUEST , // 618 + EVT_STATE_ID_SCR_SELECT_WALLET_CO_SIGN_POLICE_MAX , // 619 }; enum EVT_STATE_ID_SCR_EDIT_YOUR_INHERITANCE_PLAN { - EVT_STATE_ID_SCR_EDIT_YOUR_INHERITANCE_PLAN_MIN=EVT_STATE_ID_SCR_SELECT_WALLET_CO_SIGN_POLICE_MAX+1, // 618 - EVT_UPDATE_ACTIVATION_DATE_REQUEST , // 619 - EVT_UPDATE_MESSAGE_REQUEST , // 620 - EVT_UPDATE_BUFFER_PERIOD_REQUEST , // 621 - EVT_UPDATE_NOTIFICATION_PREFERENCE_REQ , // 622 - EVT_NOT_UPDATE_ANY_NOTI_REQ , // 623 - EVT_STATE_ID_SCR_EDIT_YOUR_INHERITANCE_PLAN_MAX , // 624 + EVT_STATE_ID_SCR_EDIT_YOUR_INHERITANCE_PLAN_MIN=EVT_STATE_ID_SCR_SELECT_WALLET_CO_SIGN_POLICE_MAX+1, // 620 + EVT_UPDATE_ACTIVATION_DATE_REQUEST , // 621 + EVT_UPDATE_MESSAGE_REQUEST , // 622 + EVT_UPDATE_BUFFER_PERIOD_REQUEST , // 623 + EVT_UPDATE_NOTIFICATION_PREFERENCE_REQ , // 624 + EVT_NOT_UPDATE_ANY_NOTI_REQ , // 625 + EVT_STATE_ID_SCR_EDIT_YOUR_INHERITANCE_PLAN_MAX , // 626 }; enum EVT_STATE_ID_SCR_SHARE_YOUR_SECRETS { - EVT_STATE_ID_SCR_SHARE_YOUR_SECRETS_MIN=EVT_STATE_ID_SCR_EDIT_YOUR_INHERITANCE_PLAN_MAX+1, // 625 - EVT_UPDATE_YOUR_SECRET_REQUEST , // 626 - EVT_STATE_ID_SCR_SHARE_YOUR_SECRETS_MAX , // 627 + EVT_STATE_ID_SCR_SHARE_YOUR_SECRETS_MIN=EVT_STATE_ID_SCR_EDIT_YOUR_INHERITANCE_PLAN_MAX+1, // 627 + EVT_UPDATE_YOUR_SECRET_REQUEST , // 628 + EVT_STATE_ID_SCR_SHARE_YOUR_SECRETS_MAX , // 629 }; enum EVT_STATE_ID_SCR_ADD_HARDWARE_EXIST { - EVT_STATE_ID_SCR_ADD_HARDWARE_EXIST_MIN=EVT_STATE_ID_SCR_SHARE_YOUR_SECRETS_MAX+1, // 628 - EVT_ADD_EXIST_HARDWARE_REQUEST , // 629 - EVT_ADD_NEW_HARDWARE_REQUEST , // 630 - EVT_STATE_ID_SCR_ADD_HARDWARE_EXIST_MAX , // 631 + EVT_STATE_ID_SCR_ADD_HARDWARE_EXIST_MIN=EVT_STATE_ID_SCR_SHARE_YOUR_SECRETS_MAX+1, // 630 + EVT_ADD_EXIST_HARDWARE_REQUEST , // 631 + EVT_ADD_NEW_HARDWARE_REQUEST , // 632 + EVT_STATE_ID_SCR_ADD_HARDWARE_EXIST_MAX , // 633 }; enum EVT_STATE_ID_SCR_DASHBOARD_ALERT_INFO { - EVT_STATE_ID_SCR_DASHBOARD_ALERT_INFO_MIN=EVT_STATE_ID_SCR_ADD_HARDWARE_EXIST_MAX+1, // 632 - EVT_DASHBOARD_ALERT_INFO_ENTER , // 633 - EVT_ADD_HARDWARE_KEY_EXIST_REQ , // 634 - EVT_ADD_HARDWARE_KEY_REQUEST , // 635 - EVT_STATE_ID_SCR_DASHBOARD_ALERT_INFO_MAX , // 636 + EVT_STATE_ID_SCR_DASHBOARD_ALERT_INFO_MIN=EVT_STATE_ID_SCR_ADD_HARDWARE_EXIST_MAX+1, // 634 + EVT_DASHBOARD_ALERT_INFO_ENTER , // 635 + EVT_ADD_HARDWARE_KEY_EXIST_REQ , // 636 + EVT_ADD_HARDWARE_KEY_REQUEST , // 637 + EVT_STATE_ID_SCR_DASHBOARD_ALERT_INFO_MAX , // 638 }; enum EVT_STATE_ID_SCR_KEY_HEALTH_CHECK_STATUS { - EVT_STATE_ID_SCR_KEY_HEALTH_CHECK_STATUS_MIN=EVT_STATE_ID_SCR_DASHBOARD_ALERT_INFO_MAX+1, // 637 - EVT_KEY_HEALTH_CHECK_STATUS_ENTER , // 638 - EVT_STATE_ID_SCR_KEY_HEALTH_CHECK_STATUS_MAX , // 639 + EVT_STATE_ID_SCR_KEY_HEALTH_CHECK_STATUS_MIN=EVT_STATE_ID_SCR_DASHBOARD_ALERT_INFO_MAX+1, // 639 + EVT_KEY_HEALTH_CHECK_STATUS_ENTER , // 640 + EVT_STATE_ID_SCR_KEY_HEALTH_CHECK_STATUS_MAX , // 641 }; enum EVT_STATE_ID_SCR_HEALTH_CHECK_STARTING { - EVT_STATE_ID_SCR_HEALTH_CHECK_STARTING_MIN=EVT_STATE_ID_SCR_KEY_HEALTH_CHECK_STATUS_MAX+1, // 640 - EVT_HEALTH_CHECK_ACTION_ENTER_REQUEST , // 641 - EVT_HEALTH_CHECK_STARTING_CLOSE , // 642 - EVT_STATE_ID_SCR_HEALTH_CHECK_STARTING_MAX , // 643 + EVT_STATE_ID_SCR_HEALTH_CHECK_STARTING_MIN=EVT_STATE_ID_SCR_KEY_HEALTH_CHECK_STATUS_MAX+1, // 642 + EVT_HEALTH_CHECK_ACTION_ENTER_REQUEST , // 643 + EVT_HEALTH_CHECK_STARTING_CLOSE , // 644 + EVT_STATE_ID_SCR_HEALTH_CHECK_STARTING_MAX , // 645 }; enum EVT_STATE_ID_SCR_DASHBOARD_ALERT_SUCCESS { - EVT_STATE_ID_SCR_DASHBOARD_ALERT_SUCCESS_MIN=EVT_STATE_ID_SCR_HEALTH_CHECK_STARTING_MAX+1, // 644 - EVT_DASHBOARD_ALERT_SUCCESS_ENTER_REQUEST , // 645 - EVT_DASHBOARD_ALERT_SUCCESS_CLOSE , // 646 - EVT_STATE_ID_SCR_DASHBOARD_ALERT_SUCCESS_MAX , // 647 + EVT_STATE_ID_SCR_DASHBOARD_ALERT_SUCCESS_MIN=EVT_STATE_ID_SCR_HEALTH_CHECK_STARTING_MAX+1, // 646 + EVT_DASHBOARD_ALERT_SUCCESS_ENTER_REQUEST , // 647 + EVT_DASHBOARD_ALERT_SUCCESS_CLOSE , // 648 + EVT_STATE_ID_SCR_DASHBOARD_ALERT_SUCCESS_MAX , // 649 }; enum EVT_STATE_ID_SCR_SETUP_SECURITY_QUESTION { - EVT_STATE_ID_SCR_SETUP_SECURITY_QUESTION_MIN=EVT_STATE_ID_SCR_DASHBOARD_ALERT_SUCCESS_MAX+1, // 648 - EVT_INPUT_SECURITY_QUESTION_REQUEST , // 649 - EVT_SETUP_ANSWER_SECURITY_QUESTION_REQ , // 650 - EVT_STATE_ID_SCR_SETUP_SECURITY_QUESTION_MAX , // 651 + EVT_STATE_ID_SCR_SETUP_SECURITY_QUESTION_MIN=EVT_STATE_ID_SCR_DASHBOARD_ALERT_SUCCESS_MAX+1, // 650 + EVT_INPUT_SECURITY_QUESTION_REQUEST , // 651 + EVT_SETUP_ANSWER_SECURITY_QUESTION_REQ , // 652 + EVT_STATE_ID_SCR_SETUP_SECURITY_QUESTION_MAX , // 653 }; enum EVT_STATE_ID_SCR_SETUP_ANSWER_SECURITY_QUESTION { - EVT_STATE_ID_SCR_SETUP_ANSWER_SECURITY_QUESTION_MIN=EVT_STATE_ID_SCR_SETUP_SECURITY_QUESTION_MAX+1, // 652 - EVT_INPUT_ANSWER_SECURITY_QUESTION_REQ , // 653 - EVT_SETUP_ANSWER_SECURITY_QUESTION_BACK , // 654 - EVT_STATE_ID_SCR_SETUP_ANSWER_SECURITY_QUESTION_MAX , // 655 + EVT_STATE_ID_SCR_SETUP_ANSWER_SECURITY_QUESTION_MIN=EVT_STATE_ID_SCR_SETUP_SECURITY_QUESTION_MAX+1, // 654 + EVT_INPUT_ANSWER_SECURITY_QUESTION_REQ , // 655 + EVT_SETUP_ANSWER_SECURITY_QUESTION_BACK , // 656 + EVT_STATE_ID_SCR_SETUP_ANSWER_SECURITY_QUESTION_MAX , // 657 }; enum EVT_STATE_ID_SCR_RECURRING_PAYMENTS { - EVT_STATE_ID_SCR_RECURRING_PAYMENTS_MIN=EVT_STATE_ID_SCR_SETUP_ANSWER_SECURITY_QUESTION_MAX+1, // 656 - EVT_RECURRING_PAYMENTS_ENTER , // 657 - EVT_STATE_ID_SCR_RECURRING_PAYMENTS_MAX , // 658 + EVT_STATE_ID_SCR_RECURRING_PAYMENTS_MIN=EVT_STATE_ID_SCR_SETUP_ANSWER_SECURITY_QUESTION_MAX+1, // 658 + EVT_RECURRING_PAYMENTS_ENTER , // 659 + EVT_STATE_ID_SCR_RECURRING_PAYMENTS_MAX , // 660 }; enum EVT_STATE_ID_SCR_ONBOARDING { - EVT_STATE_ID_SCR_ONBOARDING_MIN=EVT_STATE_ID_SCR_RECURRING_PAYMENTS_MAX+1, // 659 - EVT_ONBOARDING_ACTION_REQUEST , // 660 - EVT_ONBOARDING_CLOSE , // 661 - EVT_STATE_ID_SCR_ONBOARDING_MAX , // 662 + EVT_STATE_ID_SCR_ONBOARDING_MIN=EVT_STATE_ID_SCR_RECURRING_PAYMENTS_MAX+1, // 661 + EVT_ONBOARDING_ACTION_REQUEST , // 662 + EVT_ONBOARDING_CLOSE , // 663 + EVT_STATE_ID_SCR_ONBOARDING_MAX , // 664 }; enum EVT_STATE_ID_SCR_SELECT_SERVER { - EVT_STATE_ID_SCR_SELECT_SERVER_MIN=EVT_STATE_ID_SCR_ONBOARDING_MAX+1, // 663 - EVT_SELECT_SERVER_ENTER , // 664 - EVT_STATE_ID_SCR_SELECT_SERVER_MAX , // 665 + EVT_STATE_ID_SCR_SELECT_SERVER_MIN=EVT_STATE_ID_SCR_ONBOARDING_MAX+1, // 665 + EVT_SELECT_SERVER_ENTER , // 666 + EVT_STATE_ID_SCR_SELECT_SERVER_MAX , // 667 }; enum EVT_STATE_ID_SCR_CHANGE_EMAIL { - EVT_STATE_ID_SCR_CHANGE_EMAIL_MIN=EVT_STATE_ID_SCR_SELECT_SERVER_MAX+1, // 666 - EVT_CHANGE_EMAIL_ENTER , // 667 - EVT_STATE_ID_SCR_CHANGE_EMAIL_MAX , // 668 + EVT_STATE_ID_SCR_CHANGE_EMAIL_MIN=EVT_STATE_ID_SCR_SELECT_SERVER_MAX+1, // 668 + EVT_CHANGE_EMAIL_ENTER , // 669 + EVT_STATE_ID_SCR_CHANGE_EMAIL_MAX , // 670 }; enum EVT_STATE_ID_SCR_REPLACE_SELECT_KEY { - EVT_STATE_ID_SCR_REPLACE_SELECT_KEY_MIN=EVT_STATE_ID_SCR_CHANGE_EMAIL_MAX+1, // 669 - EVT_REPLACE_SELECT_KEY_ENTER , // 670 - EVT_STATE_ID_SCR_REPLACE_SELECT_KEY_MAX , // 671 + EVT_STATE_ID_SCR_REPLACE_SELECT_KEY_MIN=EVT_STATE_ID_SCR_CHANGE_EMAIL_MAX+1, // 671 + EVT_REPLACE_SELECT_KEY_ENTER , // 672 + EVT_STATE_ID_SCR_REPLACE_SELECT_KEY_MAX , // 673 }; enum EVT_STATE_ID_SCR_REPLACE_KEYS { - EVT_STATE_ID_SCR_REPLACE_KEYS_MIN=EVT_STATE_ID_SCR_REPLACE_SELECT_KEY_MAX+1, // 672 - EVT_REPLACE_KEYS_ENTER , // 673 - EVT_STATE_ID_SCR_REPLACE_KEYS_MAX , // 674 + EVT_STATE_ID_SCR_REPLACE_KEYS_MIN=EVT_STATE_ID_SCR_REPLACE_SELECT_KEY_MAX+1, // 674 + EVT_REPLACE_KEYS_ENTER , // 675 + EVT_STATE_ID_SCR_REPLACE_KEYS_MAX , // 676 + }; + enum EVT_STATE_ID_SCR_EDIT_MEMBERS + { + EVT_STATE_ID_SCR_EDIT_MEMBERS_MIN=EVT_STATE_ID_SCR_REPLACE_KEYS_MAX+1, // 677 + EVT_EDIT_MEMBERS_ENTER_REQUEST , // 678 + EVT_EDIT_MEMBERS_CLOSE , // 679 + EVT_STATE_ID_SCR_EDIT_MEMBERS_MAX , // 680 }; enum EVT_STATE_ID_SCR_SIGN_IN_VIA_XPUB { - EVT_STATE_ID_SCR_SIGN_IN_VIA_XPUB_MIN=EVT_STATE_ID_SCR_REPLACE_KEYS_MAX+1, // 675 - EVT_SIGN_IN_VIA_XPUB_ENTER , // 676 - EVT_STATE_ID_SCR_SIGN_IN_VIA_XPUB_MAX , // 677 + EVT_STATE_ID_SCR_SIGN_IN_VIA_XPUB_MIN=EVT_STATE_ID_SCR_EDIT_MEMBERS_MAX+1, // 681 + EVT_SIGN_IN_VIA_XPUB_ENTER , // 682 + EVT_SIGN_IN_VIA_XPUB_CLOSE , // 683 + EVT_STATE_ID_SCR_SIGN_IN_VIA_XPUB_MAX , // 684 }; }; diff --git a/Views/Diagram/NunchuckDiagram.asta b/Views/Diagram/NunchuckDiagram.asta index daebc6ee137582a9ff0eea8f0bdff1c735fa1168..62051bf4bc8bbd3b6894dd73d5a45eac751e3360 100644 GIT binary patch literal 104420 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
Sp@_xKwhW|h^2yMUbz^g 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≪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 z3jhlM00000000000000000000MQ(Iyba_*BZ*pZ&O9ci1000010096w00020kpTbz E06Ehf!~g&Q diff --git a/Views/Diagram/NunchuckDiagram.xml b/Views/Diagram/NunchuckDiagram.xml index 3b4f1f91..ee5897b8 100644 --- a/Views/Diagram/NunchuckDiagram.xml +++ b/Views/Diagram/NunchuckDiagram.xml @@ -212,6 +212,8 @@ + + @@ -232,6 +234,8 @@ + + @@ -5602,6 +5606,82 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9103,6 +9183,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -9232,6 +9380,10 @@ + + + + @@ -11095,6 +11247,46 @@ 2192.0087014603932 + + + + + + + + + + + + + + + + + -1929.6916523863752 + 3800.960212035567 + + + + + + + + + + + + + + + + + + + -598.0433333298256 + 3800.9567398133486 + + @@ -11114,7 +11306,7 @@ -701.6562500151983 - + -3465.4366360765816 -613.8537542150955 @@ -11164,7 +11356,7 @@ -701.6562500151983 - + -3416.6932082294265 -574.9310010848872 @@ -11214,7 +11406,7 @@ -701.6562500151983 - + -3263.720099783978 151.24276517468422 @@ -11272,7 +11464,7 @@ -701.6562500151983 - + -3300.3752721977708 201.30950309789685 @@ -11330,7 +11522,7 @@ -701.6562500151983 - + -4025.858169082271 -45.62217743994472 @@ -11373,7 +11565,7 @@ -701.6562500151983 - + -4135.358169082271 -45.62217743994472 @@ -11416,7 +11608,7 @@ -701.6562500151983 - + -4001.5976339008776 -590.6012374151242 @@ -11459,7 +11651,7 @@ -701.6562500151983 - + -4588.967982269121 -543.1036283238357 @@ -11509,7 +11701,7 @@ -701.6562500151983 - + -4550.765506583886 -584.1292693494768 @@ -11559,7 +11751,7 @@ -701.6562500151983 - + -3781.6313790954027 281.7354294057032 @@ -11602,7 +11794,7 @@ -701.6562500151983 - + -4058.896569990833 281.7354294057032 @@ -11645,7 +11837,7 @@ -697.1107954697438 - + -1984.4200166608694 -606.1922695046433 @@ -11688,7 +11880,7 @@ -697.1107954697438 - + -1958.4200166608694 -568.6571484166282 @@ -11731,7 +11923,7 @@ -697.1107954697438 - + -920.2899035516436 -725.550841097089 @@ -11774,7 +11966,7 @@ -697.1107954697438 - + -1500.1558264929793 -725.550841097089 @@ -11817,7 +12009,7 @@ -697.1107954697438 - + -3315.847955490415 -677.3342736809511 @@ -11875,7 +12067,7 @@ -697.1107954697438 - + -879.351963353248 -371.21915424301585 @@ -11918,7 +12110,7 @@ -697.1107954697438 - + -1429.4740034672288 960.2456015034014 @@ -11968,7 +12160,7 @@ -697.1107954697438 - + -752.4577489822182 1060.2456015034013 @@ -12026,7 +12218,7 @@ -697.1107954697438 - + -4653.890837923096 -236.30685241647302 @@ -12065,7 +12257,7 @@ -697.1107954697438 - + -4656.890837923096 -284.1641345101294 @@ -12104,7 +12296,7 @@ -697.1107954697438 - + -3439.088367287303 -780.1689771295894 @@ -12158,7 +12350,7 @@ -697.1107954697438 - + -5255.802841817371 -56.38024610783256 @@ -12201,7 +12393,7 @@ -697.1107954697438 - + -5604.078703886336 -56.38024610783256 @@ -12244,7 +12436,7 @@ -697.1107954697438 - + -4991.015329810498 458.4836088756332 @@ -12302,7 +12494,7 @@ -697.1107954697438 - + -5061.681996477164 248.07292199643342 @@ -12356,7 +12548,7 @@ -697.1107954697438 - + -4066.678678624242 -590.6012374151242 @@ -12399,7 +12591,7 @@ -697.1107954697438 - + -5183.002908335401 -661.5062753953052 @@ -12442,7 +12634,7 @@ -697.1107954697438 - + -5639.175322128504 -661.5062753953052 @@ -12485,7 +12677,7 @@ -697.1107954697438 - + -4670.441156136609 -304.8065514706275 @@ -12539,7 +12731,7 @@ -697.1107954697438 - + -4880.441156136609 -165.90251657422627 @@ -12593,7 +12785,7 @@ -697.1107954697438 - + -4022.7490550219 -1439.8727559557838 @@ -12651,7 +12843,7 @@ -697.1107954697438 - + -2739.9841864450864 352.7882200288675 @@ -12694,7 +12886,7 @@ -697.1107954697438 - + -3185.6856170253577 32.91579937266545 @@ -12752,7 +12944,7 @@ -697.1107954697438 - + -2073.403245404529 -45.51654719046505 @@ -12806,7 +12998,7 @@ -697.1107954697438 - + -1752.0211115196848 504.2718242731226 @@ -12856,7 +13048,7 @@ -697.1107954697438 - + -1506.1724761737607 -371.21915424301585 @@ -12899,7 +13091,7 @@ -697.1107954697438 - + -4282.055711405376 -1348.4009403407922 @@ -12957,7 +13149,7 @@ -697.1107954697438 - + -6308.295283512095 1012.1499364604692 @@ -13019,7 +13211,7 @@ -697.1107954697438 - + -4454.075208127684 624.1001437629707 @@ -13073,7 +13265,7 @@ -697.1107954697438 - + -4474.842972606101 740.3192959189714 @@ -13127,7 +13319,7 @@ -697.1107954697438 - + -5886.247958636628 1069.7005049108807 @@ -13185,7 +13377,7 @@ -697.1107954697438 - + -5943.273006957754 1119.7005049108807 @@ -13243,7 +13435,7 @@ -697.1107954697438 - + -4560.719833599496 -962.8294344195647 @@ -13301,7 +13493,7 @@ -697.1107954697438 - + -3079.9028171392406 -1457.8916969890574 @@ -13355,7 +13547,7 @@ -697.1107954697438 - + -5132.85798739706 169.43523766029574 @@ -13398,7 +13590,7 @@ -697.1107954697438 - + -5577.843062023925 169.43523766029574 @@ -13441,7 +13633,7 @@ -697.1107954697438 - + -4702.8047604943995 360.47656701048686 @@ -13487,7 +13679,7 @@ -697.1107954697438 - + -4666.5884336158015 299.51207266539507 @@ -13533,7 +13725,7 @@ -697.1107954697438 - + -5745.891419549895 468.6543410400628 @@ -13587,7 +13779,7 @@ -697.1107954697438 - + -5840.891419549895 462.10619674191867 @@ -13641,7 +13833,7 @@ -697.1107954697438 - + -6082.513041171516 30.646382803747372 @@ -13695,7 +13887,7 @@ -697.1107954697438 - + -6134.567095225569 38.717014554805246 @@ -13749,7 +13941,7 @@ -697.1107954697438 - + -4172.487432044621 -473.6097165263192 @@ -13807,7 +13999,7 @@ -697.1107954697438 - + -1929.900103661164 556.9271752366052 @@ -13861,7 +14053,7 @@ -697.1107954697438 - + -3402.358169082272 151.04923552755167 @@ -13919,7 +14111,7 @@ -697.1107954697438 - + -3322.478720473633 206.48217202544276 @@ -13977,7 +14169,7 @@ -697.1107954697438 - + -253.58393141203692 -1414.0137126630211 @@ -14031,7 +14223,7 @@ -697.1107954697438 - + -256.5996510851721 -1278.0323744257933 @@ -14085,7 +14277,7 @@ -697.1107954697438 - + -2097.9622528579835 23.236635594918766 @@ -14128,7 +14320,7 @@ -697.1107954697438 - + -2485.860889521144 23.236635594918766 @@ -14171,7 +14363,7 @@ -697.1107954697438 - + -3242.356730883347 -232.66985136607218 @@ -14225,7 +14417,7 @@ -697.1107954697438 - + -3239.356730883347 -173.15455797735405 @@ -14279,7 +14471,7 @@ -697.1107954697438 - + -3048.4231188109125 480.60966615364754 @@ -14337,7 +14529,7 @@ -697.1107954697438 - + -3085.4744008621938 652.7078750098394 @@ -14395,7 +14587,7 @@ -697.1107954697438 - + -1926.4385651996251 501.7285568993941 @@ -14449,7 +14641,7 @@ -697.1107954697438 - + -1868.9550487161089 665.9876123661734 @@ -14503,7 +14695,7 @@ -697.1107954697438 - + -1512.4481751037233 1296.681105023576 @@ -14546,7 +14738,7 @@ -697.1107954697438 - + -1551.4481751037233 1343.399175135743 @@ -14589,7 +14781,7 @@ -697.1107954697438 - + -1642.2169126975837 1660.9235803859483 @@ -14632,7 +14824,7 @@ -697.1107954697438 - + -1011.6627627625651 1433.737730963425 @@ -14671,7 +14863,7 @@ -697.1107954697438 - + -806.041938240259 21.737629164096518 @@ -14714,7 +14906,7 @@ -697.1107954697438 - + -1142.249319614799 21.737629164096518 @@ -14757,7 +14949,7 @@ -697.1107954697438 - + -1834.5771584480074 525.1658878667756 @@ -14811,7 +15003,7 @@ -697.1107954697438 - + -1831.4964345090943 603.4755051010169 @@ -14865,7 +15057,7 @@ -697.1107954697438 - + -1763.2355649438766 804.4631891798043 @@ -14919,7 +15111,7 @@ -697.1107954697438 - + -1756.4275682373125 874.1818397172829 @@ -14973,7 +15165,7 @@ -697.1107954697438 - + -499.7653268651295 1433.737730963425 @@ -15016,7 +15208,7 @@ -697.1107954697438 - + -416.8284211241636 163.78380386749092 @@ -15070,7 +15262,7 @@ -697.1107954697438 - + -523.8284211241636 311.9876993086604 @@ -15124,7 +15316,7 @@ -697.1107954697438 - + -430.18462431400803 1285.745061504671 @@ -15182,7 +15374,7 @@ -697.1107954697438 - + -450.8284211241636 1514.0428183626534 @@ -15240,7 +15432,7 @@ -697.1107954697438 - + 257.13795957375004 -1457.8916969890574 @@ -15294,7 +15486,7 @@ -697.1107954697438 - + 258.2493184903812 -1487.6235292075517 @@ -15348,7 +15540,7 @@ -230.80644764365695 - + -6459.860056649477 2281.5494614086574 @@ -15402,7 +15594,7 @@ -230.80644764365695 - + -6703.964278115455 3085.3172385884677 @@ -15456,7 +15648,7 @@ -230.80644764365695 - + -5263.873653276649 2885.700492070512 @@ -15510,7 +15702,7 @@ -230.80644764365695 - + -5175.901199428103 3018.126942853542 @@ -15564,7 +15756,7 @@ -230.80644764365695 - + -5226.9932801638915 3127.123723366318 @@ -15618,7 +15810,7 @@ -230.80644764365695 - + -5156.881345860535 3173.327337343403 @@ -15672,7 +15864,7 @@ -230.80644764365695 - + -5509.37683853562 3434.1281216501175 @@ -15722,7 +15914,7 @@ -230.80644764365695 - + -5503.7164611771295 3517.1469895746463 @@ -15772,7 +15964,7 @@ -230.80644764365695 - + -4230.307071417519 3560.695527606189 @@ -15815,7 +16007,7 @@ -230.80644764365695 - + -4122.307071417519 3464.2687430588385 @@ -15858,7 +16050,7 @@ -230.80644764365695 - + -3062.0778501203467 3447.583246095677 @@ -15901,7 +16093,7 @@ -230.80644764365695 - + -2957.0778501203467 3506.15216432241 @@ -15940,7 +16132,7 @@ -230.80644764365695 - + -1800.0667195724104 3447.583246095677 @@ -15983,7 +16175,7 @@ -230.80644764365695 - + -1923.0667195724104 3505.708187392518 @@ -16026,7 +16218,7 @@ -230.80644764365695 - + -6781.703738249707 3245.393768196993 @@ -16080,7 +16272,7 @@ -230.80644764365695 - + -5837.844119851388 4088.1368066114255 @@ -16130,7 +16322,7 @@ -230.80644764365695 - + -5881.658933727741 4126.633216758953 @@ -16180,7 +16372,7 @@ -230.80644764365695 - + -5965.482339875752 4447.461374452067 @@ -16230,7 +16422,7 @@ -230.80644764365695 - + -5920.206477806786 4381.313394382259 @@ -16280,7 +16472,7 @@ 269.19355235634305 - + -4149.405628017125 4663.04291019314 @@ -16323,7 +16515,7 @@ 269.19355235634305 - + -4145.405628017125 4556.439136608235 @@ -16366,7 +16558,7 @@ -230.80644764365695 - + -5406.7537562565085 3211.5549685803385 @@ -16420,7 +16612,7 @@ -230.80644764365695 - + -5321.7537562565085 3256.6605917749175 @@ -16470,7 +16662,7 @@ -230.80644764365695 - + -3145.9148011327825 1952.6609553925746 @@ -16524,7 +16716,7 @@ -230.80644764365695 - + -3143.084952132618 2065.2083815227265 @@ -16578,7 +16770,7 @@ -230.80644764365695 - + -7043.549830511265 -1269.6444507754513 @@ -16636,7 +16828,7 @@ -215.4731143103237 - + -2272.998604210608 4219.512962385836 @@ -16686,7 +16878,7 @@ -215.4731143103237 - + -2473.225238382363 4157.295745097037 @@ -16736,7 +16928,7 @@ -215.4731143103237 - + -7300.243013950485 2729.03277051553 @@ -16794,7 +16986,7 @@ -215.4731143103237 - + -7404.760255329797 2642.388850564707 @@ -16852,7 +17044,7 @@ -215.4731143103237 - + -7290.66966545596 2784.628427190492 @@ -16906,7 +17098,7 @@ -215.4731143103237 - + -6942.645772682066 2788.0327653344266 @@ -16960,7 +17152,7 @@ -215.4731143103237 - + -6456.794201297476 1795.9786742819442 @@ -17014,7 +17206,7 @@ -215.4731143103237 - + -6460.794201297476 1709.7919167262721 @@ -17068,7 +17260,7 @@ -215.4731143103237 - + -4429.535277573868 2184.099947725079 @@ -17134,7 +17326,7 @@ -215.4731143103237 - + -4517.918530579889 2088.483224995943 @@ -17200,7 +17392,7 @@ -215.4731143103237 - + -6685.046712819636 932.6164080173463 @@ -17258,7 +17450,7 @@ -213.62126245847196 - + -2416.6737484329474 4823.492554588166 @@ -17312,7 +17504,7 @@ -213.62126245847196 - + -2487.9026978647216 4854.600199280906 @@ -17366,7 +17558,7 @@ -213.62126245847196 - + -2681.960465821991 3846.5164410677285 @@ -17416,7 +17608,7 @@ -213.62126245847196 - + -4237.829818440684 3682.4903994010606 @@ -17466,7 +17658,7 @@ -213.62126245847196 - + -6560.812909679041 1167.7752106723938 @@ -17516,7 +17708,7 @@ -213.62126245847196 - + -6007.7359321759295 1318.703320754818 @@ -17559,7 +17751,7 @@ -213.62126245847196 - + -6457.379070948662 1328.6568313190594 @@ -17609,7 +17801,7 @@ -213.62126245847196 - + -5536.988109512843 1219.5490988973236 @@ -17648,7 +17840,7 @@ -213.62126245847196 - + -5484.125177517524 1131.0649012154113 @@ -17698,7 +17890,7 @@ -213.62126245847196 - + -4794.95435488778 1367.8370093456629 @@ -17744,7 +17936,7 @@ -213.62126245847196 - + -5516.673968473389 1327.6254267835866 @@ -17794,7 +17986,7 @@ -213.62126245847196 - + -3263.7324593698077 1417.3089673257386 @@ -17848,7 +18040,7 @@ -213.62126245847196 - + -5647.619914419336 1513.2046413196654 @@ -17902,7 +18094,7 @@ -213.62126245847196 - + -4632.361832030409 583.2397431546501 @@ -17952,7 +18144,7 @@ -213.62126245847196 - + -5387.924660475141 1436.60464296955 @@ -17998,7 +18190,7 @@ -213.62126245847196 - + -5606.265866987975 1586.5197190629665 @@ -18052,7 +18244,7 @@ -213.62126245847196 - + -4558.427699319827 753.9231999441894 @@ -18106,7 +18298,7 @@ -213.62126245847196 - + -6374.078827771604 1714.198518546094 @@ -18156,7 +18348,7 @@ -213.62126245847196 - + -4512.318918608709 1371.587817876014 @@ -18206,7 +18398,7 @@ -213.62126245847196 - + -3129.383556528758 783.1344758081772 @@ -18256,7 +18448,7 @@ -213.62126245847196 - + -3423.2334063786075 165.00655256608093 @@ -18306,7 +18498,7 @@ -213.62126245847196 - + -1039.7638805580716 1779.1146585707766 @@ -18349,7 +18541,7 @@ -213.62126245847196 - + -523.3915040328209 1779.1146585707766 @@ -18388,7 +18580,7 @@ -213.62126245847196 - + -4039.7162301622766 1959.6067177570753 @@ -18438,7 +18630,7 @@ -213.62126245847196 - + -3235.822129371775 1318.0296144242288 @@ -18488,7 +18680,7 @@ -213.62126245847196 - + -1343.9718586787073 -1364.2228558068791 @@ -18542,7 +18734,7 @@ -213.62126245847196 - + -6396.438530896242 -1204.0747388879583 @@ -18592,7 +18784,7 @@ -213.62126245847196 - + -4321.673537095424 3765.4541742766833 @@ -18638,7 +18830,7 @@ -213.62126245847196 - + -2075.8320865528135 -1408.5820071041821 @@ -18688,7 +18880,7 @@ -213.62126245847196 - + -6526.8869621242775 1446.475820753974 @@ -18738,7 +18930,7 @@ -213.62126245847196 - + -6512.333269423029 1991.8860241708394 @@ -18788,7 +18980,7 @@ -213.62126245847196 - + -3250.2744822175355 21.71846323604845 @@ -18842,7 +19034,7 @@ 22.09302325581382 - + 1026.273416459941 -1348.1173173684087 @@ -18892,7 +19084,7 @@ 22.09302325581382 - + 813.7070926770875 -437.7855165076786 @@ -18935,7 +19127,7 @@ 22.09302325581382 - + 1111.7760581943287 -437.7855165076786 @@ -18974,7 +19166,7 @@ 22.09302325581382 - + 813.5168580232298 -177.6889569490936 @@ -19013,7 +19205,7 @@ 22.09302325581382 - + 1144.7668580232298 -177.6889569490936 @@ -19056,7 +19248,7 @@ 22.09302325581382 - + 776.3918580232298 85.65707847346994 @@ -19095,7 +19287,7 @@ 22.09302325581382 - + -375.55158934690064 657.6785960582204 @@ -19141,7 +19333,7 @@ 22.09302325581382 - + 1512.2021872567798 -441.14091646826904 @@ -19184,7 +19376,7 @@ 22.09302325581382 - + 1912.8020405207017 -441.14091646826904 @@ -19223,7 +19415,7 @@ 0.0 - + 1204.4745789449794 -1391.6112459205128 @@ -19273,7 +19465,7 @@ 0.0 - + -3623.349045874398 -948.1614090354324 @@ -19327,7 +19519,7 @@ 0.0 - + -350.72536076022334 3085.317238588468 @@ -19377,7 +19569,7 @@ 0.0 - + 2285.8957143122925 -1061.7981092192765 @@ -19423,7 +19615,7 @@ 0.0 - + 2439.0966580660374 -1081.7981092192765 @@ -19469,7 +19661,7 @@ 0.0 - + 3066.0722774944293 -695.563694834209 @@ -19512,7 +19704,7 @@ 0.0 - + 3072.0722774944293 -445.08535935587327 @@ -19555,7 +19747,7 @@ 0.0 - + 3467.9927312632703 -695.563694834209 @@ -19598,7 +19790,7 @@ 0.0 - + 3473.9927312632703 -445.08535935587327 @@ -19637,7 +19829,7 @@ 0.0 - + -3101.822129371775 682.8895583851573 @@ -19691,7 +19883,7 @@ 0.0 - + 2833.2396160560106 -1114.2981092192767 @@ -19737,7 +19929,7 @@ 0.0 - + -4420.319377949687 1014.9689430967601 @@ -19787,7 +19979,7 @@ 0.0 - + -4192.275620910125 2309.554766115036 @@ -19837,7 +20029,7 @@ 0.0 - + -4441.504506240502 1027.12963684587 @@ -19891,7 +20083,7 @@ 0.0 - + -3783.0291048161857 1970.123572189182 @@ -19930,7 +20122,7 @@ 0.0 - + -3299.478720473633 2165.1378661484587 @@ -19980,7 +20172,7 @@ 0.0 - + 671.1715788758364 -848.2702108045285 @@ -20030,7 +20222,7 @@ 0.0 - + 1488.3773484533067 -982.5879408831539 @@ -20076,7 +20268,7 @@ 0.0 - + 1658.8251096473364 -941.8886390816372 @@ -20126,7 +20318,7 @@ 0.0 - + -3375.6747522250207 -317.636258687484 @@ -20176,7 +20368,7 @@ 0.0 - + -1649.706969184649 4903.451857165014 @@ -20226,7 +20418,7 @@ 0.0 - + -1576.2597169455412 4849.720513881433 @@ -20276,7 +20468,7 @@ 0.0 - + 2751.339300521786 -1164.5192570337135 @@ -20326,7 +20518,7 @@ 0.0 - + 2312.413927387457 -1014.6703289892725 @@ -20376,7 +20568,7 @@ 0.0 - + 1427.6539359527496 -623.5659985707047 @@ -20426,7 +20618,7 @@ 0.0 - + 2252.1936265777003 -842.6525918610555 @@ -20480,7 +20672,7 @@ 0.0 - + -821.0779222548771 4861.257335269003 @@ -20530,7 +20722,7 @@ 0.0 - + -901.5039404147193 4920.226071211422 @@ -20580,7 +20772,7 @@ 0.0 - + 4673.670733711717 -546.658226756168 @@ -20630,7 +20822,7 @@ 0.0 - + 18.171578875836417 -437.7885497530938 @@ -20673,7 +20865,7 @@ 0.0 - + 301.76532887583653 -437.7885497530938 @@ -20712,7 +20904,7 @@ 0.0 - + 571.5465788758365 -744.9603743797054 @@ -20770,7 +20962,7 @@ 0.0 - + -3201.3762109948593 857.5927715097336 @@ -20820,7 +21012,7 @@ 0.0 - + 1686.7466146935126 -1105.6773130394736 @@ -20874,7 +21066,7 @@ 0.0 - + 1774.2970446513664 -1091.1250742335033 @@ -20928,7 +21120,7 @@ 0.0 - + 115.45005243140577 4896.217563118854 @@ -20978,7 +21170,7 @@ 0.0 - + -176.99184920223865 4866.972280099986 @@ -21028,7 +21220,7 @@ 0.0 - + -2266.683798295151 -1268.6125981853233 @@ -21078,7 +21270,7 @@ 0.0 - + -1870.9134496311149 -1251.5462549341019 @@ -21128,7 +21320,7 @@ 0.0 - + -3062.447935896944 1058.7554513316034 @@ -21178,7 +21370,7 @@ 0.0 - + -3174.3644469466803 4895.348065371387 @@ -21228,7 +21420,7 @@ 0.0 - + -3270.214278364891 343.1496519747552 @@ -21282,7 +21474,7 @@ 0.0 - + -3280.842845189627 1089.5065747798235 @@ -21313,6 +21505,214 @@ 2255.259330854446 + + + + + + + + + + + + + + + + 0.0 + 0.0 + + + + + -2189.958041170005 + 4830.771742602422 + + + + + + + + -1982.9580411700051 + 3909.569587035567 + -1982.9580411700051 + 5133.103069178424 + -1662.9580411700044 + 5133.103069178424 + + + 0.5 + 0.5 + + + 0.4075815499218016 + 0.5 + + + -1982.9580411700051 + 3909.569587035567 + -1982.9580411700051 + 5133.103069178424 + -1662.9580411700044 + 5133.103069178424 + + + + + + + + + + + + + + + + + + 0.0 + 0.0 + + + + + -1813.1852076096513 + 4922.715743817802 + + + + + + + + -992.9580411700044 + 5005.995605282166 + -1589.1852076096513 + 5005.995605282166 + + + 0.4681978314790566 + 0.5 + + + 0.5 + 0.5 + + + -992.9580411700044 + 5005.995605282166 + -1589.1852076096513 + 5005.995605282166 + + + + + + + + + + + + + + + + + + 0.0 + 0.0 + + + + + -413.7308333298252 + 4913.168317073996 + + + + + + + + -188.7308333298252 + 5068.206739813348 + -641.4443494417155 + 5068.206739813348 + + + 0.601034879484284 + 0.5 + + + 0.5 + 0.5 + + + -188.7308333298252 + 5068.206739813348 + -641.4443494417155 + 5068.206739813348 + + + + + + + + + + + + + + + + + + 0.0 + 0.0 + + + + + 99.76916667017485 + 4933.71382435072 + + + + + + + + -641.4443494417155 + 5007.206739813348 + 341.76916667017485 + 5007.206739813348 + 341.76916667017485 + 3909.5661148133486 + + + 0.5 + 0.5 + + + 0.5 + 0.5 + + + -641.4443494417155 + 5007.206739813348 + 341.76916667017485 + 5007.206739813348 + 341.76916667017485 + 3909.5661148133486 + + diff --git a/Views/STATE_ID_ROOT.cpp b/Views/STATE_ID_ROOT.cpp index e1a349f6..f49f23d2 100644 --- a/Views/STATE_ID_ROOT.cpp +++ b/Views/STATE_ID_ROOT.cpp @@ -311,3 +311,10 @@ void EVT_REPLACE_SELECT_KEY_REQUEST_HANDLER(QVariant msg) { void EVT_SIGN_IN_VIA_XPUB_REQUEST_HANDLER(QVariant msg) { } + +void EVT_EDIT_MEMBERS_REQUEST_HANDLER(QVariant msg) { + if (auto dashboard = QGroupWallets::instance()->dashboardInfoPtr()) { + dashboard->initMembers(); + } +} + diff --git a/Views/STATE_ID_ROOT.h b/Views/STATE_ID_ROOT.h index 3eec7938..8465e674 100644 --- a/Views/STATE_ID_ROOT.h +++ b/Views/STATE_ID_ROOT.h @@ -61,6 +61,7 @@ void EVT_SHARE_YOUR_SECRET_REQUEST_HANDLER(QVariant msg); void EVT_REENTER_YOUR_PASSWORD_REQUEST_HANDLER(QVariant msg); void EVT_ONBOARDING_REQUEST_HANDLER(QVariant msg); void EVT_REPLACE_SELECT_KEY_REQUEST_HANDLER(QVariant msg); +void EVT_EDIT_MEMBERS_REQUEST_HANDLER(QVariant msg); void EVT_SIGN_IN_VIA_XPUB_REQUEST_HANDLER(QVariant msg); #endif // STATE_ID_ROOT_H diff --git a/Views/STATE_ID_SCR_CREATE_TRANSACTION.cpp b/Views/STATE_ID_SCR_CREATE_TRANSACTION.cpp index a5120f8d..04278815 100644 --- a/Views/STATE_ID_SCR_CREATE_TRANSACTION.cpp +++ b/Views/STATE_ID_SCR_CREATE_TRANSACTION.cpp @@ -38,10 +38,6 @@ void SCR_CREATE_TRANSACTION_Exit(QVariant msg) { void EVT_CREATE_TRANSACTION_SIGN_REQUEST_HANDLER(QVariant msg) { bool subtractFromFeeAmout = msg.toMap().value("subtractFromFeeAmout").toBool(); qint64 feeRate = msg.toMap().value("feeRate").toDouble()*1000; // Convert sats/Byte to sats/kB - bool manualFee = msg.toMap().value("manualFee").toBool(); - bool manualOutput = msg.toMap().value("manualOutput").toBool(); - if(!manualFee) feeRate = -1; - QTransactionPtr transaction = AppModel::instance()->transactionInfoPtr(); if(transaction){ QString wallet_id = transaction.data()->walletId(); @@ -84,6 +80,11 @@ void EVT_CREATE_TRANSACTION_SIGN_REQUEST_HANDLER(QVariant msg) { } else { + bool manualFee = msg.toMap().value("manualFee").toBool(); + bool manualOutput = msg.toMap().value("manualOutput").toBool(); + if(!manualFee){ // Auto fee = hourFee by recommendation from API + feeRate = AppModel::instance()->hourFeeOrigin(); + } DBG_INFO << "CREATE NEW TRANSACTION" << "subtract:" << subtractFromFeeAmout << "| manual Output:" << manualOutput @@ -157,7 +158,6 @@ void EVT_CREATE_TRANSACTION_SIGN_REQUEST_HANDLER(QVariant msg) { } else { QString unUseAddress = msg.toMap().value("unUseAddress").toString(); - trans = bridge::nunchukCancelCreateTransaction(wallet_id, transaction->nunchukTransaction(), unUseAddress, @@ -166,7 +166,6 @@ void EVT_CREATE_TRANSACTION_SIGN_REQUEST_HANDLER(QVariant msg) { transaction->txid(), msgwarning); } - if((int)EWARNING::WarningType::NONE_MSG == msgwarning.type()){ if(trans){ AppModel::instance()->setTransactionInfo(trans); diff --git a/Views/STATE_ID_SCR_EDIT_MEMBERS.cpp b/Views/STATE_ID_SCR_EDIT_MEMBERS.cpp new file mode 100644 index 00000000..9c0391b2 --- /dev/null +++ b/Views/STATE_ID_SCR_EDIT_MEMBERS.cpp @@ -0,0 +1,73 @@ +/************************************************************************* +* This file is part of the Nunchuk software (https://nunchuk.io/) * +* Copyright (C) 2020-2022 Enigmo * +* Copyright (C) 2022 Nunchuk * +* * +* This program is free software; you can redistribute it and/or * +* modify it under the terms of the GNU General Public License * +* as published by the Free Software Foundation; either version 3 * +* of the License, or (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program. If not, see . * +* * +**************************************************************************/ + + +#include "STATE_ID_SCR_EDIT_MEMBERS.h" +#include "Premiums/QGroupDashboard.h" +#include "Premiums/QGroupWallets.h" +#include "ServiceSetting.h" +#include "Premiums/QWalletServicesTag.h" + +void SCR_EDIT_MEMBERS_Entry(QVariant msg) { + +} + +void SCR_EDIT_MEMBERS_Exit(QVariant msg) { + +} + +void EVT_EDIT_MEMBERS_ENTER_REQUEST_HANDLER(QVariant msg) { + QMap maps = msg.toMap(); + QString type = maps["type"].toString(); + DBG_INFO << type; + if (auto dashboard = QGroupWallets::instance()->dashboardInfoPtr()) { + if (type == "add-new-member") { + QString roleId = maps["roleId"].toString(); + QJsonObject member; + member["email_or_username"] = ""; + member["role"] = roleId; + member["permissions"] = {}; + dashboard->addMember(member); + } else if (type == "replace-new-member") { + QString roleId = maps["roleId"].toString(); + QString email_or_username = maps["email_or_username"].toString(); + QString indexMember = maps["indexMember"].toString(); + QJsonObject member; + member["email_or_username"] = email_or_username; + member["role"] = roleId; + member["permissions"] = {}; + dashboard->editMembers(member, indexMember.toInt()); + } else if (type == "save-member-changed") { + QMap data; + data["state_id"] = E::STATE_ID_SCR_EDIT_MEMBERS; + QEventProcessor::instance()->sendEvent(E::EVT_REENTER_YOUR_PASSWORD_REQUEST, data); + } else if (type == "edit-member-email-code") { + QString codeEmail = maps["codeEmail"].toString(); + if (ServiceSetting::instance()->servicesTagPtr()->verifyConfirmationCode(codeEmail)) { + dashboard->EditGroupMembers(); + } + } + } +} + +void EVT_EDIT_MEMBERS_CLOSE_HANDLER(QVariant msg) { + +} + diff --git a/Views/STATE_ID_SCR_EDIT_MEMBERS.h b/Views/STATE_ID_SCR_EDIT_MEMBERS.h new file mode 100644 index 00000000..96d78de2 --- /dev/null +++ b/Views/STATE_ID_SCR_EDIT_MEMBERS.h @@ -0,0 +1,35 @@ +/************************************************************************* +* This file is part of the Nunchuk software (https://nunchuk.io/) * +* Copyright (C) 2020-2022 Enigmo * +* Copyright (C) 2022 Nunchuk * +* * +* This program is free software; you can redistribute it and/or * +* modify it under the terms of the GNU General Public License * +* as published by the Free Software Foundation; either version 3 * +* of the License, or (at your option) any later version. * +* * +* This program is distributed in the hope that it will be useful, * +* but WITHOUT ANY WARRANTY; without even the implied warranty of * +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * +* GNU General Public License for more details. * +* * +* You should have received a copy of the GNU General Public License * +* along with this program. If not, see . * +* * +**************************************************************************/ + + +#ifndef STATE_ID_SCR_EDIT_MEMBERS_H +#define STATE_ID_SCR_EDIT_MEMBERS_H + +#include +#include +#include "ViewsDefines.h" +#include "ViewsEnums.h" + +void SCR_EDIT_MEMBERS_Entry(QVariant msg); +void SCR_EDIT_MEMBERS_Exit(QVariant msg); +void EVT_EDIT_MEMBERS_ENTER_REQUEST_HANDLER(QVariant msg); +void EVT_EDIT_MEMBERS_CLOSE_HANDLER(QVariant msg); + +#endif // STATE_ID_SCR_EDIT_MEMBERS_H diff --git a/Views/STATE_ID_SCR_HOME.cpp b/Views/STATE_ID_SCR_HOME.cpp index 4c8c45c7..0292383b 100644 --- a/Views/STATE_ID_SCR_HOME.cpp +++ b/Views/STATE_ID_SCR_HOME.cpp @@ -144,14 +144,16 @@ void EVT_HOME_REMOTE_SIGNER_INFO_REQUEST_HANDLER(QVariant msg) { } void EVT_HOME_SEND_REQUEST_HANDLER(QVariant msg) { - if(AppModel::instance()->walletInfo()){ + if(auto w = AppModel::instance()->walletInfo()){ QString rollover_address = msg.toString(); if(rollover_address != ""){ + w->setTranReplace(true); timeoutHandler(1000, [=](){ emit AppModel::instance()->walletInfo()->rollOverProcess(rollover_address); }); } else { + w->setTranReplace(false); QUTXOListModelPtr utxos = bridge::nunchukGetUnspentOutputs(AppModel::instance()->walletInfo()->id()); if(utxos){ AppModel::instance()->setUtxoList(utxos); diff --git a/Views/STATE_ID_SCR_REENTER_YOUR_PASSWORD.cpp b/Views/STATE_ID_SCR_REENTER_YOUR_PASSWORD.cpp index e80d7f30..ea869c25 100644 --- a/Views/STATE_ID_SCR_REENTER_YOUR_PASSWORD.cpp +++ b/Views/STATE_ID_SCR_REENTER_YOUR_PASSWORD.cpp @@ -45,82 +45,91 @@ void EVT_INPUT_PASSWORD_REQUEST_HANDLER(QVariant msg) { DBG_INFO << state_id << wallet_id; QWalletPtr wallet {}; if (!wallet_id.isEmpty()) { - wallet = AppModel::instance() -> walletList() -> getWalletById(wallet_id); + wallet = AppModel::instance()->walletList()->getWalletById(wallet_id); } switch (state_id) { case E::STATE_ID_SCR_KEY_RECOVERY: - if (ServiceSetting::instance() -> servicesTagPtr() -> requestRecoverKeyVerifyPassword(password)) { - ServiceSetting::instance() -> servicesTagPtr() -> keyRecoveryPtr() -> CreateTapsigners(); - QEventProcessor::instance() -> sendEvent(E::EVT_KEY_RECOVERY_REQUEST); + if (ServiceSetting::instance()->servicesTagPtr()->requestRecoverKeyVerifyPassword(password)) { + ServiceSetting::instance()->servicesTagPtr()->keyRecoveryPtr()->CreateTapsigners(); + QEventProcessor::instance()->sendEvent(E::EVT_KEY_RECOVERY_REQUEST); } break; case E::STATE_ID_SCR_SETUP_SECURITY_QUESTION: - if (ServiceSetting::instance() -> servicesTagPtr() -> list2FA().size() > 0) { - QString w_id = ServiceSetting::instance() -> servicesTagPtr() -> list2FA().first(); - if (auto w = AppModel::instance() -> walletList() -> getWalletById(w_id)) { - ServiceSetting::instance() -> setWalletInfo(w); - w -> setFlow((int) AlertEnum::E_Alert_t::SERVICE_TAG_UPDATE_SECURITY_QUESTION); + if (ServiceSetting::instance()->servicesTagPtr()->list2FA().size() > 0) { + QString w_id = ServiceSetting::instance()->servicesTagPtr()->list2FA().first(); + if (auto w = AppModel::instance()->walletList()->getWalletById(w_id)) { + ServiceSetting::instance()->setWalletInfo(w); + w->setFlow((int) AlertEnum::E_Alert_t::SERVICE_TAG_UPDATE_SECURITY_QUESTION); } } - if (ServiceSetting::instance() -> servicesTagPtr() -> requestUpdateSecurityQuestionPassword(password)) { - ServiceSetting::instance() -> servicesTagPtr() -> keyRecoveryPtr() -> setRequireQuestions({}); - ServiceSetting::instance() -> servicesTagPtr() -> keyRecoveryPtr() -> CreateAllSecurityQuestions(); - QEventProcessor::instance() -> sendEvent(E::EVT_SETUP_SECURITY_QUESTION_REQUEST); + if (ServiceSetting::instance()->servicesTagPtr()->requestUpdateSecurityQuestionPassword(password)) { + ServiceSetting::instance()->servicesTagPtr()->keyRecoveryPtr()->setRequireQuestions({}); + ServiceSetting::instance()->servicesTagPtr()->keyRecoveryPtr()->CreateAllSecurityQuestions(); + QEventProcessor::instance()->sendEvent(E::EVT_SETUP_SECURITY_QUESTION_REQUEST); } break; case E::STATE_ID_SCR_SELECT_YOUR_LOCKDOWN_PERIOD: - ServiceSetting::instance() -> setWalletInfo(wallet); - if (ServiceSetting::instance() -> servicesTagPtr() -> requestLockDownVerifyPassword(password)) { - QEventProcessor::instance() -> sendEvent(E::EVT_CLOSE_TO_SERVICE_SETTINGS_REQUEST); + ServiceSetting::instance()->setWalletInfo(wallet); + if (ServiceSetting::instance()->servicesTagPtr()->requestLockDownVerifyPassword(password)) { + QEventProcessor::instance()->sendEvent(E::EVT_CLOSE_TO_SERVICE_SETTINGS_REQUEST); } break; case E::STATE_ID_SCR_SERVICE_SETTINGS: - ServiceSetting::instance() -> setWalletInfo(wallet); - if (ServiceSetting::instance() -> servicesTagPtr() -> requestServerKeyVerifyPassword(password)) { - if (wallet && wallet -> serverKeyPtr()) { + ServiceSetting::instance()->setWalletInfo(wallet); + if (ServiceSetting::instance()->servicesTagPtr()->requestServerKeyVerifyPassword(password)) { + if (wallet && wallet->serverKeyPtr()) { QtConcurrent::run([wallet]() { - wallet -> serverKeyPtr() -> serverKeyGetCurrentPolicies(); + wallet->serverKeyPtr()->serverKeyGetCurrentPolicies(); }); } QTimer::singleShot(100, [ = ]() { - QEventProcessor::instance() -> sendEvent(E::EVT_CLOSE_TO_SERVICE_SETTINGS_REQUEST); + QEventProcessor::instance()->sendEvent(E::EVT_CLOSE_TO_SERVICE_SETTINGS_REQUEST); }); } break; case E::STATE_ID_SCR_EDIT_YOUR_INHERITANCE_PLAN: { - ServiceSetting::instance() -> setWalletInfo(wallet); - if (ServiceSetting::instance() -> servicesTagPtr() -> requestInheritancePlanVerifyPassword(password)) { - if (wallet && wallet -> inheritancePlanPtr()) { + ServiceSetting::instance()->setWalletInfo(wallet); + if (ServiceSetting::instance()->servicesTagPtr()->requestInheritancePlanVerifyPassword(password)) { + if (wallet && wallet->inheritancePlanPtr()) { QtConcurrent::run([wallet]() { - wallet -> inheritancePlanPtr() -> GetInheritancePlan(); + wallet->inheritancePlanPtr()->GetInheritancePlan(); }); } QTimer::singleShot(100, [ = ]() { - QEventProcessor::instance() -> sendEvent(E::EVT_CLOSE_TO_SERVICE_SETTINGS_REQUEST); + QEventProcessor::instance()->sendEvent(E::EVT_CLOSE_TO_SERVICE_SETTINGS_REQUEST); }); } } break; case E::STATE_ID_SCR_WALLET_INFO: { - if (ServiceSetting::instance() -> servicesTagPtr() -> requestDeleteWalletVerifyPassword(password)) { - if (wallet && wallet -> DeleteWalletRequiredSignatures()) { - AppModel::instance() -> walletInfoPtr() -> setIsDeleting(wallet -> isDeleting()); + if (ServiceSetting::instance()->servicesTagPtr()->requestDeleteWalletVerifyPassword(password)) { + if (wallet && wallet->DeleteWalletRequiredSignatures()) { + AppModel::instance()->walletInfoPtr()->setIsDeleting(wallet->isDeleting()); } - QEventProcessor::instance() -> sendEvent(E::EVT_REENTER_YOUR_PASSWORD_BACK); + QEventProcessor::instance()->sendEvent(E::EVT_REENTER_YOUR_PASSWORD_BACK); } } break; case E::STATE_ID_SCR_CHANGE_EMAIL: { - if (ServiceSetting::instance() -> servicesTagPtr() -> requestChangeEmailVerifyPassword(password)) { - QEventProcessor::instance() -> sendEvent(E::EVT_ONS_CLOSE_ALL_REQUEST); - QEventProcessor::instance() -> sendEvent(E::EVT_CHANGE_EMAIL_REQUEST); + if (ServiceSetting::instance()->servicesTagPtr()->requestChangeEmailVerifyPassword(password)) { + QEventProcessor::instance()->sendEvent(E::EVT_ONS_CLOSE_ALL_REQUEST); + QEventProcessor::instance()->sendEvent(E::EVT_CHANGE_EMAIL_REQUEST); } } break; case E::STATE_ID_SCR_DASHBOARD_ALERT_INFO: { - if (ServiceSetting::instance() -> servicesTagPtr() -> requestReplaceKeysVerifyPassword(password)) { - QEventProcessor::instance() -> sendEvent(E::EVT_ONS_CLOSE_ALL_REQUEST); - QEventProcessor::instance() -> sendEvent(E::EVT_REPLACE_SELECT_KEY_REQUEST); + if (ServiceSetting::instance()->servicesTagPtr()->requestReplaceKeysVerifyPassword(password)) { + QEventProcessor::instance()->sendEvent(E::EVT_ONS_CLOSE_ALL_REQUEST); + QEventProcessor::instance()->sendEvent(E::EVT_REPLACE_SELECT_KEY_REQUEST); + } + } + break; + case E::STATE_ID_SCR_EDIT_MEMBERS: { + if (ServiceSetting::instance()->servicesTagPtr()->requestEditMemberVerifyPassword(password)) { + QEventProcessor::instance()->sendEvent(E::EVT_REENTER_YOUR_PASSWORD_BACK); + if (auto dashboard = QGroupWallets::instance()->dashboardInfoPtr()) { + dashboard->CalculateRequireSignaturesForEditingMembers(); + } } } break; diff --git a/Views/STATE_ID_SCR_SEND.cpp b/Views/STATE_ID_SCR_SEND.cpp index b93f3af1..4cee0768 100644 --- a/Views/STATE_ID_SCR_SEND.cpp +++ b/Views/STATE_ID_SCR_SEND.cpp @@ -31,6 +31,7 @@ void SCR_SEND_Entry(QVariant msg) { if(AppModel::instance()->walletInfo() && AppModel::instance()->walletInfo()->escrow()){ AppModel::instance()->showToast(0, STR_CPP_083, EWARNING::WarningType::WARNING_MSG); } + AppModel::instance()->startGetEstimatedFee(); } void SCR_SEND_Exit(QVariant msg) { @@ -49,6 +50,7 @@ void EVT_SEND_CREATE_TRANSACTION_REQUEST_HANDLER(QVariant msg) { QString memo = msg.toMap().value("destinationMemo").toString(); QList destinationInputed = msg.toMap().value("destinationList").toList(); QDestinationListModelPtr destinationList = QDestinationListModelPtr(new DestinationListModel()); + qint64 totalAmountTotal = 0; for(QVariant var: destinationInputed){ qint64 toAmount = 0; QMap destination = var.toMap(); @@ -61,6 +63,7 @@ void EVT_SEND_CREATE_TRANSACTION_REQUEST_HANDLER(QVariant msg) { toAmount = qUtils::QAmountFromValue(destination["toAmount"].toString()); } destinationList.data()->addDestination(destination["toAddress"].toString(), toAmount); + totalAmountTotal += toAmount; } AppModel::instance()->setDestinationList(destinationList); @@ -69,7 +72,7 @@ void EVT_SEND_CREATE_TRANSACTION_REQUEST_HANDLER(QVariant msg) { bool subtractFromAmount = false; if(AppModel::instance()->walletInfo()){ wallet_id = AppModel::instance()->walletInfo()->id(); - if(AppModel::instance()->walletInfo()->escrow()){ + if(AppModel::instance()->walletInfo()->escrow() || (totalAmountTotal == AppModel::instance()->walletInfo()->balanceSats())){ subtractFromAmount = true; } } @@ -77,10 +80,13 @@ void EVT_SEND_CREATE_TRANSACTION_REQUEST_HANDLER(QVariant msg) { outputs = AppModel::instance()->destinationList()->getOutputs(); DBG_INFO << "Destination : " << outputs; } + qint64 feerate = AppModel::instance()->hourFeeOrigin(); + DBG_INFO << "Fee rate" << feerate; QWarningMessage msgwarning; QTransactionPtr trans = bridge::nunchukDraftTransaction(wallet_id, outputs, - NULL, -1, + NULL, + feerate, subtractFromAmount, "", msgwarning); @@ -101,7 +107,7 @@ void EVT_SEND_CREATE_TRANSACTION_REQUEST_HANDLER(QVariant msg) { QTransactionPtr trans = bridge::nunchukDraftTransaction(wallet_id, outputs, NULL, - -1, + feerate, true, "", msgwarning); diff --git a/Views/STATE_ID_SCR_SIGN_IN_VIA_XPUB.cpp b/Views/STATE_ID_SCR_SIGN_IN_VIA_XPUB.cpp index ec28da0c..561a79d1 100644 --- a/Views/STATE_ID_SCR_SIGN_IN_VIA_XPUB.cpp +++ b/Views/STATE_ID_SCR_SIGN_IN_VIA_XPUB.cpp @@ -40,3 +40,6 @@ void EVT_SIGN_IN_VIA_XPUB_ENTER_HANDLER(QVariant msg) { } } +void EVT_SIGN_IN_VIA_XPUB_CLOSE_HANDLER(QVariant msg) { + +} diff --git a/Views/STATE_ID_SCR_SIGN_IN_VIA_XPUB.h b/Views/STATE_ID_SCR_SIGN_IN_VIA_XPUB.h index 53c9a253..2f0c5748 100644 --- a/Views/STATE_ID_SCR_SIGN_IN_VIA_XPUB.h +++ b/Views/STATE_ID_SCR_SIGN_IN_VIA_XPUB.h @@ -30,5 +30,6 @@ void SCR_SIGN_IN_VIA_XPUB_Entry(QVariant msg); void SCR_SIGN_IN_VIA_XPUB_Exit(QVariant msg); void EVT_SIGN_IN_VIA_XPUB_ENTER_HANDLER(QVariant msg); +void EVT_SIGN_IN_VIA_XPUB_CLOSE_HANDLER(QVariant msg); #endif // STATE_ID_SCR_SIGN_IN_VIA_XPUB_H diff --git a/Views/Views.h b/Views/Views.h index 01582721..7c8736a6 100644 --- a/Views/Views.h +++ b/Views/Views.h @@ -114,10 +114,11 @@ static const APPLICATION_STATE STATE_ID_SCR_SELECT_SERVER static const APPLICATION_STATE STATE_ID_SCR_CHANGE_EMAIL = {E::STATE_ID_SCR_CHANGE_EMAIL , SCR_CHANGE_EMAIL_Entry , SCR_CHANGE_EMAIL_Exit , LAYER::LAYER_POPUP , LIMIT::NONE , SCR_CHANGE_EMAIL }; static const APPLICATION_STATE STATE_ID_SCR_REPLACE_SELECT_KEY = {E::STATE_ID_SCR_REPLACE_SELECT_KEY , SCR_REPLACE_SELECT_KEY_Entry , SCR_REPLACE_SELECT_KEY_Exit , LAYER::LAYER_POPUP , LIMIT::NONE , SCR_REPLACE_SELECT_KEY }; static const APPLICATION_STATE STATE_ID_SCR_REPLACE_KEYS = {E::STATE_ID_SCR_REPLACE_KEYS , SCR_REPLACE_KEYS_Entry , SCR_REPLACE_KEYS_Exit , LAYER::LAYER_ONSCREEN, LIMIT::NONE , SCR_REPLACE_KEYS }; +static const APPLICATION_STATE STATE_ID_SCR_EDIT_MEMBERS = {E::STATE_ID_SCR_EDIT_MEMBERS , SCR_EDIT_MEMBERS_Entry , SCR_EDIT_MEMBERS_Exit , LAYER::LAYER_ONSCREEN, LIMIT::NONE , SCR_EDIT_MEMBERS }; static const APPLICATION_STATE STATE_ID_SCR_SIGN_IN_VIA_XPUB = {E::STATE_ID_SCR_SIGN_IN_VIA_XPUB , SCR_SIGN_IN_VIA_XPUB_Entry , SCR_SIGN_IN_VIA_XPUB_Exit , LAYER::LAYER_ONSCREEN, LIMIT::NONE , SCR_SIGN_IN_VIA_XPUB }; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -static const STATE_TRIGGER STATE_ID_ROOT_trigger[33] = +static const STATE_TRIGGER STATE_ID_ROOT_trigger[34] = { {E::EVT_STARTING_APPLICATION_LOCALMODE , EVT_STARTING_APPLICATION_LOCALMODE_HANDLER , NULL }, {E::EVT_STARTING_APPLICATION_ONLINEMODE , EVT_STARTING_APPLICATION_ONLINEMODE_HANDLER , NULL }, @@ -151,6 +152,7 @@ static const STATE_TRIGGER STATE_ID_ROOT_trigger[33] = {E::EVT_REENTER_YOUR_PASSWORD_REQUEST , EVT_REENTER_YOUR_PASSWORD_REQUEST_HANDLER , &STATE_ID_SCR_REENTER_YOUR_PASSWORD }, {E::EVT_ONBOARDING_REQUEST , EVT_ONBOARDING_REQUEST_HANDLER , &STATE_ID_SCR_ONBOARDING }, {E::EVT_REPLACE_SELECT_KEY_REQUEST , EVT_REPLACE_SELECT_KEY_REQUEST_HANDLER , &STATE_ID_SCR_REPLACE_SELECT_KEY }, + {E::EVT_EDIT_MEMBERS_REQUEST , EVT_EDIT_MEMBERS_REQUEST_HANDLER , &STATE_ID_SCR_EDIT_MEMBERS }, {E::EVT_SIGN_IN_VIA_XPUB_REQUEST , EVT_SIGN_IN_VIA_XPUB_REQUEST_HANDLER , &STATE_ID_SCR_SIGN_IN_VIA_XPUB }, }; @@ -467,6 +469,15 @@ static const STATE_TRIGGER STATE_ID_SCR_DUMMY_TRANSACTION_INFO_trigger[2] = //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +static const STATE_TRIGGER STATE_ID_SCR_EDIT_MEMBERS_trigger[2] = +{ + {E::EVT_EDIT_MEMBERS_ENTER_REQUEST, EVT_EDIT_MEMBERS_ENTER_REQUEST_HANDLER, NULL }, + {E::EVT_EDIT_MEMBERS_CLOSE , EVT_EDIT_MEMBERS_CLOSE_HANDLER , &STATE_ID_ROOT }, +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + static const STATE_TRIGGER STATE_ID_SCR_EDIT_YOUR_INHERITANCE_PLAN_trigger[5] = { {E::EVT_UPDATE_ACTIVATION_DATE_REQUEST , EVT_UPDATE_ACTIVATION_DATE_REQUEST_HANDLER , NULL }, @@ -987,9 +998,10 @@ static const STATE_TRIGGER STATE_ID_SCR_SIGN_IN_MANUALLY_trigger[4] = //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -static const STATE_TRIGGER STATE_ID_SCR_SIGN_IN_VIA_XPUB_trigger[1] = +static const STATE_TRIGGER STATE_ID_SCR_SIGN_IN_VIA_XPUB_trigger[2] = { - {E::EVT_SIGN_IN_VIA_XPUB_ENTER, EVT_SIGN_IN_VIA_XPUB_ENTER_HANDLER, NULL }, + {E::EVT_SIGN_IN_VIA_XPUB_ENTER, EVT_SIGN_IN_VIA_XPUB_ENTER_HANDLER, NULL }, + {E::EVT_SIGN_IN_VIA_XPUB_CLOSE, EVT_SIGN_IN_VIA_XPUB_CLOSE_HANDLER, &STATE_ID_ROOT }, }; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -1141,7 +1153,7 @@ static const STATE_TRIGGER STATE_ID_TOAST_MESSAGE_DISPLAY_trigger[1] = //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// -static const STATE_SYSTEM STATE_ALL[87] = +static const STATE_SYSTEM STATE_ALL[88] = { {E::STATE_ID_ROOT , STATE_ID_ROOT_trigger , ALEN(STATE_ID_ROOT_trigger) , &STATE_ID_ROOT }, {E::STATE_ID_SCR_HOME , STATE_ID_SCR_HOME_trigger , ALEN(STATE_ID_SCR_HOME_trigger) , &STATE_ID_SCR_HOME }, @@ -1229,6 +1241,7 @@ static const STATE_SYSTEM STATE_ALL[87] = {E::STATE_ID_SCR_CHANGE_EMAIL , STATE_ID_SCR_CHANGE_EMAIL_trigger , ALEN(STATE_ID_SCR_CHANGE_EMAIL_trigger) , &STATE_ID_SCR_CHANGE_EMAIL }, {E::STATE_ID_SCR_REPLACE_SELECT_KEY , STATE_ID_SCR_REPLACE_SELECT_KEY_trigger , ALEN(STATE_ID_SCR_REPLACE_SELECT_KEY_trigger) , &STATE_ID_SCR_REPLACE_SELECT_KEY }, {E::STATE_ID_SCR_REPLACE_KEYS , STATE_ID_SCR_REPLACE_KEYS_trigger , ALEN(STATE_ID_SCR_REPLACE_KEYS_trigger) , &STATE_ID_SCR_REPLACE_KEYS }, + {E::STATE_ID_SCR_EDIT_MEMBERS , STATE_ID_SCR_EDIT_MEMBERS_trigger , ALEN(STATE_ID_SCR_EDIT_MEMBERS_trigger) , &STATE_ID_SCR_EDIT_MEMBERS }, {E::STATE_ID_SCR_SIGN_IN_VIA_XPUB , STATE_ID_SCR_SIGN_IN_VIA_XPUB_trigger , ALEN(STATE_ID_SCR_SIGN_IN_VIA_XPUB_trigger) , &STATE_ID_SCR_SIGN_IN_VIA_XPUB }, }; diff --git a/contrib/libnunchuk b/contrib/libnunchuk index b0ec424c..6ff93fa6 160000 --- a/contrib/libnunchuk +++ b/contrib/libnunchuk @@ -1 +1 @@ -Subproject commit b0ec424cca907c18ed133447a7785751bc74a175 +Subproject commit 6ff93fa6ffcbe9bdbe687add6c686144c2904e20 diff --git a/ifaces/Servers/Byzantine.cpp b/ifaces/Servers/Byzantine.cpp index c05c10e6..faee8b08 100644 --- a/ifaces/Servers/Byzantine.cpp +++ b/ifaces/Servers/Byzantine.cpp @@ -1149,6 +1149,42 @@ bool Byzantine::GetAllCancelledTransaction(const QString &group_id, const QStrin return false; } +bool Byzantine::GetAllTransactionNotes(const QString &group_id, const QString &wallet_id, QJsonObject &output, QString &errormsg) +{ + if (group_id.isEmpty()) return false; + int reply_code = -1; + QString reply_msg = ""; + QString cmd = commands[Group::CMD_IDX::GROUP_WALLETS_GET_ALL_TX_NOTES]; + cmd.replace("{group_id}", group_id); + cmd.replace("{wallet_id_or_local_id}", wallet_id); + + QJsonObject data; + data["offset"] = "0"; + data["limit"] = "10000"; + data["statuses"] = "PENDING_CONFIRMATION,CONFIRMED,NETWORK_REJECTED"; + + QJsonObject jsonObj = getSync(cmd, data, reply_code, reply_msg); + if (reply_code == DRACO_CODE::SUCCESSFULL) { + QJsonObject errorObj = jsonObj["error"].toObject(); + int response_code = errorObj["code"].toInt(); + QString response_msg = errorObj["message"].toString(); + if(response_code == DRACO_CODE::RESPONSE_OK){ + output = jsonObj["data"].toObject(); + return true; + } + else { + errormsg = response_msg; + DBG_INFO << response_code << response_msg; +#if 0 //NO NEED + AppModel::instance()->showToast(response_code, response_msg, EWARNING::WarningType::EXCEPTION_MSG); +#endif + return false; + } + } + errormsg = reply_msg; + return false; +} + bool Byzantine::GetOneTransaction(const QString &group_id, const QString &wallet_id, const QString &txid, QJsonObject &output, QString &errormsg) { if (group_id.isEmpty()) return false; @@ -2369,3 +2405,66 @@ bool Byzantine::ResetKeyReplacement(const QString &group_id, const QString &wall errormsg = reply_msg; return false; } + + +bool Byzantine::EditGroupMembers(const QString &group_id, const QJsonObject &request_body, const QStringList &signatures, const QString &passwordToken, const QString &secQuesToken, const QString &confirmToken, QJsonObject &output, QString &errormsg) +{ + QMap params; + for (int i = 0; i < signatures.count(); i++) { + params[QString("AuthorizationX-%1").arg(i+1)] = signatures.at(i); + } + params["Verify-token"] = passwordToken; + if (!secQuesToken.isEmpty()) { + params["Security-Question-token"] = secQuesToken; + } + if (!confirmToken.isEmpty()) { + params["Confirmation-token"] = confirmToken; + } + int reply_code = -1; + QString reply_msg = ""; + QString cmd = commands[Group::CMD_IDX::GROUP_WALLET_EDIT_GROUP_MEMBERS]; + cmd.replace("{group_id}", group_id); + QJsonObject jsonObj = putSync(cmd, {}, params, request_body, reply_code, reply_msg); + if(reply_code == DRACO_CODE::SUCCESSFULL){ + QJsonObject errorObj = jsonObj["error"].toObject(); + int response_code = errorObj["code"].toInt(); + QString response_msg = errorObj["message"].toString(); + if(response_code == DRACO_CODE::RESPONSE_OK){ + output = jsonObj["data"].toObject(); + return true; + } + else{ + errormsg = response_msg; + AppModel::instance()->showToast(response_code, response_msg, EWARNING::WarningType::EXCEPTION_MSG); + return false; + } + } + errormsg = reply_msg; + return false; +} + +bool Byzantine::CalculateRequireSignaturesForEditingMembers(const QString &group_id, const QJsonObject &request_body, QJsonObject &output, QString &errormsg) +{ + DBG_INFO << request_body; + int reply_code = -1; + QString reply_msg = ""; + QString cmd = commands[Group::CMD_IDX::GROUP_WALLET_EDIT_GROUP_MEMBERS_REQUIRED_SIGNATURES]; + cmd.replace("{group_id}", group_id); + QJsonObject jsonObj = postSync(cmd, request_body, reply_code, reply_msg); + if(reply_code == DRACO_CODE::SUCCESSFULL){ + QJsonObject errorObj = jsonObj["error"].toObject(); + int response_code = errorObj["code"].toInt(); + QString response_msg = errorObj["message"].toString(); + if(response_code == DRACO_CODE::RESPONSE_OK){ + output = jsonObj["data"].toObject(); + return true; + } + else{ + errormsg = response_msg; + AppModel::instance()->showToast(response_code, response_msg, EWARNING::WarningType::EXCEPTION_MSG); + return false; + } + } + errormsg = reply_msg; + return false; +} diff --git a/ifaces/Servers/Byzantine.h b/ifaces/Servers/Byzantine.h index d16c1b48..08ffd3c2 100644 --- a/ifaces/Servers/Byzantine.h +++ b/ifaces/Servers/Byzantine.h @@ -94,6 +94,7 @@ class Byzantine : public QRest // Transaction operation bool GetAllTransaction(const QString &group_id, const QString &wallet_id, QJsonObject& output, QString &errormsg); bool GetAllCancelledTransaction(const QString &group_id, const QString &wallet_id, const int offset, const int limit, QJsonObject& output, QString &errormsg); + bool GetAllTransactionNotes(const QString &group_id, const QString &wallet_id, QJsonObject& output, QString &errormsg); bool GetOneTransaction(const QString &group_id, const QString &wallet_id, const QString &txid, QJsonObject& output, QString &errormsg); bool UpdateTransaction(const QString &group_id, const QString &wallet_id, const QString &txid, const QString ¬e, QJsonObject& output, QString &errormsg); bool CancelTransaction(const QString &group_id, const QString &wallet_id, const QString &txid, QJsonObject& output, QString &errormsg); @@ -248,6 +249,20 @@ class Byzantine : public QRest QJsonObject& output, QString &errormsg); + bool EditGroupMembers(const QString &group_id, + const QJsonObject& request_body, + const QStringList &signatures, + const QString& passwordToken, + const QString& secQuesToken, + const QString& confirmToken, + QJsonObject &output, + QString &errormsg); + + bool CalculateRequireSignaturesForEditingMembers(const QString &group_id, + const QJsonObject& request_body, + QJsonObject& output, + QString &errormsg); + }; #endif // BYZANTINE_H diff --git a/ifaces/Servers/Draco.cpp b/ifaces/Servers/Draco.cpp index 0ab426e1..faf6f6b7 100644 --- a/ifaces/Servers/Draco.cpp +++ b/ifaces/Servers/Draco.cpp @@ -1368,7 +1368,22 @@ void Draco::setStayLoggedIn(bool value) } } -void Draco::getUserSubscriptions() +bool Draco::getUserSubscriptions() +{ + if (AppSetting::instance()->primaryServer() == (int)nunchuk::Chain::TESTNET) + { + if (!getUserSubscriptionsTestnet()) { + return getUserSubscriptionsMainnet(); + } + } else if (AppSetting::instance()->primaryServer() == (int)nunchuk::Chain::MAIN) { + if (!getUserSubscriptionsMainnet()) { + return getUserSubscriptionsTestnet(); + } + } + return false; +} + +bool Draco::getUserSubscriptionsMainnet() { int reply_code = -1; QString reply_msg = ""; @@ -1381,16 +1396,10 @@ void Draco::getUserSubscriptions() QJsonObject data = jsonObj["data"].toObject(); QJsonArray subs = data["subscriptions"].toArray(); CLIENT_INSTANCE->setSubscriptions(subs); - } - else { - - } - } - if (AppSetting::instance()->primaryServer() == (int)nunchuk::Chain::TESTNET){ - if (CLIENT_INSTANCE->subscriptions().size() == 0) { - getUserSubscriptionsTestnet(); + return CLIENT_INSTANCE->subscriptions().size() > 0; } } + return false; } bool Draco::getUserSubscriptionsTestnet() @@ -1406,9 +1415,7 @@ bool Draco::getUserSubscriptionsTestnet() QJsonObject data = jsonObj["data"].toObject(); QJsonArray subs = data["subscriptions"].toArray(); CLIENT_INSTANCE->setSubscriptions(subs); - return true; - } - else { + return CLIENT_INSTANCE->subscriptions().size() > 0; } } return false; @@ -1864,6 +1871,38 @@ bool Draco::assistedKeyUpdateName(const QString &fingerPrint, const QString &nam return false; } +bool Draco::assistedWalletGetTxNotes(const QString &wallet_id, QJsonObject &output, QString &errormsg) +{ + QJsonObject data; + data["offset"] = "0"; + data["limit"] = "10000"; + data["greater_than_time_millis"] = 0, + data["statuses"] = "PENDING_CONFIRMATION,CONFIRMED,NETWORK_REJECTED"; + int reply_code = -1; + QString reply_msg = ""; + QString cmd = commands[Premium::CMD_IDX::ASSISTED_WALLET_GET_LIST_TX_NOTES]; + cmd.replace("{wallet_id_or_local_id}",wallet_id); + QJsonObject jsonObj = getSync(cmd, data, reply_code, reply_msg); + if(reply_code == DRACO_CODE::SUCCESSFULL){ + QJsonObject errorObj = jsonObj["error"].toObject(); + int response_code = errorObj["code"].toInt(); + QString response_msg = errorObj["message"].toString(); + if(response_code == DRACO_CODE::RESPONSE_OK){ + output = jsonObj.value("data").toObject(); + return true; + } + else { + errormsg = response_msg; +#if 0 //NO NEED + AppModel::instance()->showToast(response_code, response_msg, EWARNING::WarningType::EXCEPTION_MSG); +#endif + return false; + } + } + errormsg = reply_msg; + return false; +} + bool Draco::DeleteAssistedWallet(const QString &wallet_id, const QStringList &signatures, const QString &passwordToken, const QString& secQuesToken, QJsonObject &output, QString &errormsg) { int reply_code = -1; diff --git a/ifaces/Servers/Draco.h b/ifaces/Servers/Draco.h index 9dd03e23..cc51d781 100644 --- a/ifaces/Servers/Draco.h +++ b/ifaces/Servers/Draco.h @@ -111,7 +111,8 @@ class Draco : public QRest void setStayLoggedIn(bool value); // USER_SUBSCRIPTION - void getUserSubscriptions(); + bool getUserSubscriptions(); + bool getUserSubscriptionsMainnet(); bool getUserSubscriptionsTestnet(); // ASSISTED_WALLETS @@ -132,7 +133,7 @@ class Draco : public QRest bool assistedWalletGetInfo(const QString &wallet_id, QJsonObject &output, QString &errormsg); bool assistedWalletUpdate(const QString &wallet_id, const QString &name, const QString &description, QJsonObject &output, QString &errormsg); bool assistedKeyUpdateName(const QString &fingerPrint, const QString &name, const QJsonObject& json = {}); - + bool assistedWalletGetTxNotes(const QString &wallet_id, QJsonObject &output, QString &errormsg); bool DeleteAssistedWallet(const QString& wallet_id, const QStringList &signatures, const QString& passwordToken, const QString& secQuesToken, QJsonObject &output, QString &errormsg); bool DeleteWalletRequiredSignatures(const QString &wallet_id, QJsonObject &output, QString &errormsg); diff --git a/ifaces/Servers/DracoDefines.h b/ifaces/Servers/DracoDefines.h index 5497ccd5..071a3b21 100644 --- a/ifaces/Servers/DracoDefines.h +++ b/ifaces/Servers/DracoDefines.h @@ -157,6 +157,7 @@ enum CMD_IDX { ASSISTED_WALLET_CANCEL_TX, ASSISTED_WALLET_GET_TX, ASSISTED_WALLET_GET_LIST_TX, + ASSISTED_WALLET_GET_LIST_TX_NOTES, ASSISTED_WALLET_DELETE_LIST_TX, ASSISTED_WALLET_SYNC_TX, ASSISTED_WALLET_RBF_TX, @@ -283,6 +284,8 @@ enum CMD_IDX { GROUP_WALLET_UPDATE_ALIAS, GROUP_WALLET_DELETE_ALIAS, GROUP_WALLET_UPDATE_PRIMARY_OWNER, + GROUP_WALLET_EDIT_GROUP_MEMBERS, + GROUP_WALLET_EDIT_GROUP_MEMBERS_REQUIRED_SIGNATURES, //Group Alert Management GROUP_WALLET_ALERTS, @@ -320,6 +323,7 @@ enum CMD_IDX { // Group transactions GROUP_WALLETS_GET_ALL_TX, + GROUP_WALLETS_GET_ALL_TX_NOTES, GROUP_WALLETS_GET_ONE_TX, GROUP_WALLETS_UPDATE_TX, GROUP_WALLETS_CANCEL_TX, @@ -489,7 +493,8 @@ const QMap commands { { Premium::CMD_IDX::ASSISTED_WALLET_CREATE_TX , QString("%1/%2").arg(DRAGON_USER_WALLETS_URL).arg("wallets/{wallet_id_or_local_id}/transactions") }, { Premium::CMD_IDX::ASSISTED_WALLET_UPDATE_TX , QString("%1/%2").arg(DRAGON_USER_WALLETS_URL).arg("wallets/{wallet_id_or_local_id}/transactions/{transaction_id}") }, { Premium::CMD_IDX::ASSISTED_WALLET_GET_LIST_TX , QString("%1/%2").arg(DRAGON_USER_WALLETS_URL).arg("wallets/{wallet_id_or_local_id}/transactions") }, - { Premium::CMD_IDX::ASSISTED_WALLET_DELETE_LIST_TX , QString("%1/%2").arg(DRAGON_USER_WALLETS_URL).arg("wallets/{wallet_id_or_local_id}/transactions") }, + { Premium::CMD_IDX::ASSISTED_WALLET_GET_LIST_TX_NOTES , QString("%1/%2").arg(DRAGON_USER_WALLETS_URL).arg("wallets/{wallet_id_or_local_id}/transactions/notes") }, + { Premium::CMD_IDX::ASSISTED_WALLET_DELETE_LIST_TX , QString("%1/%2").arg(DRAGON_USER_WALLETS_URL).arg("wallets/{wallet_id_or_local_id}/transactions") }, { Premium::CMD_IDX::ASSISTED_WALLET_SIGN_TX , QString("%1/%2").arg(DRAGON_USER_WALLETS_URL).arg("wallets/{wallet_id_or_local_id}/transactions/{transaction_id}/sign") }, { Premium::CMD_IDX::ASSISTED_WALLET_CANCEL_TX , QString("%1/%2").arg(DRAGON_USER_WALLETS_URL).arg("wallets/{wallet_id_or_local_id}/transactions/{transaction_id}") }, { Premium::CMD_IDX::ASSISTED_WALLET_GET_TX , QString("%1/%2").arg(DRAGON_USER_WALLETS_URL).arg("wallets/{wallet_id_or_local_id}/transactions/{transaction_id}") }, @@ -599,6 +604,10 @@ const QMap commands { { Group::CMD_IDX::GROUP_WALLETS_LIST , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups") }, { Group::CMD_IDX::GROUP_WALLETS_ACCEPT , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/members/accept") }, { Group::CMD_IDX::GROUP_WALLETS_DENY , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/members/deny") }, + { Group::CMD_IDX::GROUP_WALLET_EDIT_GROUP_MEMBERS , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/members") }, + { Group::CMD_IDX::GROUP_WALLET_EDIT_GROUP_MEMBERS_REQUIRED_SIGNATURES , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/members/calculate-requires-signatures") }, + + { Group::CMD_IDX::GROUP_WALLET_ALERTS , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/alerts") }, { Group::CMD_IDX::GROUP_WALLET_ALERTS_COUNT , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/alerts/total") }, { Group::CMD_IDX::GROUP_WALLET_ALERTS_READ , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/alerts/{alert_id}/mark-as-read") }, @@ -638,6 +647,7 @@ const QMap commands { // Group transactions { Group::CMD_IDX::GROUP_WALLETS_GET_ALL_TX , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/wallets/{wallet_id_or_local_id}/transactions") }, + { Group::CMD_IDX::GROUP_WALLETS_GET_ALL_TX_NOTES , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/wallets/{wallet_id_or_local_id}/transactions/notes") }, { Group::CMD_IDX::GROUP_WALLETS_GET_ONE_TX , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/wallets/{wallet_id_or_local_id}/transactions/{transaction_id}") }, { Group::CMD_IDX::GROUP_WALLETS_UPDATE_TX , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/wallets/{wallet_id_or_local_id}/transactions/{transaction_id}") }, { Group::CMD_IDX::GROUP_WALLETS_CANCEL_TX , QString("%1/%2").arg(DRAGON_GROUP_WALLETS_URL).arg("groups/{group_id}/wallets/{wallet_id_or_local_id}/transactions/{transaction_id}") }, diff --git a/ifaces/bridgeifaces.cpp b/ifaces/bridgeifaces.cpp index 6600c144..ea2df6d6 100644 --- a/ifaces/bridgeifaces.cpp +++ b/ifaces/bridgeifaces.cpp @@ -836,14 +836,19 @@ QTransactionPtr bridge::nunchukImportTransaction(const QString &wallet_id, const } } -QTransactionPtr bridge::nunchukUpdateTransaction(const QString &wallet_id, const QString &tx_id, const QString &new_txid, const QString &raw_tx, const QString &reject_msg, QWarningMessage &msg) +QTransactionPtr bridge::nunchukUpdateTransaction(const QString &wallet_id, + const QString &tx_id, + const QString &new_txid, + const QString &raw_tx, + const QString &reject_msg, + QWarningMessage &msg) { nunchuk::Transaction trans_result = nunchukiface::instance()->UpdateTransaction(wallet_id.toStdString(), - tx_id.toStdString(), - new_txid.toStdString(), - raw_tx.toStdString(), - reject_msg.toStdString(), - msg); + tx_id.toStdString(), + new_txid.toStdString(), + raw_tx.toStdString(), + reject_msg.toStdString(), + msg); if((int)EWARNING::WarningType::NONE_MSG == msg.type()){ QTransactionPtr final = bridge::convertTransaction(trans_result, wallet_id); return final; diff --git a/localization/STR_QML.js b/localization/STR_QML.js index dff3cf76..607d69a1 100644 --- a/localization/STR_QML.js +++ b/localization/STR_QML.js @@ -176,9 +176,9 @@ var STR_QML_140 = qsTr("Please sign this message on your device") var STR_QML_141 = qsTr("Please Confirm on the Key Device") //SCR_ADD_NEW_SOFTWARE_SIGNER.qml -var STR_QML_142 = qsTr("New seed") -var STR_QML_143 = qsTr("Please take a moment to write down this seed phrase. It is the backup for your key.") -var STR_QML_144 = qsTr("Never share the seed phrase with anyone. Avoid having a digital copy.") +var STR_QML_142 = qsTr("Seed phrase") +var STR_QML_143 = qsTr("Please take a moment to write down this seed phrase. It’s the backup for your key. This app will only show the seed phrase once.") +var STR_QML_144 = qsTr("Never share the recovery phrase with anyone. Avoid having a digital copy.") //SCR_ADD_REMOTE_SIGNER_RESULT.qml var STR_QML_145 = qsTr("Key Info (Air-Gapped)") @@ -1282,7 +1282,7 @@ var STR_QML_1036 = qsTr("%1 (%2) is requesting to make the following chan var STR_QML_1012 = qsTr("To authorize the changes, you will be asked to sign a dummy transaction that sends 10,000 sat (%1 %2) to your own wallet. Since more than one signature is required, other keyholders in the group will also be notified.") var STR_QML_1013 = qsTr("The dummy transaction uses a fake input and does not move any of your real bitcoins. It will not be broadcast and will be immediately removed afterwards.") var STR_QML_1037 = qsTr("To authorize the changes, you will be asked to sign a dummy transaction that sends 10,000 sat (%1 %2) to your own wallet.") -var STR_QML_1038 = qsTr("To authorize the inheritance planning request, you will be asked to sign a dummy transaction that sends 10,000 sat (%1 %2) to your own wallet. Since more than one signature is required, other keyholders will also be notified.") +var STR_QML_1038 = qsTr("To authorize the inheritance planning request, you will be asked to sign a dummy transaction that sends 10,000 sat (%1 %2) to your own wallet. Since more than one signature is required, other keyholders in the group will also be notified.") var STR_QML_1039 = qsTr("Two signatures are required to cancel the inheritance plan. \n \ \n \ @@ -1290,7 +1290,7 @@ In order to cancel the plan, you will be asked to sign a dummy transaction that var STR_QML_1040 = qsTr("The dummy transaction will not be broadcast and will be immediately removed afterwards.") -var STR_QML_1041 = qsTr("To authorize this recurring payment, you will be asked to sign a dummy transaction that sends 10,000 sat (%1 %2) to your own wallet. Since more than one signature is required, other keyholders will also be notified.") +var STR_QML_1041 = qsTr("To authorize this recurring payment, you will be asked to sign a dummy transaction that sends 10,000 sat (%1 %2) to your own wallet. Since more than one signature is required, other keyholders in the group will also be notified.") var STR_QML_1042 = qsTr("%1 (%2) is requesting to set up the inheritance plan for %3.") @@ -1539,8 +1539,8 @@ var STR_QML_1247 = qsTr("Get more out of Nunchuk with an assisted wallet") var STR_QML_1248 = qsTr("Visit our website") var STR_QML_1249 = qsTr("Add a wallet") var STR_QML_1250 = qsTr("Use a multisig wallet for maximum safety. A multisig wallet has multiple keys—if one is compromised, your fund is still safe.") -var STR_QML_1251 = qsTr("Create hot wallet") -var STR_QML_1252 = qsTr("Quickly create a hot wallet for immediate use and back it up later.") +var STR_QML_1251 = qsTr("Create a hot wallet") +var STR_QML_1252 = qsTr("Quickly create a hot wallet for immediate use and back it up later. No existing keys required.") var STR_QML_1253 = qsTr("Recover existing wallet") var STR_QML_1254 = qsTr("Recover hot wallet") var STR_QML_1255 = qsTr("Create now") @@ -1550,7 +1550,7 @@ var STR_QML_1258 = qsTr("Learn more about Nunchuk assisted services") var STR_QML_1259 = qsTr("Send query") var STR_QML_1260 = qsTr("If you are looking for a white-glove, personalized service offered by a Bitcoin Advisor, enter your country and email address below, and we’ll send you the best Bitcoin Advisors in your area. \n \n Alternatively, check out the assisted services offered by our platform.") var STR_QML_1261 = qsTr("Create new assisted wallet (%1 remaining)") -var STR_QML_1262 = qsTr("Create new wallet") +var STR_QML_1262 = qsTr("Create a new wallet") var STR_QML_1263 = qsTr("Your email address") var STR_QML_1264 = qsTr("Your country") @@ -1685,3 +1685,33 @@ var STR_QML_1391 = qsTr("Please replace key(s) using the mobile app.") var STR_QML_1392 = qsTr("Key added to wallet") var STR_QML_1393 = qsTr("Family or group wallets") var STR_QML_1394 = qsTr("Collaboratively create family or group wallets. Manage keys distributedly, control member access and chat privately.") +var STR_QML_1395 = qsTr("Role") +var STR_QML_1396 = qsTr("Facilitator admin") +var STR_QML_1397 = qsTr("Can add or remove group members. \nCan make changes to inheritance planning. +Can make changes to wallet policies. +Can activate emergency lockdown. +Can view key health status. +Can perform key health check. +Can perform key recovery. +Can create coin tags or collections. +Can edit transaction notes. +Can participate in group chat. +Can view transactions. +Can create transactions. +Can sign transactions.") +var STR_QML_1398 = qsTr("Can view key health status. \nCan perform key health check. +Can perform key recovery. +Can participate in group chat. +Can view transactions. +Can create transactions. +Can sign transactions.") +var STR_QML_1399 = qsTr("Can perform key health check. \nCan perform key recovery. +Can sign transactions.") +var STR_QML_1400 = qsTr("Can add group members. \nCan request key health check. +Can participate in group chat.") +var STR_QML_1401 = qsTr("Can view transactions.") +var STR_QML_1402 = qsTr("Only applicable for members who own a TAPSIGNER, Ledger or Trezor device.") +var STR_QML_1403 = qsTr("Select a role") +var STR_QML_1404 = qsTr("Only an admin can downgrade a member’s role.") +var STR_QML_1405 = qsTr("Create a new wallet using existing keys.") +var STR_QML_1406 = qsTr("You won’t be able to view the seed phrase again in the app. Please make sure that you have it backed up, or risk losing your funds.") diff --git a/main.cpp b/main.cpp index b6eb60c9..f18a8e36 100644 --- a/main.cpp +++ b/main.cpp @@ -124,7 +124,7 @@ int main(int argc, char* argv[]) app.setOrganizationName("nunchuk"); app.setOrganizationDomain("nunchuk.io"); app.setApplicationName("NunchukClient"); - app.setApplicationVersion("1.9.36"); + app.setApplicationVersion("1.9.37"); app.setApplicationDisplayName(QString("%1 %2").arg("Nunchuk").arg(app.applicationVersion())); AppModel::instance(); Draco::instance(); diff --git a/qml.qrc b/qml.qrc index 6aa255e2..7c57df6c 100644 --- a/qml.qrc +++ b/qml.qrc @@ -462,6 +462,16 @@ Qml/Screens/OnlineMode/ReplaceKeyFrees/QReplaceBeforeYouBegin.qml Qml/Screens/OnlineMode/ReplaceKeyFrees/QReplaceAddSigner.qml Qml/Screens/OnlineMode/ReplaceKeyFrees/QReplaceAddSignerLoading.qml + Qml/Screens/OnlineMode/SCR_EDIT_MEMBERS.qml + Qml/Screens/OnlineMode/EditMembers/QEditMembers.qml + Qml/Screens/OnlineMode/EditMembers/QEditMemberDelegate.qml + Qml/Screens/OnlineMode/EditMembers/QEditMemberRole.qml + Qml/Screens/OnlineMode/EditMembers/QPopupEditMemberSelectARole.qml + Qml/Screens/OnlineMode/EditMembers/QEditMemberSelectRoleDelegate.qml + Qml/Screens/OnlineMode/EditMembers/QEditMemberNewMemberDelegate.qml + Qml/Screens/OnlineMode/EditMembers/QEditMemberSuccess.qml + Qml/Screens/OnlineMode/EditMembers/QEditMemberConfirmEmail.qml + Qml/Components/LeftPannel/Service/Byzantine/QServiceFacilitatorAdminSubscriberLeftPannel.qml Images/services-light.svg @@ -742,9 +752,7 @@ Images/unassisted-wallet-description.svg Images/hot-wallet-description.svg Images/circle-assisted-wallet.svg - Images/create-hot-wallet.svg Images/chevron-right-dark.svg - Images/create-hot-wallet.png Images/unassisted-wallet-description.png Images/onboarding-assisted-wallet.png Images/onboarding-unassisted-wallet.png @@ -765,6 +773,9 @@ Images/replace.svg Images/add-to-collection-dark.svg Images/Circular.svg + Images/groups-dark.svg + Images/health-check-light.svg + Images/person-add-24px.svg Info.plist