diff --git a/res/zec_qt_wallet_de.ts b/res/zec_qt_wallet_de.ts index fd505b8..e12c1fc 100644 --- a/res/zec_qt_wallet_de.ts +++ b/res/zec_qt_wallet_de.ts @@ -84,7 +84,7 @@ - + Send YOUR_TRANSLATION_HERE @@ -111,23 +111,23 @@ - - - + + + Address YOUR_TRANSLATION_HERE - + Address Book YOUR_TRANSLATION_HERE - - + + Amount YOUR_TRANSLATION_HERE @@ -138,9 +138,9 @@ - - - + + + Memo YOUR_TRANSLATION_HERE @@ -151,530 +151,563 @@ - + Recurring payment + + + + + Every month, starting 12-May-2012, for 6 payments + + + + + Edit Schedule + + + + + Miner Fee YOUR_TRANSLATION_HERE - + 0 YOUR_TRANSLATION_HERE - + Cancel YOUR_TRANSLATION_HERE - + Receive YOUR_TRANSLATION_HERE - + Address Type YOUR_TRANSLATION_HERE - z-Addr(Sapling) - YOUR_TRANSLATION_HERE + YOUR_TRANSLATION_HERE - + t-Addr YOUR_TRANSLATION_HERE - z-Addr(Sprout) - YOUR_TRANSLATION_HERE + YOUR_TRANSLATION_HERE - + New Address YOUR_TRANSLATION_HERE - + Label YOUR_TRANSLATION_HERE - + Update Label YOUR_TRANSLATION_HERE - + Address balance - + Optional YOUR_TRANSLATION_HERE - + Export Private Key YOUR_TRANSLATION_HERE - - Address used + + z-Addr - + + z-Addr(Legacy Sprout) + + + + Transactions YOUR_TRANSLATION_HERE - + zcashd YOUR_TRANSLATION_HERE - + You are currently not mining YOUR_TRANSLATION_HERE - - - - + + + + Loading... YOUR_TRANSLATION_HERE - + Block height YOUR_TRANSLATION_HERE - + Network solution rate YOUR_TRANSLATION_HERE - + Connections YOUR_TRANSLATION_HERE - - - + + + | YOUR_TRANSLATION_HERE - + &File YOUR_TRANSLATION_HERE - + &Help YOUR_TRANSLATION_HERE - + &Apps YOUR_TRANSLATION_HERE - + &Edit YOUR_TRANSLATION_HERE - + E&xit YOUR_TRANSLATION_HERE - + &About YOUR_TRANSLATION_HERE - + &Settings YOUR_TRANSLATION_HERE - + Ctrl+P YOUR_TRANSLATION_HERE - + &Donate YOUR_TRANSLATION_HERE - + Check github.com for &updates YOUR_TRANSLATION_HERE - + Sapling &turnstile YOUR_TRANSLATION_HERE - + Ctrl+A, Ctrl+T YOUR_TRANSLATION_HERE - + &Import private key YOUR_TRANSLATION_HERE - + &Export all private keys YOUR_TRANSLATION_HERE - + &z-board.net YOUR_TRANSLATION_HERE - + Ctrl+A, Ctrl+Z YOUR_TRANSLATION_HERE - + Address &book YOUR_TRANSLATION_HERE - + Ctrl+B YOUR_TRANSLATION_HERE - + &Backup wallet.dat YOUR_TRANSLATION_HERE - - + + Export transactions - + Pay zcash &URI... - + + Connect mobile &app + + + + + Ctrl+M + + + + Tor configuration is available only when running an embedded zcashd. - + Enable Tor - + Connection over Tor has been enabled. To use this feature, you need to restart zec-qt-wallet. - + Disable Tor - + Connection over Tor has been disabled. To fully disconnect from Tor, you need to restart zec-qt-wallet. - + Thanks for supporting zec-qt-wallet! YOUR_TRANSLATION_HERE - + Donate 0.01 YOUR_TRANSLATION_HERE - + to support zec-qt-wallet YOUR_TRANSLATION_HERE - + You are on testnet, your post won't actually appear on z-board.net YOUR_TRANSLATION_HERE - + You need a sapling address with available balance to post YOUR_TRANSLATION_HERE - - + + Computing Tx: YOUR_TRANSLATION_HERE - + The keys were imported. It may take several minutes to rescan the blockchain. Until then, functionality may be limited YOUR_TRANSLATION_HERE - + Private key import rescan finished YOUR_TRANSLATION_HERE - + Error paying zcash URI - + URI should be of the form 'zcash:<addr>?amt=x&memo=y - + Paste Zcash URI - + Could not understand address - + Unknown field in URI: - + Please paste your private keys (z-Addr or t-Addr) here, one per line YOUR_TRANSLATION_HERE - + The keys will be imported into your connected zcashd node YOUR_TRANSLATION_HERE - + Error - + Error exporting transactions, file was not saved - + No wallet.dat YOUR_TRANSLATION_HERE - + Couldn't find the wallet.dat on this computer YOUR_TRANSLATION_HERE - + You need to back it up from the machine zcashd is running on YOUR_TRANSLATION_HERE - + Backup wallet.dat YOUR_TRANSLATION_HERE - + Couldn't backup YOUR_TRANSLATION_HERE - + Couldn't backup the wallet.dat file. YOUR_TRANSLATION_HERE - + You need to back it up manually. YOUR_TRANSLATION_HERE - + These are all the private keys for all the addresses in your wallet YOUR_TRANSLATION_HERE - + Private key for YOUR_TRANSLATION_HERE - + Save File YOUR_TRANSLATION_HERE - + Unable to open file YOUR_TRANSLATION_HERE - - + + Copy address YOUR_TRANSLATION_HERE - - - + + + Copied to clipboard YOUR_TRANSLATION_HERE - + Get private key YOUR_TRANSLATION_HERE - + Shield balance to Sapling YOUR_TRANSLATION_HERE - - + + View on block explorer YOUR_TRANSLATION_HERE - + Migrate to Sapling YOUR_TRANSLATION_HERE - + Copy txid YOUR_TRANSLATION_HERE - + View Memo YOUR_TRANSLATION_HERE - + Reply to - + Created new t-Addr YOUR_TRANSLATION_HERE - + + Creation of new Sprout addresses is deprecated + + + + Address has been previously used - + Address is unused - + Recipient YOUR_TRANSLATION_HERE - + Only z-addresses can have memos YOUR_TRANSLATION_HERE - + Memos can only be used with z-addresses YOUR_TRANSLATION_HERE - + The memo field can only be used with a z-address. YOUR_TRANSLATION_HERE - + doesn't look like a z-address YOUR_TRANSLATION_HERE - + Reply to - + Change from YOUR_TRANSLATION_HERE - + Current balance : - + Balance after this Tx: - + Transaction Error YOUR_TRANSLATION_HERE - + From Address is Invalid YOUR_TRANSLATION_HERE - + Recipient Address YOUR_TRANSLATION_HERE - + is Invalid YOUR_TRANSLATION_HERE - + Amount '%1' is invalid! @@ -693,6 +726,39 @@ doesn't look like a z-address + + MobileAppConnector + + + Connect Mobile App + + + + + Scan this QRCode from your ZecQT companion app to connect your phone + + + + + QR Code + + + + + ZecQT Wallet Companion App + + + + + Disconnect + + + + + TextLabel + + + PrivKey @@ -704,27 +770,27 @@ doesn't look like a z-address QObject - + Attempting autoconnect YOUR_TRANSLATION_HERE - + Starting embedded zcashd YOUR_TRANSLATION_HERE - + zcashd is set to run as daemon YOUR_TRANSLATION_HERE - + Waiting for zcashd YOUR_TRANSLATION_HERE - + You have zcashd set to start as a daemon, which can cause problems with zec-qt-wallet .Please remove the following line from your zcash.conf and restart zec-qt-wallet @@ -732,7 +798,7 @@ daemon=1 YOUR_TRANSLATION_HERE - + Couldn't start the embedded zcashd. Please try restarting. @@ -743,199 +809,226 @@ If all else fails, please run zcashd manually. YOUR_TRANSLATION_HERE - + Couldn't connect to zcashd configured in zcash.conf. Not starting embedded zcashd because --no-embedded was passed YOUR_TRANSLATION_HERE - + + Hide Advanced Config + + + + + Show Advanced Config + + + + + Choose data directory + + + + All Downloads Finished Successfully! YOUR_TRANSLATION_HERE - + Couldn't download params. Please check the help site for more info. YOUR_TRANSLATION_HERE - + The process returned YOUR_TRANSLATION_HERE - - + + Downloading YOUR_TRANSLATION_HERE - + more remaining ) YOUR_TRANSLATION_HERE - + MB of YOUR_TRANSLATION_HERE - + MB at YOUR_TRANSLATION_HERE - + Downloading blocks YOUR_TRANSLATION_HERE - + Block height YOUR_TRANSLATION_HERE - + Syncing YOUR_TRANSLATION_HERE - + Connected YOUR_TRANSLATION_HERE - + testnet: YOUR_TRANSLATION_HERE - + Connected to zcashd YOUR_TRANSLATION_HERE - + zcashd has no peer connections - + There was an error connecting to zcashd. The error was YOUR_TRANSLATION_HERE - + + + The transaction with id YOUR_TRANSLATION_HERE - + + + failed. The error was YOUR_TRANSLATION_HERE - + + + failed YOUR_TRANSLATION_HERE - + + + Tx YOUR_TRANSLATION_HERE - + tx computing. This can take several minutes. YOUR_TRANSLATION_HERE - + Update Available - + A new release v%1 is available! You have v%2. Would you like to visit the releases page? - + + No updates available - + + You already have the latest release v%1 - + Please wait for zec-qt-wallet to exit YOUR_TRANSLATION_HERE - + Waiting for zcashd to exit YOUR_TRANSLATION_HERE - + failed. Please check the help site for more info YOUR_TRANSLATION_HERE - + zcashd error YOUR_TRANSLATION_HERE - + A manual connection was requested, but the settings are not configured. Please set the host/port and user/password in the Edit->Settings menu. YOUR_TRANSLATION_HERE - + Could not connect to zcashd configured in settings. Please set the host/port and user/password in the Edit->Settings menu. YOUR_TRANSLATION_HERE - + Authentication failed. The username / password you specified was not accepted by zcashd. Try changing it in the Edit->Settings menu YOUR_TRANSLATION_HERE - + Your zcashd is starting up. Please wait. YOUR_TRANSLATION_HERE - - + + Connection Error YOUR_TRANSLATION_HERE - - + + + + Transaction Error YOUR_TRANSLATION_HERE - + There was an error sending the transaction. The error was: YOUR_TRANSLATION_HERE - - + + No Connection YOUR_TRANSLATION_HERE @@ -1006,7 +1099,7 @@ You either have unconfirmed funds or the balance is too low for an automatic mig YOUR_TRANSLATION_HERE - + Computing Tx: YOUR_TRANSLATION_HERE @@ -1031,6 +1124,29 @@ You either have unconfirmed funds or the balance is too low for an automatic mig YOUR_TRANSLATION_HERE + + RecurringDialog + + + Dialog + + + + + Add + + + + + Edit + + + + + Delete + + + Settings @@ -1265,6 +1381,102 @@ You either have unconfirmed funds or the balance is too low for an automatic mig YOUR_TRANSLATION_HERE + + createZcashConf + + + Configure zcash.conf + + + + + Show Advanced Configuration + + + + + Your zcash node will be configured for you automatically + + + + + Use custom datadir + + + + + Please chose a directory to store your wallet.dat and blockchain + + + + + Choose directory + + + + + Connect over Tor + + + + + Please note that you'll need to already have a Tor service configured on port 9050 + + + + + newRecurringDialog + + + Edit Schedule + + + + + Schedule + + + + + Payment Description + + + + + TextLabel + + + + + From + YOUR_TRANSLATION_HERE + + + + Number of payments + + + + + Amount + YOUR_TRANSLATION_HERE + + + + Next Payment + + + + + To + YOUR_TRANSLATION_HERE + + + + Memo + YOUR_TRANSLATION_HERE + + zboard diff --git a/res/zec_qt_wallet_es.ts b/res/zec_qt_wallet_es.ts index d7f69e0..dbcaa7b 100644 --- a/res/zec_qt_wallet_es.ts +++ b/res/zec_qt_wallet_es.ts @@ -84,7 +84,7 @@ - + Send Envía @@ -111,23 +111,23 @@ - - - + + + Address Dirección - + Address Book Directorio - - + + Amount Monto @@ -138,9 +138,9 @@ - - - + + + Memo Memo @@ -151,530 +151,563 @@ - + Recurring payment + + + + + Every month, starting 12-May-2012, for 6 payments + + + + + Edit Schedule + + + + + Miner Fee Cuota Minera - + 0 0 - + Cancel Cancelar - + Receive Recibir - + Address Type Tipo De Dirección - z-Addr(Sapling) - z-Addr(Sapling) + z-Addr(Sapling) - + t-Addr t-Addr - z-Addr(Sprout) - z-Addr(Sprout) + z-Addr(Sprout) - + New Address Nueva Dirección - + Label Etiqueta - + Update Label Actualizar Etiqueta - + Address balance - + Optional Opcional - + Export Private Key Exportar Clave Privada - - Address used + + z-Addr - + + z-Addr(Legacy Sprout) + + + + Transactions Transacciones - + zcashd zcashd - + You are currently not mining Actualmente no estas minando - - - - + + + + Loading... Cargando... - + Block height Altura del bloque - + Network solution rate Rapidez de solución de red - + Connections Conexiones - - - + + + | | - + &File &Archivo - + &Help &Ayuda - + &Apps &Apps - + &Edit &Editar - + E&xit Salir - + &About &Acerca de - + &Settings &Configuración - + Ctrl+P Ctrl+P - + &Donate &Donar - + Check github.com for &updates Consulte las actualizaciones en github.com - + Sapling &turnstile Sapling &turnstile - + Ctrl+A, Ctrl+T Ctrl+A, Ctrl+T - + &Import private key Importar clave privada - + &Export all private keys Exportar todas las claves privadas - + &z-board.net z-board.net - + Ctrl+A, Ctrl+Z Ctrl+A, Ctrl+Z - + Address &book Directorio - + Ctrl+B Ctrl+B - + &Backup wallet.dat Respaldar wallet.dat - - + + Export transactions - + Pay zcash &URI... - + + Connect mobile &app + + + + + Ctrl+M + + + + Tor configuration is available only when running an embedded zcashd. - + Enable Tor - + Connection over Tor has been enabled. To use this feature, you need to restart zec-qt-wallet. - + Disable Tor - + Connection over Tor has been disabled. To fully disconnect from Tor, you need to restart zec-qt-wallet. - + Thanks for supporting zec-qt-wallet! Gracias por apoyar zec-qt-wallet! - + Donate 0.01 Donar 0.01 - + to support zec-qt-wallet para apoyar zec-qt-wallet - + You are on testnet, your post won't actually appear on z-board.net Estas en testnet, tu publicación no aparecerá en z-board.net - + You need a sapling address with available balance to post Necesitas una dirección Sapling con saldo disponible para publicar - - + + Computing Tx: Calculando Tx: - + The keys were imported. It may take several minutes to rescan the blockchain. Until then, functionality may be limited Las claves fueron importadas. Puede que se demore varios minutos en volver a escanear el blockchain. Hasta entonces, la funcionalidad puede ser limitada. - + Private key import rescan finished Importación de clave privada re-escaneada finalizada - + Error paying zcash URI - + URI should be of the form 'zcash:<addr>?amt=x&memo=y - + Paste Zcash URI - + Could not understand address - + Unknown field in URI: - + Please paste your private keys (z-Addr or t-Addr) here, one per line Por favor pegue sus claves privadas (z-Addr o t-Addr) aqui, una por línea - + The keys will be imported into your connected zcashd node Las claves serán importadas en su nodo zcashd conectado - + Error - + Error exporting transactions, file was not saved - + No wallet.dat Sin wallet.dat - + Couldn't find the wallet.dat on this computer No se pudo encontrar wallet.dat en esta computadora - + You need to back it up from the machine zcashd is running on Necesitas hacer una copia de seguridad de la computadora en la que se está ejecutando zcashd - + Backup wallet.dat Respaldar wallet.dat - + Couldn't backup No se pudo hacer una copia de seguridad - + Couldn't backup the wallet.dat file. No se pudo hacer copia de seguridad de wallet.dat - + You need to back it up manually. Necesitas hacer una copia de seguridad manualmente. - + These are all the private keys for all the addresses in your wallet Estas son todas las claves privadas para todas las direcciones en tu billetera - + Private key for Clave privada para - + Save File Guardar Archivo - + Unable to open file No es posible abrir el archivo - - + + Copy address Copiar dirección - - - + + + Copied to clipboard Copiado al portapapeles - + Get private key Obtener clave privada - + Shield balance to Sapling Proteger saldo a Sapling - - + + View on block explorer Ver en el explorador de bloques - + Migrate to Sapling Migrar a Sapling - + Copy txid Copiar txid - + View Memo Ver Memo - + Reply to - + Created new t-Addr Nuevo dirección t-Addr creada - + + Creation of new Sprout addresses is deprecated + + + + Address has been previously used - + Address is unused - + Recipient Destinatario - + Only z-addresses can have memos Solo las direcciones z-Addr pueden tener memos - + Memos can only be used with z-addresses Los memos solo se pueden usar con direcciones z-Addr - + The memo field can only be used with a z-address. El campo memo solo puede ser usado con una direccion z-Addr - + doesn't look like a z-address no parece una direccion z-Addr - + Reply to - + Change from Cambiar de - + Current balance : - + Balance after this Tx: - + Transaction Error Error de Transacción - + From Address is Invalid Dirección de envio inválida - + Recipient Address Dirección de Destinatario - + is Invalid es Inválida - + Amount '%1' is invalid! @@ -693,6 +726,39 @@ doesn't look like a z-address + + MobileAppConnector + + + Connect Mobile App + + + + + Scan this QRCode from your ZecQT companion app to connect your phone + + + + + QR Code + + + + + ZecQT Wallet Companion App + + + + + Disconnect + + + + + TextLabel + + + PrivKey @@ -704,161 +770,186 @@ doesn't look like a z-address QObject - - + + No Connection Sin Conexión - + Downloading blocks Descargando Bloques - + Block height Altura del bloque - + Syncing Sincronizando - + Connected Conectando - + testnet: testnet: - + Connected to zcashd Conectando a zcashd - + zcashd has no peer connections - + There was an error connecting to zcashd. The error was Hubo un error al conectar con zcashd. El error fue - + + + The transaction with id La transacción con id - + + + failed. The error was falló. El error fue - + + + Tx Tx - + + + failed falló - + tx computing. This can take several minutes. tx computando. Esto puede tomar varios minutos. - + Update Available - + A new release v%1 is available! You have v%2. Would you like to visit the releases page? - + + No updates available - + + You already have the latest release v%1 - + Please wait for zec-qt-wallet to exit Por favor, espere que zec-qt-wallet salga - + Waiting for zcashd to exit Esperando que zcashd salga - + Attempting autoconnect Intentando de autoconectarse - + Starting embedded zcashd Iniciando zcashd incorporado - + zcashd is set to run as daemon zcashd está configurado para ejecutarse como demonio - + Waiting for zcashd Esperando zcashd - + + Hide Advanced Config + + + + + Show Advanced Config + + + + + Choose data directory + + + + All Downloads Finished Successfully! Todas Las Descargas Terminaron Exitosamente! - + Couldn't download params. Please check the help site for more info. No se pudieron descargar los parámetros. Por favor, consulta el sitio de ayuda para mayor información. - - + + Downloading Descargando - + more remaining ) faltan )) - + MB of MB de - + MB at MB a - + A manual connection was requested, but the settings are not configured. Please set the host/port and user/password in the Edit->Settings menu. @@ -867,7 +958,7 @@ Please set the host/port and user/password in the Edit->Settings menu. - + Could not connect to zcashd configured in settings. Please set the host/port and user/password in the Edit->Settings menu. @@ -877,18 +968,20 @@ Por favor, especificar el host/puerta y usario/contraseña en el menú Editar-&g - - + + + + Transaction Error Error De Transacción - + failed. Please check the help site for more info falló. Por favor, consulte el sitio de ayuda para más información - + You have zcashd set to start as a daemon, which can cause problems with zec-qt-wallet .Please remove the following line from your zcash.conf and restart zec-qt-wallet @@ -898,7 +991,7 @@ Por favor, eliminar la siguente linea de zcashd.conf y reinicia zec-qt-wallet daemon=1 - + Couldn't start the embedded zcashd. Please try restarting. @@ -914,12 +1007,12 @@ Si todo falla, por favor ejecutar zcashd manualmente. - + The process returned El proceso devuelto - + Couldn't connect to zcashd configured in zcash.conf. Not starting embedded zcashd because --no-embedded was passed @@ -928,28 +1021,28 @@ Not starting embedded zcashd because --no-embedded was passed No iniciaré zcashd incorporado porque la opcion --no-embedded fue dada. - + zcashd error error de zcashd - + Authentication failed. The username / password you specified was not accepted by zcashd. Try changing it in the Edit->Settings menu Autenticación fallida. El usario/contraseña que epecificó no fue aceptado por zcashd. Intenta cambiarlo en el menu Editar->Configuración. - + Your zcashd is starting up. Please wait. Tu zcashd se está iniciando. Por favor espera. - - + + Connection Error Error de conexión - + There was an error sending the transaction. The error was: Hubo un error al enviar la transacción. El error fue: @@ -972,7 +1065,7 @@ El saldo es insuficiente para una migración automática. - + Computing Tx: Calculando Tx: @@ -1047,6 +1140,29 @@ El saldo es insuficiente para una migración automática. Eliminar etiqueta + + RecurringDialog + + + Dialog + + + + + Add + + + + + Edit + + + + + Delete + + + Settings @@ -1281,6 +1397,102 @@ El saldo es insuficiente para una migración automática. Estás utilizando una tarifa personalizada. Como las tarifas son transparentes estás perdiendo algo de privacidad. Por favor, solo haz esto si sabes lo que estás haciendo! + + createZcashConf + + + Configure zcash.conf + + + + + Show Advanced Configuration + + + + + Your zcash node will be configured for you automatically + + + + + Use custom datadir + + + + + Please chose a directory to store your wallet.dat and blockchain + + + + + Choose directory + + + + + Connect over Tor + + + + + Please note that you'll need to already have a Tor service configured on port 9050 + + + + + newRecurringDialog + + + Edit Schedule + + + + + Schedule + + + + + Payment Description + + + + + TextLabel + + + + + From + Desde + + + + Number of payments + + + + + Amount + Monto + + + + Next Payment + + + + + To + A + + + + Memo + Memo + + zboard diff --git a/res/zec_qt_wallet_fr.qm b/res/zec_qt_wallet_fr.qm index 0b575d8..cef7fde 100644 Binary files a/res/zec_qt_wallet_fr.qm and b/res/zec_qt_wallet_fr.qm differ diff --git a/res/zec_qt_wallet_fr.ts b/res/zec_qt_wallet_fr.ts index a263e31..d786d72 100644 --- a/res/zec_qt_wallet_fr.ts +++ b/res/zec_qt_wallet_fr.ts @@ -84,7 +84,7 @@ - + Send Envoyer @@ -111,23 +111,23 @@ - - - + + + Address Adresse - + Address Book Carnet d'adresses - - + + Amount Montant @@ -138,9 +138,9 @@ - - - + + + Memo Mémo @@ -151,535 +151,572 @@ - + Recurring payment + + + + + Every month, starting 12-May-2012, for 6 payments + + + + + Edit Schedule + + + + + Miner Fee I replaced this with "transaction fee" which sounds much better in French.. I hope it's correct too.. Frais de transaction - + 0 0 - + Cancel Annuler - + Receive Recevoir - + Address Type Type d'adresse - z-Addr(Sapling) - Adresse-z(Sapling) + Adresse-z(Sapling) - + t-Addr Adresse-t - z-Addr(Sprout) - Adresse-z(Sprout) + Adresse-z(Sprout) - + New Address Nouvelle Adresse - + Label Etiquette - + Update Label Mettre à jour l'étiquette - + Address balance Solde de l'adresse - + Optional Optionnel - + Export Private Key Exporter la clef privée - Address used + Adresse utilisée + + + + z-Addr - + + z-Addr(Legacy Sprout) + + + + Transactions Transactions - + zcashd zcashd - + You are currently not mining Vous ne minez pas à présent - - - - + + + + Loading... Chargement... - + Block height Hauteur de block - + Network solution rate Taux de solution du réseau - + Connections Connections - - - + + + | | - + &File &Fichier - + &Help &Aide - + &Apps &Applications - + &Edit &Edition - + E&xit Q&uiter - + &About &À propos - + &Settings &Préférences - + Ctrl+P Ctrl+P - + &Donate &Faire un don - + Check github.com for &updates Vérifier &github.com pour des mises à jour - + Sapling &turnstile Sapling &turnstile - + Ctrl+A, Ctrl+T Ctrl+A, Ctrl+T - + &Import private key &Importer une clef privée - + &Export all private keys &Exporter toutes les clefs privées - + &z-board.net &z-board.net - + Ctrl+A, Ctrl+Z Ctrl+A, Ctrl+Z - + Address &book Carnet &d'adresse - + Ctrl+B Ctrl+B - + &Backup wallet.dat &Sauvegarder "wallet.dat" - - + + Export transactions Exporter les transactions - + Pay zcash &URI... + PAyer une URI zcash + + + + Connect mobile &app - + + Ctrl+M + + + + Tor configuration is available only when running an embedded zcashd. La configuration de Tor est disponible uniquement lors de l'exécution du processus zcashd intégré. - + Enable Tor Activer Tor - + Connection over Tor has been enabled. To use this feature, you need to restart zec-qt-wallet. La connection via Tor est activée. Afin d'utiliser cette fonctionnalité, veuillez redémarer zec-qt-wallet. - + Disable Tor Désactiver Tor - + Connection over Tor has been disabled. To fully disconnect from Tor, you need to restart zec-qt-wallet. La connection via Tor a été désactivée. Afin de complètement se déconnecter de Tor, vous devez redémarrer zec-qt-wallet. - + Thanks for supporting zec-qt-wallet! Merci de supporter zec-qt-wallet ! - + Donate 0.01 Donner 0.01 - + to support zec-qt-wallet pour supporter zec-qt-wallet - + You are on testnet, your post won't actually appear on z-board.net Vous êtes connecté au réseau de test. Votre message n'apparaîtra donc pas sur z-board.net - + You need a sapling address with available balance to post Vous avez besoin d'une adresse de type Sapling avec un solde suffisant pour pouvoir poster - - + + Computing Tx: Calcul de la transaction en cours: - + The keys were imported. It may take several minutes to rescan the blockchain. Until then, functionality may be limited Les clefs ont été importées. Cela peut prendre quelque minutes pour rescanner la blockchain. Durant cette période, les fonctionnalités peuvent être limitées - + Private key import rescan finished Rescan de l'import de la clef privée achevé - + Error paying zcash URI - + Erreur lors du payement du URI zcash - + URI should be of the form 'zcash:<addr>?amt=x&memo=y - + Le format URI doit être comme suit: 'zcash:<addr>?amt=x&memo=y - + Paste Zcash URI - + Coller le URI Zcash - + Could not understand address - + Adresse non valide - + Unknown field in URI: - + Champ inconnu dans le URI - + Please paste your private keys (z-Addr or t-Addr) here, one per line Veuillez coller votre clef privée (Adresse-z ou Adresse-t) ici. Une clef par ligne - + The keys will be imported into your connected zcashd node Les clef seront importées dans votre noeud zcashd connecté - + Error Erreur - + Error exporting transactions, file was not saved Erreur lors de l'exportation des transactions. Le fichier n'a pas été sauvegardé. - + No wallet.dat Pas de fichier "wallet.dat" - + Couldn't find the wallet.dat on this computer Impossible de trouver le fichier "wallet.dat" sur cet ordinateur - + You need to back it up from the machine zcashd is running on Vous devez effectuer la sauvegarde depuis la machine sur laquelle zcashd est en cours d'exécution - + Backup wallet.dat Sauvegarder wallet.dat - + Couldn't backup La sauvegarde n'a pas pu être effectuée - + Couldn't backup the wallet.dat file. Impossible de sauvegarder le fichier "wallet.dat". - + You need to back it up manually. Vous devez le sauvegarder manuellement. - + These are all the private keys for all the addresses in your wallet Ce sont toutes les clés privées pour toutes les adresses de votre portefeuille - + Private key for Clef privée pour - + Save File Sauvegarder le fichier - + Unable to open file mpossible d'ouvrir le fichier - - + + Copy address Copier l'adresse - - - + + + Copied to clipboard Copié dans le presse-papier - + Get private key Obtenir la clef privée - + Shield balance to Sapling Rendre privé le solde vers Sapling - - + + View on block explorer Voir dans l'explorateur de block - + Migrate to Sapling Migrer vers Sapling - + Copy txid Copier l'ID de transaction - + View Memo Voir le mémo - + Reply to Répondre à - + Created new t-Addr Nouvelle Adresse-t créée - + + Creation of new Sprout addresses is deprecated + + + + Address has been previously used L'adresse a été utilisée précédemment. - + Address is unused L'adresse est inutilisée. - + Recipient Destinataire - + Only z-addresses can have memos Seules les Adresses-z peuvent avoir un mémo - + Memos can only be used with z-addresses Les mémos peuvent seulement être utilisés avec des Adresses-z - + The memo field can only be used with a z-address. Le champs mémo ne peut uniquement être utilisé avec une adresse-z. - + doesn't look like a z-address Cette adresse ne semble pas être de type adresse-z - + Reply to Répondre à - + Change from Changer de - + Current balance : Solde actuel : - + Balance after this Tx: Solde après cette Tx: - + Transaction Error Erreur de transaction - + From Address is Invalid L'adresse de l'émetteur est invalide - + Recipient Address Adresse du destinataire - + is Invalid est invalide - + Amount '%1' is invalid! - + Le montant '%1' est invalide. @@ -696,6 +733,39 @@ Cette adresse ne semble pas être de type adresse-z Inclure l'adresse de réponse + + MobileAppConnector + + + Connect Mobile App + + + + + Scan this QRCode from your ZecQT companion app to connect your phone + + + + + QR Code + + + + + ZecQT Wallet Companion App + + + + + Disconnect + + + + + TextLabel + + + PrivKey @@ -707,27 +777,27 @@ Cette adresse ne semble pas être de type adresse-z QObject - + Attempting autoconnect Tentative de connection automatique - + Starting embedded zcashd Démarrage de zcashd intégré - + zcashd is set to run as daemon zcashd est configuré pour s'exécuter en tant que démon - + Waiting for zcashd En attente de zcashd - + You have zcashd set to start as a daemon, which can cause problems with zec-qt-wallet .Please remove the following line from your zcash.conf and restart zec-qt-wallet @@ -738,7 +808,7 @@ daemon=1 daemon=1 - + Couldn't start the embedded zcashd. Please try restarting. @@ -755,157 +825,182 @@ Si vous avez précédemment démarré zcashd avec des arguments, vous devrez peu Si tout échoue, exécutez zcashd manuellement. - + Couldn't connect to zcashd configured in zcash.conf. Not starting embedded zcashd because --no-embedded was passed Le démarrage de zcashd n'a pas eu lieu car l'argument --no-embedded a été utilisé au lancement - + + Hide Advanced Config + + + + + Show Advanced Config + + + + + Choose data directory + + + + All Downloads Finished Successfully! Tous les téléchargements terminés avec succès ! - + Couldn't download params. Please check the help site for more info. Impossible de télécharger les paramètres. Veuillez vous rendre sur le site d'aide pour plus d'info. - + The process returned Le processus a renvoyé - - + + Downloading Téléchargement en cours - + more remaining ) restant) - + MB of MB de - + MB at MB à - + Downloading blocks Blocs en cours de téléchargement - + Block height Hauteur de bloc - + Syncing Synchronisation - + Connected Connecté - + testnet: réseau test: - + Connected to zcashd Connecté à zcashd - + zcashd has no peer connections - + zcashd n'a aucune connexion à un pair - + There was an error connecting to zcashd. The error was Une erreur est survenue lors de la connection à zcashd. L'erreur est - + + + The transaction with id La transaction avec ID - + + + failed. The error was a échoué. L'erreur était - + + + failed a échoué - + + + Tx Tx - + tx computing. This can take several minutes. tx en cours de calcul. Ceci peut prendre quelques minutes. - + Update Available - + MàJ disponible - + A new release v%1 is available! You have v%2. Would you like to visit the releases page? - + Voulez-vous visiter la page des nouvelles versions ? - + + No updates available - + Pas de MàJ disponible - + + You already have the latest release v%1 - + Vous utilisez déjà la dernière version v%1 - + Please wait for zec-qt-wallet to exit Veuillez patienter. Fermeture de zec-qt-wallet en cours - + Waiting for zcashd to exit Attente de la fermeture de zcashd - + failed. Please check the help site for more info a échoué. Veuillez vous rendre sur le site d'aide pour plus d'info - + zcashd error erreur zcashd - + A manual connection was requested, but the settings are not configured. Please set the host/port and user/password in the Edit->Settings menu. @@ -914,7 +1009,7 @@ Please set the host/port and user/password in the Edit->Settings menu. - + Could not connect to zcashd configured in settings. Please set the host/port and user/password in the Edit->Settings menu. @@ -923,35 +1018,37 @@ Please set the host/port and user/password in the Edit->Settings menu. - + Authentication failed. The username / password you specified was not accepted by zcashd. Try changing it in the Edit->Settings menu Authentification échouée. Le nom d'utilisateur / mot de passe que vous avez spécifié n'a pas été accepté par zcashd. Essayez de le changer dans le menu Edition-> Préférences - + Your zcashd is starting up. Please wait. Votre zcashd est en cours de démarrage. Veuillez patienter. - - + + Connection Error Erreur de connection - - + + + + Transaction Error Erreur de transaction - + There was an error sending the transaction. The error was: Une erreur est survenue en envoyant la transaction. L'erreur est: - - + + No Connection Pas de connection @@ -973,22 +1070,22 @@ Veuillez configurer l'hôte/port et utilisateur/mot de passe dans le menu E Import Address Book - + Importer le carnet d'adresses Unable to open file - mpossible d'ouvrir le fichier + Impossible d'ouvrir le fichier Address Book Import Done - + Import du carnet d'adresses terminé Imported %1 new Address book entries - + %1 nouvelle(s) entrée(s) importée(s) dans le carnet d'adresses. @@ -1023,7 +1120,7 @@ You either have unconfirmed funds or the balance is too low for an automatic mig Vous avez soit des fonds non confirmés soit le solde est trop petit pour une migration automatique. - + Computing Tx: Calcul de Tx en cours: @@ -1048,6 +1145,29 @@ Vous avez soit des fonds non confirmés soit le solde est trop petit pour une mi Montant + + RecurringDialog + + + Dialog + + + + + Add + + + + + Edit + + + + + Delete + + + Settings @@ -1246,7 +1366,7 @@ Vous avez soit des fonds non confirmés soit le solde est trop petit pour une mi Import Address Book - + Importer de carnet d'adresses @@ -1269,7 +1389,7 @@ Vous avez soit des fonds non confirmés soit le solde est trop petit pour une mi zcashd doesn't seem to have any peers. You might not be connected to the internet, so this Transaction might not work. - + zcashd semble n'avoir aucune connexion à un autre pair. Comme vous n'êtes peut-être pas connecté à Internet, cette transaction pourrait ne pas fonctionner. @@ -1282,6 +1402,102 @@ Vous avez soit des fonds non confirmés soit le solde est trop petit pour une mi Vous appliquez des frais personnalisés. Comme les frais sont transparents, vous diminuez votre caractère privé. Veuillez seulement utiliser ceci si vous êtes sûr de ce que vous faites ! + + createZcashConf + + + Configure zcash.conf + + + + + Show Advanced Configuration + + + + + Your zcash node will be configured for you automatically + + + + + Use custom datadir + + + + + Please chose a directory to store your wallet.dat and blockchain + + + + + Choose directory + + + + + Connect over Tor + + + + + Please note that you'll need to already have a Tor service configured on port 9050 + + + + + newRecurringDialog + + + Edit Schedule + + + + + Schedule + + + + + Payment Description + + + + + TextLabel + + + + + From + De + + + + Number of payments + + + + + Amount + Montant + + + + Next Payment + + + + + To + À + + + + Memo + Mémo + + zboard diff --git a/res/zec_qt_wallet_pt.ts b/res/zec_qt_wallet_pt.ts index 60cecf2..464a70f 100644 --- a/res/zec_qt_wallet_pt.ts +++ b/res/zec_qt_wallet_pt.ts @@ -84,7 +84,7 @@ - + Send Enviar @@ -111,23 +111,23 @@ - - - + + + Address Endereço - + Address Book Agenda - - + + Amount Quantidade @@ -138,9 +138,9 @@ - - - + + + Memo Anexar recado @@ -151,532 +151,565 @@ - + Recurring payment + + + + + Every month, starting 12-May-2012, for 6 payments + + + + + Edit Schedule + + + + + Miner Fee Taxa de mineração - + 0 0 - + Cancel Cancelar - + Receive Receber - + Address Type Tipo de Endereço - z-Addr(Sapling) - z-Addr(Sapling) + z-Addr(Sapling) - + t-Addr t-Addr - z-Addr(Sprout) - z-Addr(Sprout) + z-Addr(Sprout) - + New Address Novo Endereço - + Label Etiqueta - + Update Label Atualizar - + Address balance - + Optional Opcional - + Export Private Key Exportar Chave Privada - - Address used + + z-Addr - + + z-Addr(Legacy Sprout) + + + + Transactions Transações - + zcashd zcashd - + You are currently not mining Você não está minerando atualmente - - - - + + + + Loading... Carregando... - + Block height Altura do Bloco - + Network solution rate Taxa de soluções da rede - + Connections Conexões - - - + + + | | - + &File &Arquivo - + &Help &Ajuda - + &Apps &Aplicações - + &Edit &Editar - + E&xit Sair - + &About &Sobre - + &Settings &Preferências - + Ctrl+P Ctrl+P - + &Donate &Doar - + Check github.com for &updates &Checar github.com por atualizações - + Sapling &turnstile Sapling &turnstile - + Ctrl+A, Ctrl+T Ctrl+A, Ctrl+T - + &Import private key &Importar chave privada - + &Export all private keys &Exportar todas as chaves privadas - + &z-board.net &z-board.net - + Ctrl+A, Ctrl+Z Ctrl+A, Ctrl+Z - + Address &book &Agenda de Endereços - + Ctrl+B Ctrl+B - + &Backup wallet.dat &Salvar wallet.dat - - + + Export transactions - + Pay zcash &URI... - + + Connect mobile &app + + + + + Ctrl+M + + + + Tor configuration is available only when running an embedded zcashd. - + Enable Tor - + Connection over Tor has been enabled. To use this feature, you need to restart zec-qt-wallet. - + Disable Tor - + Connection over Tor has been disabled. To fully disconnect from Tor, you need to restart zec-qt-wallet. - + Thanks for supporting zec-qt-wallet! Obrigado por apoiar a zec-qt-wallet! - + Donate 0.01 Doar 0.01 - + to support zec-qt-wallet para apoiar zec-qt-wallet - + You are on testnet, your post won't actually appear on z-board.net Você está na testnet, seu post não aparecerá no z-board.net - + You need a sapling address with available balance to post Você precisa de um endereço sapling com saldo disponível para postar - - + + Computing Tx: Gerando Tx: - + The keys were imported. It may take several minutes to rescan the blockchain. Until then, functionality may be limited Chaves importadas. Pode demorar alguns minutos para re-escanear a blockchain. Até lá, funcionalidades poderão estar limitadas - + Private key import rescan finished Re-escan de chave privada completo - + Error paying zcash URI - + URI should be of the form 'zcash:<addr>?amt=x&memo=y - + Paste Zcash URI - + Could not understand address - + Unknown field in URI: - + Please paste your private keys (z-Addr or t-Addr) here, one per line Coloque sua(s) chave(s) privadas (z-Addr ou t-Addr) aqui, uma por linha - + The keys will be imported into your connected zcashd node As chaves serão importadas em seu nó zcashd conectado - + Error - + Error exporting transactions, file was not saved - + No wallet.dat Nenhum wallet.data - + Couldn't find the wallet.dat on this computer Não foi localizado o wallet.dat nesse computador - + You need to back it up from the machine zcashd is running on Você precisar salvar a partir da máquina que zcashd está rodando - + Backup wallet.dat Salvar wallet.dat - + Couldn't backup Não foi possível salvar - + Couldn't backup the wallet.dat file. Não foi possível salvar o arquivo wallet.dat. - + You need to back it up manually. Você precisar salvá-lo manualmente. - + These are all the private keys for all the addresses in your wallet YOUR_TRANSLATION_HERE - + Private key for Chave privada para - + Save File Salvar Arquivo - + Unable to open file Não foi possível abrir o arquivo - - + + Copy address Copiar endereço - - - + + + Copied to clipboard Copiado - + Get private key Obter chave privada - + Shield balance to Sapling Blindar saldo para Sapling - - + + View on block explorer Ver no explorador de blocos - + Migrate to Sapling Migrar para Sapling - + Copy txid Copiar txid - + View Memo Ver Recado - + Reply to - + Created new t-Addr Criar novo t-Addr - + + Creation of new Sprout addresses is deprecated + + + + Address has been previously used - + Address is unused - + Recipient Destinatário - + Only z-addresses can have memos Apenas z-Addresses podem conter recados - + Memos can only be used with z-addresses Recados só podem ser anexados com z-Addresses - + The memo field can only be used with a z-address. O campo de recado só pode ser usado junto com z-Addresses. - + doesn't look like a z-address não se parece com um z-Address - + Reply to - + Change from Troco de - + Current balance : - + Balance after this Tx: - + Transaction Error Erro na Transação - + From Address is Invalid Endereço de partida inválido - + Recipient Address Endereço destinatário - + is Invalid é Inválido - + Amount '%1' is invalid! @@ -695,6 +728,39 @@ não se parece com um z-Address + + MobileAppConnector + + + Connect Mobile App + + + + + Scan this QRCode from your ZecQT companion app to connect your phone + + + + + QR Code + + + + + ZecQT Wallet Companion App + + + + + Disconnect + + + + + TextLabel + + + PrivKey @@ -706,27 +772,27 @@ não se parece com um z-Address QObject - + Attempting autoconnect Tentando conectar-se automaticamente - + Starting embedded zcashd Iniciando zcashd acoplado - + zcashd is set to run as daemon erro no zcashd - + Waiting for zcashd Esperando pelo zcashd - + You have zcashd set to start as a daemon, which can cause problems with zec-qt-wallet .Please remove the following line from your zcash.conf and restart zec-qt-wallet @@ -736,7 +802,7 @@ daemon=1 daemon=1 - + Couldn't start the embedded zcashd. Please try restarting. @@ -751,7 +817,7 @@ Se você iniciou zcashd anteriormente com parâmetros customizados você pode pr Se ainda assim não der certo, por favor rode zcashd manualmente. - + Couldn't connect to zcashd configured in zcash.conf. Not starting embedded zcashd because --no-embedded was passed @@ -760,150 +826,175 @@ Not starting embedded zcashd because --no-embedded was passed Não iniciando zcashd acoplado porque nenhum foi passado como parâmetro - + + Hide Advanced Config + + + + + Show Advanced Config + + + + + Choose data directory + + + + All Downloads Finished Successfully! Todos os downloads terminaram com sucesso! - + Couldn't download params. Please check the help site for more info. Não foi possível baixar os parâmetros. Por favor, verifique o site de ajuda para mais informações. - + The process returned O processo retornou - - + + Downloading Baixando - + more remaining ) faltando ) - + MB of MB de - + MB at MB a - + Downloading blocks Baixando blocos - + Block height Altura do bloco - + Syncing Sincronizando - + Connected Conectado - + testnet: testnet: - + Connected to zcashd Conectado ao zcashd - + zcashd has no peer connections - + There was an error connecting to zcashd. The error was Ocorreu um erro conectando ao zcashd. O erro foi - + + + The transaction with id A transação com id - + + + failed. The error was falhou. O erro foi - + + + failed falhou - + + + Tx Tx - + tx computing. This can take several minutes. gerando transação. Isso pode levar alguns minutos. - + Update Available - + A new release v%1 is available! You have v%2. Would you like to visit the releases page? - + + No updates available - + + You already have the latest release v%1 - + Please wait for zec-qt-wallet to exit Por favor, espera zec-qt-wallet finalizar - + Waiting for zcashd to exit Esperando zcashd finalizar - + failed. Please check the help site for more info falhou. Por favor, cheque o site de ajuda para mais informações - + zcashd error erro no zcashd - + A manual connection was requested, but the settings are not configured. Please set the host/port and user/password in the Edit->Settings menu. @@ -912,7 +1003,7 @@ Please set the host/port and user/password in the Edit->Settings menu. - + Could not connect to zcashd configured in settings. Please set the host/port and user/password in the Edit->Settings menu. @@ -921,35 +1012,37 @@ Please set the host/port and user/password in the Edit->Settings menu. - + Authentication failed. The username / password you specified was not accepted by zcashd. Try changing it in the Edit->Settings menu Autenticação falhou. O usuário/senha especificado não foi aceitado pelo zcashd. Tente alterá-los em Editar->Preferências - + Your zcashd is starting up. Please wait. Seu zcashd está iniciando. Por favor aguarde. - - + + Connection Error Erro na Conexão - - + + + + Transaction Error Erro na transação - + There was an error sending the transaction. The error was: Ocorreu um erro enviando a transação. O erro foi: - - + + No Connection Sem Conexão @@ -1021,7 +1114,7 @@ You either have unconfirmed funds or the balance is too low for an automatic mig Você possui fundos não confirmados ou o saldo é muito baixo para uma migração automática. - + Computing Tx: Gerando Tx: @@ -1046,6 +1139,29 @@ Você possui fundos não confirmados ou o saldo é muito baixo para uma migraç Quantidade + + RecurringDialog + + + Dialog + + + + + Add + + + + + Edit + + + + + Delete + + + Settings @@ -1280,6 +1396,102 @@ Você possui fundos não confirmados ou o saldo é muito baixo para uma migraç Você está usando uma taxa customizada. Como as taxas são transparentes, você pode estar comprometendo sua privacidade. Por favor, só use isso se souber o que está fazendo! + + createZcashConf + + + Configure zcash.conf + + + + + Show Advanced Configuration + + + + + Your zcash node will be configured for you automatically + + + + + Use custom datadir + + + + + Please chose a directory to store your wallet.dat and blockchain + + + + + Choose directory + + + + + Connect over Tor + + + + + Please note that you'll need to already have a Tor service configured on port 9050 + + + + + newRecurringDialog + + + Edit Schedule + + + + + Schedule + + + + + Payment Description + + + + + TextLabel + + + + + From + Endereço de partida + + + + Number of payments + + + + + Amount + Quantidade + + + + Next Payment + + + + + To + Para + + + + Memo + + + zboard diff --git a/src/addressbook.cpp b/src/addressbook.cpp index 7d74cbd..c839b18 100644 --- a/src/addressbook.cpp +++ b/src/addressbook.cpp @@ -254,9 +254,6 @@ void AddressBook::readFromStorage() { } void AddressBook::writeToStorage() { - if (allLabels.isEmpty()) - return; - QFile file(AddressBook::writeableFile()); file.open(QIODevice::ReadWrite | QIODevice::Truncate); QDataStream out(&file); // we will serialize the data into the file diff --git a/src/connection.cpp b/src/connection.cpp index 5db52a3..b2c46f2 100644 --- a/src/connection.cpp +++ b/src/connection.cpp @@ -2,6 +2,7 @@ #include "mainwindow.h" #include "settings.h" #include "ui_connection.h" +#include "ui_createzcashconfdialog.h" #include "rpc.h" #include "precompiled.h" @@ -128,9 +129,47 @@ void ConnectionLoader::createZcashConf() { main->logger->write("createZcashConf"); auto confLocation = zcashConfWritableLocation(); - main->logger->write("Creating file " + confLocation); - QFileInfo fi(confLocation); + + QDialog d(main); + Ui_createZcashConf ui; + ui.setupUi(&d); + + QPixmap logo(":/img/res/zcashdlogo.gif"); + ui.lblTopIcon->setBasePixmap(logo.scaled(256, 256, Qt::KeepAspectRatio, Qt::SmoothTransformation)); + ui.btnPickDir->setEnabled(false); + + ui.grpAdvanced->setVisible(false); + QObject::connect(ui.btnAdvancedConfig, &QPushButton::toggled, [=](bool isVisible) { + ui.grpAdvanced->setVisible(isVisible); + ui.btnAdvancedConfig->setText(isVisible ? QObject::tr("Hide Advanced Config") : QObject::tr("Show Advanced Config")); + }); + + QObject::connect(ui.chkCustomDatadir, &QCheckBox::stateChanged, [=](int chked) { + if (chked == Qt::Checked) { + ui.btnPickDir->setEnabled(true); + } + else { + ui.btnPickDir->setEnabled(false); + } + }); + + QObject::connect(ui.btnPickDir, &QPushButton::clicked, [=]() { + auto datadir = QFileDialog::getExistingDirectory(main, QObject::tr("Choose data directory"), ui.lblDirName->text(), QFileDialog::ShowDirsOnly); + if (!datadir.isEmpty()) { + ui.lblDirName->setText(QDir::toNativeSeparators(datadir)); + } + }); + + // Show the dialog + QString datadir = ""; + bool useTor = false; + if (d.exec() == QDialog::Accepted) { + datadir = ui.lblDirName->text(); + useTor = ui.chkUseTor->isChecked(); + } + + main->logger->write("Creating file " + confLocation); QDir().mkdir(fi.dir().absolutePath()); QFile file(confLocation); @@ -145,6 +184,13 @@ void ConnectionLoader::createZcashConf() { out << "addnode=mainnet.z.cash\n"; out << "rpcuser=zec-qt-wallet\n"; out << "rpcpassword=" % randomPassword() << "\n"; + if (!datadir.isEmpty()) { + out << "datadir=" % datadir % "\n"; + } + if (useTor) { + out << "proxy=127.0.0.1:9050\n"; + } + file.close(); // Now that zcash.conf exists, try to autoconnect again diff --git a/src/createzcashconfdialog.ui b/src/createzcashconfdialog.ui new file mode 100644 index 0000000..4da75b2 --- /dev/null +++ b/src/createzcashconfdialog.ui @@ -0,0 +1,212 @@ + + + createZcashConf + + + + 0 + 0 + 508 + 352 + + + + Configure zcash.conf + + + + + + + 0 + 0 + + + + background: #fff; + + + + + + true + + + + + + + Qt::Horizontal + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Ok + + + true + + + + + + + + + Show Advanced Configuration + + + true + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Your zcash node will be configured for you automatically + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter + + + + + + + + + + + + + Use custom datadir + + + + + + + Please chose a directory to store your wallet.dat and blockchain + + + + + + + + + Choose directory + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + + + Connect over Tor + + + + + + + Please note that you'll need to already have a Tor service configured on port 9050 + + + + + + + + + + + FilledIconLabel + QLabel +
fillediconlabel.h
+
+
+ + + + buttonBox + accepted() + createZcashConf + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + createZcashConf + reject() + + + 316 + 260 + + + 286 + 274 + + + + +
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 1cbd876..eb3e8b4 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -256,12 +256,18 @@ void MainWindow::turnstileDoMigration(QString fromAddr) { auto fnUpdateSproutBalance = [=] (QString addr) { double bal = 0; + + // The currentText contains the balance as well, so strip that. + if (addr.contains("(")) { + addr = addr.left(addr.indexOf("(")); + } + if (addr.startsWith("All")) { bal = fnGetAllSproutBalance(); } else { bal = rpc->getAllBalances()->value(addr); } - + auto balTxt = Settings::getZECUSDDisplayFormat(bal); if (bal < Turnstile::minMigrationAmount) { @@ -634,17 +640,20 @@ void MainWindow::postToZBoard() { tx.toAddrs.push_back(ToFields{ toAddr, Settings::getZboardAmount(), memo, memo.toUtf8().toHex() }); tx.fee = Settings::getMinerFee(); - json params = json::array(); - rpc->fillTxJsonParams(params, tx); - std::cout << std::setw(2) << params << std::endl; - // And send the Tx - rpc->sendZTransaction(params, [=](const json& reply) { - QString opid = QString::fromStdString(reply.get()); + rpc->executeTransaction(tx, [=] (QString opid) { ui->statusBar->showMessage(tr("Computing Tx: ") % opid); + }, + [=] (QString /*opid*/, QString txid) { + ui->statusBar->showMessage(Settings::txidStatusMessage + " " + txid); + }, + [=] (QString opid, QString errStr) { + ui->statusBar->showMessage(QObject::tr(" Tx ") % opid % QObject::tr(" failed"), 15 * 1000); - // And then start monitoring the transaction - rpc->addNewTxToWatch(tx, opid); + if (!opid.isEmpty()) + errStr = QObject::tr("The transaction with id ") % opid % QObject::tr(" failed. The error was") + ":\n\n" + errStr; + + QMessageBox::critical(this, QObject::tr("Transaction Error"), errStr, QMessageBox::Ok); }); } } @@ -731,7 +740,7 @@ void MainWindow::payZcashURI() { if (kv[0].toLower() == "amt" || kv[0].toLower() == "amount") { amount = kv[1].toDouble(); - } else if (kv[0].toLower() == "memo") { + } else if (kv[0].toLower() == "memo" || kv[0].toLower() == "message" || kv[0].toLower() == "msg") { memo = kv[1]; // Test if this is hex @@ -1200,7 +1209,16 @@ void MainWindow::setupRecieveTab() { }); // zAddr toggle button, one for sprout and one for sapling - QObject::connect(ui->rdioZAddr, &QRadioButton::toggled, addZAddrsToComboList(false)); + QObject::connect(ui->rdioZAddr, &QRadioButton::toggled, [=](bool checked) { + ui->btnRecieveNewAddr->setEnabled(!checked); + if (checked) { + ui->btnRecieveNewAddr->setToolTip(tr("Creation of new Sprout addresses is deprecated")); + } + else { + ui->btnRecieveNewAddr->setToolTip(""); + } + addZAddrsToComboList(false)(checked); + }); QObject::connect(ui->rdioZSAddr, &QRadioButton::toggled, addZAddrsToComboList(true)); // Explicitly get new address button. @@ -1233,7 +1251,7 @@ void MainWindow::setupRecieveTab() { if (Settings::getInstance()->isSaplingActive()) { ui->rdioZSAddr->setVisible(true); ui->rdioZSAddr->setChecked(true); - ui->rdioZAddr->setText("z-Addr(Sprout)"); + ui->rdioZAddr->setText("z-Addr(Legacy Sprout)"); } else { ui->rdioZSAddr->setVisible(false); ui->rdioZAddr->setChecked(true); @@ -1260,7 +1278,6 @@ void MainWindow::setupRecieveTab() { ui->rcvBal->clear(); ui->txtRecieve->clear(); ui->qrcodeDisplay->clear(); - ui->lblUsed->clear(); return; } @@ -1277,9 +1294,9 @@ void MainWindow::setupRecieveTab() { ui->txtRecieve->setPlainText(addr); ui->qrcodeDisplay->setQrcodeString(addr); if (rpc->getUsedAddresses()->value(addr, false)) { - ui->lblUsed->setText(tr("Address has been previously used")); + ui->rcvBal->setToolTip(tr("Address has been previously used")); } else { - ui->lblUsed->setText(tr("Address is unused")); + ui->rcvBal->setToolTip(tr("Address is unused")); } }); diff --git a/src/mainwindow.h b/src/mainwindow.h index 69a4d3f..692a332 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -38,6 +38,7 @@ public: ~MainWindow(); void updateLabelsAutoComplete(); + RPC* getRPC() { return rpc; } QString doSendTxValidations(Tx tx); void setDefaultPayFrom(); @@ -78,6 +79,8 @@ private: void addAddressSection(); void maxAmountChecked(int checked); + void editSchedule(); + void addressChanged(int number, const QString& text); void amountChanged (int number, const QString& text); diff --git a/src/mainwindow.ui b/src/mainwindow.ui index c96d35d..72647a6 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -22,7 +22,7 @@ - 2 + 1 @@ -346,8 +346,8 @@ 0 0 - 928 - 380 + 920 + 301 @@ -530,6 +530,50 @@ + + + + + + Recurring payment + + + + + + + Every month, starting 12-May-2012, for 6 payments + + + + + + + Edit Schedule + + + false + + + false + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + @@ -559,6 +603,13 @@ + + + + + + + @@ -629,7 +680,7 @@ - z-Addr(Sapling) + z-Addr @@ -649,7 +700,7 @@ - z-Addr(Sprout) + z-Addr(Legacy Sprout) @@ -739,17 +790,7 @@ - - - - Address - - - Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop - - - - + @@ -773,17 +814,13 @@ - - + + - Address used + Address - - - - - - + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop diff --git a/src/newrecurring.ui b/src/newrecurring.ui new file mode 100644 index 0000000..f8f8521 --- /dev/null +++ b/src/newrecurring.ui @@ -0,0 +1,245 @@ + + + newRecurringDialog + + + + 0 + 0 + 740 + 403 + + + + Edit Schedule + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + Schedule + + + + + + + Payment Description + + + + + + + TextLabel + + + + + + + Qt::Horizontal + + + + + + + + + + 0 + 0 + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + From + + + + + + + Number of payments + + + + + + + Amount + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + Next Payment + + + + + + + + + + To + + + + + + + + + + Memo + + + + + + + + AddressCombo + QComboBox +
addresscombo.h
+
+
+ + txtDesc + cmbFromAddress + txtToAddr + txtAmt + cmbCurrency + cmbSchedule + txtNumPayments + + + + + buttonBox + accepted() + newRecurringDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + newRecurringDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + +
diff --git a/src/recurring.cpp b/src/recurring.cpp new file mode 100644 index 0000000..64affec --- /dev/null +++ b/src/recurring.cpp @@ -0,0 +1,48 @@ +#include "recurring.h" + +#include "mainwindow.h" +#include "rpc.h" +#include "settings.h" +#include "ui_newrecurring.h" + +void Recurring::showEditDialog(QWidget* parent, MainWindow* main, Tx tx) { + Ui_newRecurringDialog ui; + QDialog d(parent); + ui.setupUi(&d); + Settings::saveRestore(&d); + + // Add all the from addresses + auto allBalances = main->getRPC()->getAllBalances(); + for (QString addr : allBalances->keys()) { + ui.cmbFromAddress->addItem(addr, allBalances->value(addr)); + } + + if (!tx.fromAddr.isEmpty()) { + ui.cmbFromAddress->setCurrentText(tx.fromAddr); + ui.cmbFromAddress->setEnabled(false); + } + + ui.cmbCurrency->addItem(Settings::getTokenName()); + ui.cmbCurrency->addItem("USD"); + + if (tx.toAddrs.length() > 0) { + ui.txtToAddr->setText(tx.toAddrs[0].addr); + ui.txtToAddr->setEnabled(false); + + ui.txtAmt->setText(Settings::getDecimalString(tx.toAddrs[0].amount)); + ui.txtAmt->setEnabled(false); + + ui.txtMemo->setPlainText(tx.toAddrs[0].txtMemo); + ui.txtMemo->setEnabled(false); + } + + ui.cmbSchedule->addItem("Every Day", QVariant(Schedule::DAY)); + ui.cmbSchedule->addItem("Every Week", QVariant(Schedule::WEEK)); + ui.cmbSchedule->addItem("Every Month", QVariant(Schedule::MONTH)); + ui.cmbSchedule->addItem("Every Year", QVariant(Schedule::YEAR)); + + ui.txtNumPayments->setText("10"); + + ui.txtDesc->setFocus(); + d.exec(); +} \ No newline at end of file diff --git a/src/recurring.h b/src/recurring.h new file mode 100644 index 0000000..3f27115 --- /dev/null +++ b/src/recurring.h @@ -0,0 +1,36 @@ +#ifndef RECURRING_H +#define RECURRING_H + +#include "precompiled.h" + +#include "mainwindow.h" + +enum Schedule { + DAY = 1, + WEEK, + MONTH, + YEAR +}; + +struct RecurringPaymentInfo { + QString desc; + QString fromAddr; + QString toAddr; + double amt; + QString currency; + Schedule schedule; + int numPayments; + + long startBlock; + int completedPayments; +}; + +class Recurring +{ +public: + Recurring(); + + static void showEditDialog(QWidget* parent, MainWindow* main, Tx tx); +}; + +#endif // RECURRING_H \ No newline at end of file diff --git a/src/recurringdialog.ui b/src/recurringdialog.ui new file mode 100644 index 0000000..c957d87 --- /dev/null +++ b/src/recurringdialog.ui @@ -0,0 +1,92 @@ + + + RecurringDialog + + + + 0 + 0 + 601 + 438 + + + + Dialog + + + + + + + + + + + Add + + + + + + + Edit + + + + + + + Delete + + + + + + + Qt::Vertical + + + QDialogButtonBox::Close + + + + + + + + + + + buttonBox + accepted() + RecurringDialog + accept() + + + 248 + 254 + + + 157 + 274 + + + + + buttonBox + rejected() + RecurringDialog + reject() + + + 316 + 260 + + + 286 + 274 + + + + + diff --git a/src/rpc.cpp b/src/rpc.cpp index dd4a01f..27c7c15 100644 --- a/src/rpc.cpp +++ b/src/rpc.cpp @@ -227,7 +227,8 @@ void RPC::getTransactions(const std::function& cb) { conn->doRPCWithDefaultErrorHandling(payload, cb); } -void RPC::sendZTransaction(json params, const std::function& cb) { +void RPC::sendZTransaction(json params, const std::function& cb, + const std::function& err) { json payload = { {"jsonrpc", "1.0"}, {"id", "someid"}, @@ -235,7 +236,13 @@ void RPC::sendZTransaction(json params, const std::function& cb) { {"params", params} }; - conn->doRPCWithDefaultErrorHandling(payload, cb); + conn->doRPC(payload, cb, [=] (auto reply, auto parsed) { + if (!parsed.is_discarded() && !parsed["error"]["message"].is_null()) { + err(QString::fromStdString(parsed["error"]["message"])); + } else { + err(reply->errorString()); + } + }); } /** @@ -537,11 +544,15 @@ void RPC::getInfoThenRefresh(bool force) { static int lastBlock = 0; int curBlock = reply["blocks"].get(); + int version = reply["version"].get(); if ( force || (curBlock != lastBlock) ) { // Something changed, so refresh everything. lastBlock = curBlock; + // See if the turnstile migration has any steps that need to be done. + turnstile->executeMigrationStep(); + refreshBalances(); refreshAddresses(); // This calls refreshZSentTransactions() and refreshReceivedZTrans() refreshTransactions(); @@ -602,7 +613,7 @@ void RPC::getInfoThenRefresh(bool force) { // as the progress instead of verification progress. progress = (double)blockNumber / (double)estimatedheight; } - txt = txt % " ( " % QString::number(progress * 100, 'f', 0) % "% )"; + txt = txt % " ( " % QString::number(progress * 100, 'f', 2) % "% )"; ui->blockheight->setText(txt); ui->heightLabel->setText(QObject::tr("Downloading blocks")); } else { @@ -617,7 +628,7 @@ void RPC::getInfoThenRefresh(bool force) { " (" % (Settings::getInstance()->isTestnet() ? QObject::tr("testnet:") : "") % QString::number(blockNumber) % - (isSyncing ? ("/" % QString::number(progress*100, 'f', 0) % "%") : QString()) % + (isSyncing ? ("/" % QString::number(progress*100, 'f', 2) % "%") : QString()) % ")"; main->statusLabel->setText(statusText); @@ -629,6 +640,7 @@ void RPC::getInfoThenRefresh(bool force) { else { tooltip = QObject::tr("zcashd has no peer connections"); } + tooltip = tooltip % "(v " % QString::number(version) % ")"; if (!zecPrice.isEmpty()) { tooltip = "1 ZEC = " % zecPrice % "\n" % tooltip; @@ -690,10 +702,7 @@ void RPC::refreshAddresses() { } // Function to create the data model and update the views, used below. -void RPC::updateUI(bool anyUnconfirmed) { - // See if the turnstile migration has any steps that need to be done. - turnstile->executeMigrationStep(); - +void RPC::updateUI(bool anyUnconfirmed) { ui->unconfirmedWarning->setVisible(anyUnconfirmed); // Update balances model data, which will update the table too @@ -863,12 +872,36 @@ void RPC::refreshSentZTrans() { ); } -void RPC::addNewTxToWatch(Tx tx, const QString& newOpid) { - watchingOps.insert(newOpid, tx); +void RPC::addNewTxToWatch(const QString& newOpid, WatchedTx wtx) { + watchingOps.insert(newOpid, wtx); watchTxStatus(); } + +// Execute a transaction! +void RPC::executeTransaction(Tx tx, + const std::function submitted, + const std::function computed, + const std::function error) { + // First, create the json params + json params = json::array(); + fillTxJsonParams(params, tx); + std::cout << std::setw(2) << params << std::endl; + + sendZTransaction(params, [=](const json& reply) { + QString opid = QString::fromStdString(reply.get()); + + // And then start monitoring the transaction + addNewTxToWatch( opid, WatchedTx { opid, tx, computed, error} ); + submitted(opid); + }, + [=](QString errStr) { + error("", errStr); + }); +} + + void RPC::watchTxStatus() { if (conn == nullptr) return noConnection(); @@ -888,35 +921,26 @@ void RPC::watchTxStatus() { if (watchingOps.contains(id)) { // And if it ended up successful QString status = QString::fromStdString(it["status"]); + main->loadingLabel->setVisible(false); + if (status == "success") { auto txid = QString::fromStdString(it["result"]["txid"]); - SentTxStore::addToSentTx(watchingOps.value(id), txid); - - main->ui->statusBar->showMessage(Settings::txidStatusMessage + " " + txid); - main->loadingLabel->setVisible(false); + SentTxStore::addToSentTx(watchingOps[id].tx, txid); + auto wtx = watchingOps[id]; watchingOps.remove(id); + wtx.completed(id, txid); // Refresh balances to show unconfirmed balances - refresh(true); + refresh(true); } else if (status == "failed") { // If it failed, then we'll actually show a warning. auto errorMsg = QString::fromStdString(it["error"]["message"]); - QMessageBox msg( - QMessageBox::Critical, - QObject::tr("Transaction Error"), - QObject::tr("The transaction with id ") % id % QObject::tr(" failed. The error was") + ":\n\n" + errorMsg, - QMessageBox::Ok, - main - ); - - watchingOps.remove(id); - - main->ui->statusBar->showMessage(QObject::tr(" Tx ") % id % QObject::tr(" failed"), 15 * 1000); - main->loadingLabel->setVisible(false); - msg.exec(); + auto wtx = watchingOps[id]; + watchingOps.remove(id); + wtx.error(id, errorMsg); } } @@ -973,8 +997,14 @@ void RPC::checkForUpdate(bool silent) { } auto currentVersion = QVersionNumber::fromString(APP_VERSION); + + // Get the max version that the user has hidden updates for + QSettings s; + auto maxHiddenVersion = QVersionNumber::fromString(s.value("update/lastversion", "0.0.0").toString()); + qDebug() << "Version check: Current " << currentVersion << ", Available " << maxVersion; - if (maxVersion > currentVersion) { + + if (maxVersion > currentVersion && maxVersion > maxHiddenVersion) { auto ans = QMessageBox::information(main, QObject::tr("Update Available"), QObject::tr("A new release v%1 is available! You have v%2.\n\nWould you like to visit the releases page?") .arg(maxVersion.toString()) @@ -982,6 +1012,15 @@ void RPC::checkForUpdate(bool silent) { QMessageBox::Yes, QMessageBox::Cancel); if (ans == QMessageBox::Yes) { QDesktopServices::openUrl(QUrl("https://github.com/ZcashFoundation/zec-qt-wallet/releases")); + } else { + // If the user selects cancel, don't bother them again for this version + s.setValue("update/lastversion", maxVersion.toString()); + } + } else { + if (!silent) { + QMessageBox::information(main, QObject::tr("No updates available"), + QObject::tr("You already have the latest release v%1") + .arg(currentVersion.toString())); } } else { if (!silent) { diff --git a/src/rpc.h b/src/rpc.h index 78893f9..689ecbe 100644 --- a/src/rpc.h +++ b/src/rpc.h @@ -24,6 +24,13 @@ struct TransactionItem { QString memo; }; +struct WatchedTx { + QString opid; + Tx tx; + std::function completed; + std::function error; +}; + class RPC { public: @@ -42,11 +49,17 @@ public: void refreshZECPrice(); void getZboardTopics(std::function)> cb); + void executeTransaction(Tx tx, + const std::function submitted, + const std::function computed, + const std::function error); + void fillTxJsonParams(json& params, Tx tx); - void sendZTransaction (json params, const std::function& cb); + void sendZTransaction(json params, const std::function& cb, const std::function& err); void watchTxStatus(); - void addNewTxToWatch(Tx tx, const QString& newOpid); + const QMap getWatchingTxns() { return watchingOps; } + void addNewTxToWatch(const QString& newOpid, WatchedTx wtx); const TxTableModel* getTransactionsModel() { return transactionsTableModel; } const QList* getAllZAddresses() { return zaddresses; } @@ -103,7 +116,7 @@ private: QList* zaddresses = nullptr; QList* taddresses = nullptr; - QMap watchingOps; + QMap watchingOps; TxTableModel* transactionsTableModel = nullptr; BalancesTableModel* balancesTableModel = nullptr; diff --git a/src/sendtab.cpp b/src/sendtab.cpp index 5c1364d..878e0dd 100644 --- a/src/sendtab.cpp +++ b/src/sendtab.cpp @@ -3,8 +3,10 @@ #include "addressbook.h" #include "ui_confirm.h" #include "ui_memodialog.h" +#include "ui_newrecurring.h" #include "settings.h" #include "rpc.h" +#include "recurring.h" using json = nlohmann::json; @@ -80,6 +82,34 @@ void MainWindow::setupSendTab() { QFont f = ui->Address1->font(); f.setPointSize(f.pointSize() - 1); ui->MemoTxt1->setFont(f); + + // Recurring button + QObject::connect(ui->chkRecurring, &QCheckBox::stateChanged, [=] (int checked) { + if (checked) { + ui->btnRecurSchedule->setEnabled(true); + } else { + ui->btnRecurSchedule->setEnabled(false); + ui->lblRecurDesc->setText(""); + } + + }); + + // Recurring schedule button + QObject::connect(ui->btnRecurSchedule, &QPushButton::clicked, this, &MainWindow::editSchedule); + + // Hide the recurring section for now + ui->chkRecurring->setVisible(false); + ui->lblRecurDesc->setVisible(false); + ui->btnRecurSchedule->setVisible(false); + + // Set the default state for the whole page + removeExtraAddresses(); +} + +void MainWindow::editSchedule() { + // Open the edit schedule dialog + Recurring::showEditDialog(this, this, createTxFromSendPage()); + } void MainWindow::updateLabelsAutoComplete() { @@ -354,6 +384,11 @@ void MainWindow::removeExtraAddresses() { delete addressGroupBox; } + + // Reset the recurring button + ui->chkRecurring->setCheckState(Qt::Unchecked); + ui->btnRecurSchedule->setEnabled(false); + ui->lblRecurDesc->setText(""); } void MainWindow::maxAmountChecked(int checked) { @@ -620,18 +655,23 @@ void MainWindow::sendButton() { // Show a dialog to confirm the Tx if (confirmTx(tx)) { - json params = json::array(); - rpc->fillTxJsonParams(params, tx); - std::cout << std::setw(2) << params << std::endl; - // And send the Tx - rpc->sendZTransaction(params, [=](const json& reply) { - QString opid = QString::fromStdString(reply.get()); - ui->statusBar->showMessage(tr("Computing Tx: ") % opid); + rpc->executeTransaction(tx, + [=] (QString opid) { + ui->statusBar->showMessage(tr("Computing Tx: ") % opid); + }, + [=] (QString, QString txid) { + ui->statusBar->showMessage(Settings::txidStatusMessage + " " + txid); + }, + [=] (QString opid, QString errStr) { + ui->statusBar->showMessage(QObject::tr(" Tx ") % opid % QObject::tr(" failed"), 15 * 1000); - // And then start monitoring the transaction - rpc->addNewTxToWatch(tx, opid); - }); + if (!opid.isEmpty()) + errStr = QObject::tr("The transaction with id ") % opid % QObject::tr(" failed. The error was") + ":\n\n" + errStr; + + QMessageBox::critical(this, QObject::tr("Transaction Error"), errStr, QMessageBox::Ok); + } + ); } } diff --git a/src/senttxstore.cpp b/src/senttxstore.cpp index 9237a3c..3fc66ac 100644 --- a/src/senttxstore.cpp +++ b/src/senttxstore.cpp @@ -84,12 +84,22 @@ void SentTxStore::addToSentTx(Tx tx, QString txid) { totalAmount += i.amount; } + QString toAddresses; + if (tx.toAddrs.length() == 1) { + toAddresses = tx.toAddrs[0].addr; + } else { + // Concatenate all the toAddresses + for (auto a : tx.toAddrs) { + toAddresses += a.addr % "(" % Settings::getZECDisplayFormat(a.amount) % ") "; + } + } + auto list = jsonDoc.array(); QJsonObject txItem; txItem["type"] = "sent"; txItem["from"] = tx.fromAddr; txItem["datetime"] = QDateTime::currentMSecsSinceEpoch() / (qint64)1000; - txItem["address"] = QString(); // The sent address is blank, to be consistent with t-Addr sent behaviour + txItem["address"] = toAddresses; txItem["txid"] = txid; txItem["amount"] = -totalAmount; txItem["fee"] = -tx.fee; diff --git a/src/turnstile.cpp b/src/turnstile.cpp index a2e1c2c..df58b15 100644 --- a/src/turnstile.cpp +++ b/src/turnstile.cpp @@ -320,8 +320,10 @@ void Turnstile::executeMigrationStep() { return; } + // Sometimes, we check too quickly, and the unspent UTXO is not updated yet, so we'll + // double check to see if there is enough balance. if (!rpc->getAllBalances()->keys().contains(nextStep->intTAddr)) { - qDebug() << QString("The intermediate t-address doesn't have balance, even though it is confirmed"); + //qDebug() << QString("The intermediate t-address doesn't have balance, even though it seems to be confirmed"); return; } @@ -351,17 +353,20 @@ void Turnstile::executeMigrationStep() { } void Turnstile::doSendTx(Tx tx, std::function cb) { - json params = json::array(); - rpc->fillTxJsonParams(params, tx); - std::cout << std::setw(2) << params << std::endl; - rpc->sendZTransaction(params, [=] (const json& reply) { - QString opid = QString::fromStdString(reply.get()); - //qDebug() << opid; - mainwindow->ui->statusBar->showMessage(QObject::tr("Computing Tx: ") % opid); + rpc->executeTransaction(tx, [=] (QString opid) { + mainwindow->ui->statusBar->showMessage(QObject::tr("Computing Tx: ") % opid); + }, + [=] (QString /*opid*/, QString txid) { + mainwindow->ui->statusBar->showMessage(Settings::txidStatusMessage + " " + txid); + cb(); + }, + [=] (QString opid, QString errStr) { + mainwindow->ui->statusBar->showMessage(QObject::tr(" Tx ") % opid % QObject::tr(" failed"), 15 * 1000); - // And then start monitoring the transaction - rpc->addNewTxToWatch(tx, opid); + if (!opid.isEmpty()) + errStr = QObject::tr("The transaction with id ") % opid % QObject::tr(" failed. The error was") + ":\n\n" + errStr; - cb(); - }); + QMessageBox::critical(mainwindow, QObject::tr("Transaction Error"), errStr, QMessageBox::Ok); + }); + } diff --git a/zec-qt-wallet.pro b/zec-qt-wallet.pro index 9f2eaa0..5d9dc1d 100644 --- a/zec-qt-wallet.pro +++ b/zec-qt-wallet.pro @@ -54,7 +54,8 @@ SOURCES += \ src/logger.cpp \ src/addresscombo.cpp \ src/websockets.cpp \ - src/mobileappconnector.cpp + src/mobileappconnector.cpp \ + src/recurring.cpp HEADERS += \ src/mainwindow.h \ @@ -76,7 +77,8 @@ HEADERS += \ src/logger.h \ src/addresscombo.h \ src/websockets.h \ - src/mobileappconnector.h + src/mobileappconnector.h \ + src/recurring.h FORMS += \ src/mainwindow.ui \ @@ -90,7 +92,10 @@ FORMS += \ src/connection.ui \ src/zboard.ui \ src/addressbook.ui \ - src/mobileappconnector.ui + src/mobileappconnector.ui \ + src/createzcashconfdialog.ui \ + src/recurringdialog.ui \ + src/newrecurring.ui TRANSLATIONS = res/zec_qt_wallet_es.ts \