From 10d3d3f577c6667cdc4988be9c2336136711b594 Mon Sep 17 00:00:00 2001 From: Jacob Brydolf Date: Mon, 17 Oct 2016 19:13:56 +0200 Subject: [PATCH 1/5] Save wallet after every refresh --- main.qml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/main.qml b/main.qml index 0f937859..634a1452 100644 --- a/main.qml +++ b/main.qml @@ -245,12 +245,9 @@ ApplicationWindow { var dTargetBlock = currentWallet.daemonBlockChainTargetHeight(); leftPanel.daemonProgress.updateProgress(dCurrentBlock,dTargetBlock); - // Store wallet after first refresh. To prevent broken wallet after a crash - if(isNewWallet && currentWallet.blockChainHeight() > 0){ - currentWallet.store(persistentSettings.wallet_path) - isNewWallet = false - console.log("wallet stored after first successfull refresh") - } + // Store wallet after every refresh. + currentWallet.store(persistentSettings.wallet_path) + // initialize transaction history once wallet is initializef first time; if (!walletInitialized) { From fc2a086aba02702cedc1b6ecac81f59bacd50254 Mon Sep 17 00:00:00 2001 From: Jacob Brydolf Date: Mon, 17 Oct 2016 21:41:45 +0200 Subject: [PATCH 2/5] corrected path on wallet store after refresh --- main.qml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/main.qml b/main.qml index 634a1452..f865a2db 100644 --- a/main.qml +++ b/main.qml @@ -246,8 +246,9 @@ ApplicationWindow { leftPanel.daemonProgress.updateProgress(dCurrentBlock,dTargetBlock); // Store wallet after every refresh. - currentWallet.store(persistentSettings.wallet_path) - + currentWallet.store(walletPath()) + console.log("Saving to "+walletPath()); + isNewWallet = false // initialize transaction history once wallet is initializef first time; if (!walletInitialized) { From 9cc3dee4722b62e54b426159a30f9c2275198cea Mon Sep 17 00:00:00 2001 From: Jacob Brydolf Date: Mon, 17 Oct 2016 21:42:26 +0200 Subject: [PATCH 3/5] Remove trailing slash on wallet_path --- wizard/WizardMain.qml | 6 ++ wizard/WizardOpenWallet.qml | 147 ++++++++++++++++++++++++++++++++++++ 2 files changed, 153 insertions(+) create mode 100644 wizard/WizardOpenWallet.qml diff --git a/wizard/WizardMain.qml b/wizard/WizardMain.qml index 43200304..543ee14d 100644 --- a/wizard/WizardMain.qml +++ b/wizard/WizardMain.qml @@ -111,10 +111,16 @@ Rectangle { console.log("Here we apply the settings"); // here we need to actually move wallet to the new location + // Remove trailing slash - (default on windows and mac) + if (settings.wallet_path.substring(settings.wallet_path.length -1) === "/"){ + settings.wallet_path = settings.wallet_path.substring(0,settings.wallet_path.length -1) + } + var new_wallet_filename = settings.wallet_path + "/" + settings.account_name + "/" + settings.account_name; + console.log("saving to wizard: "+ new_wallet_filename) // moving wallet files to the new destination, if user changed it if (new_wallet_filename !== settings.wallet_filename) { // using previously saved wallet; diff --git a/wizard/WizardOpenWallet.qml b/wizard/WizardOpenWallet.qml new file mode 100644 index 00000000..b6109f26 --- /dev/null +++ b/wizard/WizardOpenWallet.qml @@ -0,0 +1,147 @@ +// Copyright (c) 2014-2015, The Monero Project +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without modification, are +// permitted provided that the following conditions are met: +// +// 1. Redistributions of source code must retain the above copyright notice, this list of +// conditions and the following disclaimer. +// +// 2. Redistributions in binary form must reproduce the above copyright notice, this list +// of conditions and the following disclaimer in the documentation and/or other +// materials provided with the distribution. +// +// 3. Neither the name of the copyright holder nor the names of its contributors may be +// used to endorse or promote products derived from this software without specific +// prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL +// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF +// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +import QtQuick 2.2 +import moneroComponents.WalletManager 1.0 +import moneroComponents.Wallet 1.0 + +import QtQuick.Dialogs 1.2 +import 'utils.js' as Utils + +Item { + opacity: 0 + visible: true + +// Behavior on opacity { +// NumberAnimation { duration: 100; easing.type: Easing.InQuad } +// } + + + // onOpacityChanged: visible = opacity !== 0 + + //! function called each time we display this page + + function onPageOpened(settingsObject) { + checkNextButton() + + fileDialog.open(); + + } + + function onPageClosed(settingsObject) { + settingsObject['account_name'] = "opened wallet"//uiItem.accountNameText + // settingsObject['words'] = uiItem.wordsTexttext + settingsObject['wallet_filename'] = fileDialog.fileUrl + return true; + } + + function checkNextButton() { + // var wordsArray = Utils.lineBreaksToSpaces(uiItem.wordsTextItem.memoText).split(" "); + // wizard.nextButton.enabled = wordsArray.length === 25; + } + + //! function called each time we hide this page + // + + + function createWallet(settingsObject) { + // TODO: create wallet in temporary filename and a) move it to the path specified by user after the final + // page submitted or b) delete it when program closed before reaching final page + + var wallet_filename = oshelper.temporaryFilename(); + if (typeof settingsObject.wallet === 'undefined') { + //var wallet = walletManager.createWallet(wallet_filename, "", settingsObject.language) + var testnet = appWindow.persistentSettings.testnet; + var wallet = walletManager.createWallet(wallet_filename, "", settingsObject.wallet_language, + testnet) + uiItem.wordsTextItem.memoText = wallet.seed + // saving wallet in "global" settings object + // TODO: wallet should have a property pointing to the file where it stored or loaded from + settingsObject.wallet = wallet + } else { + print("wallet already created. we just stepping back"); + } + settingsObject.wallet_filename = wallet_filename + } + + function openWallet(settingsObject){ + + } + + +Rectangle { + border.width: 4 + anchors.fill: parent + clip: true + anchors.top: parent.top + anchors.right: parent.right + anchors.topMargin: 85 + + Text { + visible: true + id: welcomeText + height: 32 + anchors.left: parent.left + anchors.right: parent.right + font.family: "Arial" + font.pixelSize: 28 + //renderType: Text.NativeRendering + color: "#3F3F3F" + wrapMode: Text.Wrap + // hack to implement dynamic translation + // https://wiki.qt.io/How_to_do_dynamic_translation_in_QML + text: qsTr("Welcome") + + } + + FileDialog { + id: fileDialog + title: "Please choose a file" + folder: shortcuts.home + onAccepted: { + console.log("You chose: " + fileDialog.fileUrls) + } + onRejected: { + console.log("Canceled") + Qt.quit() + } + // Component.onCompleted: visible = false + } + } + + +// WizardManageWalletUI { +// id: uiItem +// titleText: qsTr("A new wallet has been created for you") + translationManager.emptyString +// wordsTextTitle: qsTr("This is the 25 word mnemonic for your wallet") + translationManager.emptyString +// wordsTextItem.clipboardButtonVisible: true +// wordsTextItem.tipTextVisible: true +// wordsTextItem.memoTextReadOnly: true +// restoreHeightVisible:false +// } +} From 0691b483b7694397849125c65f3f67d9a232770a Mon Sep 17 00:00:00 2001 From: Jacob Brydolf Date: Mon, 17 Oct 2016 22:43:01 +0200 Subject: [PATCH 4/5] Don't send path as argument on wallet store (windows fix) --- main.qml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/main.qml b/main.qml index f865a2db..5f7035f7 100644 --- a/main.qml +++ b/main.qml @@ -246,8 +246,9 @@ ApplicationWindow { leftPanel.daemonProgress.updateProgress(dCurrentBlock,dTargetBlock); // Store wallet after every refresh. - currentWallet.store(walletPath()) - console.log("Saving to "+walletPath()); + //TODO: Doesn't need path after creation. Change libwalletqt + currentWallet.store("") + console.log("Saving wallet"); isNewWallet = false // initialize transaction history once wallet is initializef first time; From 415594460b88c9008bdf3f8af013364e9ab64dab Mon Sep 17 00:00:00 2001 From: Jacob Brydolf Date: Mon, 17 Oct 2016 22:53:47 +0200 Subject: [PATCH 5/5] remove wizardOpenWallet.qml - not ready yet --- wizard/WizardOpenWallet.qml | 147 ------------------------------------ 1 file changed, 147 deletions(-) delete mode 100644 wizard/WizardOpenWallet.qml diff --git a/wizard/WizardOpenWallet.qml b/wizard/WizardOpenWallet.qml deleted file mode 100644 index b6109f26..00000000 --- a/wizard/WizardOpenWallet.qml +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright (c) 2014-2015, The Monero Project -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without modification, are -// permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, this list of -// conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright notice, this list -// of conditions and the following disclaimer in the documentation and/or other -// materials provided with the distribution. -// -// 3. Neither the name of the copyright holder nor the names of its contributors may be -// used to endorse or promote products derived from this software without specific -// prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL -// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, -// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF -// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -import QtQuick 2.2 -import moneroComponents.WalletManager 1.0 -import moneroComponents.Wallet 1.0 - -import QtQuick.Dialogs 1.2 -import 'utils.js' as Utils - -Item { - opacity: 0 - visible: true - -// Behavior on opacity { -// NumberAnimation { duration: 100; easing.type: Easing.InQuad } -// } - - - // onOpacityChanged: visible = opacity !== 0 - - //! function called each time we display this page - - function onPageOpened(settingsObject) { - checkNextButton() - - fileDialog.open(); - - } - - function onPageClosed(settingsObject) { - settingsObject['account_name'] = "opened wallet"//uiItem.accountNameText - // settingsObject['words'] = uiItem.wordsTexttext - settingsObject['wallet_filename'] = fileDialog.fileUrl - return true; - } - - function checkNextButton() { - // var wordsArray = Utils.lineBreaksToSpaces(uiItem.wordsTextItem.memoText).split(" "); - // wizard.nextButton.enabled = wordsArray.length === 25; - } - - //! function called each time we hide this page - // - - - function createWallet(settingsObject) { - // TODO: create wallet in temporary filename and a) move it to the path specified by user after the final - // page submitted or b) delete it when program closed before reaching final page - - var wallet_filename = oshelper.temporaryFilename(); - if (typeof settingsObject.wallet === 'undefined') { - //var wallet = walletManager.createWallet(wallet_filename, "", settingsObject.language) - var testnet = appWindow.persistentSettings.testnet; - var wallet = walletManager.createWallet(wallet_filename, "", settingsObject.wallet_language, - testnet) - uiItem.wordsTextItem.memoText = wallet.seed - // saving wallet in "global" settings object - // TODO: wallet should have a property pointing to the file where it stored or loaded from - settingsObject.wallet = wallet - } else { - print("wallet already created. we just stepping back"); - } - settingsObject.wallet_filename = wallet_filename - } - - function openWallet(settingsObject){ - - } - - -Rectangle { - border.width: 4 - anchors.fill: parent - clip: true - anchors.top: parent.top - anchors.right: parent.right - anchors.topMargin: 85 - - Text { - visible: true - id: welcomeText - height: 32 - anchors.left: parent.left - anchors.right: parent.right - font.family: "Arial" - font.pixelSize: 28 - //renderType: Text.NativeRendering - color: "#3F3F3F" - wrapMode: Text.Wrap - // hack to implement dynamic translation - // https://wiki.qt.io/How_to_do_dynamic_translation_in_QML - text: qsTr("Welcome") - - } - - FileDialog { - id: fileDialog - title: "Please choose a file" - folder: shortcuts.home - onAccepted: { - console.log("You chose: " + fileDialog.fileUrls) - } - onRejected: { - console.log("Canceled") - Qt.quit() - } - // Component.onCompleted: visible = false - } - } - - -// WizardManageWalletUI { -// id: uiItem -// titleText: qsTr("A new wallet has been created for you") + translationManager.emptyString -// wordsTextTitle: qsTr("This is the 25 word mnemonic for your wallet") + translationManager.emptyString -// wordsTextItem.clipboardButtonVisible: true -// wordsTextItem.tipTextVisible: true -// wordsTextItem.memoTextReadOnly: true -// restoreHeightVisible:false -// } -}