2021-09-14 16:23:02 +00:00
|
|
|
import QtQuick 2.13
|
|
|
|
import QtQuick.Dialogs 1.3
|
2021-09-28 15:04:06 +00:00
|
|
|
|
|
|
|
import utils 1.0
|
2021-09-14 16:23:02 +00:00
|
|
|
|
|
|
|
QtObject {
|
|
|
|
id: root
|
|
|
|
|
|
|
|
property CollectiblesStore collectiblesStore: CollectiblesStore { }
|
|
|
|
property var walletModelInst: walletModel
|
|
|
|
property var walletModelV2Inst: walletV2Model
|
|
|
|
property var profileModelInst: profileModel
|
|
|
|
property var chatsModelInst: chatsModel
|
2021-10-17 11:41:12 +00:00
|
|
|
|
2021-10-16 16:14:08 +00:00
|
|
|
// This should be exposed to the UI via "walletModule", WalletModule should use
|
2021-10-17 11:41:12 +00:00
|
|
|
// Accounts Service which keeps the info about that (isFirstTimeAccountLogin).
|
|
|
|
// Then in the View of WalletModule we may have either QtProperty or
|
|
|
|
// Q_INVOKABLE function (proc marked as slot) depends on logic/need.
|
|
|
|
// The only need for onboardingModel here is actually to check if an account
|
|
|
|
// has been just created or an old one.
|
|
|
|
|
2021-10-16 16:14:08 +00:00
|
|
|
// property var onboardingModelInst: onboardingModel
|
2021-09-14 16:23:02 +00:00
|
|
|
property int selectedAccount: 0
|
|
|
|
|
|
|
|
function getSavedAddressErrorText(savedAddresses, error) {
|
|
|
|
switch (error) {
|
|
|
|
case savedAddresses.Error.CreateSavedAddressError:
|
|
|
|
return qsTr("Error creating new saved address, please try again later.");
|
|
|
|
case savedAddresses.Error.DeleteSavedAddressError:
|
|
|
|
return qsTr("Error deleting saved address, please try again later.");
|
|
|
|
case savedAddresses.Error.ReadSavedAddressesError:
|
|
|
|
return qsTr("Error getting saved addresses, please try again later.");
|
|
|
|
case savedAddresses.Error.UpdateSavedAddressError:
|
|
|
|
return qsTr("Error updating saved address, please try again later.");
|
|
|
|
default: return "";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function copyText(text) {
|
|
|
|
root.chatsModelInst.copyToClipboard(text);
|
|
|
|
}
|
|
|
|
|
|
|
|
function changeSelectedAccount(newIndex) {
|
|
|
|
if (newIndex > root.walletModelV2Inst.accountsView.accounts) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
root.selectedAccount = newIndex;
|
|
|
|
root.walletModelV2Inst.setCurrentAccountByIndex(newIndex);
|
|
|
|
}
|
|
|
|
|
|
|
|
function afterAddAccount() {
|
|
|
|
changeSelectedAccount(walletModelInst.accountsView.accounts.rowCount() - 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
function getCollectionMaxValue(traitType, value, maxValue, collectionIndex) {
|
|
|
|
if(maxValue !== "")
|
|
|
|
return parseInt(value) + qsTr(" of ") + maxValue;
|
|
|
|
else
|
|
|
|
return parseInt(value) + qsTr(" of ") +
|
|
|
|
walletModelV2Inst.collectiblesView.collections.getCollectionTraitMaxValue(collectionIndex, traitType).toString();
|
|
|
|
}
|
|
|
|
|
|
|
|
property bool seedPhraseInserted: false
|
|
|
|
property bool isSeedCountValid: false
|
|
|
|
property bool loadingAccounts: false
|
|
|
|
|
|
|
|
function seedPhraseNotFound(text) {
|
2021-10-17 11:41:12 +00:00
|
|
|
// Read above, same story, `validateMnemonic` is method of AccountService
|
|
|
|
// in wallet section we need to deal with it via walletModule, not anything
|
|
|
|
// related to onboarding.
|
|
|
|
|
2021-10-16 16:14:08 +00:00
|
|
|
// var seedValidationError = root.onboardingModelInst.validateMnemonic(text);
|
|
|
|
// var regex = new RegExp('word [a-z]+ not found in the dictionary', 'i');
|
|
|
|
// return regex.test(seedValidationError);
|
|
|
|
|
|
|
|
return ""
|
2021-09-14 16:23:02 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
function validateAddAccountPopup(text, model, keyOrSeedValid, accountNameValid) {
|
|
|
|
if (root.isSeedCountValid && !root.seedPhraseNotFound(text)) {
|
|
|
|
var validCount = 0;
|
|
|
|
for (var i = 0; i < model.count; i++) {
|
|
|
|
if (!!model.itemAtIndex(i) && model.itemAtIndex(i).nameInputValid) {
|
|
|
|
validCount++;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return (root.isSeedCountValid && !root.seedPhraseNotFound(text)) ? (validCount === model.count) :
|
|
|
|
(keyOrSeedValid && accountNameValid);
|
|
|
|
}
|
|
|
|
|
|
|
|
function validateTextInput(text) {
|
|
|
|
root.seedPhraseInserted = text.includes(" ");
|
|
|
|
var errorMessage;
|
|
|
|
root.isSeedCountValid = (!!text && (text.match(/(\w+)/g).length === 12));
|
|
|
|
if (text === "") {
|
|
|
|
errorMessage = qsTr("You need to enter a valid private key or seed phrase");
|
|
|
|
} else {
|
|
|
|
if (!root.seedPhraseInserted) {
|
|
|
|
errorMessage = !Utils.isPrivateKey(text) ?
|
|
|
|
qsTrId("enter-a-valid-private-key-(64-characters-hexadecimal-string)") : "";
|
|
|
|
} else {
|
|
|
|
if (!root.isSeedCountValid) {
|
|
|
|
errorMessage = qsTrId("enter-a-valid-mnemonic");
|
|
|
|
} else if (root.seedPhraseNotFound(text)) {
|
|
|
|
errorMessage = qsTrId("custom-seed-phrase") + '. ' + qsTrId("custom-seed-phrase-text-1");
|
|
|
|
} else {
|
|
|
|
errorMessage = "";
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return errorMessage;
|
|
|
|
}
|
|
|
|
|
|
|
|
function addAccount(text, model, keyOrSeedValid, accountNameInput) {
|
|
|
|
root.loadingAccounts = true;
|
|
|
|
if (!root.validateAddAccountPopup(text, model, keyOrSeedValid, accountNameInput.nameInputValid)) {
|
2021-12-06 21:10:54 +00:00
|
|
|
Global.playErrorSound();
|
2021-09-14 16:23:02 +00:00
|
|
|
root.loadingAccounts = false;
|
|
|
|
} else {
|
|
|
|
//TODO account color to be verified with design
|
|
|
|
var result;
|
|
|
|
if (root.isSeedCountValid && !root.seedPhraseNotFound(text)) {
|
|
|
|
for (var i = 0; i < model.count; i++) {
|
|
|
|
//TODO add authorization process when Authorization moadl is ready
|
|
|
|
if (!!model.itemAtIndex(i)) {
|
|
|
|
result = root.walletModelInst.accountsView.addAccountsFromSeed(model.itemAtIndex(i).accountAddress, "qwqwqw", model.itemAtIndex(i).accountName, "")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
result = root.walletModelInst.accountsView.addAccountsFromPrivateKey(text, "qwqwqw", accountNameInput.text, "");
|
|
|
|
}
|
|
|
|
root.loadingAccounts = false;
|
|
|
|
if (result) {
|
|
|
|
let resultJson = JSON.parse(result);
|
|
|
|
if (!Utils.isInvalidPasswordMessage(resultJson.error)) {
|
|
|
|
accountError.text = resultJson.error;
|
|
|
|
accountError.open();
|
|
|
|
}
|
2021-12-06 21:10:54 +00:00
|
|
|
Global.playErrorSound();
|
2021-09-14 16:23:02 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
property MessageDialog accountError: MessageDialog {
|
|
|
|
id: accountError
|
|
|
|
title: qsTr("Adding the account failed")
|
|
|
|
icon: StandardIcon.Critical
|
|
|
|
standardButtons: StandardButton.Ok
|
|
|
|
}
|
|
|
|
|
|
|
|
function deleteAccount(address) {
|
|
|
|
walletModelInst.accountsView.deleteAccount(address);
|
|
|
|
}
|
|
|
|
|
|
|
|
property ListModel exampleWalletModel: ListModel {
|
|
|
|
id: exampleWalletModel
|
|
|
|
ListElement {
|
|
|
|
name: "Status account"
|
|
|
|
address: "0xcfc9f08bbcbcb80760e8cb9a3c1232d19662fc6f"
|
|
|
|
isFavorite: false
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Test account 1"
|
|
|
|
address: "0x2Ef1...E0Ba"
|
|
|
|
isFavorite: false
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Status account 2"
|
|
|
|
address: "0x2Ef1...E0Ba"
|
|
|
|
isFavorite: true
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Status account"
|
|
|
|
address: "0xcfc9f08bbcbcb80760e8cb9a3c1232d19662fc6f"
|
|
|
|
isFavorite: false
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Test account 1"
|
|
|
|
address: "0x2Ef1...E0Ba"
|
|
|
|
isFavorite: false
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Status account 2"
|
|
|
|
address: "0x2Ef1...E0Ba"
|
|
|
|
isFavorite: true
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Status account"
|
|
|
|
address: "0xcfc9f08bbcbcb80760e8cb9a3c1232d19662fc6f"
|
|
|
|
isFavorite: false
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Test account 1"
|
|
|
|
address: "0x2Ef1...E0Ba"
|
|
|
|
isFavorite: false
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Status account 2"
|
|
|
|
address: "0x2Ef1...E0Ba"
|
|
|
|
isFavorite: true
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Status account"
|
|
|
|
address: "0xcfc9f08bbcbcb80760e8cb9a3c1232d19662fc6f"
|
|
|
|
isFavorite: false
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Test account 1"
|
|
|
|
address: "0x2Ef1...E0Ba"
|
|
|
|
isFavorite: false
|
|
|
|
}
|
|
|
|
ListElement {
|
|
|
|
name: "Status account 2"
|
|
|
|
address: "0x2Ef1...E0Ba"
|
|
|
|
isFavorite: true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|