Compare commits

...

319 Commits

Author SHA1 Message Date
luigi1111
57fefba386 Merge pull request #4030
b1f1080 build: prepare v0.18.1.1 (selsta)
2022-09-18 17:40:22 -05:00
luigi1111
fa55575973 Merge pull request #4031
0851609 translations from webalte (netrik182)
2022-09-18 00:36:27 -05:00
netrik182
0851609840 translations from webalte
Author: Monero-Weblate <translate@getmonero.org>

Indonesian

Currently translated at 49.0% (406 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/id/
Author: Kareem <kareem.lukitomo@gmail.com>

Co-authored-by: Kareem <kareem.lukitomo@gmail.com>

Russian

Currently translated at 100.0% (827 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/ru/
Author: v1docq47 <chiptune@protonmail.ch>

Russian

Currently translated at 100.0% (827 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/ru/
Author: v1docq47 <chiptune@protonmail.ch>

Russian

Currently translated at 100.0% (827 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/ru/
Author: v1docq47 <chiptune@protonmail.ch>

Russian

Currently translated at 99.3% (822 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/ru/
Author: v1docq47 <chiptune@protonmail.ch>

Russian

Currently translated at 95.8% (793 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/ru/
Author: v1docq47 <chiptune@protonmail.ch>

Co-authored-by: v1docq47 <chiptune@protonmail.ch>

Korean

Currently translated at 21.6% (179 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/ko/
Author: John Lee <john3374@gmail.com>

Korean

Currently translated at 21.5% (178 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/ko/
Author: John Lee <john3374@gmail.com>

Co-authored-by: John Lee <john3374@gmail.com>

Spanish

Currently translated at 84.1% (696 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/es/
Author: Miguel Medina <michaelizergit@gmail.com>

Spanish

Currently translated at 82.8% (685 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/es/
Author: Miguel Medina <michaelizergit@gmail.com>

Co-authored-by: Miguel Medina <michaelizergit@gmail.com>

Ukrainian

Currently translated at 68.3% (565 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/uk/
Author: 12 <symphonicnightcore@gmail.com>

Co-authored-by: 12 <symphonicnightcore@gmail.com>

Ukrainian

Currently translated at 68.3% (565 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/uk/
Author: foresle <foresle@tutanota.com>

Co-authored-by: foresle <foresle@tutanota.com>

Ukrainian

Currently translated at 68.3% (565 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/uk/
Author: castorp <masimov@me.com>

Co-authored-by: castorp <masimov@me.com>

Greek

Currently translated at 85.0% (703 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/el/
Author: ZeoZ <zeoz_olikis@proton.me>

German

Currently translated at 95.8% (794 of 828 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/de/
Author: ZeoZ <zeoz_olikis@proton.me>

Greek

Currently translated at 84.4% (698 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/el/
Author: ZeoZ <zeoz_olikis@proton.me>

Co-authored-by: ZeoZ <zeoz_olikis@proton.me>

Spanish

Currently translated at 84.1% (696 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/es/
Author: juanda-097 <juanda097@protonmail.ch>

Co-authored-by: juanda-097 <juanda097@protonmail.ch>

French

Currently translated at 83.0% (688 of 828 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fr/
Author: tedtei <tedtei@pm.me>

Co-authored-by: tedtei <tedtei@pm.me>

Chinese (Traditional)

Currently translated at 93.4% (774 of 828 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/zh_Hant/
Author: awdfffr <awdfffr@gmail.com>

Chinese (Traditional)

Currently translated at 92.7% (768 of 828 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/zh_Hant/
Author: awdfffr <awdfffr@gmail.com>

Co-authored-by: awdfffr <awdfffr@gmail.com>

Chinese (Traditional)

Currently translated at 92.7% (768 of 828 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/zh_Hant/
Author: Lafudoci <chunhsi.tso@gmail.com>

Co-authored-by: Lafudoci <chunhsi.tso@gmail.com>

Chinese (Traditional)

Currently translated at 92.7% (768 of 828 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/zh_Hant/
Author: cryptoouob <cryptoouob@gmail.com>

Co-authored-by: cryptoouob <cryptoouob@gmail.com>

Spanish

Currently translated at 84.2% (697 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/es/
Author: W4ikiky <12raimon@gmail.com>

Co-authored-by: W4ikiky <12raimon@gmail.com>

Finnish

Currently translated at 90.8% (751 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fi/
Author: Jiri <crypto@nakola.fi>

Co-authored-by: Jiri <crypto@nakola.fi>

Finnish

Currently translated at 96.2% (796 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fi/
Author: vaa red <vaa.red@protonmail.com>

Finnish

Currently translated at 90.8% (751 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fi/
Author: vaa red <vaa.red@protonmail.com>

Co-authored-by: vaa red <vaa.red@protonmail.com>

Finnish

Currently translated at 96.3% (797 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fi/
Author: MahtiAnkka <mrkujansuu@gmail.com>

Finnish

Currently translated at 96.2% (796 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fi/
Author: MahtiAnkka <mrkujansuu@gmail.com>

Co-authored-by: MahtiAnkka <mrkujansuu@gmail.com>

Vietnamese

Currently translated at 22.7% (188 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/vi/
Author: Tony Nguyen <tony.d.nguyen@protonmail.com>

Co-authored-by: Tony Nguyen <tony.d.nguyen@protonmail.com>

Vietnamese

Currently translated at 22.9% (190 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/vi/
Author: Tabula Rasa <klpohuy@gmail.com>

Vietnamese

Currently translated at 22.7% (188 of 827 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/vi/
Author: Tabula Rasa <klpohuy@gmail.com>

Co-authored-by: Tabula Rasa <klpohuy@gmail.com>

translations from weblate
2022-09-17 10:44:14 +02:00
selsta
b1f1080111 build: prepare v0.18.1.1 2022-09-15 23:53:39 +02:00
luigi1111
6c3b1c56f8 Merge pull request #4026
0f43fbe installer: allow to install on arm64 (selsta)
2022-09-15 00:38:54 -05:00
luigi1111
210f3e301b Merge pull request #4025
10e28c5 docker: update qt to 5.15.6 (tobtoht)
2022-09-15 00:38:25 -05:00
luigi1111
c73bc32f8e Merge pull request #4013
a3c25af cmake: update libicu dll version (selsta)
2022-09-15 00:38:02 -05:00
luigi1111
62878a042c Merge pull request #4011
21831c9 main: add --no-igd to simple mode flags (selsta)
2022-09-15 00:37:38 -05:00
luigi1111
84c6d35634 Merge pull request #4003
d1f9b0e docker: update linux dependencies (selsta)
2022-09-15 00:37:14 -05:00
luigi1111
0f94f1b416 Merge pull request #4000
b0d5584 repo: remove ldns leftovers (selsta)
2022-09-15 00:36:08 -05:00
selsta
0f43fbe6d4 installer: allow to install on arm64 2022-09-09 22:20:09 +02:00
tobtoht
10e28c5ba4 docker: update qt to 5.15.6 2022-09-09 13:29:51 +02:00
selsta
a3c25afb66 cmake: update libicu dll version 2022-08-21 23:29:30 +02:00
selsta
21831c9b24 main: add --no-igd to simple mode flags
Should solve issues with monerod taking a while to exit.
Simple mode nodes aren't beneficial to the network anyway,
so having no incoming connections in some cases should be
fine.
2022-08-21 02:42:07 +02:00
selsta
d1f9b0eaf0 docker: update linux dependencies 2022-08-12 00:53:49 +02:00
selsta
b0d5584d53 repo: remove ldns leftovers 2022-08-11 00:28:00 +02:00
luigi1111
bbe4fe3763 Merge pull request #3999
87f9d28 Dockerfile: fix hash (selsta)
2022-08-10 14:20:04 -05:00
selsta
87f9d28fea Dockerfile: fix hash 2022-08-10 19:47:56 +02:00
luigi1111
58ddd8c2bc Merge pull request #3998
91959d3 build: prepare v0.18.1.0 (selsta)
2022-08-10 12:21:43 -05:00
luigi1111
264d3694c5 Merge pull request #3995
7184c45 main: only check mining status when using local node (selsta)
2022-08-10 12:19:48 -05:00
luigi1111
79d56af921 Merge pull request #3994
fc26150 libwalletqt: refresh once on wallet opening (selsta)
2022-08-10 12:19:26 -05:00
luigi1111
e668995673 Merge pull request #3988
f796be3 trim restore height at info -> change height input (plowsof)
2022-08-10 12:19:05 -05:00
luigi1111
8b2fe88824 Merge pull request #3985
fa3b49c Windows installer: Welcome image for 0.18 (rbrunner7)
2022-08-10 12:18:43 -05:00
luigi1111
80830584d1 Merge pull request #3978
9e6f116 TxUtils: don't show resolve for float (reemuru)
2022-08-10 12:18:08 -05:00
luigi1111
ae21f79040 Merge pull request #3973
b70a984 README: Update copyright to 2022 (garth-xmr)
2022-08-10 12:17:33 -05:00
luigi1111
b7ab50759a Merge pull request #3734
0ded8dc Settings: option to skip stop local node screen (selsta)
2022-08-10 12:17:06 -05:00
selsta
91959d3e2e build: prepare v0.18.1.0 2022-08-10 19:15:20 +02:00
selsta
7184c45043 main: only check mining status when using local node 2022-08-06 23:32:11 +02:00
selsta
fc261502d1 libwalletqt: refresh once on wallet opening
Co-authored-by: tobtoht <thotbot@protonmail.com>
2022-08-06 21:58:21 +02:00
plowsof
f796be37ce trim restore height at info -> change height input
If you accidentally copy and paste a date with a new line character 
```
2022-01-01

```
The gui will restore from 2022. I ran into this problem when helping someone just now, after giving them the correct date to copy and paste so they can restore quicker xD caused some confusion.

the reg exp method used here 064c145aa8/wizard/WizardRestoreWallet1.qml (L277) prevents you from copy and pasting the 'wrong' string which might be annoying
2022-07-28 01:57:41 +01:00
rbrunner7
fa3b49ca91 Windows installer: Welcome image for 0.18 2022-07-25 20:28:20 +02:00
reemuru
9e6f116bc9 TxUtils: don't show resolve for float
Add parseFloat() checks so that the 'Resolve' button
for OpenAlias remains hidden. Also add a length check
for one character with a dot. IP addresses will not be
respected, but the whole point of domain names and OA is
for facilitating human readable / user friendly information.

Co-authored-by: selsta <selsta@users.noreply.github.com>
2022-07-22 10:21:29 -04:00
garth-xmr
b70a9842f5 README: Update copyright to 2022 2022-07-17 19:10:50 +00:00
luigi1111
064c145aa8 Merge pull request #3972
e197544 build: prepare v0.18.0.0 (selsta)
2022-07-15 22:34:59 -04:00
selsta
e197544903 build: prepare v0.18.0.0 2022-07-15 22:22:01 +02:00
luigi1111
ca1e66453e Merge pull request #3970
2a9c6c6 docker: update linux and android openssl (selsta)
2022-07-14 13:02:09 -04:00
luigi1111
c795d4b2f1 Merge pull request #3969
bd30c3b docker: fix linux build (selsta)
2022-07-14 13:01:36 -04:00
luigi1111
cb28263cb1 Merge pull request #3968
aac43e8 display wallet files with . in name (plowsof)
2022-07-14 13:00:44 -04:00
luigi1111
d2768a4f6b Merge pull request #3966
b576b9e Updated to p2pool v2.2.1 (SChernykh)
2022-07-14 12:59:39 -04:00
luigi1111
c6af02353e Merge pull request #3965
8199ef0 convert nettype to int to return correct rpc port (plowsof)
2022-07-14 12:58:35 -04:00
luigi1111
425623d6d3 Merge pull request #3932
5591061 SettingsWallet: add scan transaction option (selsta)
6e0b5e2 libwallet: add scanTransactions function (selsta)
2022-07-14 12:58:01 -04:00
selsta
2a9c6c662f docker: update linux and android openssl 2022-07-14 06:05:53 +02:00
selsta
bd30c3babb docker: fix linux build 2022-07-14 00:14:13 +02:00
plowsof
aac43e8a1a display wallet files with "." in name 2022-07-13 02:12:33 +01:00
SChernykh
b576b9e4f6 Updated to p2pool v2.2.1 2022-07-09 19:19:28 +02:00
plowsof
8199ef004d convert nettype to int to return correct rpc port 2022-07-09 17:41:06 +01:00
luigi1111
b26f38d37e Merge pull request #3959
b951338 Updated to p2pool v2.2 (SChernykh)
2022-07-08 13:56:18 -04:00
luigi1111
87f25c49ad Merge pull request #3958
0184c3a WizardRestoreWallet1: trim whitespaces from seed (selsta)
2022-07-08 13:55:47 -04:00
luigi1111
160eb8e074 Merge pull request #3957
d514845 DaemonManagerDialog: close dialog when GUI is connected (selsta)
2022-07-08 13:55:24 -04:00
luigi1111
39f0323a81 Merge pull request #3955
9bed455 oshelper: fix openContainingFolder on Linux (selsta)
2022-07-08 13:54:27 -04:00
luigi1111
e9a8b042ab Merge pull request #3954
a10d416 Transfer: don't create offline tx before wallet is synced (selsta)
2022-07-08 13:53:58 -04:00
luigi1111
07e7628182 Merge pull request #3949
c0b3789 docker: update Qt to 5.15.5 (selsta)
2022-07-08 13:53:18 -04:00
luigi1111
3d07d80648 Merge pull request #3947
85d0c75 translations from weblate (netrik182)
2022-07-08 13:51:10 -04:00
luigi1111
887688f092 Merge pull request #3946
d4de529 Mining: add info to start gui as admin for p2pool installation (selsta)
2022-07-08 13:48:04 -04:00
selsta
0184c3a314 WizardRestoreWallet1: trim whitespaces from seed 2022-07-04 03:45:25 +02:00
SChernykh
b951338642 Updated to p2pool v2.2
p2pool v2.2 has full support for the coming Monero network upgrade
2022-07-01 10:51:28 +02:00
selsta
d514845e4a DaemonManagerDialog: close dialog when GUI is connected 2022-06-28 23:38:06 +02:00
selsta
9bed4554eb oshelper: fix openContainingFolder on Linux 2022-06-27 00:41:56 +02:00
selsta
a10d41642a Transfer: don't create offline tx before wallet is synced 2022-06-26 21:59:26 +02:00
selsta
c0b3789fda docker: update Qt to 5.15.5 2022-06-21 19:26:34 +02:00
netrik182
85d0c7575c translations from weblate
Portuguese (Brazil)

Currently translated at 95.1% (761 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/pt_BR/
Author: netrik182 <netrik@tuta.io>

Co-authored-by: netrik182 <netrik@tuta.io>

Slovak

Currently translated at 96.2% (770 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/sk/
Author: Boris Sipos <siposboris@protonmail.ch>

Slovak

Currently translated at 73.2% (586 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/sk/
Author: Boris Sipos <siposboris@protonmail.ch>

Slovak

Currently translated at 58.3% (467 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/sk/
Author: Boris Sipos <siposboris@protonmail.ch>

Slovak

Currently translated at 58.2% (466 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/sk/
Author: Boris Sipos <siposboris@protonmail.ch>

Co-authored-by: Boris Sipos <siposboris@protonmail.ch>

Chinese (Simplified)

Currently translated at 74.7% (598 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/zh_Hans/
Author: Lekton Zhang <takato3000@gmail.com>

Chinese (Simplified)

Currently translated at 74.2% (594 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/zh_Hans/
Author: Lekton Zhang <takato3000@gmail.com>

Chinese (Simplified)

Currently translated at 74.1% (593 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/zh_Hans/
Author: Lekton Zhang <takato3000@gmail.com>

Co-authored-by: Lekton Zhang <takato3000@gmail.com>

Chinese (Simplified)

Currently translated at 74.1% (593 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/zh_Hans/
Author: TaoHuachen <iamthc@sina.cn>

Co-authored-by: TaoHuachen <iamthc@sina.cn>

French

Currently translated at 86.2% (691 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fr/
Author: Casimir <bgfd5u8tds454g@dispostable.com>

French

Currently translated at 86.2% (691 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fr/
Author: Casimir <bgfd5u8tds454g@dispostable.com>

French

Currently translated at 84.3% (676 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fr/
Author: Casimir <bgfd5u8tds454g@dispostable.com>

Co-authored-by: Casimir <bgfd5u8tds454g@dispostable.com>

Chinese (Simplified)

Currently translated at 74.2% (594 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/zh_Hans/
Author: jindouyunz <492906398@qq.com>

Co-authored-by: jindouyunz <492906398@qq.com>

Russian

Currently translated at 100.0% (800 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/ru/
Author: v1docq47 <chiptune@protonmail.ch>

Russian

Currently translated at 99.0% (792 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/ru/
Author: v1docq47 <chiptune@protonmail.ch>

Co-authored-by: v1docq47 <chiptune@protonmail.ch>

Hungarian

Currently translated at 79.6% (637 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/hu/
Author: Pozsonyi Péter <ck7ii8h3sx@bestparadize.com>

Co-authored-by: Pozsonyi Péter <ck7ii8h3sx@bestparadize.com>

Ukrainian

Currently translated at 70.3% (563 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/uk/
Author: foresle <foresle@tutanota.com>

Co-authored-by: foresle <foresle@tutanota.com>

Ukrainian

Currently translated at 70.3% (563 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/uk/
Author: reketen <reketen@gmail.com>

Co-authored-by: reketen <reketen@gmail.com>

Ukrainian

Currently translated at 70.3% (563 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/uk/
Author: TheFuzzStone <thefuzzstone@protonmail.com>

Co-authored-by: TheFuzzStone <thefuzzstone@protonmail.com>

Ukrainian

Currently translated at 70.3% (563 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/uk/
Author: Agent LvM <agent.lvm@gmail.com>

Co-authored-by: Agent LvM <agent.lvm@gmail.com>

Spanish

Currently translated at 85.7% (686 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/es/
Author: Miguel Medina <michaelizergit@gmail.com>

Co-authored-by: Miguel Medina <michaelizergit@gmail.com>

Turkish

Currently translated at 64.0% (512 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/tr/
Author: xmoreee <sskacarfun@gmail.com>

Co-authored-by: xmoreee <sskacarfun@gmail.com>

Turkish

Currently translated at 64.0% (512 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/tr/
Author: snipeTR <snipetr@gmail.com>

Co-authored-by: snipeTR <snipetr@gmail.com>

German

Currently translated at 100.0% (801 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/de/
Author: Lennard Merten <cb39@fn.de>

German

Currently translated at 94.1% (754 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/de/
Author: Lennard Merten <cb39@fn.de>

Co-authored-by: Lennard Merten <cb39@fn.de>

Chinese (Simplified)

Currently translated at 75.5% (604 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/zh_Hans/
Author: WinslowEric <i@winsloweric.cn>

Chinese (Simplified)

Currently translated at 74.7% (598 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/zh_Hans/
Author: WinslowEric <i@winsloweric.cn>

Co-authored-by: WinslowEric <i@winsloweric.cn>

Chinese (Simplified)

Currently translated at 74.7% (598 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/zh_Hans/
Author: Muge Niu <mugeniu12138@gmail.com>

Co-authored-by: Muge Niu <mugeniu12138@gmail.com>

German

Currently translated at 100.0% (801 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/de/
Author: Paul Janowitz <janowitz@gmail.com>

Polish

Currently translated at 100.0% (800 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/pl/
Author: Paul Janowitz <janowitz@gmail.com>

German

Currently translated at 100.0% (801 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/de/
Author: Paul Janowitz <janowitz@gmail.com>

Co-authored-by: Paul Janowitz <janowitz@gmail.com>

German

Currently translated at 100.0% (801 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/de/
Author: Crusty <trepoleth@protonmail.com>

Co-authored-by: Crusty <trepoleth@protonmail.com>

German

Currently translated at 100.0% (801 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/de/
Author: GreenPiece <villa@posteo.net>

Co-authored-by: GreenPiece <villa@posteo.net>

German

Currently translated at 100.0% (801 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/de/
Author: Wobole <wobole@throwaway.io>

Co-authored-by: Wobole <wobole@throwaway.io>

German

Currently translated at 100.0% (801 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/de/
Author: PauleBertt <paulebertt@googlemail.com>

Co-authored-by: PauleBertt <paulebertt@googlemail.com>

German

Currently translated at 100.0% (801 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/de/
Author: Marta Kozera <martusia1984@gmail.com>

Co-authored-by: Marta Kozera <martusia1984@gmail.com>

Indonesian

Currently translated at 51.0% (408 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/id/
Author: I. Musthafa <i.musthafa66@gmail.com>

Co-authored-by: I. Musthafa <i.musthafa66@gmail.com>

Indonesian

Currently translated at 51.0% (408 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/id/
Author: liimee <alt3753.7@gmail.com>

Co-authored-by: liimee <alt3753.7@gmail.com>

Indonesian

Currently translated at 51.0% (408 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/id/
Author: siptruk <siptruks@gmail.com>

Co-authored-by: siptruk <siptruks@gmail.com>

Chinese (Simplified)

Currently translated at 75.7% (606 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/zh_Hans/
Author: MaxQiu0108 <maxqqqq@hotmail.com>

Chinese (Simplified)

Currently translated at 75.6% (605 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/zh_Hans/
Author: MaxQiu0108 <maxqqqq@hotmail.com>

Co-authored-by: MaxQiu0108 <maxqqqq@hotmail.com>

German

Currently translated at 100.0% (801 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/de/
Author: Paul Janowitz <janowitz@gmail.com>

German

Currently translated at 100.0% (801 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/de/
Author: Paul Janowitz <janowitz@gmail.com>

Co-authored-by: Paul Janowitz <janowitz@gmail.com>

Esperanto

Currently translated at 70.0% (560 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/eo/
Author: Gilberto F da Silva <gfs1989@gmx.net>

Co-authored-by: Gilberto F da Silva <gfs1989@gmx.net>

Esperanto

Currently translated at 70.0% (560 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/eo/
Author: Gregg S <ph0enixd0wn@protonmail.com>

Co-authored-by: Gregg S <ph0enixd0wn@protonmail.com>

Italian

Currently translated at 77.5% (620 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/it/
Author: alreadyburnt <alreadyburnt@mailbox.org>

Italian

Currently translated at 77.3% (619 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/it/
Author: alreadyburnt <alreadyburnt@mailbox.org>

Italian

Currently translated at 77.3% (619 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/it/
Author: alreadyburnt <alreadyburnt@mailbox.org>

Co-authored-by: alreadyburnt <alreadyburnt@mailbox.org>

Spanish

Currently translated at 86.3% (691 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/es/
Author: Josep Mengual <josepmengual@protonmail.com>

Co-authored-by: Josep Mengual <josepmengual@protonmail.com>

Esperanto

Currently translated at 70.2% (562 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/eo/
Author: MasFlam <masflam@masflam.com>

Co-authored-by: MasFlam <masflam@masflam.com>

Hindi

Currently translated at 53.8% (431 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/hi/
Author: CryptoMonero <cryptocake7@outlook.com>

Co-authored-by: CryptoMonero <cryptocake7@outlook.com>

Tamil

Currently translated at 88.7% (710 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/ta/
Author: kingoflove <morpheus3542@tutanota.com>

Co-authored-by: kingoflove <morpheus3542@tutanota.com>

Persian

Currently translated at 13.2% (106 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fa/
Author: Parsa Abbasi <parsa.abbasi1996@gmail.com>

Co-authored-by: Parsa Abbasi <parsa.abbasi1996@gmail.com>

Persian

Currently translated at 13.2% (106 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fa/
Author: E-Moji <mnz1988@aol.com>

Co-authored-by: E-Moji <mnz1988@aol.com>

Persian

Currently translated at 13.2% (106 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fa/
Author: Nima Ghotbi <ghotbi.nima@gmail.com>

Co-authored-by: Nima Ghotbi <ghotbi.nima@gmail.com>

French

Currently translated at 86.2% (691 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fr/
Author: darckme <darck9me@protonmail.com>

Co-authored-by: darckme <darck9me@protonmail.com>

French

Currently translated at 86.7% (695 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fr/
Author: tedtei <tedtei@pm.me>

French

Currently translated at 86.2% (691 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fr/
Author: tedtei <tedtei@pm.me>

Co-authored-by: tedtei <tedtei@pm.me>

French

Currently translated at 86.7% (695 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fr/
Author: nightwolf3 <georgesbattikha_123@hotmail.com>

French

Currently translated at 86.2% (691 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fr/
Author: nightwolf3 <georgesbattikha_123@hotmail.com>

French

Currently translated at 86.2% (691 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fr/
Author: nightwolf3 <georgesbattikha_123@hotmail.com>

Co-authored-by: nightwolf3 <georgesbattikha_123@hotmail.com>

Slovak

Currently translated at 96.2% (770 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/sk/
Author: tomas <tvanco.reg@gmail.com>

Slovak

Currently translated at 73.2% (586 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/sk/
Author: tomas <tvanco.reg@gmail.com>

Co-authored-by: tomas <tvanco.reg@gmail.com>

Slovak

Currently translated at 73.2% (586 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/sk/
Author: Peter Liska <liska.peto@gmail.com>

Co-authored-by: Peter Liska <liska.peto@gmail.com>

French

Currently translated at 86.2% (691 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fr/
Author: Julian Fouquet <Truitosse@protonmail.com>

Co-authored-by: Julian Fouquet <Truitosse@protonmail.com>

French

Currently translated at 86.7% (695 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fr/
Author: Casimir <bgfd5u8tds454g@dispostable.com>

Co-authored-by: Casimir <bgfd5u8tds454g@dispostable.com>

French

Currently translated at 86.7% (695 of 801 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/fr/
Author: Simon Fouilleul <sfouilleulb@gmail.com>

Co-authored-by: Simon Fouilleul <sfouilleulb@gmail.com>

Slovak

Currently translated at 96.2% (770 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/sk/
Author: Carlo <getmonero.2u0ah@slmail.me>

Co-authored-by: Carlo <getmonero.2u0ah@slmail.me>

Slovak

Currently translated at 96.2% (770 of 800 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/sk/
Author: Júlia Forgáčová <marek.forgi@protonmail.com>

Co-authored-by: Júlia Forgáčová <marek.forgi@protonmail.com>

update languagues from weblate
2022-06-12 20:01:13 +02:00
selsta
d4de52974b Mining: add info to start gui as admin for p2pool installation 2022-06-11 18:19:08 +02:00
luigi1111
96cca79b70 Merge pull request #3933
4326500 Use p2pool folder for p2pool on Windows (SChernykh)
2022-06-09 16:30:45 -05:00
SChernykh
432650008c Use p2pool folder for p2pool on Windows
And set the correct file permissions on it so it can be run without administrator privileges.
2022-06-09 23:22:30 +02:00
luigi1111
3f3eb643e4 Merge pull request #3942
8229979 Mining: save selected dropdown index (selsta)
2022-06-09 14:00:23 -05:00
luigi1111
6ba617d84f Merge pull request #3920
e16f8c8 docker: qt 5.15.4 (selsta)
2022-06-09 13:59:29 -05:00
luigi1111
1c23ca3a76 Merge pull request #3917
c87482d Only kill p2pool if we started it (ComputeryPony)
2022-06-09 13:59:06 -05:00
luigi1111
17f657673f Merge pull request #3916
5977e61 qt: remove QTextCodec (selsta)
2022-06-09 13:58:23 -05:00
luigi1111
35d1546110 Merge pull request #3915
7b729fc qt: replace QRegExp with QRegularExpression (selsta)
2022-06-09 13:57:57 -05:00
luigi1111
c4bebbf173 Merge pull request #3914
372a591 main: disable setting -platformpluginpath (selsta)
2022-06-09 13:57:36 -05:00
luigi1111
a67865b969 Merge pull request #3910
cddf3c3 History: fix payment proof button (reemuru)
2022-06-09 13:57:12 -05:00
luigi1111
38a63ddcdb Merge pull request #3908
20c4516 workflows: add caching for docker android (selsta)
2022-06-09 13:56:46 -05:00
luigi1111
17dfd2e9ed Merge pull request #3906
9b7bca6 main: add compile time option to disable updates (selsta)
2022-06-09 13:56:25 -05:00
luigi1111
49d8a6b91d Merge pull request #3905
3ba9766 js: minimize frameless window when clicking on taskbar icon (selsta)
2022-06-09 13:55:40 -05:00
luigi1111
953cb8d302 Merge pull request #3903
434ac21 WizardCreateDevice1: add Ledger Nano S Plus (selsta)
2022-06-09 13:54:42 -05:00
luigi1111
e1d3cf1b98 Merge pull request #3902
1f5b221 WizardCreateDevice1: set default restore height to 1 (selsta)
2022-06-09 13:54:17 -05:00
luigi1111
b1ee39cd28 Merge pull request #3883
bcaf9ba Makefile: set CMAKE_BUILD_TYPE to debug for debug target (selsta)
2022-06-09 13:53:52 -05:00
luigi1111
3031e7c37f Merge pull request #3846
ef56194 Wizard: fix stagenet approx blockheight (selsta)
2022-06-09 13:53:20 -05:00
luigi1111
ab69b9c9b2 Merge pull request #3688
841f061 main: remove outdated code (selsta)
2022-06-09 13:52:52 -05:00
luigi1111
837f332ac9 Merge pull request #3560
214ba8a images: update mac icon (selsta)
2022-06-09 13:52:15 -05:00
luigi1111
59f189d264 Merge pull request #3483
04c2d84 WizardModeSelection: disable simple mode on Tails (selsta)
2022-06-09 13:51:20 -05:00
selsta
8229979cec Mining: save selected dropdown index 2022-06-07 20:15:03 +02:00
selsta
559106174e SettingsWallet: add scan transaction option 2022-05-28 03:15:23 +02:00
selsta
6e0b5e2be5 libwallet: add scanTransactions function 2022-05-28 03:15:18 +02:00
selsta
e16f8c8d07 docker: qt 5.15.4 2022-05-12 01:16:03 +02:00
ComputeryPony
c87482db9c Only kill p2pool if we started it 2022-05-10 00:56:06 -05:00
selsta
7b729fc885 qt: replace QRegExp with QRegularExpression
QRegExp is removed in Qt6
2022-05-07 18:36:16 +02:00
selsta
5977e61a02 qt: remove QTextCodec
QTextCodec is removed in Qt6
2022-05-07 18:26:32 +02:00
selsta
372a591ac7 main: disable setting -platformpluginpath 2022-05-07 17:40:31 +02:00
reemuru
cddf3c3cdb History: fix payment proof button
Adding support for reserve proof added an additional
argument to the getProofClicked signal. The payment
proof button on the transaction list from history.qml
does not pass this argument and fails with insufficient
argument error.

Fixes: 0f67580e ("Advanced: ReserveProof: Add support for reserve proof")
2022-05-05 10:18:15 -05:00
selsta
20c4516c8e workflows: add caching for docker android 2022-05-02 12:46:32 +02:00
selsta
3ba976638f js: minimize frameless window when clicking on taskbar icon
Co-authored-by: rating89us <45968869+rating89us@users.noreply.github.com>
2022-05-02 05:19:53 +02:00
selsta
9b7bca6116 main: add compile time option to disable updates 2022-05-01 06:09:29 +02:00
selsta
04c2d8437e WizardModeSelection: disable simple mode on Tails 2022-04-30 13:41:01 +02:00
selsta
bcaf9ba61d Makefile: set CMAKE_BUILD_TYPE to debug for debug target 2022-04-30 13:30:05 +02:00
selsta
214ba8a34d images: update mac icon 2022-04-30 09:18:14 +02:00
selsta
434ac2182a WizardCreateDevice1: add Ledger Nano S Plus 2022-04-30 09:05:40 +02:00
selsta
1f5b22149c WizardCreateDevice1: set default restore height to 1
Due to API reasons height 0 means to approximate the current
block height during hardware device restore. That's not what
we want by default. Until this gets changed upstream we will
set the default to 1.
2022-04-30 08:36:09 +02:00
luigi1111
2e2ae5c88f Merge pull request #3897
2021d61 TxConfirmationDialog: warn high fees (selsta)
2022-04-27 21:55:34 -05:00
selsta
2021d61d91 TxConfirmationDialog: warn high fees 2022-04-27 17:40:58 +02:00
luigi1111
46d0b6b0ff Merge pull request #3894
8ae8019 build: prepare v0.17.3.2 (selsta)
2022-04-26 23:47:12 -05:00
selsta
8ae8019f5a build: prepare v0.17.3.2 2022-04-26 19:52:15 +02:00
luigi1111
1a6ea3302c Merge pull request #3890
37a5bdc main: only update fiat price with open wallet (selsta)
2022-04-25 11:04:51 -05:00
luigi1111
4de4e82ee6 Merge pull request #3889
cc4815a Mining: only update mining status when page is open (selsta)
2022-04-25 11:04:26 -05:00
luigi1111
5da0d5768a Merge pull request #3888
1cc9e8a FutureScheduler: delete unused function declarations (selsta)
2022-04-25 11:04:04 -05:00
luigi1111
58586ce2dc Merge pull request #3887
46eba83 workflows: action-docker-layer-caching v0.0.11 (selsta)
2022-04-25 11:03:36 -05:00
selsta
1cc9e8af49 FutureScheduler: delete unused function declarations 2022-04-23 08:36:08 +02:00
selsta
37a5bdc331 main: only update fiat price with open wallet 2022-04-23 07:26:52 +02:00
selsta
cc4815a3db Mining: only update mining status when page is open 2022-04-23 07:13:17 +02:00
selsta
46eba838f5 workflows: action-docker-layer-caching v0.0.11 2022-04-22 05:19:30 +02:00
luigi1111
b31cc36de2 Merge pull request #3879
85dff32 cmake: bump windows deploy lib versions (selsta)
0468e0e workflows: deploy on windows (selsta)
2022-04-19 22:30:59 -05:00
luigi1111
76dd4fee2f Merge pull request #3875
2cc3ebd Docker: Update zlib for android (devhyper)
2022-04-19 22:30:01 -05:00
luigi1111
55a4b67880 Merge pull request #3871
877f822 Docker: update Qt 5.15.2 -> 5.15.3 (selsta)
2022-04-19 22:29:37 -05:00
luigi1111
97fb3d4982 Merge pull request #3869
0feef22 TitleBar: Remove lock icon on essentials display (reemuru)
2022-04-19 22:29:12 -05:00
luigi1111
28f0645d9e Merge pull request #3829
377a1a9 Integrate P2Pool (devhyper)
2022-04-19 22:27:27 -05:00
selsta
85dff323c8 cmake: bump windows deploy lib versions 2022-04-06 04:43:57 +02:00
selsta
0468e0e43a workflows: deploy on windows 2022-04-06 04:43:13 +02:00
devhyper
2cc3ebd315 Docker: Update zlib for android 2022-04-01 10:41:48 -07:00
devhyper
377a1a9680 Integrate P2Pool 2022-04-01 10:27:35 -07:00
selsta
877f822de0 Docker: update Qt 5.15.2 -> 5.15.3 2022-03-25 17:16:21 +01:00
reemuru
0feef2268d TitleBar: Remove lock icon on essentials display
The lock functionality is shown on the initial welcome screen
and the WizardHome. Remove the lock icon until the wallet is
actually open, similar to the "Close this wallet" logic.

Fixes 346913f: ("SettingsWallet: lock wallet on demand")
2022-03-20 06:06:15 -05:00
luigi1111
002fe8eefa Merge pull request #3865
62748b6 AddressBook: fix adding new entry (selsta)
2022-03-18 16:22:57 -05:00
luigi1111
1dba06a7ff Merge pull request #3862
8bbf2bf Transfer: fix offline signing (reemuru)
2022-03-18 16:22:24 -05:00
luigi1111
838b0179e5 Merge pull request #3860
de81af0 RemoteNodeDialog: bind ok to return key (reemuru)
2022-03-18 16:21:57 -05:00
luigi1111
b12ad939ad Merge pull request #3859
346913f SettingsWallet: lock wallet on demand (reemuru)
2022-03-18 16:21:27 -05:00
luigi1111
74fbf77f62 Merge pull request #3851
4ef5ca5 Doc: Minimize boost deps in README.md (mj-xmr)
2022-03-18 16:21:04 -05:00
luigi1111
211ef24d18 Merge pull request #3720
06fe68b cmake: remove including non-existent directory (selsta)
2022-03-18 16:20:38 -05:00
luigi1111
a2e0ea4faf Merge pull request #3719
b811d6a cmake: don't print verbose make (selsta)
2022-03-18 16:19:41 -05:00
luigi1111
6ab104ead7 Merge pull request #3470
2057904 cmake: remove unneeded monero_gui_add_library() (selsta)
2022-03-18 16:18:58 -05:00
selsta
62748b6121 AddressBook: fix adding new entry 2022-03-16 13:43:26 +01:00
reemuru
8bbf2bfcbb Transfer: fix offline signing
Remove logic for processing an array to derive the confirmation.
Use confirmation from the transaction object.
2022-03-16 06:30:22 -05:00
reemuru
de81af0e8d RemoteNodeDialog: bind ok to return key
This commit binds the enter / return key on the remote
node dialog. If cursor is in the host, port or password
input fields the keyboard can be used to continue. It is not
bound to the username field because ideally a user would
enter password or port last.
2022-03-13 15:02:11 -04:00
reemuru
346913f3db SettingsWallet: lock wallet on demand
This commit adds the ability to lock the wallet on demand instead
of waiting for the user inactivity time out. It is binded to the
hot keys Ctrl+L. Pressing cancel or the esc key will send the user
back to the wizard home for wallet selection. Incorrect password
returns the error message. Correct password will remove the
PasswordDialog allowing access. Add lock functionality in the
wallet settings section and title bar.
2022-03-13 12:37:43 -04:00
luigi1111
fd8983a7ff Merge pull request #3849
119deb4 libwalletqt: fix typo in type (selsta)
2022-03-07 23:31:50 -05:00
mj-xmr
4ef5ca5721 Doc: Minimize boost deps in README.md 2022-03-07 19:07:53 +01:00
selsta
119deb4e82 libwalletqt: fix typo in type 2022-03-04 01:55:04 +01:00
luigi1111
ea92f3f272 Merge pull request #3841
da63ab2 workflows: fix windows build error (reemuru)
2022-03-02 19:06:28 -05:00
luigi1111
9c383bcc24 Merge pull request #3838
ddd95f7 settings: bind return key after password change (reemuru)
2022-03-02 19:05:53 -05:00
luigi1111
4fba8e654d Merge pull request #3832
08e386f update languages from weblate and add flags (Paul Janowitz)
2022-03-02 19:05:01 -05:00
luigi1111
14383a1922 Merge pull request #3831
bf324ec bug: reset wallet path on network change (reemuru)
2022-03-02 19:04:08 -05:00
luigi1111
1610b93975 Merge pull request #3828
2bf0dd8 Advanced: ReserveProof: Resolve review by selsta (reemuru)
0f67580 Advanced: ReserveProof: Add support for reserve proof (reemuru)
2022-03-02 19:03:14 -05:00
luigi1111
8ece450f18 Merge pull request #3825
5990338 WizardRestoreWallet4, WizardCreateWallet4: disable double-click on 'Create wallet' button (rating89us)
2022-03-02 18:59:24 -05:00
luigi1111
ced654707d Merge pull request #3781
817b015 Docker: bump hidapi on Linux (selsta)
2022-03-02 18:58:50 -05:00
selsta
ef561949ca Wizard: fix stagenet approx blockheight 2022-03-01 00:18:09 +01:00
reemuru
da63ab2e05 workflows: fix windows build error
Windows build log has an error message for including
winsock2.h and the build fails at the updater.cpp file.
Use the MONERO_GUI_STATIC definition for driving the import
logic since it is already defined for the docker static build.

Co-authored-by: jeffro256 <jeffro256@users.noreply.github.com>
2022-02-19 15:38:08 -05:00
reemuru
ddd95f73b4 settings: bind return key after password change
The enter / return key is not bound to the information
popup that appears after a successful password change.
The functionality exists on the previous menu. Make it
possible to use the return key on this popup as well.

Co-authored-by: selsta <selsta@users.noreply.github.com>
2022-02-18 19:35:04 -05:00
Paul Janowitz
08e386f63f update languages from weblate and add flags 2022-02-05 16:08:29 +01:00
reemuru
bf324ec2d9 bug: reset wallet path on network change
When changing network type without changing
wallet path the gui will attempt to open the
most recently used wallet path and network type
even if they don't match. This commit forces the
user back to wallet setup under this condition.
As long as network type and wallet path are both
updated before closing the issue will no longer occur.
2022-01-31 23:34:24 -05:00
luigi1111
e9afaa9cc8 Merge pull request #3822
de49ddc WizardRestoreWallet3: remove unused code (rating89us)
2022-01-24 15:25:19 -05:00
luigi1111
78e3b947d1 Merge pull request #3817
d752117 WizardHome: restore binding of networkTypeDropdown.currentIndex when selecting an item; display networkTypeDropdown if stagenet or testnet is selected (rating89us)
2022-01-24 15:24:45 -05:00
luigi1111
05b4a3dd6b Merge pull request #3815
11a1695 LeftPanel: use correct shortcut modifier for Mac (selsta)
2022-01-24 15:23:22 -05:00
luigi1111
c2f706a28a Merge pull request #3808
621c119 main: add compile time option to disable desktop entry dialog (selsta)
2022-01-24 15:22:57 -05:00
luigi1111
4df925e8a8 Merge pull request #3799
f7792b7 RemoteNodeList: fix qml warning (selsta)
2022-01-24 15:22:33 -05:00
luigi1111
adf88c63ec Merge pull request #3791
6b926b3 History: disable payment proof for hardware wallets (selsta)
2022-01-24 15:22:11 -05:00
luigi1111
c2545e226b Merge pull request #3776
fa9285a SettingsInfo: translate tx description of 'Donate to Monero' button (rating89us)
2022-01-24 15:21:29 -05:00
luigi1111
5c7c4dde14 Merge pull request #3764
23b74a3 WizardSummary: use 'Mnemonic seed language' instead of 'Language' (rating89us)
2022-01-24 15:20:50 -05:00
luigi1111
2bbb6adb4f Merge pull request #3763
9194522 Wizard: display selected network (testnet/stagenet) on 'Create a new wallet' header (rating89us)
2022-01-24 15:19:58 -05:00
luigi1111
493105b457 Merge pull request #3680
f30570d Makefile: fix release-linux-armv8 (selsta)
2022-01-24 15:19:21 -05:00
reemuru
2bf0dd840f Advanced: ReserveProof: Resolve review by selsta
Fixes: 0f67580e
This commit updates qsTr() to avoid breaking previous
translations. Also removes an erroneous whitespace.
2022-01-21 01:21:17 -05:00
reemuru
0f67580e8f Advanced: ReserveProof: Add support for reserve proof
This change adds the ability to prove and check a reserve proof
to this existing "Prove/check" advanced menu. If the amount line has
a valid amount less than that of the current account index this input
will drive the logic for generating a reserve proof. Checking a reserve
proof is accomplished by validating the address and verifying that
signature.indexOf("ReserveProofV") === 0. The result displays the total
and spent amount of the proof.
2022-01-20 20:21:11 -05:00
rating89us
599033815a WizardRestoreWallet4, WizardCreateWallet4: disable double-click on "Create wallet" button 2022-01-17 21:58:38 +01:00
rating89us
de49ddcf5b WizardRestoreWallet3: remove unused code 2022-01-16 19:01:51 +01:00
rating89us
d752117ed3 WizardHome: restore binding of networkTypeDropdown.currentIndex when selecting an item; display networkTypeDropdown if stagenet or testnet is selected 2022-01-13 23:39:53 +01:00
rating89us
fa9285a108 SettingsInfo: translate tx description of "Donate to Monero" button 2022-01-13 21:20:29 +01:00
rating89us
9194522b56 Wizard: display selected network (testnet/stagenet) on "Create a new wallet" header 2022-01-13 20:56:00 +01:00
selsta
11a16952c5 LeftPanel: use correct shortcut modifier for Mac 2022-01-07 22:05:28 +01:00
luigi1111
a959919b8a Merge pull request #3813
6f88ad0 Fixed English mistake in Mining.qml (Igor Voytov)
2022-01-02 14:50:40 -05:00
Igor Voytov
6f88ad0a13 Fixed English mistake in Mining.qml 2022-01-02 19:23:12 +03:00
luigi1111
cb169f11d4 Merge pull request #3811
9199f95 update translations (netrik182)
2022-01-01 12:55:09 -05:00
luigi1111
98b81fa1ee Merge pull request #3810
f2b4e1e README: add more missing macOS dependencies (selsta)
2022-01-01 12:54:49 -05:00
luigi1111
a6fadd2140 Merge pull request #3804
a4cc91c DEPLOY: use correct ARCH (selsta)
2022-01-01 12:54:25 -05:00
luigi1111
09bf4a1e71 Merge pull request #3803
db4123c build: prepare v0.17.3.1 (selsta)
2022-01-01 12:53:55 -05:00
luigi1111
f44fcb4459 Merge pull request #3802
98f8f19 SettingsWallet: improve and translate trusted remote node error message (rating89us)
2022-01-01 12:53:32 -05:00
luigi1111
c5d598f401 Merge pull request #3800
f8a3a26 RemoteNodeList: fix trusted daemon icon margin (selsta)
2022-01-01 12:52:55 -05:00
luigi1111
9476a9880c Merge pull request #3798
d160828 SettingsWallet, SettingsListItem: disable 'Rescan wallet balance' buton if wallet is not synced (rating89us)
2022-01-01 12:51:03 -05:00
luigi1111
487f2ceecb Merge pull request #3797
e85b51e RemoteNodeList: reconnect after editing remote node (rating89us)
2022-01-01 12:50:17 -05:00
luigi1111
d0950499da Merge pull request #3795
2566f44 wizard: clear password field after wallet creation (selsta)
2022-01-01 12:49:38 -05:00
luigi1111
56df20ba27 Merge pull request #3788
008a38a main: verify if currentWallet is loaded before calling it (rating89us)
2022-01-01 12:48:17 -05:00
luigi1111
41b827b65d Merge pull request #3783
70e3c2d Settings, Advanced: mirror stack transition when clicking on a button on the left (rating89us)
2022-01-01 12:47:25 -05:00
luigi1111
0b6ceab25b Merge pull request #3769
3e159e0 WizardCreateDevice1: Use 'Restore wallet' instead of 'Create wallet' on Next button when restoring (rating89us)
2022-01-01 12:46:27 -05:00
selsta
2566f445b2 wizard: clear password field after wallet creation 2021-12-26 02:15:07 +01:00
netrik182
9199f95af5 update translations
Afrikaans

Currently translated at 100.0% (724 of 724 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/af/
Author: netrik182 <netrik@tuta.io>

Romanian

Currently translated at 99.4% (720 of 724 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/ro/
Author: netrik182 <netrik@tuta.io>

Dutch

Currently translated at 83.7% (642 of 767 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/nl/
Author: netrik182 <netrik@tuta.io>

Japanese

Currently translated at 97.5% (706 of 724 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/ja/
Author: netrik182 <netrik@tuta.io>

Hungarian

Currently translated at 94.3% (683 of 724 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/hu/
Author: netrik182 <netrik@tuta.io>

Hebrew

Currently translated at 42.5% (326 of 767 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/he/
Author: netrik182 <netrik@tuta.io>

Co-authored-by: netrik182 <netrik@tuta.io>

Dutch

Currently translated at 83.7% (642 of 767 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/nl/
Author: Snowden <edwardissexy.uninteresting@aleeas.com>

Co-authored-by: Snowden <edwardissexy.uninteresting@aleeas.com>

Polish

Currently translated at 90.0% (691 of 767 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/pl/
Author: Paul Janowitz <janowitz@gmail.com>

Co-authored-by: Paul Janowitz <janowitz@gmail.com>

Chinese (Simplified)

Currently translated at 77.7% (596 of 767 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/zh_Hans/
Author: Lekton Zhang <takato3000@gmail.com>

Co-authored-by: Lekton Zhang <takato3000@gmail.com>

German

Currently translated at 90.2% (693 of 768 strings)
Translate-URL: https://translate.getmonero.org/projects/monero/gui-wallet/de/
Author: Wobole <wobole@throwaway.io>

Co-authored-by: Wobole <wobole@throwaway.io>
2021-12-22 09:08:40 +01:00
selsta
f2b4e1ea3e README: add more missing macOS dependencies 2021-12-18 21:35:03 +01:00
selsta
621c11925b main: add compile time option to disable desktop entry dialog 2021-12-17 16:43:00 +01:00
selsta
a4cc91cca2 DEPLOY: use correct ARCH 2021-12-15 10:03:28 +01:00
selsta
db4123ccb5 build: prepare v0.17.3.1 2021-12-14 07:02:43 +01:00
rating89us
98f8f194cd SettingsWallet: improve and translate trusted remote node error message 2021-12-13 15:30:24 +01:00
selsta
f8a3a26e0d RemoteNodeList: fix trusted daemon icon margin 2021-12-13 04:44:44 +01:00
selsta
f7792b72bf RemoteNodeList: fix qml warning 2021-12-13 04:33:32 +01:00
rating89us
d160828cda SettingsWallet, SettingsListItem: disable "Rescan wallet balance" buton if wallet is not synced 2021-12-12 18:26:44 +01:00
rating89us
e85b51e1c2 RemoteNodeList: reconnect after editing remote node 2021-12-12 16:32:45 +01:00
selsta
6b926b3199 History: disable payment proof for hardware wallets 2021-12-11 04:02:35 +01:00
rating89us
008a38aae2 main: verify if currentWallet is loaded before calling it 2021-12-10 11:03:37 +01:00
rating89us
70e3c2d3ad Settings, Advanced: mirror stack transition when clicking on a button on the left 2021-12-08 13:00:10 +01:00
selsta
817b015335 Docker: bump hidapi on Linux 2021-12-07 15:50:27 +01:00
luigi1111
bddb9b0050 Merge pull request #3773
78f7b05 Translations from Weblate (Weblate)
2021-12-02 15:13:21 -06:00
Anonymous
78f7b05ecb Translations from Weblate
* Ukrainian
  * TheFuzzStone (1)
  * reketen (1)
  * castorp (1)
  * Alex Osinniy (3)
* Spanish
  * nemecis rojas (1)
  * Samuel (1)
  * Josep Mengual (2)
  * jaime diaz (6)
* Esperanto
  * Dynse Clyde Sacote (11)
* Romanian
  * devuana (8)
  * mihaipe (40)
* Russian
  * v1docq47 (76)
* Portuguese (Brazil)
  * L. P. Pereira (1)
  * netrik182 (35)
  * Gilberto F da Silva (47)
* Hungarian
  * Zsolt András Kovács (1)
  * Pozsonyi Péter (3)
  * Közepes Gábor (5)
  * anonym szeretnék maradni (35)
* German
  * Nicolas (1)
  * Martin (1)
  * MortiZ (1)
  * GreenPiece (3)
  * Crusty (8)
  * Paul Janowitz (10)
2021-12-02 20:57:23 +01:00
luigi1111
999bc21d6b Merge pull request #3767
d922c91 main: hide TitleBar when MerchantTitleBar is visible (rating89us)
2021-12-02 00:16:15 -06:00
luigi1111
901b4b0f77 Merge pull request #3765
fa35410 build: prepare v0.17.3.0 (selsta)
2021-12-02 00:12:36 -06:00
luigi1111
69dc0b3570 Merge pull request #3761
6e24930 WizardOpenWallet1: new wallet icons; hide 'Mainnet' label in simple mode (rating89us)
2021-12-02 00:08:19 -06:00
luigi1111
0bebf412fd Merge pull request #3760
b8b96ee PasswordDialog: display wizard title bar when returning to wizard after canceling password dialog (rating89us)
2021-12-02 00:07:03 -06:00
luigi1111
ce1c5aebf7 Merge pull request #3759
22450cb main: hide wallet name in wizard titlebar (rating89us)
2021-12-02 00:05:42 -06:00
luigi1111
7eef4f3364 Merge pull request #3758
a4b907a WizardCreateDevice1: hide advanced options in simple mode (rating89us)
2021-12-02 00:05:20 -06:00
luigi1111
ecadd44a16 Merge pull request #3756
31ae9b3 WizardCreateDevice1: reset fields when opening page (rating89us)
2021-12-02 00:04:49 -06:00
luigi1111
4bd7d43588 Merge pull request #3753
8a8a384 add _ to names of fonts (Malte J├╝rgens)
00a95c1 change ttf name of Roboto-Regular to Roboto-Regular_ (Malte J├╝rgens)
2021-12-02 00:04:16 -06:00
luigi1111
50c8f30d0b Merge pull request #3755
843536c WizardAskPassword: clean password fields when clicking on Back button (rating89us)
2021-12-02 00:02:47 -06:00
luigi1111
e2203a871c Merge pull request #3736
4d2186f README: add missing macOS dependencies (selsta)
2021-12-02 00:01:42 -06:00
rating89us
3e159e0ed6 WizardCreateDevice1: Use "Restore wallet" instead of "Create wallet" on Next button when restoring 2021-12-01 21:50:55 +01:00
rating89us
d922c91071 main: hide TitleBar when MerchantTitleBar is visible 2021-12-01 16:48:14 +01:00
selsta
fa35410851 build: prepare v0.17.3.0 2021-11-30 23:22:39 +01:00
rating89us
23b74a3412 WizardSummary: use "Mnemonic seed language" instead of "Language" 2021-11-30 23:14:38 +01:00
rating89us
6e24930026 WizardOpenWallet1: new wallet icons; hide "Mainnet" label in simple mode 2021-11-29 20:16:23 +01:00
rating89us
b8b96ee719 PasswordDialog: display wizard title bar when returning to wizard after canceling password dialog 2021-11-28 13:39:45 +01:00
rating89us
22450cb68d main: hide wallet name in wizard titlebar 2021-11-28 13:33:54 +01:00
rating89us
a4b907a668 WizardCreateDevice1: hide advanced options in simple mode 2021-11-28 11:45:50 +01:00
rating89us
843536c7a1 WizardAskPassword: clean password fields when clicking on Back button 2021-11-27 19:50:09 +01:00
rating89us
31ae9b3947 WizardCreateDevice1: reset fields when opening page 2021-11-27 19:45:50 +01:00
luigi1111
c72729fa5d Merge pull request #3750
8f12e97 LeftPanel: display full keyboard shortcuts for Windows, Mac, and Linux (rating89us)
2021-11-26 22:57:54 -06:00
luigi1111
a07299f64d Merge pull request #3746
9e83942 Updated instructions for Gentoo (free-as-in-beer)
2021-11-26 22:57:26 -06:00
luigi1111
d55a001875 Merge pull request #3743
98b2727 StandardDropdown: remove bold text in dropdown items (rating89us)
2021-11-26 22:56:53 -06:00
luigi1111
917d6d4243 Merge pull request #3742
e390b43 Mining: add buttons/scroll to CPU threads input; improve button labels; set start mining button as primary (rating89us)
2021-11-26 22:56:26 -06:00
luigi1111
05e629c0eb Merge pull request #3740
9846bff AddressBook: use small StandardButton; adjust buttons alignment/order; remove paste button (rating89us)
2021-11-26 22:55:57 -06:00
luigi1111
9c901b33f0 Merge pull request #3739
a37c375 Account: use StandardButton for 'Create new account' (rating89us)
2021-11-26 22:55:24 -06:00
luigi1111
a0ff56fbef Merge pull request #3738
419a197 AddressBook: fix edit address button tooltip (rating89us)
2021-11-26 22:54:47 -06:00
luigi1111
fc8c1114b2 Merge pull request #3737
9961305 LabelSubheader: implement tooltip (rating89us)
2021-11-26 22:54:12 -06:00
luigi1111
93e5ef883c Merge pull request #3735
c844e3d zxcvbn: fix buffer overflow (selsta)
2021-11-26 22:50:17 -06:00
luigi1111
10a36f96f6 Merge pull request #3731
61d8b5e Makefile: don't hardcode x86_64 arch (selsta)
2021-11-26 22:49:47 -06:00
luigi1111
80cd2e08a4 Merge pull request #3689
d3780ab ContextMenu: add Cut, Copy, Delete and Select All (rating89us)
2021-11-26 22:48:40 -06:00
luigi1111
97755e1b34 Merge pull request #3635
cc8ddde Transfer: fix button colors, font size, bold; use secondary button for advanced options (rating89us)
2021-11-26 22:47:35 -06:00
Malte Jürgens
8a8a3847d7 add _ to names of fonts 2021-11-27 00:06:56 +01:00
Malte Jürgens
00a95c11a0 change ttf name of Roboto-Regular to Roboto-Regular_ 2021-11-26 23:39:01 +01:00
rating89us
8f12e97b79 LeftPanel: display full keyboard shortcuts for Windows, Mac, and Linux 2021-11-25 20:30:04 +01:00
rating89us
9961305867 LabelSubheader: implement tooltip 2021-11-22 23:19:41 +01:00
free-as-in-beer
9e83942920 Updated instructions for Gentoo 2021-11-22 22:28:58 +01:00
rating89us
e390b43bdc Mining: add buttons/scroll to CPU threads input; improve button labels; set start mining button as primary 2021-11-22 19:46:16 +01:00
rating89us
cc8ddde01b Transfer: fix button colors, font size, bold; use secondary button for advanced options 2021-11-21 19:28:36 +01:00
rating89us
98b2727857 StandardDropdown: remove bold text in dropdown items 2021-11-21 19:09:10 +01:00
selsta
4d2186fb75 README: add missing macOS dependencies 2021-11-21 03:36:36 +01:00
rating89us
419a1975eb AddressBook: fix edit address button tooltip 2021-11-20 20:18:49 +01:00
rating89us
9846bff226 AddressBook: use small StandardButton; adjust buttons alignment/order; remove paste button 2021-11-20 19:38:29 +01:00
rating89us
a37c3756b7 Account: use StandardButton for "Create new account" 2021-11-20 17:05:26 +01:00
selsta
c844e3d179 zxcvbn: fix buffer overflow
Original patch by hannob
2021-11-15 08:24:58 +01:00
selsta
0ded8dcf25 Settings: option to skip stop local node screen 2021-11-15 06:31:34 +01:00
selsta
61d8b5efb6 Makefile: don't hardcode x86_64 arch 2021-11-10 06:25:49 +01:00
luigi1111
ecf5c501d6 Merge pull request #3730
bdad630 remove reference from mattermost (netrik182)
2021-11-09 23:02:41 -06:00
luigi1111
db639b96a3 Merge pull request #3726
987bf92 Fix typos (Dimitris Apostolou)
2021-11-09 23:00:56 -06:00
luigi1111
e65956e910 Merge pull request #3723
f8e1b9b cmake: don't hardcode x86-64 arch (selsta)
2021-11-09 23:00:35 -06:00
luigi1111
09ce233f4b Merge pull request #3717
f91e179 Receive: set maximum length for qr string (selsta)
2021-11-09 23:00:14 -06:00
luigi1111
34893e169e Merge pull request #3716
49ade0d cmake: remove werror (selsta)
2021-11-09 22:59:55 -06:00
luigi1111
dd171c8b49 Merge pull request #3715
c970588 cmake: simplify version, fix tag if git isn't found (selsta)
2021-11-09 22:59:31 -06:00
luigi1111
985406e70f Merge pull request #3713
4aab43a add flatpak package (kinghat)
2021-11-09 22:59:06 -06:00
luigi1111
8bf457c864 Merge pull request #3711
c0aface workflows: add missing dependency, fix mac build (selsta)
2021-11-09 22:58:45 -06:00
luigi1111
96dab92f33 Merge pull request #3706
bd7bd43 AddressBook: add payment request URI prefix to address field placeholder (rating89us)
2021-11-09 22:58:20 -06:00
luigi1111
d348324f50 Merge pull request #3705
b44d359 Transfer: add payment request URI prefix to address field placeholder (rating89us)
2021-11-09 22:58:00 -06:00
luigi1111
4f5903e7fd Merge pull request #3697
4ec78b3 cmake: don't force -march=x86-64 (selsta)
2021-11-09 22:57:36 -06:00
luigi1111
bdadd98622 Merge pull request #3364
66d29a4 Makefile: Add ppc64le target (Jeremy Rand)
2021-11-09 22:57:10 -06:00
netrik182
bdad630d51 remove reference from mattermost
and add matrix room link
2021-11-09 10:22:18 +00:00
Dimitris Apostolou
987bf920c7 Fix typos 2021-11-04 21:19:11 +02:00
selsta
f8e1b9bdb6 cmake: don't hardcode x86-64 arch 2021-10-29 23:39:59 +02:00
selsta
06fe68b56c cmake: remove including non-existent directory 2021-10-28 14:27:53 +02:00
selsta
b811d6a84f cmake: don't print verbose make
If someone wants verbose make they can set the env var.
This is now in line with monero's behaviour.
2021-10-27 18:45:55 +02:00
selsta
f91e1791fe Receive: set maximum length for qr string 2021-10-21 02:28:41 +02:00
selsta
49ade0d689 cmake: remove werror 2021-10-19 18:02:45 +02:00
selsta
c970588c55 cmake: simplify version, fix tag if git isn't found 2021-10-19 17:58:39 +02:00
kinghat
4aab43a127 add flatpak package 2021-10-12 10:29:36 -05:00
selsta
c0aface962 workflows: add missing dependency, fix mac build 2021-10-07 04:34:07 +02:00
rating89us
bd7bd43504 AddressBook: add payment request URI prefix to address field placeholder 2021-09-27 12:23:23 +02:00
rating89us
b44d359f9e Transfer: add payment request URI prefix to address field placeholder 2021-09-27 12:22:25 +02:00
luigi1111
2f109d3333 Merge pull request #3702
1c31f2e Docker: add missing hash checks (selsta)
2021-09-23 21:56:49 -05:00
luigi1111
7cc225039c Merge pull request #3698
1173dd2 Docker: fix missing unbound on Android (selsta)
2021-09-23 21:56:24 -05:00
luigi1111
cef9be3d02 Merge pull request #3696
87b1518 Docker: fix missing unbound on Linux (selsta)
2021-09-23 21:55:38 -05:00
selsta
1c31f2e481 Docker: add missing hash checks 2021-09-15 17:52:12 +02:00
selsta
1173dd2826 Docker: fix missing unbound on Android 2021-09-15 17:49:23 +02:00
luigi1111
6239f949fe Merge pull request #3694
02c55e3 workflows: fix build on windows (selsta)
2021-09-13 01:47:04 -04:00
selsta
4ec78b35f8 cmake: don't force -march=x86-64 2021-09-13 02:33:34 +02:00
selsta
87b1518023 Docker: fix missing unbound on Linux 2021-09-12 20:55:29 +02:00
selsta
02c55e3fd1 workflows: fix build on windows 2021-09-11 02:24:11 +02:00
luigi1111
96762ebf09 Merge pull request #3687
f327d20 qml: use libwalletqt make_uri function (selsta)
dcc16a4 libwalletqt: add make_uri function (selsta)
2021-09-09 16:54:36 -04:00
luigi1111
702d3b8ec1 Merge pull request #3686
1ef9a5c Transfer: print success / error for key images (selsta)
2021-09-09 16:54:05 -04:00
luigi1111
a3069e4a58 Merge pull request #3472
bd9a2d7 cmake: cleanup openssl (selsta)
2021-09-09 16:53:34 -04:00
selsta
bd9a2d7bbb cmake: cleanup openssl 2021-09-06 02:21:00 +02:00
selsta
1ef9a5c2d7 Transfer: print success / error for key images 2021-09-06 02:19:10 +02:00
luigi1111
3f48e3ef1c Merge pull request #3685
5fa310c LineEdit: fix eye button overlap on password field (rating89us)
2021-09-05 13:06:00 -04:00
luigi1111
d9f7482ae8 Merge pull request #3684
27525b3 Add note about GUI releases to README.md (MoneroArbo)
2021-09-05 13:05:18 -04:00
luigi1111
facec65dfc Merge pull request #3683
d3d7841 Receive: remove highlight of QR code menu if no menu item is hovered (rating89us)
2021-09-05 13:04:38 -04:00
luigi1111
dc331f0e64 Merge pull request #3682
b99b333 WizardAskPassword: add colors to password strength meter; add 'Passwords match/do not match' message (rating89us)
2021-09-05 13:01:58 -04:00
luigi1111
67eb486e63 Merge pull request #3679
18a7629 cmake: cleanup redundant ccache file (selsta)
2021-09-05 13:00:20 -04:00
luigi1111
edb0358916 Merge pull request #3572
544cff7 TransactionHistory: add description to csv export (selsta)
57c2052 TransactionInfo: add isCoinbase and description (selsta)
2021-09-05 12:58:39 -04:00
luigi1111
569ba16df8 Merge pull request #3481
afb88ff workflows: don't use cache on release tag (selsta)
2021-09-05 12:57:33 -04:00
luigi1111
d48438aeef Merge pull request #3477
75746a8 cmake: explicitly link net and common (selsta)
2021-09-05 12:57:04 -04:00
luigi1111
92b3f5a2ee Merge pull request #3473
165817e cmake: cleanup test-libusb-version.c (selsta)
2021-09-05 12:56:31 -04:00
luigi1111
f430d49304 Merge pull request #3471
2f8f7c2 cmake: cleanup boost (selsta)
2021-09-05 12:55:47 -04:00
luigi1111
76c3b3cd1d Merge pull request #3452
95c07e1 workflows: replace qt download script for macos-bundle (selsta)
2021-09-05 12:55:07 -04:00
luigi1111
35aee155d7 Merge pull request #3435
36940f0 Transfer: add support for outputs import / export (selsta)
e36b166 Wallet: import / export output function (tobtoht)
2021-09-05 12:54:13 -04:00
luigi1111
d93af5a469 Merge pull request #3282
6dd7445 Transfer: export all key images by default (benevanoff)
2021-09-05 12:51:53 -04:00
luigi1111
051282931a Merge pull request #3096
AddressBook: description edits, remove hack (selsta)
2021-09-05 12:50:30 -04:00
rating89us
d3780abe33 ContextMenu: add Cut, Copy, Delete and Select All 2021-09-05 15:52:51 +02:00
selsta
841f061520 main: remove outdated code 2021-09-05 06:18:49 +02:00
selsta
f327d20deb qml: use libwalletqt make_uri function 2021-09-05 05:52:56 +02:00
selsta
dcc16a44be libwalletqt: add make_uri function 2021-09-05 05:52:53 +02:00
selsta
36940f07c9 Transfer: add support for outputs import / export 2021-09-04 00:14:07 +02:00
rating89us
b99b333b71 WizardAskPassword: add colors to password strength meter; add "Passwords match/do not match" message 2021-09-03 21:30:16 +02:00
rating89us
5fa310c961 LineEdit: fix eye button overlap on password field 2021-09-03 21:12:20 +02:00
tobtoht
e36b166edd Wallet: import / export output function 2021-09-03 05:36:58 +02:00
MoneroArbo
27525b37e0 Add note about GUI releases to README.md
Official GUI releases use monero-wallet-gui from the docker build process documented in the monero-gui README, alongisde the supporting binaries from the deterministic CLI builds. This should be noted for users looking for verify GUI builds against official releases.
2021-09-02 20:20:20 -04:00
rating89us
d3d78416d7 Receive: remove highlight of QR code menu if no menu item is hovered 2021-09-02 20:49:54 +02:00
selsta
f30570d54b Makefile: fix release-linux-armv8 2021-08-31 21:51:24 +02:00
selsta
20579049fa cmake: remove unneeded monero_gui_add_library() 2021-08-31 05:51:20 +02:00
selsta
544cff7dc1 TransactionHistory: add description to csv export 2021-08-31 05:50:54 +02:00
selsta
165817ec02 cmake: cleanup test-libusb-version.c 2021-08-31 05:50:33 +02:00
selsta
95c07e1a62 workflows: replace qt download script for macos-bundle 2021-08-31 05:48:53 +02:00
selsta
2f8f7c2054 cmake: cleanup boost 2021-08-31 05:31:30 +02:00
selsta
99ad8ef1ba AddressBook: description edits, remove hack
Co-authored-by: dsc <dsc@xmr.pm>
2021-08-31 05:26:49 +02:00
selsta
18a76299f2 cmake: cleanup redundant ccache file 2021-08-31 05:25:00 +02:00
selsta
57c205206c TransactionInfo: add isCoinbase and description 2021-06-18 03:34:47 +02:00
selsta
afb88ff511 workflows: don't use cache on release tag 2021-05-13 22:05:44 +02:00
selsta
75746a8153 cmake: explicitly link net and common 2021-05-10 23:35:40 +02:00
Jeremy Rand
66d29a4d40 Makefile: Add ppc64le target 2021-03-21 02:59:21 +00:00
benevanoff
6dd7445938 Transfer: export all key images by default 2020-12-25 02:16:15 -06:00
173 changed files with 78512 additions and 41735 deletions

107
.github/qt_helper.py vendored Normal file
View File

@@ -0,0 +1,107 @@
#!/usr/bin/env python3
import defusedxml.ElementTree
import hashlib
import mmap
import pathlib
import subprocess
import sys
import urllib.parse
import urllib.request
import xml.etree.ElementTree as ET
MAX_TRIES = 32
def fetch_links_to_archives(os, target, major, minor, patch, toolchain):
MAX_XML_SIZE = 1024 * 1024 * 1024
MIRROR = 'download.qt.io'
base_url = f'https://{MIRROR}/online/qtsdkrepository/{os}/{target}/qt{major}_{major}{minor}{patch}'
url = f'{base_url}/Updates.xml'
for _ in range(MAX_TRIES):
try:
resp = urllib.request.urlopen(url).read(MAX_XML_SIZE)
update_xml = defusedxml.ElementTree.fromstring(resp)
break
except KeyboardInterrupt:
raise
except BaseException as e:
print('error', e, flush=True)
else:
return
for pkg in update_xml.findall('./PackageUpdate'):
name = pkg.find('.//Name')
if name == None:
continue
if name.text != f'qt.qt{major}.{major}{minor}{patch}.{toolchain}':
continue
version = pkg.find('.//Version')
if version == None:
continue
archives = pkg.find('.//DownloadableArchives')
if archives == None or archives.text == None:
continue
for archive in archives.text.split(', '):
url = f'{base_url}/{name.text}/{version.text}{archive}'
file_name = pathlib.Path(urllib.parse.urlparse(url).path).name
yield {'name': file_name, 'url': url}
def download(links):
metalink = ET.Element('metalink', xmlns = "urn:ietf:params:xml:ns:metalink")
for link in links:
file = ET.SubElement(metalink, 'file', name = link['name'])
ET.SubElement(file, 'url').text = link['url']
data = ET.tostring(metalink, encoding='UTF-8', xml_declaration=True)
for _ in range(MAX_TRIES):
with subprocess.Popen([
'aria2c',
'--connect-timeout=8',
'--console-log-level=warn',
'--continue',
'--follow-metalink=mem',
'--max-concurrent-downloads=100',
'--max-connection-per-server=16',
'--max-file-not-found=100',
'--max-tries=100',
'--min-split-size=1MB',
'--retry-wait=1',
'--split=100',
'--summary-interval=0',
'--timeout=8',
'--user-agent=',
'--metalink-file=-',
], stdin=subprocess.PIPE) as aria:
aria.communicate(data)
if aria.wait() == 0:
return True
return False
def calc_hash_sum(files):
obj = hashlib.new('sha256')
for path in files:
with open(path, 'rb') as f:
with mmap.mmap(f.fileno(), 0, mmap.MAP_SHARED, mmap.PROT_READ) as m:
file_hash = hashlib.new('sha256', m).digest()
obj.update(file_hash)
return obj.digest().hex()
def extract_archives(files, out='.', targets=[]):
for path in files:
if subprocess.Popen(['7z', 'x', '-bd', '-y', '-aoa', f'-o{out}', path] + targets,
stdout=subprocess.DEVNULL,
).wait() != 0:
return False
return True
def main():
os, target, version, toolchain, expect = sys.argv[1:]
major, minor, patch = version.split('.')
links = [*fetch_links_to_archives(os, target, major, minor, patch, toolchain)]
print(*[l['url'].encode() for l in links], sep='\n', flush=True)
assert download(links)
result = calc_hash_sum([l['name'] for l in links])
print('result', result, 'expect', expect, flush=True)
assert result == expect
assert extract_archives([l['name'] for l in links], '.', ['{}.{}.{}'.format(major, minor, patch)])
[pathlib.Path(l['name']).unlink() for l in links]
if __name__ == '__main__':
main()

View File

@@ -10,7 +10,7 @@ jobs:
with:
submodules: recursive
- name: install dependencies
run: HOMEBREW_NO_AUTO_UPDATE=1 brew install boost hidapi zmq libpgm libsodium miniupnpc ldns expat libunwind-headers protobuf qt5 pkg-config
run: HOMEBREW_NO_AUTO_UPDATE=1 brew install boost hidapi openssl zmq libpgm libsodium miniupnpc expat libunwind-headers protobuf qt5 pkg-config
- name: build
run: DEV_MODE=ON make release -j3
- name: test qml
@@ -52,9 +52,12 @@ jobs:
- uses: eine/setup-msys2@v2
with:
update: true
install: mingw-w64-x86_64-toolchain make mingw-w64-x86_64-cmake mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-zeromq mingw-w64-x86_64-libsodium mingw-w64-x86_64-hidapi mingw-w64-x86_64-protobuf-c mingw-w64-x86_64-libusb git mingw-w64-x86_64-qt5 mingw-w64-x86_64-libgcrypt
install: mingw-w64-x86_64-toolchain make mingw-w64-x86_64-cmake mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-zeromq mingw-w64-x86_64-libsodium mingw-w64-x86_64-hidapi mingw-w64-x86_64-protobuf-c mingw-w64-x86_64-libusb mingw-w64-x86_64-unbound git mingw-w64-x86_64-qt5 mingw-w64-x86_64-libgcrypt
- name: build
run: DEV_MODE=ON make release-win64 -j2
- name: deploy
run: make deploy
working-directory: build/release
- name: test qml
run: build/release/bin/monero-wallet-gui --test-qml
@@ -65,14 +68,11 @@ jobs:
with:
submodules: recursive
- name: install dependencies
run: HOMEBREW_NO_AUTO_UPDATE=1 brew install boost hidapi zmq libpgm miniupnpc ldns expat libunwind-headers protobuf pkg-config python3 p7zip
run: HOMEBREW_NO_AUTO_UPDATE=1 brew install boost hidapi openssl zmq libpgm miniupnpc expat libunwind-headers protobuf pkg-config python3 p7zip aria2
- name: install dependencies
run: pip3 install requests semantic_version lxml py7zr
run: pip3 install defusedxml
- name: download qt
run: |
curl -O https://raw.githubusercontent.com/engnr/qt-downloader/master/qt-downloader
chmod +x qt-downloader
./qt-downloader macos desktop 5.15.2 clang_64
run: python3 monero-gui/.github/qt_helper.py mac_x64 desktop 5.15.2 clang_64 c384008156fe63cc183bade0316828c598ff3e5074397c0c9ccc588d6cdc5aca
working-directory: ../
- name: build
run: CMAKE_PREFIX_PATH=/Users/runner/work/monero-gui/5.15.2/clang_64 make release -j3
@@ -95,14 +95,15 @@ jobs:
- uses: actions/checkout@v1
with:
submodules: recursive
- uses: satackey/action-docker-layer-caching@v0.0.10
- uses: satackey/action-docker-layer-caching@v0.0.11
if: "!startsWith(github.ref, 'refs/tags/v')"
continue-on-error: true
with:
key: docker-linux-static-{hash}
restore-keys: |
docker-linux-static-
- name: install dependencies
run: sudo apt -y install xvfb libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xkb1 libxkbcommon-x11-0
run: sudo apt -y install xvfb libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xkb1 libxcb-shape0 libxkbcommon-x11-0
- name: prepare build environment
run: docker build --tag monero:build-env-linux --build-arg THREADS=3 --file Dockerfile.linux .
- name: build
@@ -124,7 +125,8 @@ jobs:
- uses: actions/checkout@v1
with:
submodules: recursive
- uses: satackey/action-docker-layer-caching@v0.0.10
- uses: satackey/action-docker-layer-caching@v0.0.11
if: "!startsWith(github.ref, 'refs/tags/v')"
continue-on-error: true
with:
key: docker-windows-static-{hash}
@@ -149,6 +151,13 @@ jobs:
- uses: actions/checkout@v1
with:
submodules: recursive
- uses: satackey/action-docker-layer-caching@v0.0.11
if: "!startsWith(github.ref, 'refs/tags/v')"
continue-on-error: true
with:
key: docker-android-static-{hash}
restore-keys: |
docker-android-static-
- name: prepare build environment
run: docker build --tag monero:build-env-android --build-arg THREADS=3 --file Dockerfile.android .
- name: build

View File

@@ -3,29 +3,25 @@ project(monero-gui)
message(STATUS "Initiating compile using CMake ${CMAKE_VERSION}")
set(VERSION_MAJOR "17")
set(VERSION_MINOR "2")
set(VERSION_REVISION "3")
set(VERSION_MAJOR "18")
set(VERSION_MINOR "1")
set(VERSION_REVISION "1")
set(VERSION "0.${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}")
option(STATIC "Link libraries statically, requires static Qt")
option(USE_DEVICE_TREZOR "Trezor support compilation" ON)
option(WITH_SCANNER "Enable webcam QR scanner" OFF)
option(WITH_DESKTOP_ENTRY "Ask to install desktop entry on first startup" ON)
option(WITH_UPDATER "Regularly check for new updates" ON)
option(DEV_MODE "Checkout latest monero master on build" OFF)
list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_SOURCE_DIR}/cmake")
include(CheckCCompilerFlag)
include(CheckCXXCompilerFlag)
include(CheckLinkerFlag)
include(FindCcache)
if(DEBUG)
set(CMAKE_VERBOSE_MAKEFILE ON)
endif()
set(BUILD_GUI_DEPS ON)
set(ARCH "x86-64" CACHE STRING "Target architecture")
set(BUILD_64 ON CACHE BOOL "Build 64-bit binaries")
if(NOT MANUAL_SUBMODULES)
@@ -71,85 +67,35 @@ endif()
if(STATIC)
message(STATUS "Initiating static build")
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_STATIC_RUNTIME ON)
set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ${CMAKE_FIND_LIBRARY_SUFFIXES})
add_definitions(-DMONERO_GUI_STATIC)
endif()
include(CMakePackageConfigHelpers)
# force version update
function (monero_gui_add_library_with_deps)
cmake_parse_arguments(MONERO_ADD_LIBRARY "" "NAME" "DEPENDS;SOURCES" ${ARGN})
source_group("${MONERO_ADD_LIBRARY_NAME}" FILES ${MONERO_ADD_LIBRARY_SOURCES})
# Define a ("virtual") object library and an actual library that links those
# objects together. The virtual libraries can be arbitrarily combined to link
# any subset of objects into one library archive. This is used for releasing
# libwallet, which combines multiple components.
set(objlib obj_${MONERO_ADD_LIBRARY_NAME})
add_library(${objlib} OBJECT ${MONERO_ADD_LIBRARY_SOURCES})
add_library("${MONERO_ADD_LIBRARY_NAME}" $<TARGET_OBJECTS:${objlib}>)
if (MONERO_ADD_LIBRARY_DEPENDS)
add_dependencies(${objlib} ${MONERO_ADD_LIBRARY_DEPENDS})
endif()
set_property(TARGET "${MONERO_ADD_LIBRARY_NAME}" PROPERTY FOLDER "libs")
target_compile_definitions(${objlib}
PRIVATE $<TARGET_PROPERTY:${MONERO_ADD_LIBRARY_NAME},INTERFACE_COMPILE_DEFINITIONS>)
endfunction ()
function (monero_gui_add_library name)
monero_gui_add_library_with_deps(NAME "${name}" SOURCES ${ARGN})
endfunction()
include_directories(${EASYLOGGING_INCLUDE})
link_directories(${EASYLOGGING_LIBRARY_DIRS})
include(VersionGui)
monero_gui_add_library(gui_version SOURCES version.js DEPENDS genversiongui)
message(STATUS "${CMAKE_MODULE_PATH}")
# OpenSSL
if(APPLE AND NOT OPENSSL_ROOT_DIR)
execute_process(COMMAND brew --prefix openssl OUTPUT_VARIABLE OPENSSL_ROOT_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
endif()
find_package(OpenSSL REQUIRED)
message(STATUS "OpenSSL: Version ${OPENSSL_VERSION}")
message(STATUS "OpenSSL: include dir at ${OPENSSL_INCLUDE_DIR}")
message(STATUS "OpenSSL: libraries at ${OPENSSL_LIBRARIES} ${OPENSSL_SSL_LIBRARIES}")
if(WITH_SCANNER)
add_definitions(-DWITH_SCANNER)
endif()
if(WITH_DESKTOP_ENTRY)
add_definitions(-DWITH_DESKTOP_ENTRY)
endif()
if(WITH_UPDATER)
add_definitions(-DWITH_UPDATER)
endif()
# Sodium
find_library(SODIUM_LIBRARY sodium)
message(STATUS "libsodium: libraries at ${SODIUM_LIBRARY}")
# Boost
if(DEBUG)
set(Boost_DEBUG ON)
endif()
if(APPLE AND NOT BOOST_ROOT)
execute_process(COMMAND brew --prefix boost OUTPUT_VARIABLE BOOST_ROOT OUTPUT_STRIP_TRAILING_WHITESPACE)
endif()
if(MINGW)
set(Boost_THREADAPI win32)
endif()
find_package(Boost 1.58 REQUIRED COMPONENTS
system
filesystem
thread
date_time
chrono
regex
serialization
program_options
locale)
if(UNIX AND NOT APPLE AND NOT ANDROID)
set(CMAKE_SKIP_RPATH ON)
set(CMAKE_FIND_LIBRARY_SUFFIXES_PREV ${CMAKE_FIND_LIBRARY_SUFFIXES})
@@ -167,19 +113,6 @@ if(UNIX AND NOT APPLE AND NOT ANDROID)
endif()
endif()
if(MINGW)
string(REGEX MATCH "^[^/]:/[^/]*" msys2_install_path "${CMAKE_C_COMPILER}")
message(STATUS "MSYS location: ${msys2_install_path}")
set(CMAKE_INCLUDE_PATH "${msys2_install_path}/mingw${ARCH_WIDTH}/include")
# This is necessary because otherwise CMake will make Boost libraries -lfoo
# rather than a full path. Unfortunately, this makes the shared libraries get
# linked due to a bug in CMake which misses putting -static flags around the
# -lfoo arguments.
set(DEFLIB ${msys2_install_path}/mingw${ARCH_WIDTH}/lib)
list(REMOVE_ITEM CMAKE_C_IMPLICIT_LINK_DIRECTORIES ${DEFLIB})
list(REMOVE_ITEM CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES ${DEFLIB})
endif()
set(QT5_LIBRARIES
Qt5Core
Qt5Quick
@@ -392,10 +325,6 @@ if(ANDROID)
endforeach()
endif()
message(STATUS "Using Boost include dir at ${Boost_INCLUDE_DIRS}")
message(STATUS "Using Boost libraries at ${Boost_LIBRARIES}")
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
if(MINGW)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wa,-mbig-obj")
set(EXTRA_LIBRARIES mswsock;ws2_32;iphlpapi;crypt32;bcrypt)
@@ -423,14 +352,11 @@ endif()
list(APPEND EXTRA_LIBRARIES ${CMAKE_DL_LIBS})
if(APPLE)
include_directories(SYSTEM /usr/include/malloc)
if(POLICY CMP0042)
cmake_policy(SET CMP0042 NEW)
endif()
cmake_policy(SET CMP0042 NEW)
endif()
if (APPLE AND NOT IOS)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=x86-64 -fvisibility=default -std=c++11")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=default -std=c++11")
endif()
if(APPLE)
@@ -438,8 +364,6 @@ if(APPLE)
endif()
# warnings
add_c_flag_if_supported(-Werror C_SECURITY_FLAGS)
add_cxx_flag_if_supported(-Werror CXX_SECURITY_FLAGS)
add_c_flag_if_supported(-Wformat C_SECURITY_FLAGS)
add_cxx_flag_if_supported(-Wformat CXX_SECURITY_FLAGS)
add_c_flag_if_supported(-Wformat-security C_SECURITY_FLAGS)

View File

@@ -8,11 +8,16 @@ Use macOS 10.12 - 10.13 for better backwards compability.
3. `git clone --recursive -b v0.X.Y.Z --depth 1 https://github.com/monero-project/monero-gui`
4. `CMAKE_PREFIX_PATH=~/Qt5.12.8/5.12.8/clang_64 make release`
4. Compile `monero-wallet-gui.app`
5. `cd build/release && make deploy`
```
mkdir build && cd build
cmake -D CMAKE_BUILD_TYPE=Release -D ARCH=default -D CMAKE_PREFIX_PATH=~/Qt5.12.8/5.12.8/clang_64 ..
make
make deploy
```
6. Replace the `monerod` binary inside `monero-wallet-gui.app/Contents/MacOS/` with one built using deterministic builds / gitian.
5. Replace the `monerod` binary inside `monero-wallet-gui.app/Contents/MacOS/` with one built using deterministic builds / gitian.
## Codesigning and notarizing

View File

@@ -40,9 +40,10 @@ RUN cp -r ${WORKDIR}/platforms ${WORKDIR}/platform-tools ${ANDROID_SDK_ROOT}
ENV HOST_PATH=${PATH}
ENV PATH=${TOOLCHAIN_DIR}/aarch64-linux-android/bin:${TOOLCHAIN_DIR}/bin:${PATH}
ARG ZLIB_VERSION=1.2.11
ARG ZLIB_HASH=c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1
ARG ZLIB_VERSION=1.2.12
ARG ZLIB_HASH=91844808532e5ce316b3c010929493c0244f3d37593afd6de04f71821d5136d9
RUN wget -q https://zlib.net/zlib-${ZLIB_VERSION}.tar.gz \
&& echo "${ZLIB_HASH} zlib-${ZLIB_VERSION}.tar.gz" | sha256sum -c \
&& tar -xzf zlib-${ZLIB_VERSION}.tar.gz \
&& rm zlib-${ZLIB_VERSION}.tar.gz \
&& cd zlib-${ZLIB_VERSION} \
@@ -114,9 +115,10 @@ RUN wget -q https://downloads.sourceforge.net/project/boost/boost/${BOOST_VERSIO
install -j${THREADS} \
&& rm -rf $(pwd)
ARG OPENSSL_VERSION=1.1.1g
ARG OPENSSL_HASH=ddb04774f1e32f0c49751e21b67216ac87852ceb056b75209af2443400636d46
ARG OPENSSL_VERSION=1.1.1q
ARG OPENSSL_HASH=d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca
RUN wget -q https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz \
&& echo "${OPENSSL_HASH} openssl-${OPENSSL_VERSION}.tar.gz" | sha256sum -c \
&& tar -xzf openssl-${OPENSSL_VERSION}.tar.gz \
&& rm openssl-${OPENSSL_VERSION}.tar.gz \
&& cd openssl-${OPENSSL_VERSION} \
@@ -129,6 +131,30 @@ RUN wget -q https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz \
&& make -j${THREADS} install \
&& rm -rf $(pwd)
ARG EXPAT_VERSION=2.4.1
ARG EXPAT_HASH=2f9b6a580b94577b150a7d5617ad4643a4301a6616ff459307df3e225bcfbf40
RUN wget https://github.com/libexpat/libexpat/releases/download/R_2_4_1/expat-${EXPAT_VERSION}.tar.bz2 && \
echo "${EXPAT_HASH} expat-${EXPAT_VERSION}.tar.bz2" | sha256sum -c && \
tar -xf expat-${EXPAT_VERSION}.tar.bz2 && \
rm expat-${EXPAT_VERSION}.tar.bz2 && \
cd expat-${EXPAT_VERSION} && \
CC=${ANDROID_CLANG} CXX=${ANDROID_CLANGPP} ./configure --enable-static --disable-shared --prefix=${PREFIX} --host=aarch64-linux-android && \
make -j$THREADS && \
make -j$THREADS install && \
rm -rf $(pwd)
ARG UNBOUND_VERSION=1.13.2
ARG UNBOUND_HASH=0a13b547f3b92a026b5ebd0423f54c991e5718037fd9f72445817f6a040e1a83
RUN wget https://www.nlnetlabs.nl/downloads/unbound/unbound-${UNBOUND_VERSION}.tar.gz && \
echo "${UNBOUND_HASH} unbound-${UNBOUND_VERSION}.tar.gz" | sha256sum -c && \
tar -xzf unbound-${UNBOUND_VERSION}.tar.gz && \
rm unbound-${UNBOUND_VERSION}.tar.gz && \
cd unbound-${UNBOUND_VERSION} && \
CC=${ANDROID_CLANG} CXX=${ANDROID_CLANGPP} ./configure --disable-shared --enable-static --without-pyunbound --with-libexpat=${PREFIX} --with-ssl=${PREFIX} --with-libevent=no --without-pythonmodule --disable-flto --with-pthreads --with-libunbound-only --host=aarch64-linux-android --with-pic --prefix=${PREFIX} && \
make -j$THREADS && \
make -j$THREADS install && \
rm -rf $(pwd)
ARG ZMQ_VERSION=v4.3.3
ARG ZMQ_HASH=04f5bbedee58c538934374dc45182d8fc5926fa3
RUN git clone https://github.com/zeromq/libzmq.git -b ${ZMQ_VERSION} --depth 1 \

View File

@@ -1,7 +1,7 @@
FROM ubuntu:16.04
ARG THREADS=1
ARG QT_VERSION=5.15.2
ARG QT_VERSION=v5.15.6-lts-lgpl
ENV CFLAGS="-fPIC"
ENV CPPFLAGS="-fPIC"
@@ -55,7 +55,7 @@ RUN git clone -b 0.4.0 --depth 1 https://gitlab.freedesktop.org/xorg/lib/libxcb-
git reset --hard acf790d7752f36e450d476ad79807d4012ec863b && \
git submodule init && \
git clone --depth 1 https://gitlab.freedesktop.org/xorg/util/xcb-util-m4 m4 && \
git -C m4 reset --hard f662e3a93ebdec3d1c9374382dcc070093a42fed && \
git -C m4 reset --hard c617eee22ae5c285e79e81ec39ce96862fd3262f && \
./autogen.sh --enable-shared --disable-static && \
make -j$THREADS && \
make -j$THREADS install && \
@@ -66,7 +66,7 @@ RUN git clone -b 0.4.0 --depth 1 https://gitlab.freedesktop.org/xorg/lib/libxcb-
git reset --hard d882052fb2ce439c6483fce944ba8f16f7294639 && \
git submodule init && \
git clone --depth 1 https://gitlab.freedesktop.org/xorg/util/xcb-util-m4 m4 && \
git -C m4 reset --hard f662e3a93ebdec3d1c9374382dcc070093a42fed && \
git -C m4 reset --hard c617eee22ae5c285e79e81ec39ce96862fd3262f && \
./autogen.sh --enable-shared --disable-static && \
make -j$THREADS && \
make -j$THREADS install && \
@@ -77,7 +77,7 @@ RUN git clone -b 0.4.0 --depth 1 https://gitlab.freedesktop.org/xorg/lib/libxcb-
git reset --hard 0e51ee5570a6a80bdf98770b975dfe8a57f4eeb1 && \
git submodule init && \
git clone --depth 1 https://gitlab.freedesktop.org/xorg/util/xcb-util-m4 m4 && \
git -C m4 reset --hard f662e3a93ebdec3d1c9374382dcc070093a42fed && \
git -C m4 reset --hard c617eee22ae5c285e79e81ec39ce96862fd3262f && \
./autogen.sh --enable-shared --disable-static && \
make -j$THREADS && \
make -j$THREADS install && \
@@ -88,7 +88,7 @@ RUN git clone -b 0.3.9 --depth 1 https://gitlab.freedesktop.org/xorg/lib/libxcb-
git reset --hard 0317caf63de532fd7a0493ed6afa871a67253747 && \
git submodule init && \
git clone --depth 1 https://gitlab.freedesktop.org/xorg/util/xcb-util-m4 m4 && \
git -C m4 reset --hard f662e3a93ebdec3d1c9374382dcc070093a42fed && \
git -C m4 reset --hard c617eee22ae5c285e79e81ec39ce96862fd3262f && \
./autogen.sh --enable-shared --disable-static && \
make -j$THREADS && \
make -j$THREADS install && \
@@ -99,7 +99,7 @@ RUN git clone -b 0.4.1 --depth 1 https://gitlab.freedesktop.org/xorg/lib/libxcb-
git reset --hard 24eb17df2e1245885e72c9d4bbb0a0f69f0700f2 && \
git submodule init && \
git clone --depth 1 https://gitlab.freedesktop.org/xorg/util/xcb-util-m4 m4 && \
git -C m4 reset --hard f662e3a93ebdec3d1c9374382dcc070093a42fed && \
git -C m4 reset --hard c617eee22ae5c285e79e81ec39ce96862fd3262f && \
./autogen.sh --enable-shared --disable-static && \
make -j$THREADS && \
make -j$THREADS install && \
@@ -155,21 +155,41 @@ RUN git clone -b release-64-2 --depth 1 https://github.com/unicode-org/icu && \
make -j$THREADS install && \
rm -rf $(pwd)
RUN wget https://downloads.sourceforge.net/project/boost/boost/1.73.0/boost_1_73_0.tar.gz && \
echo "9995e192e68528793755692917f9eb6422f3052a53c5e13ba278a228af6c7acf boost_1_73_0.tar.gz" | sha256sum -c && \
tar -xzf boost_1_73_0.tar.gz && \
rm boost_1_73_0.tar.gz && \
cd boost_1_73_0 && \
RUN wget https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz && \
echo "4b2136f98bdd1f5857f1c3dea9ac2018effe65286cf251534b6ae20cc45e1847 boost_1_80_0.tar.gz" | sha256sum -c && \
tar -xzf boost_1_80_0.tar.gz && \
rm boost_1_80_0.tar.gz && \
cd boost_1_80_0 && \
./bootstrap.sh && \
./b2 --with-atomic --with-system --with-filesystem --with-thread --with-date_time --with-chrono --with-regex --with-serialization --with-program_options --with-locale variant=release link=static runtime-link=static cflags="${CFLAGS}" cxxflags="${CXXFLAGS}" install -a --prefix=/usr && \
rm -rf $(pwd)
RUN wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz && \
echo "ddb04774f1e32f0c49751e21b67216ac87852ceb056b75209af2443400636d46 openssl-1.1.1g.tar.gz" | sha256sum -c && \
tar -xzf openssl-1.1.1g.tar.gz && \
rm openssl-1.1.1g.tar.gz && \
cd openssl-1.1.1g && \
./config no-asm no-shared no-zlib-dynamic --openssldir=/usr && \
RUN wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz && \
echo "d7939ce614029cdff0b6c20f0e2e5703158a489a72b2507b8bd51bf8c8fd10ca openssl-1.1.1q.tar.gz" | sha256sum -c && \
tar -xzf openssl-1.1.1q.tar.gz && \
rm openssl-1.1.1q.tar.gz && \
cd openssl-1.1.1q && \
./config no-asm no-shared no-zlib-dynamic --prefix=/usr --openssldir=/usr && \
make -j$THREADS && \
make -j$THREADS install && \
rm -rf $(pwd)
RUN wget https://github.com/libexpat/libexpat/releases/download/R_2_4_8/expat-2.4.8.tar.bz2 && \
echo "a247a7f6bbb21cf2ca81ea4cbb916bfb9717ca523631675f99b3d4a5678dcd16 expat-2.4.8.tar.bz2" | sha256sum -c && \
tar -xf expat-2.4.8.tar.bz2 && \
rm expat-2.4.8.tar.bz2 && \
cd expat-2.4.8 && \
./configure --enable-static --disable-shared --prefix=/usr && \
make -j$THREADS && \
make -j$THREADS install && \
rm -rf $(pwd)
RUN wget https://www.nlnetlabs.nl/downloads/unbound/unbound-1.16.2.tar.gz && \
echo "2e32f283820c24c51ca1dd8afecfdb747c7385a137abe865c99db4b257403581 unbound-1.16.2.tar.gz" | sha256sum -c && \
tar -xzf unbound-1.16.2.tar.gz && \
rm unbound-1.16.2.tar.gz && \
cd unbound-1.16.2 && \
./configure --disable-shared --enable-static --without-pyunbound --with-libexpat=/usr --with-ssl=/usr --with-libevent=no --without-pythonmodule --disable-flto --with-pthreads --with-libunbound-only --with-pic && \
make -j$THREADS && \
make -j$THREADS install && \
rm -rf $(pwd)
@@ -214,62 +234,62 @@ RUN rm /usr/lib/x86_64-linux-gnu/libX11.a && \
cd ../../../.. && \
rm -rf $(pwd)
RUN git clone -b v1.0.23 --depth 1 https://github.com/libusb/libusb && \
RUN git clone -b v1.0.26 --depth 1 https://github.com/libusb/libusb && \
cd libusb && \
git reset --hard e782eeb2514266f6738e242cdcb18e3ae1ed06fa && \
git reset --hard 4239bc3a50014b8e6a5a2a59df1fff3b7469543b && \
./autogen.sh --disable-shared --enable-static && \
make -j$THREADS && \
make -j$THREADS install && \
rm -rf $(pwd)
RUN git clone -b hidapi-0.9.0 --depth 1 https://github.com/libusb/hidapi && \
RUN git clone -b hidapi-0.12.0 --depth 1 https://github.com/libusb/hidapi && \
cd hidapi && \
git reset --hard 7da5cc91fc0d2dbe4df4f08cd31f6ca1a262418f && \
git reset --hard 76108294092c023a4ece99eb3219559cea0d5066 && \
./bootstrap && \
./configure --disable-shared --enable-static && \
make -j$THREADS && \
make -j$THREADS install && \
rm -rf $(pwd)
RUN git clone -b v4.3.2 --depth 1 https://github.com/zeromq/libzmq && \
RUN git clone -b v4.3.4 --depth 1 https://github.com/zeromq/libzmq && \
cd libzmq && \
git reset --hard a84ffa12b2eb3569ced199660bac5ad128bff1f0 && \
git reset --hard 4097855ddaaa65ed7b5e8cb86d143842a594eebd && \
./autogen.sh && \
./configure --disable-shared --enable-static --disable-libunwind --with-libsodium && \
make -j$THREADS && \
make -j$THREADS install && \
rm -rf $(pwd)
RUN git clone -b libgpg-error-1.38 --depth 1 git://git.gnupg.org/libgpg-error.git && \
RUN git clone -b libgpg-error-1.45 --depth 1 git://git.gnupg.org/libgpg-error.git && \
cd libgpg-error && \
git reset --hard 71d278824c5fe61865f7927a2ed1aa3115f9e439 && \
git reset --hard dbac537e5e865fb6f3aa8596d213aa8c47a9dea1 && \
./autogen.sh && \
./configure --disable-shared --enable-static --disable-doc --disable-tests && \
make -j$THREADS && \
make -j$THREADS install && \
rm -rf $(pwd)
RUN git clone -b libgcrypt-1.8.5 --depth 1 git://git.gnupg.org/libgcrypt.git && \
RUN git clone -b libgcrypt-1.10.1 --depth 1 git://git.gnupg.org/libgcrypt.git && \
cd libgcrypt && \
git reset --hard 56606331bc2a80536db9fc11ad53695126007298 && \
git reset --hard ae0e567820c37f9640440b3cff77d7c185aa6742 && \
./autogen.sh && \
./configure --disable-shared --enable-static --disable-doc && \
make -j$THREADS && \
make -j$THREADS install && \
rm -rf $(pwd)
RUN git clone -b v3.10.0 --depth 1 https://github.com/protocolbuffers/protobuf && \
RUN git clone -b v21.5 --depth 1 https://github.com/protocolbuffers/protobuf && \
cd protobuf && \
git reset --hard 6d4e7fd7966c989e38024a8ea693db83758944f1 && \
git reset --hard ab840345966d0fa8e7100d771c92a73bfbadd25c && \
./autogen.sh && \
./configure --enable-static --disable-shared && \
make -j$THREADS && \
make -j$THREADS install && \
rm -rf $(pwd)
RUN git clone -b v3.18.4 --depth 1 https://github.com/Kitware/CMake && \
RUN git clone -b v3.24.0 --depth 1 https://github.com/Kitware/CMake && \
cd CMake && \
git reset --hard 3cc3d42aba879fff5e85b363ae8f21386a3f9f9b && \
git reset --hard 4be24f031a4829db75b85062cc67125035d8831e && \
./bootstrap && \
make -j$THREADS && \
make -j$THREADS install && \

View File

@@ -1,7 +1,7 @@
FROM ubuntu:20.04
ARG THREADS=1
ARG QT_VERSION=5.15.2
ARG QT_VERSION=v5.15.6-lts-lgpl
ENV SOURCE_DATE_EPOCH=1397818193
RUN apt update && \
@@ -12,9 +12,9 @@ RUN apt update && \
RUN update-alternatives --set x86_64-w64-mingw32-g++ $(which x86_64-w64-mingw32-g++-posix) && \
update-alternatives --set x86_64-w64-mingw32-gcc $(which x86_64-w64-mingw32-gcc-posix)
RUN git clone -b v0.17.0.0 --depth 1 https://github.com/monero-project/monero && \
RUN git clone -b v0.18.1.0 --depth 1 https://github.com/monero-project/monero && \
cd monero && \
git reset --hard d27d4526fe89b7cdeb4b296280c4a6cf7efe21f8 && \
git reset --hard 727bc5b6878170332bf2d838f2c60d1c8dc685c8 && \
cp -a contrib/depends / && \
cd .. && \
rm -rf monero

View File

@@ -360,7 +360,8 @@ Rectangle {
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Account") + translationManager.emptyString
symbol: qsTr("T") + translationManager.emptyString
symbol: (isMac ? "⌃" : qsTr("Ctrl+")) + "T" + translationManager.emptyString
onClicked: {
parent.previousButton.checked = false
parent.previousButton = accountButton
@@ -381,7 +382,7 @@ Rectangle {
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Send") + translationManager.emptyString
symbol: qsTr("S") + translationManager.emptyString
symbol: (isMac ? "⌃" : qsTr("Ctrl+")) + "S" + translationManager.emptyString
onClicked: {
parent.previousButton.checked = false
parent.previousButton = transferButton
@@ -403,7 +404,7 @@ Rectangle {
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Address book") + translationManager.emptyString
symbol: qsTr("B") + translationManager.emptyString
symbol: (isMac ? "⌃" : qsTr("Ctrl+")) + "B" + translationManager.emptyString
under: transferButton
onClicked: {
parent.previousButton.checked = false
@@ -425,7 +426,7 @@ Rectangle {
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Receive") + translationManager.emptyString
symbol: qsTr("R") + translationManager.emptyString
symbol: (isMac ? "⌃" : qsTr("Ctrl+")) + "R" + translationManager.emptyString
onClicked: {
parent.previousButton.checked = false
parent.previousButton = receiveButton
@@ -447,7 +448,7 @@ Rectangle {
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Transactions") + translationManager.emptyString
symbol: qsTr("H") + translationManager.emptyString
symbol: (isMac ? "⌃" : qsTr("Ctrl+")) + "H" + translationManager.emptyString
onClicked: {
parent.previousButton.checked = false
parent.previousButton = historyButton
@@ -469,7 +470,7 @@ Rectangle {
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Advanced") + translationManager.emptyString
symbol: qsTr("D") + translationManager.emptyString
symbol: (isMac ? "⌃" : qsTr("Ctrl+")) + "D" + translationManager.emptyString
onClicked: {
parent.previousButton.checked = false
parent.previousButton = advancedButton
@@ -490,7 +491,7 @@ Rectangle {
anchors.left: parent.left
anchors.right: parent.right
text: qsTr("Settings") + translationManager.emptyString
symbol: qsTr("E") + translationManager.emptyString
symbol: (isMac ? "⌃" : qsTr("Ctrl+")) + "E" + translationManager.emptyString
onClicked: {
parent.previousButton.checked = false
parent.previousButton = settingsButton

View File

@@ -29,7 +29,7 @@ else
endif
default:
mkdir -p build && cd build && cmake -D ARCH="x86-64" -D DEV_MODE=$(or ${DEV_MODE},OFF) -DMANUAL_SUBMODULES=${MANUAL_SUBMODULES} -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release .. && $(MAKE)
mkdir -p build && cd build && cmake -D DEV_MODE=$(or ${DEV_MODE},OFF) -DMANUAL_SUBMODULES=${MANUAL_SUBMODULES} -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release .. && $(MAKE)
debug:
mkdir -p build && cd build && cmake -D DEV_MODE=$(or ${DEV_MODE},ON) -DMANUAL_SUBMODULES=${MANUAL_SUBMODULES} -D CMAKE_BUILD_TYPE=Debug .. && $(MAKE) VERBOSE=1
@@ -38,19 +38,20 @@ depends:
cd build/$(target)/release && cmake -D STATIC=ON -D DEV_MODE=$(or ${DEV_MODE},OFF) -DMANUAL_SUBMODULES=${MANUAL_SUBMODULES} -D BUILD_TAG=$(tag) -D CMAKE_BUILD_TYPE=Release -D CMAKE_TOOLCHAIN_FILE=$(root)/$(target)/share/toolchain.cmake ../../.. && $(MAKE)
devmode:
mkdir -p build && cd build && cmake -D ARCH="x86-64" -D DEV_MODE=$(or ${DEV_MODE},ON) -DMANUAL_SUBMODULES=${MANUAL_SUBMODULES} -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release .. && $(MAKE)
mkdir -p build && cd build && cmake -D DEV_MODE=$(or ${DEV_MODE},ON) -DMANUAL_SUBMODULES=${MANUAL_SUBMODULES} -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release .. && $(MAKE)
clean:
mkdir -p build && cd build && rm -rf *
scanner:
mkdir -p build && cd build && cmake -D ARCH="x86-64" -D DEV_MODE=$(or ${DEV_MODE},ON) -DMANUAL_SUBMODULES=${MANUAL_SUBMODULES} -D WITH_SCANNER=ON -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release .. && $(MAKE)
mkdir -p build && cd build && cmake -D DEV_MODE=$(or ${DEV_MODE},ON) -DMANUAL_SUBMODULES=${MANUAL_SUBMODULES} -D WITH_SCANNER=ON -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release .. && $(MAKE)
release:
mkdir -p $(builddir)/release && cd $(builddir)/release && cmake -D DEV_MODE=$(or ${DEV_MODE},OFF) -DMANUAL_SUBMODULES=${MANUAL_SUBMODULES} -D ARCH="x86-64" -D CMAKE_BUILD_TYPE=Release $(topdir) && $(MAKE)
mkdir -p $(builddir)/release && cd $(builddir)/release && cmake -D DEV_MODE=$(or ${DEV_MODE},OFF) -DMANUAL_SUBMODULES=${MANUAL_SUBMODULES} -D CMAKE_BUILD_TYPE=Release $(topdir) && $(MAKE)
release-linux-armv8:
mkdir -p $(builddir)/release
cd $(builddir)/release
cmake -D DEV_MODE=$(or ${DEV_MODE},OFF) -D ARCH="armv8-a" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release -D BUILD_TAG="linux-armv8" $(topdir) && $(MAKE)
mkdir -p $(builddir)/release && cd $(builddir)/release && cmake -D DEV_MODE=$(or ${DEV_MODE},OFF) -D ARCH="armv8-a" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release -D BUILD_TAG="linux-armv8" $(topdir) && $(MAKE)
release-linux-ppc64le:
mkdir -p $(builddir)/release && cd $(builddir)/release && cmake -D DEV_MODE=$(or ${DEV_MODE},OFF) -DMANUAL_SUBMODULES=${MANUAL_SUBMODULES} -D ARCH="ppc64le" -D CMAKE_BUILD_TYPE=Release $(topdir) && $(MAKE)
release-static:
mkdir -p $(builddir)/release && cd $(builddir)/release && cmake -D STATIC=ON -D DEV_MODE=$(or ${DEV_MODE},OFF) -DMANUAL_SUBMODULES=${MANUAL_SUBMODULES} -D ARCH="x86-64" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release $(topdir) && $(MAKE)
@@ -60,7 +61,7 @@ debug-static-win64:
debug-static-mac64:
mkdir -p $(builddir)/debug
cd $(builddir)/debug && cmake -D STATIC=ON -D DEV_MODE=$(or ${DEV_MODE},ON) -DMANUAL_SUBMODULES=${MANUAL_SUBMODULES} -D ARCH="x86-64" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=release -D BUILD_TAG="mac-x64" $(topdir) && $(MAKE)
cd $(builddir)/debug && cmake -D STATIC=ON -D DEV_MODE=$(or ${DEV_MODE},ON) -DMANUAL_SUBMODULES=${MANUAL_SUBMODULES} -D ARCH="x86-64" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Debug -D BUILD_TAG="mac-x64" $(topdir) && $(MAKE)
release-static-win64:
mkdir -p $(builddir)/release && cd $(builddir)/release && cmake -D STATIC=ON -G "MSYS Makefiles" -D DEV_MODE=$(or ${DEV_MODE},OFF) -DMANUAL_SUBMODULES=${MANUAL_SUBMODULES} -D ARCH="x86-64" -D BUILD_64=ON -D CMAKE_BUILD_TYPE=Release -D BUILD_TAG="win-x64" -D CMAKE_TOOLCHAIN_FILE=$(topdir)/cmake/64-bit-toolchain.cmake -D MSYS2_FOLDER=$(shell cd ${MINGW_PREFIX}/.. && pwd -W) -D MINGW=ON $(topdir) && $(MAKE)

View File

@@ -66,7 +66,7 @@ Rectangle {
signal paymentClicked(var recipients, string paymentId, int mixinCount, int priority, string description)
signal sweepUnmixableClicked()
signal generatePaymentIdInvoked()
signal getProofClicked(string txid, string address, string message);
signal getProofClicked(string txid, string address, string message, string amount);
signal checkProofClicked(string txid, string address, string message, string signature);
Rectangle {

View File

@@ -1,6 +1,6 @@
# Monero GUI
Copyright (c) 2014-2019, The Monero Project
Copyright (c) 2014-2022, The Monero Project
## Table of Contents
* [Development resources](#development-resources)
@@ -75,9 +75,10 @@ See [LICENSE](LICENSE).
Do you speak a second language and would like to help translate the Monero GUI? Check out Weblate, our localization platform, at [translate.getmonero.org](https://translate.getmonero.org/). Choose the language and suggest a translation for a string or review an existing one. The Localization Workgroup made [a guide with step-by-step instructions](https://github.com/monero-ecosystem/monero-translations/blob/master/weblate.md) for Weblate.
If you need help/support or any info you can contact the localization workgroup on the IRC channel #monero-translations (relayed on matrix/riot and MatterMost) or by email at translate[at]getmonero[dot]org. For more info about the Localization workgroup: [github.com/monero-ecosystem/monero-translations](https://github.com/monero-ecosystem/monero-translations)
If you need help/support or any info you can contact the localization workgroup on the IRC channel #monero-translations (relayed on [Matrix](https://matrix.to/#/!BKMbQLMDzHKzmtrBfg:matrix.org?via=monero.social&via=matrix.org&via=libera.chat)) or by email at translate[at]getmonero[dot]org. For more info about the Localization workgroup: [github.com/monero-ecosystem/monero-translations](https://github.com/monero-ecosystem/monero-translations)
Status of the translations:
<a href="https://translate.getmonero.org/engage/monero/?utm_source=widget">
<img src="https://translate.getmonero.org/widgets/monero/-/gui-wallet/horizontal-auto.svg" alt="Translation status" />
</a>
@@ -88,6 +89,7 @@ Packages are available for
* Arch Linux: [monero-gui](https://www.archlinux.org/packages/community/x86_64/monero-gui/)
* Debian: See the [whonix/monero-gui repository](https://gitlab.com/whonix/monero-gui#how-to-install-monero-using-apt-get)
* Void Linux: `xbps-install -S monero-gui`
* Flatpak: [Monero GUI](https://flathub.org/apps/details/org.getmonero.Monero)
* GuixSD: `guix package -i monero-gui`
* macOS (homebrew): `brew install --cask monero-wallet`
@@ -97,6 +99,8 @@ Packaging for your favorite distribution would be a welcome contribution!
*Note*: Qt 5.9.7 is the minimum version required to build the GUI.
*Note*: Official GUI releases use monero-wallet-gui from this process alongside the supporting binaries (monerod, etc) from the [CLI deterministic builds](https://github.com/monero-project/monero/blob/master/contrib/gitian/README.md).
### Building Reproducible Windows static binaries with Docker (any OS)
1. Install Docker [https://docs.docker.com/engine/install/](https://docs.docker.com/engine/install/)
@@ -104,7 +108,7 @@ Packaging for your favorite distribution would be a welcome contribution!
```
git clone --branch master --recursive https://github.com/monero-project/monero-gui.git
```
\* `master` - replace with the desired version tag (e.g. `v0.17.1.9`) to build the release binaries.
\* `master` - replace with the desired version tag (e.g. `v0.18.1.1`) to build the release binaries.
3. Prepare build environment
```
cd monero-gui
@@ -127,7 +131,7 @@ Packaging for your favorite distribution would be a welcome contribution!
```
git clone --branch master --recursive https://github.com/monero-project/monero-gui.git
```
\* `master` - replace with the desired version tag (e.g. `v0.17.1.9`) to build the release binaries.
\* `master` - replace with the desired version tag (e.g. `v0.18.1.1`) to build the release binaries.
3. Prepare build environment
```
cd monero-gui
@@ -205,11 +209,11 @@ Packaging for your favorite distribution would be a welcome contribution!
- For Debian distributions (Debian, Ubuntu, Mint, Tails...)
`sudo apt install build-essential cmake libboost-all-dev miniupnpc libunbound-dev graphviz doxygen libunwind8-dev pkg-config libssl-dev libzmq3-dev libsodium-dev libhidapi-dev libnorm-dev libusb-1.0-0-dev libpgm-dev libprotobuf-dev protobuf-compiler libgcrypt20-dev`
`sudo apt install build-essential cmake miniupnpc libunbound-dev graphviz doxygen libunwind8-dev pkg-config libssl-dev libzmq3-dev libsodium-dev libhidapi-dev libnorm-dev libusb-1.0-0-dev libpgm-dev libprotobuf-dev protobuf-compiler libgcrypt20-dev libboost-chrono-dev libboost-date-time-dev libboost-filesystem-dev libboost-locale-dev libboost-program-options-dev libboost-regex-dev libboost-serialization-dev libboost-system-dev libboost-thread-dev`
- For Gentoo
`sudo emerge app-arch/xz-utils app-doc/doxygen dev-cpp/gtest dev-libs/boost dev-libs/expat dev-libs/openssl dev-util/cmake media-gfx/graphviz net-dns/unbound net-libs/ldns net-libs/miniupnpc net-libs/zeromq sys-libs/libunwind dev-libs/libsodium dev-libs/hidapi dev-libs/libgcrypt`
`sudo emerge app-arch/xz-utils app-doc/doxygen dev-cpp/gtest dev-libs/boost dev-libs/expat dev-libs/openssl dev-util/cmake media-gfx/graphviz net-dns/unbound net-libs/miniupnpc net-libs/zeromq sys-libs/libunwind dev-libs/libsodium dev-libs/hidapi dev-libs/libgcrypt`
- For Fedora
@@ -228,6 +232,9 @@ The following instructions will fetch Qt from your distribution's repositories i
`sudo apt install qtbase5-dev qt5-default qtdeclarative5-dev qml-module-qtqml-models2 qml-module-qtquick-controls qml-module-qtquick-controls2 qml-module-qtquick-dialogs qml-module-qtquick-xmllistmodel qml-module-qt-labs-settings qml-module-qt-labs-platform qml-module-qt-labs-folderlistmodel qttools5-dev-tools qml-module-qtquick-templates2 libqt5svg5-dev`
- For Gentoo
The *qml* USE flag must be enabled.
`sudo emerge dev-qt/qtcore:5 dev-qt/qtdeclarative:5 dev-qt/qtquickcontrols:5 dev-qt/qtquickcontrols2:5 dev-qt/qtgraphicaleffects:5`
@@ -237,9 +244,7 @@ The following instructions will fetch Qt from your distribution's repositories i
`sudo apt install qtmultimedia5-dev qml-module-qtmultimedia`
- For Gentoo
The *qml* USE flag must be enabled.
- For Gentoo
`emerge dev-qt/qtmultimedia:5`
@@ -253,11 +258,20 @@ The following instructions will fetch Qt from your distribution's repositories i
4. Build
If on x86-64:
```
make release -j4
```
If on ppc64le:
```
make release-linux-ppc64le -j4
```
\* `4` - number of CPU threads to use
\* Add `CMAKE_PREFIX_PATH` enviroment variable to set a custom Qt install directory, e.g. `CMAKE_PREFIX_PATH=$HOME/Qt/5.9.7/gcc_64 make release -j4`
\* Add `CMAKE_PREFIX_PATH` environment variable to set a custom Qt install directory, e.g. `CMAKE_PREFIX_PATH=$HOME/Qt/5.9.7/gcc_64 make release -j4`
The executable can be found in the build/release/bin folder.
@@ -269,7 +283,7 @@ The executable can be found in the build/release/bin folder.
3. Install [monero](https://github.com/monero-project/monero) dependencies:
`brew install boost hidapi zmq libpgm libsodium miniupnpc ldns expat libunwind-headers protobuf libgcrypt`
`brew install cmake pkg-config openssl boost unbound hidapi zmq libpgm libsodium miniupnpc expat libunwind-headers protobuf libgcrypt`
4. Install Qt:
@@ -288,7 +302,7 @@ The executable can be found in the build/release/bin folder.
make release -j4
```
\* `4` - number of CPU threads to use
\* Add `CMAKE_PREFIX_PATH` enviroment variable to set a custom Qt install directory, e.g. `CMAKE_PREFIX_PATH=$HOME/Qt/5.9.7/clang_64 make release -j4`
\* Add `CMAKE_PREFIX_PATH` environment variable to set a custom Qt install directory, e.g. `CMAKE_PREFIX_PATH=$HOME/Qt/5.9.7/clang_64 make release -j4`
The executable can be found in the `build/release/bin` folder.

View File

@@ -74,19 +74,19 @@ if(APPLE OR (WIN32 AND NOT STATIC))
)
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
list(APPEND WIN_DEPLOY_DLLS
libicudtd68.dll
libicuind68.dll
libicuiod68.dll
libicutud68.dll
libicuucd68.dll
libicudtd71.dll
libicuind71.dll
libicuiod71.dll
libicutud71.dll
libicuucd71.dll
)
else() # assume release
list(APPEND WIN_DEPLOY_DLLS
libicudt68.dll
libicuin68.dll
libicuio68.dll
libicutu68.dll
libicuuc68.dll
libicudt71.dll
libicuin71.dll
libicuio71.dll
libicutu71.dll
libicuuc71.dll
)
endif()
list(TRANSFORM WIN_DEPLOY_DLLS PREPEND "$ENV{MSYSTEM_PREFIX}/bin/")

View File

@@ -1,56 +0,0 @@
# Copyright (c) 2014-2020, 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.
# - Try to find readline include dirs and libraries
#
# Automatically finds ccache build accelerator, if it's found in PATH.
#
# Usage of this module as follows:
#
# project(monero)
# include(FindCcache) # Include AFTER the project() macro to be able to reach the CMAKE_CXX_COMPILER variable
#
# Properties modified by this module:
#
# GLOBAL PROPERTY RULE_LAUNCH_COMPILE set to ccache, when ccache found
# GLOBAL PROPERTY RULE_LAUNCH_LINK set to ccache, when ccache found
find_program(CCACHE_FOUND ccache)
if (CCACHE_FOUND)
set(TEMP_CPP_FILE "${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeTmp/test-program.cpp")
file(WRITE "${TEMP_CPP_FILE}" "int main() { return 0; }")
execute_process(COMMAND "${CCACHE_FOUND}" "${CMAKE_CXX_COMPILER}" "${TEMP_CPP_FILE}" RESULT_VARIABLE RET)
if (${RET} EQUAL 0)
message("found usable ccache: ${CCACHE_FOUND}")
set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE "${CCACHE_FOUND}")
set_property(GLOBAL PROPERTY RULE_LAUNCH_LINK "${CCACHE_FOUND}")
else()
message("found ccache ${CCACHE_FOUND}, but is UNUSABLE! Return code: ${RET}")
endif()
else()
message("ccache NOT found!")
endif()

View File

@@ -1,67 +0,0 @@
# Copyright (c) 2014-2019, 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.
#
# Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
function (git_get_version_tag git directory result_var)
execute_process(COMMAND "${git}" rev-parse --short HEAD
WORKING_DIRECTORY ${directory}
OUTPUT_VARIABLE COMMIT
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(NOT COMMIT)
message(WARNING "${directory}: cannot determine current commit. Make sure that you are building from a Git working tree")
set(${result_var} "unknown" PARENT_SCOPE)
return()
endif()
execute_process(COMMAND "${git}" describe --tags --exact-match
WORKING_DIRECTORY ${directory}
OUTPUT_VARIABLE TAG
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(TAG)
message(STATUS "${directory}: building tagged release ${TAG}-${COMMIT}")
set(${result_var} "${TAG}-${COMMIT}" PARENT_SCOPE)
return()
endif()
execute_process(COMMAND "${git}" describe --tags --long
WORKING_DIRECTORY ${directory}
OUTPUT_VARIABLE MOST_RECENT_TAG
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if(MOST_RECENT_TAG)
message(STATUS "${directory}: ahead of or behind a tagged release, building ${MOST_RECENT_TAG}")
set(${result_var} "${MOST_RECENT_TAG}" PARENT_SCOPE)
return()
endif()
message(STATUS "${directory}: building ${COMMIT} commit")
set(${result_var} "${COMMIT}" PARENT_SCOPE)
endfunction()

View File

@@ -26,7 +26,8 @@
# 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.
function (write_static_version_header VERSION_TAG_GUI)
function (write_static_version_header tag)
set(VERSION_TAG_GUI "${tag}" CACHE STRING "The tag portion of the Monero GUI software version" FORCE)
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/src/version.js.in" "${CMAKE_CURRENT_SOURCE_DIR}/version.js")
endfunction ()
@@ -36,11 +37,8 @@ if ("$Format:$" STREQUAL "")
write_static_version_header("release")
elseif (GIT_FOUND OR Git_FOUND)
message(STATUS "Found Git: ${GIT_EXECUTABLE}")
include(GitGetVersionTag)
git_get_version_tag(${GIT_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR} VERSION_TAG_GUI)
STRING(REGEX REPLACE "^v([0-9])" "\\1" VERSION_TAG_GUI ${VERSION_TAG_GUI})
write_static_version_header(${VERSION_TAG_GUI})
get_version_tag_from_git("${GIT_EXECUTABLE}")
write_static_version_header(${VERSIONTAG})
else()
message(STATUS "WARNING: Git was not found!")
write_static_version_header("unknown")

View File

@@ -37,27 +37,30 @@ RowLayout {
Layout.fillWidth: false
Layout.alignment: Qt.AlignTop | Qt.AlignLeft
spacing: 4
RowLayout {
Layout.fillWidth: false
spacing: 12
Layout.alignment: Qt.AlignTop | Qt.AlignLeft
StandardButton {
id: button1
small: true
primary: false
visible: button1.text
}
StandardButton {
id: button2
small: true
primary: false
visible: button2.text
}
StandardButton {
id: button3
small: true
primary: false
visible: button3.text
}
}

View File

@@ -5,14 +5,21 @@ import FontAwesome 1.0
import "../components" as MoneroComponents
MouseArea {
signal cut()
signal copy()
signal paste()
signal remove()
signal selectAll()
id: root
acceptedButtons: Qt.RightButton
anchors.fill: parent
onClicked: {
if (mouse.button === Qt.RightButton)
if (mouse.button === Qt.RightButton) {
root.parent.persistentSelection = true;
contextMenu.open()
root.parent.cursorVisible = true;
}
}
Menu {
@@ -22,19 +29,50 @@ MouseArea {
border.color: MoneroComponents.Style.buttonBackgroundColorDisabledHover
border.width: 1
radius: 2
color: MoneroComponents.Style.buttonBackgroundColorDisabled
color: MoneroComponents.Style.blackTheme ? MoneroComponents.Style.buttonBackgroundColorDisabled : "#E5E5E5"
}
padding: 1
width: 100
width: 110
x: root.mouseX
y: root.mouseY
onClosed: {
if (!root.parent.activeFocus) {
root.parent.cursorVisible = false;
}
root.parent.persistentSelection = false;
root.parent.forceActiveFocus()
}
MoneroComponents.ContextMenuItem {
enabled: root.parent.selectedText != "" && !root.parent.readOnly
onTriggered: root.cut()
text: qsTr("Cut") + translationManager.emptyString
}
MoneroComponents.ContextMenuItem {
enabled: root.parent.selectedText != ""
onTriggered: root.copy()
text: qsTr("Copy") + translationManager.emptyString
}
MoneroComponents.ContextMenuItem {
enabled: root.parent.canPaste === true
glyphIcon: FontAwesome.paste
onTriggered: root.paste()
text: qsTr("Paste") + translationManager.emptyString
}
MoneroComponents.ContextMenuItem {
enabled: root.parent.selectedText != "" && !root.parent.readOnly
onTriggered: root.remove()
text: qsTr("Delete") + translationManager.emptyString
}
MoneroComponents.ContextMenuItem {
enabled: root.parent.text != ""
onTriggered: root.selectAll()
text: qsTr("Select All") + translationManager.emptyString
}
}
}

View File

@@ -13,21 +13,31 @@ MenuItem {
background: Rectangle {
color: MoneroComponents.Style.buttonBackgroundColorDisabledHover
opacity: mouse.containsMouse ? 1 : 0
opacity: 0
MouseArea {
id: mouse
anchors.fill: parent
hoverEnabled: true
onClicked: menuItem.triggered()
visible: menuItem.enabled
onEntered: {
parent.opacity = 1;
}
onExited: {
parent.opacity = 0;
}
onClicked: {
if (menuItem.enabled) {
menuItem.triggered();
parent.opacity = 0;
}
}
}
}
contentItem: RowLayout {
anchors.fill: parent
anchors.leftMargin: 10
anchors.leftMargin: 20
anchors.rightMargin: 10
opacity: menuItem.enabled ? 1 : 0.4
spacing: 8
@@ -42,7 +52,7 @@ MenuItem {
}
Text {
color: MoneroComponents.Style.buttonTextColor
color: MoneroComponents.Style.blackTheme ? MoneroComponents.Style.buttonTextColor : MoneroComponents.Style.defaultFontColor
font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 14
Layout.fillWidth: true

View File

@@ -32,6 +32,7 @@ import QtQuick.Dialogs 1.2
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.4
import QtQuick.Window 2.0
import moneroComponents.Wallet 1.0
import "../components" as MoneroComponents
@@ -79,6 +80,10 @@ Window {
running: false;
repeat: true
onTriggered: {
if (currentWallet.connected() == Wallet.ConnectionStatus_Connected) {
running = false;
root.close();
}
countDown--;
if(countDown < 0){
running = false;

View File

@@ -64,7 +64,7 @@ Item {
Rectangle{
id: rect
anchors.fill: parent
color: MoneroComponents.Style.buttonInlineBackgroundColor
color: buttonArea.containsMouse ? MoneroComponents.Style.buttonInlineBackgroundColorHover : MoneroComponents.Style.buttonInlineBackgroundColor
radius: 4
@@ -101,13 +101,9 @@ Item {
}
onEntered: {
tooltip.text ? tooltip.tooltipPopup.open() : ""
rect.color = buttonColor ? buttonColor : "#707070";
rect.opacity = 0.8;
}
onExited: {
tooltip.text ? tooltip.tooltipPopup.close() : ""
rect.opacity = 1.0;
rect.color = buttonColor ? buttonColor : "#808080";
}
}
}

View File

@@ -48,9 +48,16 @@ TextField {
MoneroComponents.ContextMenu {
cursorShape: Qt.IBeamCursor
onCut: textField.cut();
onCopy: textField.copy();
onPaste: {
textField.clear();
var previoustextFieldLength = textField.length
var previousCursorPosition = textField.cursorPosition;
textField.paste();
textField.forceActiveFocus()
textField.cursorPosition = previousCursorPosition + (textField.length - previoustextFieldLength);
}
onRemove: textField.remove(selectionStart, selectionEnd);
onSelectAll: textField.selectAll();
}
}

View File

@@ -71,9 +71,16 @@ TextArea {
MoneroComponents.ContextMenu {
cursorShape: Qt.IBeamCursor
onCut: textArea.cut();
onCopy: textArea.copy();
onPaste: {
textArea.clear();
var previoustextFieldLength = textArea.length
var previousCursorPosition = textArea.cursorPosition;
textArea.paste();
textArea.forceActiveFocus()
textArea.cursorPosition = previousCursorPosition + (textArea.length - previoustextFieldLength);
}
onRemove: textArea.remove(selectionStart, selectionEnd);
onSelectAll: textArea.selectAll();
}
}

View File

@@ -34,6 +34,7 @@ import "../components/effects/" as MoneroEffects
Label {
id: item
fontSize: 18
tooltipIconVisible: true
Rectangle {
anchors.top: item.bottom

View File

@@ -218,7 +218,7 @@ ColumnLayout {
Layout.preferredHeight: inputHeight
leftPadding: item.inputPaddingLeft
rightPadding: (inlineButtons.width > 0 ? inlineButtons.width + inlineButtons.spacing : 0) + inputPaddingRight
rightPadding: (inlineButtons.width > 0 ? inlineButtons.width + inlineButtons.spacing : 0) + inputPaddingRight + (password || passwordLinked ? 45 : 0)
topPadding: item.inputPaddingTop
bottomPadding: item.inputPaddingBottom

View File

@@ -32,6 +32,8 @@ import "." as MoneroComponents
Rectangle {
default property list<MoneroComponents.NavbarItem> items
property alias currentIndex: repeater.currentIndex
property alias previousIndex: repeater.previousIndex
color: "transparent"
height: grid.height
@@ -100,7 +102,10 @@ Rectangle {
}
Repeater {
id: repeater
model: items.length
property int currentIndex: 0
property int previousIndex: 0
RowLayout {
spacing: 0
@@ -149,7 +154,11 @@ Rectangle {
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onClicked: items[index].selected()
onClicked: {
repeater.previousIndex = repeater.currentIndex;
repeater.currentIndex = index;
items[index].selected()
}
}
}

View File

@@ -52,6 +52,8 @@ Rectangle {
case Wallet.ConnectionStatus_Connected:
if (!appWindow.daemonSynced)
return qsTr("Synchronizing");
if (persistentSettings.useRemoteNode && persistentSettings.allowRemoteNodeMining && appWindow.isMining)
return qsTr("Remote node") + " + " + qsTr("Mining");
if (persistentSettings.useRemoteNode)
return qsTr("Remote node");
return appWindow.isMining ? qsTr("Connected") + " + " + qsTr("Mining"): qsTr("Connected");

View File

@@ -108,7 +108,11 @@ Item {
leftPanel.enabled = true
middlePanel.enabled = true
wizard.enabled = true
titleBar.state = "default"
if (rootItem.state == "wizard") {
titleBar.state = "essentials"
} else {
titleBar.state = "default"
}
root.visible = false;
appWindow.hideBalanceForced = false;

View File

@@ -42,6 +42,13 @@ MoneroComponents.Dialog {
onActiveFocusChanged: activeFocus && remoteNodeAddress.forceActiveFocus()
function onOk() {
root.success = true;
root.close();
}
function onCancel() { root.close(); }
function add(callbackOnSuccess) {
root.editMode = false;
root.callbackOnSuccess = callbackOnSuccess;
@@ -89,6 +96,11 @@ MoneroComponents.Dialog {
daemonAddrLabelText: qsTr("Address") + translationManager.emptyString
daemonPortLabelText: qsTr("Port") + translationManager.emptyString
Keys.enabled: root.visible
Keys.onEnterPressed: root.onOk()
Keys.onReturnPressed: root.onOk()
Keys.onEscapePressed: root.onCancel()
}
RowLayout {
@@ -116,6 +128,11 @@ MoneroComponents.Dialog {
placeholderFontSize: 15
labelFontSize: 14
fontSize: 15
Keys.enabled: root.visible
Keys.onEnterPressed: root.onOk()
Keys.onReturnPressed: root.onOk()
Keys.onEscapePressed: root.onCancel()
}
}

View File

@@ -89,7 +89,7 @@ ColumnLayout {
anchors.fill: parent
anchors.rightMargin: 80
color: "transparent"
property var trusted: remoteNodesModel.get(index).trusted
property var trusted: remoteNodesModel.get(index) ? remoteNodesModel.get(index).trusted : false
MoneroComponents.TextPlain {
id: addressText
@@ -107,8 +107,9 @@ ColumnLayout {
MoneroComponents.Label {
id: trustedDaemonCheckMark
anchors.left: addressText.right
anchors.leftMargin: 6
anchors.leftMargin: 3
anchors.verticalCenter: parent.verticalCenter
anchors.verticalCenterOffset: 2
z: itemMouseArea.z + 1
fontSize: 16
fontFamily: FontAwesome.fontFamilySolid
@@ -144,6 +145,9 @@ ColumnLayout {
tooltipLeft: true
onClicked: remoteNodeDialog.edit(remoteNodesModel.get(index), function (remoteNode) {
remoteNodesModel.set(index, remoteNode)
if (index === remoteNodesModel.selected) {
remoteNodesModel.applyRemoteNode(index)
}
})
}

View File

@@ -7,9 +7,11 @@ import "../components" as MoneroComponents
ColumnLayout {
id: settingsListItem
property alias iconText: iconLabel.text
property alias symbol: symbolText.text
property alias description: area.text
property alias title: header.text
property bool isLast: false
property bool enabled: true
signal clicked()
Layout.fillWidth: true
@@ -37,6 +39,7 @@ ColumnLayout {
width: parent.width
height: header.height + area.contentHeight
color: "transparent";
opacity: settingsListItem.enabled ? 1 : 0.25
anchors.left: parent.left
anchors.bottomMargin: 4
anchors.topMargin: 4
@@ -102,6 +105,7 @@ ColumnLayout {
}
MouseArea {
visible: settingsListItem.enabled
cursorShape: Qt.PointingHandCursor
anchors.fill: parent
hoverEnabled: true
@@ -111,5 +115,17 @@ ColumnLayout {
settingsListItem.clicked()
}
}
MoneroComponents.TextPlain {
id: symbolText
anchors.right: parent.right
anchors.rightMargin: 44
anchors.verticalCenter: parent.verticalCenter
font.pixelSize: 12
font.bold: true
color: MoneroComponents.Style.menuButtonTextColor
visible: appWindow.ctrlPressed
themeTransition: false
}
}
}

View File

@@ -39,16 +39,12 @@ Item {
property bool primary: true
property string rightIcon: ""
property string rightIconInactive: ""
property color textColor: !button.enabled
? MoneroComponents.Style.buttonTextColorDisabled
: primary
? MoneroComponents.Style.buttonTextColor
: MoneroComponents.Style.buttonSecondaryTextColor;
property color textColor: primary ? MoneroComponents.Style.buttonTextColor : MoneroComponents.Style.buttonSecondaryTextColor;
property bool small: false
property alias text: label.text
property alias fontBold: label.font.bold
property int fontSize: {
if(small) return 14;
if(small) return 13.5;
else return 16;
}
property alias label: label
@@ -72,6 +68,7 @@ Item {
anchors.fill: parent
radius: 3
border.width: parent.focus && parent.enabled ? 1 : 0
opacity: 1
state: button.enabled ? "active" : "disabled"
Component.onCompleted: state = state
@@ -102,7 +99,14 @@ Item {
when: !button.enabled
PropertyChanges {
target: buttonRect
color: MoneroComponents.Style.buttonBackgroundColorDisabled
opacity: 0.5
color: primary
? MoneroComponents.Style.buttonBackgroundColor
: MoneroComponents.Style.buttonSecondaryBackgroundColor
}
PropertyChanges {
target: label
opacity: 0.5
}
}
]
@@ -122,7 +126,7 @@ Item {
MoneroComponents.TextPlain {
id: label
font.family: MoneroComponents.Style.fontBold.name
font.bold: true
font.bold: button.primary ? true : false
font.pixelSize: button.fontSize
color: !buttonArea.pressed ? button.textColor : "transparent"
visible: text !== ""
@@ -145,6 +149,7 @@ Item {
Layout.alignment: Qt.AlignVCenter | Qt.AlignRight
width: button.small ? 16 : 20
height: button.small ? 16 : 20
opacity: buttonRect.opacity
source: {
if (fontAwesomeIcon) return "";
if(button.rightIconInactive !== "" && !button.enabled) {

View File

@@ -191,7 +191,7 @@ ColumnLayout {
anchors.leftMargin: 12
anchors.rightMargin: 0
font.family: MoneroComponents.Style.fontRegular.name
font.bold: true
font.bold: false
font.pixelSize: fontItemSize
color: itemArea.containsMouse || index === columnid.currentIndex || itemArea.containsMouse ? "#FA6800" : "#FFFFFF"
text: qsTr(column1) + translationManager.emptyString

View File

@@ -42,11 +42,12 @@ QtObject {
property string buttonBackgroundColorDisabled: blackTheme ? _b_buttonBackgroundColorDisabled : _w_buttonBackgroundColorDisabled
property string buttonBackgroundColorDisabledHover: blackTheme ? _b_buttonBackgroundColorDisabledHover : _w_buttonBackgroundColorDisabledHover
property string buttonInlineBackgroundColor: blackTheme ? _b_buttonInlineBackgroundColor : _w_buttonInlineBackgroundColor
property string buttonInlineBackgroundColorHover: blackTheme ? _b_buttonInlineBackgroundColorHover : _w_buttonInlineBackgroundColorHover
property string buttonTextColor: blackTheme ? _b_buttonTextColor : _w_buttonTextColor
property string buttonTextColorDisabled: blackTheme ? _b_buttonTextColorDisabled : _w_buttonTextColorDisabled
property string buttonSecondaryBackgroundColor: "#d9d9d9"
property string buttonSecondaryBackgroundColorHover: "#a6a6a6"
property string buttonSecondaryTextColor: "#4d4d4d"
property string buttonSecondaryBackgroundColor: blackTheme ? _b_buttonSecondaryBackgroundColor : _w_buttonSecondaryBackgroundColor
property string buttonSecondaryBackgroundColorHover: blackTheme ? _b_buttonSecondaryBackgroundColorHover : _w_buttonSecondaryBackgroundColorHover
property string buttonSecondaryTextColor: blackTheme ? _b_buttonSecondaryTextColor : _w_buttonSecondaryTextColor
property string dividerColor: blackTheme ? _b_dividerColor : _w_dividerColor
property real dividerOpacity: blackTheme ? _b_dividerOpacity : _w_dividerOpacity
@@ -102,8 +103,12 @@ QtObject {
property string _b_buttonBackgroundColorDisabled: "#707070"
property string _b_buttonBackgroundColorDisabledHover: "#808080"
property string _b_buttonInlineBackgroundColor: "#707070"
property string _b_buttonInlineBackgroundColorHover: "#808080"
property string _b_buttonTextColor: "white"
property string _b_buttonTextColorDisabled: "black"
property string _b_buttonSecondaryBackgroundColor: "#707070"
property string _b_buttonSecondaryBackgroundColorHover: "#808080"
property string _b_buttonSecondaryTextColor: "white"
property string _b_dividerColor: "white"
property real _b_dividerOpacity: 0.20
@@ -158,9 +163,13 @@ QtObject {
property string _w_buttonBackgroundColorHover: "#E65E00"
property string _w_buttonBackgroundColorDisabled: "#bbbbbb"
property string _w_buttonBackgroundColorDisabledHover: "#D1D1D1"
property string _w_buttonInlineBackgroundColor: "#bbbbbb"
property string _w_buttonInlineBackgroundColor: "#d9d9d9"
property string _w_buttonInlineBackgroundColorHover: "#C8C8C8"
property string _w_buttonTextColor: "white"
property string _w_buttonTextColorDisabled: "black"
property string _w_buttonSecondaryBackgroundColor: "#d9d9d9"
property string _w_buttonSecondaryBackgroundColorHover: "#C8C8C8"
property string _w_buttonSecondaryTextColor: "#4d4d4d"
property string _w_dividerColor: "black"
property real _w_dividerOpacity: 0.20
@@ -185,7 +194,7 @@ QtObject {
property string _w_menuButtonImageRightColorActive: "#FA6800"
property string _w_menuButtonImageRightColor: "#808080"
property string _w_menuButtonImageDotArrowSource: "qrc:///images/arrow-right-medium-white.png"
property string _w_inlineButtonTextColor: "black"
property string _w_inlineButtonTextColor: "#4d4d4d"
property string _w_inlineButtonBorderColor: "transparent"
property string _w_appWindowBackgroundColor: "black"
property string _w_appWindowBorderColor: "#dedede"

View File

@@ -57,17 +57,20 @@ Rectangle {
signal minimizeClicked
signal languageClicked
signal closeWalletClicked
signal lockWalletClicked
state: "default"
states: [
State {
name: "default";
PropertyChanges { target: btnCloseWallet; visible: true}
PropertyChanges { target: btnLockWallet; visible: true}
PropertyChanges { target: btnLanguageToggle; visible: true}
}, State {
// show only theme switcher and window controls
name: "essentials";
PropertyChanges { target: btnCloseWallet; visible: false}
PropertyChanges { target: btnLockWallet; visible: false}
PropertyChanges { target: btnLanguageToggle; visible: false}
}
]
@@ -91,6 +94,46 @@ Rectangle {
spacing: 0
anchors.fill: parent
// lock wallet
Rectangle {
id: btnLockWallet
color: "transparent"
Layout.preferredWidth: parent.height
Layout.preferredHeight: parent.height
Text {
text: FontAwesome.lock
font.family: FontAwesome.fontFamilySolid
font.pixelSize: 16
color: MoneroComponents.Style.defaultFontColor
font.styleName: "Solid"
anchors.verticalCenter: parent.verticalCenter
anchors.horizontalCenter: parent.horizontalCenter
opacity: 0.75
}
MoneroComponents.Tooltip {
id: btnLockWalletTooltip
anchors.fill: parent
text: qsTr("Lock this wallet") + translationManager.emptyString
}
MouseArea {
anchors.fill: parent
hoverEnabled: true
cursorShape: Qt.PointingHandCursor
onEntered: {
parent.color = MoneroComponents.Style.titleBarButtonHoverColor
btnLockWalletTooltip.tooltipPopup.open()
}
onExited: {
parent.color = "transparent"
btnLockWalletTooltip.tooltipPopup.close()
}
onClicked: root.lockWalletClicked(leftPanel.visible)
}
}
// collapse sidebar
Rectangle {
id: btnCloseWallet

View File

@@ -48,7 +48,7 @@ Rectangle {
Text {
id: icon
visible: tooltipIconVisible
color: MoneroComponents.Style.orange
color: MoneroComponents.Style.defaultFontColor
font.family: FontAwesome.fontFamily
font.pixelSize: 10
font.styleName: "Regular"
@@ -95,11 +95,12 @@ Rectangle {
delay: 200
RowLayout {
Layout.maximumWidth: 350
Layout.maximumWidth: 370
Text {
id: tooltip
width: contentWidth
Layout.maximumWidth: 370
color: MoneroComponents.Style.defaultFontColor
font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 12

View File

@@ -338,8 +338,9 @@ Rectangle {
spacing: 16
Text {
color: MoneroComponents.Style.defaultFontColor
font.pixelSize: 15
property bool maliciousTxFee: parseFloat(root.transactionFee) > 0.01
color: maliciousTxFee ? "red" : MoneroComponents.Style.defaultFontColor
font.pixelSize: maliciousTxFee ? 20 : 15
text: {
if (currentWallet) {
if (!root.transactionFee) {
@@ -349,7 +350,7 @@ Rectangle {
return qsTr("Calculating fee") + "..." + translationManager.emptyString;
}
} else {
return root.transactionFee + " XMR"
return root.transactionFee + " XMR" + (maliciousTxFee ? " (HIGH FEE)" : "")
}
} else {
return "";

View File

@@ -35,6 +35,7 @@ Object {
property string arrowLeft : "\uf060"
property string arrowRight : "\uf061"
property string cashRegister: "\uf788"
property string checkCircle: "\uf058"
property string clipboard : "\uf0ea"
property string clockO : "\uf017"
property string cloud : "\uf0c2"
@@ -52,6 +53,8 @@ Object {
property string info : "\uf129"
property string key : "\uf084"
property string language : "\uf1ab"
property string lock : "\uf023"
property string magnifyingGlass : "\uf002"
property string minus : "\uf068"
property string minusCircle : "\uf056"
property string moonO : "\uf186"

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
images/appicon.icns Executable file → Normal file

Binary file not shown.

BIN
images/ledgerNanoSPlus.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 640 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 937 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 569 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 717 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 608 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 779 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 969 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 958 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 742 B

After

Width:  |  Height:  |  Size: 424 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 678 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1,4 +1,4 @@
; Monero Oxygen Orion GUI Wallet Installer for Windows
; Monero Fluorine Fermi GUI Wallet Installer for Windows
; Copyright (c) 2017-2020, The Monero Project
; See LICENSE
#define GuiVersion GetFileVersion("bin\monero-wallet-gui.exe")
@@ -16,7 +16,7 @@ DefaultGroupName=Monero GUI Wallet
UninstallDisplayIcon={app}\monero-wallet-gui.exe
PrivilegesRequired=admin
ArchitecturesInstallIn64BitMode=x64
ArchitecturesAllowed=x64
ArchitecturesAllowed=x64 arm64
WizardSmallImageFile=WizardSmallImage.bmp
WizardImageFile=WelcomeImage.bmp
DisableWelcomePage=no
@@ -54,6 +54,9 @@ Name: "en"; MessagesFile: "compiler:Default.isl"
; Name: "nl"; MessagesFile: "compiler:Languages\Dutch.isl"
; Name: "pt"; MessagesFile: "compiler:Languages\Portuguese.isl"
[Dirs]
Name: "{app}";
Name: "{app}\p2pool"; Permissions: users-full
[Files]
; The use of the flag "ignoreversion" for the following entries leads to the following behaviour:
@@ -135,6 +138,7 @@ Type: filesandordirs; Name: "{app}\QtQuick.2"
Type: filesandordirs; Name: "{app}\Material"
Type: filesandordirs; Name: "{app}\Universal"
Type: filesandordirs; Name: "{app}\scenegraph"
Type: filesandordirs; Name: "{app}\p2pool"
Type: files; Name: "{app}\D3Dcompiler_47.dll"
Type: files; Name: "{app}\libbz2-1.dll"
Type: files; Name: "{app}\libEGL.dll"

View File

@@ -6,7 +6,7 @@ Copyright (c) 2017-2020, The Monero Project
This is a *Inno Setup* script `Monero.iss` plus some related files
that allows you to build a standalone Windows installer (.exe) for
the GUI wallet that comes with the Oxygen Orion release of Monero.
the GUI wallet that comes with the Fluorine Fermi release of Monero.
This turns the GUI wallet into a more or less standard Windows program,
by default installed into a subdirectory of `C:\Program Files`, a
@@ -18,7 +18,7 @@ Monero.
As the setup script in file [Monero.iss](Monero.iss) has to list many
files and directories of the GUI wallet package to install by name,
this version of the script only works with exactly the GUI wallet
for Monero release *Oxygen Orion* that you find on
for Monero release *Fluorine Fermi* that you find on
[the official download page](https://getmonero.org/downloads/).
It should however be easy to modify the script for future
@@ -39,8 +39,8 @@ Note that the installer build process is now reproducible / deterministic. For d
The build steps in detail:
1. Install *Inno Setup*. You can get it from [here](http://www.jrsoftware.org/isdl.php)
2. Get the Inno Setup script plus related files by cloning the whole [monero-gui GitHub repository](https://github.com/monero-project/monero-gui); you will only need the files in the installer directory `installers\windows` however. Depending on development state, additionally instead of simply using `master` you may have to checkout a specific branch, like `release-v0.17`.
3. The setup script is written to take the GUI wallet files from a subdirectory named `bin`; so create `installers\windows\bin`, get the zip file of the GUI wallet from [here](https://getmonero.org/downloads/), unpack it somewhere, and copy all the files and subdirectories in the single subdirectory there (currently named `monero-gui-0.17.0.0`) to this `bin` subdirectory
2. Get the Inno Setup script plus related files by cloning the whole [monero-gui GitHub repository](https://github.com/monero-project/monero-gui); you will only need the files in the installer directory `installers\windows` however.
3. The setup script is written to take the GUI wallet files from a subdirectory named `bin`; so create `installers\windows\bin`, get the zip file of the GUI wallet from [here](https://getmonero.org/downloads/), unpack it somewhere, and copy all the files and subdirectories in the single subdirectory there (currently named `monero-gui-0.18.0.0`) to this `bin` subdirectory
4. Start Inno Setup, load `Monero.iss` and compile it
5. The result i.e. the finished installer will be the file `mysetup.exe` in the `installers\windows\Output` subdirectory

View File

@@ -1,10 +1,10 @@
<html>
<head>
<title>Monero Oxygen Orion GUI Wallet</title>
<title>Monero Fluorine Fermi GUI Wallet</title>
</head>
<body style="font-family: Arial, Helvetica, sans-serif">
<h1>Monero Oxygen Orion GUI Wallet</h1>
<h1>Monero Fluorine Fermi GUI Wallet</h1>
<p>Copyright (c) 2014-2020, The Monero Project</p>
@@ -22,7 +22,7 @@
<h2>Content of the Package</h2>
<p>You just installed the <i>Monero GUI wallet</i> for Windows, release Oxygen Orion, version {#GuiVersion}.
<p>You just installed the <i>Monero GUI wallet</i> for Windows, release Fluorine Fermi, version {#GuiVersion}.
The wallet enables you to send and receive Moneroj in a secure and very private way.
</p>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 440 KiB

After

Width:  |  Height:  |  Size: 440 KiB

View File

@@ -61,42 +61,18 @@ function checkSignature(signature) {
if ((signature.length - 12) % 88 != 0)
return false;
return check256(signature, signature.length);
} else if (signature.indexOf("ReserveProofV") === 0) {
if ((signature.length - 14) % 447 != 0)
return false;
return check256(signature, signature.length);
}
return false;
}
function isValidOpenAliasAddress(address) {
address = address.trim()
var dot = address.indexOf('.')
if (dot < 0)
return false
// we can get an awful lot of valid domains, including non ASCII chars... accept anything
return true
}
function makeQRCodeString(addr, amount, txDescription, recipientName) {
var XMR_URI_SCHEME = "monero:"
var XMR_AMOUNT = "tx_amount"
var XMR_RECIPIENT_NAME = "recipient_name"
var XMR_TX_DESCRIPTION = "tx_description"
var qrCodeString =""
qrCodeString += (XMR_URI_SCHEME + addr)
if (amount !== undefined && amount !== ""){
qrCodeString += ("?" + XMR_AMOUNT + "=" + amount)
}
if (txDescription !== undefined && txDescription !== ""){
if (amount == ""){
qrCodeString += ("?" + XMR_TX_DESCRIPTION + "=" + encodeURI(txDescription))
} else {
qrCodeString += ("&" + XMR_TX_DESCRIPTION + "=" + encodeURI(txDescription))
}
}
if (recipientName !== undefined && recipientName !== ""){
if (amount == "" && txDescription == ""){
qrCodeString += ("?" + XMR_RECIPIENT_NAME + "=" + encodeURI(recipientName))
} else {
qrCodeString += ("&" + XMR_RECIPIENT_NAME + "=" + encodeURI(recipientName))
}
}
return qrCodeString
// there should be something after the .
// make sure it is not some kind of floating number
return address.length > 2 && isNaN(parseFloat(address)) && address.indexOf('.') >= 0
}

View File

@@ -1,4 +1,5 @@
var flagsCustomDecorations = (Qt.FramelessWindowHint | Qt.CustomizeWindowHint | Qt.WindowSystemMenuHint | Qt.Window);
var flagsCustomDecorationsBase = (Qt.FramelessWindowHint | Qt.CustomizeWindowHint | Qt.WindowSystemMenuHint | Qt.Window);
var flagsCustomDecorations = isWindows ? (flagsCustomDecorationsBase | Qt.WindowMinimizeButtonHint) : flagsCustomDecorationsBase;
var flags = (Qt.WindowSystemMenuHint | Qt.Window | Qt.WindowMinimizeButtonHint | Qt.WindowCloseButtonHint | Qt.WindowTitleHint | Qt.WindowMaximizeButtonHint | Qt.WindowFullscreenButtonHint);
/**

View File

@@ -164,9 +164,9 @@ function getApproximateBlockchainHeight(_date, _nettype){
secondsPerBlock = secondsPerBlockV2;
}
if(_nettype == "Testnet"){
if(_nettype == "Testnet" || _nettype == "Stagenet"){
// testnet got some huge rollbacks, so the estimation is way off
var approximateTestnetRolledBackBlocks = 342100;
var approximateTestnetRolledBackBlocks = _nettype == "Testnet" ? 342100 : 30000;
if(approxBlockchainHeight > approximateTestnetRolledBackBlocks)
approxBlockchainHeight -= approximateTestnetRolledBackBlocks
}

BIN
lang/flags/el.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

BIN
lang/flags/is.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.9 KiB

BIN
lang/flags/vi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

@@ -61,4 +61,9 @@ Lojban
<!-- <language display_name="کورمانجی" locale="kmr_KMR" wallet_language="English" flag="/lang/flags/ku.png" qs="none"/> -->
<!-- <language display_name="বাংলা" locale="bn_BN" wallet_language="English" flag="/lang/flags/bd.png" qs="none"/> -->
<!-- <language display_name="Gaeilge" locale="ga_GA" wallet_language="English" flag="/lang/flags/irl.png" qs="none"/> -->
<language display_name="Afrikaans" locale="af_AF" wallet_language="English" flag="/lang/flags/za.png" qs="none"/>
<language display_name="Ελληνικά" locale="el_GR" wallet_language="English" flag="/lang/flags/el.png" qs="none"/>
<language display_name="தமிழ்" locale="ta_IN" wallet_language="English" flag="/lang/flags/in.png" qs="none"/>
<language display_name="Tiếng Việt" locale="vi_VN" wallet_language="English" flag="/lang/flags/vi.png" qs="none"/>
<language display_name="Íslenska" locale="is_IS" wallet_language="English" flag="/lang/flags/is.png" qs="none"/>
</languages>

154
main.qml
View File

@@ -42,6 +42,7 @@ import moneroComponents.WalletManager 1.0
import moneroComponents.PendingTransaction 1.0
import moneroComponents.NetworkType 1.0
import moneroComponents.Settings 1.0
import moneroComponents.P2PoolManager 1.0
import "components"
import "components" as MoneroComponents
@@ -131,6 +132,17 @@ ApplicationWindow {
leftPanel.selectItem(page)
}
function lock() {
passwordDialog.onRejectedCallback = function() { appWindow.showWizard(); }
passwordDialog.onAcceptedCallback = function() {
if(walletPassword === passwordDialog.password)
passwordDialog.close();
else
passwordDialog.showError(qsTr("Wrong password") + translationManager.emptyString);
}
passwordDialog.open(usefulName(persistentSettings.wallet_path));
}
function sequencePressed(obj, seq) {
if(seq === undefined || !leftPanel.enabled)
return
@@ -139,6 +151,8 @@ ApplicationWindow {
return
}
// lock wallet on demand
if(seq === "Ctrl+L" && !passwordDialog.visible) lock()
if(seq === "Ctrl+S") middlePanel.state = "Transfer"
else if(seq === "Ctrl+R") middlePanel.state = "Receive"
else if(seq === "Ctrl+H") middlePanel.state = "History"
@@ -259,9 +273,6 @@ ApplicationWindow {
walletPassword,
persistentSettings.nettype,
persistentSettings.kdfRounds);
// Hide titlebar based on persistentSettings.customDecorations
titleBar.visible = persistentSettings.customDecorations;
}
function closeWallet(callback) {
@@ -310,27 +321,6 @@ ApplicationWindow {
function connectWallet(wallet) {
currentWallet = wallet
// TODO:
// When the wallet variable is undefined, it yields a zero balance.
// This can scare users, restart the GUI (as a quick fix).
//
// To reproduce, follow these steps:
// 1) Open the GUI, load up a wallet that has a balance
// 2) Settings -> close wallet
// 3) Create a new wallet
// 4) Settings -> close wallet
// 5) Open the wallet from step 1
if(!wallet || wallet === undefined || wallet.path === undefined){
informationPopup.title = qsTr("Error") + translationManager.emptyString;
informationPopup.text = qsTr("Couldn't open wallet: ") + 'please restart GUI.';
informationPopup.icon = StandardIcon.Critical
informationPopup.open()
informationPopup.onCloseCallback = function() {
appWindow.close();
}
}
walletName = usefulName(wallet.path)
viewOnly = currentWallet.viewOnly;
@@ -491,7 +481,9 @@ ApplicationWindow {
walletInitialized = true
// check if daemon was already mining and add mining logo if true
middlePanel.advancedView.miningView.update();
if (!persistentSettings.useRemoteNode || persistentSettings.allowRemoteNodeMining) {
middlePanel.advancedView.miningView.update();
}
}
}
@@ -721,6 +713,7 @@ ApplicationWindow {
if (splash) {
appWindow.showProcessingSplash(qsTr("Waiting for daemon to stop..."));
}
p2poolManager.exit()
daemonManager.stopAsync(persistentSettings.nettype, function(result) {
daemonStartStopInProgress = 0;
if (splash) {
@@ -733,14 +726,18 @@ ApplicationWindow {
function onDaemonStarted(){
console.log("daemon started");
daemonStartStopInProgress = 0;
currentWallet.connected(true);
// resume refresh
currentWallet.startRefresh();
if (currentWallet) {
currentWallet.connected(true);
// resume refresh
currentWallet.startRefresh();
}
// resume simplemode connection timer
appWindow.disconnectedEpoch = Utils.epoch();
}
function onDaemonStopped(){
currentWallet.connected(true);
if (currentWallet) {
currentWallet.connected(true);
}
}
function onDaemonStartFailure(error) {
@@ -984,24 +981,28 @@ ApplicationWindow {
}
// called on "getProof"
function handleGetProof(txid, address, message) {
console.log("Getting payment proof: ")
console.log("\ttxid: ", txid,
", address: ", address,
", message: ", message);
function spendProofFallback(txid, result){
if (!result || result.indexOf("error|") === 0) {
currentWallet.getSpendProofAsync(txid, message, txProofComputed);
} else {
txProofComputed(txid, result);
function handleGetProof(txid, address, message, amount) {
if (amount !== null && amount.length > 0) {
var result = currentWallet.getReserveProof(false, currentWallet.currentSubaddressAccount, walletManager.amountFromString(amount), message)
txProofComputed(null, result)
} else {
console.log("Getting payment proof: ")
console.log("\ttxid: ", txid,
", address: ", address,
", message: ", message);
function spendProofFallback(txid, result){
if (!result || result.indexOf("error|") === 0) {
currentWallet.getSpendProofAsync(txid, message, txProofComputed);
} else {
txProofComputed(txid, result);
}
}
if (address.length > 0)
currentWallet.getTxProofAsync(txid, address, message, spendProofFallback);
else
spendProofFallback(txid, null);
}
if (address.length > 0)
currentWallet.getTxProofAsync(txid, address, message, spendProofFallback);
else
spendProofFallback(txid, null);
informationPopup.open()
}
function txProofComputed(txid, result){
@@ -1024,12 +1025,18 @@ ApplicationWindow {
", signature: ", signature);
var result;
if (address.length > 0)
var isReserveProof = signature.indexOf("ReserveProofV") === 0;
if (address.length > 0 && !isReserveProof) {
result = currentWallet.checkTxProof(txid, address, message, signature);
else
}
else if (isReserveProof) {
result = currentWallet.checkReserveProof(address, message, signature);
}
else {
result = currentWallet.checkSpendProof(txid, message, signature);
}
var results = result.split("|");
if (address.length > 0 && results.length == 5 && results[0] === "true") {
if (address.length > 0 && results.length == 5 && results[0] === "true" && !isReserveProof) {
var good = results[1] === "true";
var received = results[2];
var in_pool = results[3] === "true";
@@ -1057,6 +1064,12 @@ ApplicationWindow {
informationPopup.title = qsTr("Payment proof check") + translationManager.emptyString;
informationPopup.icon = good ? StandardIcon.Information : StandardIcon.Critical;
informationPopup.text = good ? qsTr("Good signature") : qsTr("Bad signature");
}
else if (isReserveProof && results[0] === "true") {
var good = results[1] === "true";
informationPopup.title = qsTr("Reserve proof check") + translationManager.emptyString;
informationPopup.icon = good ? StandardIcon.Information : StandardIcon.Critical;
informationPopup.text = good ? qsTr("Good signature on %1 total and %2 spent.").arg(results[2]).arg(results[3]) : qsTr("Bad signature");
}
else {
informationPopup.title = qsTr("Error") + translationManager.emptyString;
@@ -1124,13 +1137,10 @@ ApplicationWindow {
Timer {
id: fiatPriceTimer
interval: 1000 * 60;
running: persistentSettings.fiatPriceEnabled;
running: persistentSettings.fiatPriceEnabled && currentWallet !== undefined
repeat: true
onTriggered: {
if(persistentSettings.fiatPriceEnabled)
appWindow.fiatApiRefresh();
}
triggeredOnStart: false
onTriggered: appWindow.fiatApiRefresh()
triggeredOnStart: true
}
function fiatApiParseTicker(url, resp, currency){
@@ -1269,14 +1279,6 @@ ApplicationWindow {
leftPanel.balanceFiatString = bFiat;
}
function fiatTimerStart(){
fiatPriceTimer.start();
}
function fiatTimerStop(){
fiatPriceTimer.stop();
}
function fiatApiError(msg){
console.log("fiatPriceError: " + msg);
}
@@ -1332,12 +1334,8 @@ ApplicationWindow {
openWallet("wizard");
}
if(persistentSettings.fiatPriceEnabled){
appWindow.fiatApiRefresh();
appWindow.fiatTimerStart();
}
if (persistentSettings.askDesktopShortcut && !persistentSettings.portable) {
const desktopEntryEnabled = (typeof builtWithDesktopEntry != "undefined") && builtWithDesktopEntry;
if (persistentSettings.askDesktopShortcut && !persistentSettings.portable && desktopEntryEnabled) {
persistentSettings.askDesktopShortcut = false;
if (isTails) {
@@ -1368,13 +1366,18 @@ ApplicationWindow {
}
property bool askDesktopShortcut: isLinux
property bool askStopLocalNode: true
property string language: 'English (US)'
property string language_wallet: 'English'
property string locale: 'en_US'
property string account_name
property string wallet_path
property bool allow_background_mining : false
property bool allow_p2pool_mining : false
property bool allowRemoteNodeMining : false
property bool miningIgnoreBattery : true
property int miningModeSelected: 0
property int chainDropdownSelected: 0
property var nettype: NetworkType.MAINNET
property int restore_height : 0
property bool is_trusted_daemon : false // TODO: drop after v0.17.2.0 release
@@ -1382,6 +1385,7 @@ ApplicationWindow {
property bool is_recovering_from_device : false
property bool customDecorations : true
property string daemonFlags
property string p2poolFlags
property int logLevel: 0
property string logCategories: ""
property string daemonUsername: "" // TODO: drop after v0.17.2.0 release
@@ -1691,6 +1695,9 @@ ApplicationWindow {
informationPopup.open();
}
onRejectedNewPassword: {}
Keys.enabled: !passwordDialog.visible && informationPopup.visible
Keys.onEnterPressed: informationPopup.close()
Keys.onReturnPressed: informationPopup.close()
}
DevicePassphraseDialog {
@@ -1898,10 +1905,11 @@ ApplicationWindow {
TitleBar {
id: titleBar
visible: persistentSettings.customDecorations && middlePanel.state !== "Merchant"
walletName: persistentSettings.displayWalletNameInTitleBar ? appWindow.walletName : ""
walletName: persistentSettings.displayWalletNameInTitleBar && rootItem.state != "wizard" ? appWindow.walletName : ""
anchors.left: parent.left
anchors.right: parent.right
onCloseClicked: appWindow.close();
onLockWalletClicked: appWindow.lock();
onLanguageClicked: appWindow.toggleLanguageView();
onCloseWalletClicked: appWindow.showWizard();
onMaximizeClicked: appWindow.visibility = appWindow.visibility !== Window.Maximized ? Window.Maximized : Window.Windowed
@@ -2026,7 +2034,7 @@ ApplicationWindow {
return;
}
const simpleModeFlags = "--enable-dns-blocklist --out-peers 16";
const simpleModeFlags = "--enable-dns-blocklist --out-peers 16 --no-igd";
if (appWindow.daemonRunning) {
appWindow.stopDaemon(function() {
appWindow.startDaemon(simpleModeFlags)
@@ -2123,7 +2131,7 @@ ApplicationWindow {
showProcessingSplash(qsTr("Checking local node status..."));
const handler = function(running) {
hideProcessingSplash();
if (running) {
if (running && persistentSettings.askStopLocalNode) {
showDaemonIsRunningDialog(closeAccepted);
} else {
closeAccepted();
@@ -2142,7 +2150,7 @@ ApplicationWindow {
console.log("close accepted");
// Close wallet non async on exit
daemonManager.exit();
p2poolManager.exit();
closeWallet(Qt.quit);
}
@@ -2248,7 +2256,7 @@ ApplicationWindow {
}
function getDefaultDaemonRpcPort(networkType) {
switch (networkType) {
switch (parseInt(networkType)) {
case NetworkType.STAGENET:
return 38081;
case NetworkType.TESTNET:

2
monero

Submodule monero updated: 2222bea92f...7cbae6ca98

View File

@@ -164,11 +164,48 @@ Rectangle {
id: addressRow
spacing: 0
MoneroComponents.LabelSubheader {
Layout.fillWidth: true
fontSize: 24
textFormat: Text.RichText
text: qsTr("Accounts") + translationManager.emptyString
RowLayout {
spacing: 0
MoneroComponents.LabelSubheader {
Layout.fillWidth: true
fontSize: 24
textFormat: Text.RichText
text: qsTr("Accounts") + translationManager.emptyString
}
MoneroComponents.StandardButton {
id: createNewAccountButton
visible: !selectAndSend
small: true
text: qsTr("Create new account") + translationManager.emptyString
fontSize: 13
onClicked: {
inputDialog.labelText = qsTr("Set the label of the new account:") + translationManager.emptyString
inputDialog.onAcceptedCallback = function() {
appWindow.currentWallet.subaddressAccount.addRow(inputDialog.inputText)
appWindow.currentWallet.switchSubaddressAccount(appWindow.currentWallet.numSubaddressAccounts() - 1)
appWindow.onWalletUpdate();
}
inputDialog.onRejectedCallback = null;
inputDialog.open()
}
Rectangle {
anchors.top: createNewAccountButton.bottom
anchors.topMargin: 8
anchors.left: createNewAccountButton.left
anchors.right: createNewAccountButton.right
height: 2
color: MoneroComponents.Style.appWindowBorderColor
MoneroEffects.ColorTransition {
targetObj: parent
blackColor: MoneroComponents.Style._b_appWindowBorderColor
whiteColor: MoneroComponents.Style._w_appWindowBorderColor
}
}
}
}
ColumnLayout {
@@ -349,30 +386,6 @@ Rectangle {
whiteColor: MoneroComponents.Style._w_appWindowBorderColor
}
}
MoneroComponents.CheckBox {
id: addNewAccountCheckbox
visible: !selectAndSend
border: false
uncheckedIcon: FontAwesome.plusCircle
toggleOnClick: false
fontAwesomeIcons: true
fontSize: 16
iconOnTheLeft: true
Layout.fillWidth: true
Layout.topMargin: 10
text: qsTr("Create new account") + translationManager.emptyString;
onClicked: {
inputDialog.labelText = qsTr("Set the label of the new account:") + translationManager.emptyString
inputDialog.onAcceptedCallback = function() {
appWindow.currentWallet.subaddressAccount.addRow(inputDialog.inputText)
appWindow.currentWallet.switchSubaddressAccount(appWindow.currentWallet.numSubaddressAccounts() - 1)
appWindow.onWalletUpdate();
}
inputDialog.onRejectedCallback = null;
inputDialog.open()
}
}
}
}

View File

@@ -97,6 +97,8 @@ Rectangle {
MoneroComponents.StandardButton {
id: addFirstEntryButton
Layout.topMargin: 20
Layout.alignment: Qt.AlignHCenter
small: true
text: qsTr("Add an address") + translationManager.emptyString
onClicked: {
root.showAddAddress();
@@ -115,6 +117,18 @@ Rectangle {
text: qsTr("Address book") + translationManager.emptyString
}
MoneroComponents.StandardButton {
id: addAddressButton
Layout.bottomMargin: 8
Layout.alignment: Qt.AlignRight
small: true
text: qsTr("Add address") + translationManager.emptyString
fontSize: 13
onClicked: {
root.showAddAddress();
}
}
ColumnLayout {
id: addressBookListRow
property int addressBookListItemHeight: 50
@@ -235,7 +249,7 @@ Rectangle {
}
MoneroComponents.IconButton {
id: renameButton
id: editEntryButton
image: "qrc:///images/edit.svg"
color: MoneroComponents.Style.defaultFontColor
opacity: isOpenGL ? 0.5 : 1
@@ -244,7 +258,7 @@ Rectangle {
fontAwesomeFallbackOpacity: 0.5
Layout.preferredWidth: 23
Layout.preferredHeight: 21
tooltip: qsTr("Edit address label") + translationManager.emptyString
tooltip: qsTr("Edit entry") + translationManager.emptyString
onClicked: {
addressBookListView.currentIndex = index;
@@ -287,23 +301,6 @@ Rectangle {
whiteColor: MoneroComponents.Style._w_appWindowBorderColor
}
}
MoneroComponents.CheckBox {
id: addNewEntryCheckbox
border: false
uncheckedIcon: FontAwesome.plusCircle
toggleOnClick: false
fontAwesomeIcons: true
fontSize: 16
iconOnTheLeft: true
Layout.fillWidth: true
Layout.topMargin: 10
text: qsTr("Add address") + translationManager.emptyString;
onClicked: {
root.showAddAddress();
}
}
}
ColumnLayout {
id: addContactLayout
@@ -313,11 +310,12 @@ Rectangle {
MoneroComponents.Label {
fontSize: 32
wrapMode: Text.WordWrap
text: (root.editEntry ? qsTr("Edit an address") : qsTr("Add an address")) + translationManager.emptyString
text: (root.editEntry ? qsTr("Edit entry") : qsTr("Add an address")) + translationManager.emptyString
}
MoneroComponents.LineEditMulti {
id: addressLine
visible: !root.editEntry
Layout.topMargin: 20
KeyNavigation.backtab: deleteButton.visible ? deleteButton: cancelButton
KeyNavigation.tab: resolveButton.visible ? resolveButton : descriptionLine
@@ -325,16 +323,16 @@ Rectangle {
.arg(qsTr("Address")) + translationManager.emptyString
placeholderText: {
if(persistentSettings.nettype == NetworkType.MAINNET){
return "4.. / 8.. / OpenAlias";
return "4.. / 8.. / monero:.. / OpenAlias";
} else if (persistentSettings.nettype == NetworkType.STAGENET){
return "5.. / 7..";
return "5.. / 7.. / monero:..";
} else if(persistentSettings.nettype == NetworkType.TESTNET){
return "9.. / B..";
return "9.. / B.. / monero:..";
}
}
wrapMode: Text.WrapAnywhere
addressValidation: true
pasteButton: true
pasteButton: false
onTextChanged: {
const parsed = walletManager.parse_uri_to_object(addressLine.text);
if (!parsed.error) {
@@ -436,39 +434,13 @@ Rectangle {
}
RowLayout {
Layout.topMargin: 20
MoneroComponents.StandardButton {
id: addButton
KeyNavigation.backtab: descriptionLine
KeyNavigation.tab: cancelButton
text: (root.editEntry ? qsTr("Save") : qsTr("Add")) + translationManager.emptyString
enabled: root.checkInformation(addressLine.text, appWindow.persistentSettings.nettype)
onClicked: {
console.log("Add")
if (!currentWallet.addressBook.addRow(addressLine.text.trim(),"", descriptionLine.text)) {
informationPopup.title = qsTr("Error") + translationManager.emptyString;
// TODO: check currentWallet.addressBook.errorString() instead.
if(currentWallet.addressBook.errorCode() === AddressBook.Invalid_Address)
informationPopup.text = qsTr("Invalid address") + translationManager.emptyString
else if(currentWallet.addressBook.errorCode() === AddressBook.Invalid_Payment_Id)
informationPopup.text = currentWallet.addressBook.errorString()
else
informationPopup.text = qsTr("Can't create entry") + translationManager.emptyString
informationPopup.onCloseCallback = null
informationPopup.open();
} else {
if (root.editEntry) {
currentWallet.addressBook.deleteRow(addressBookListView.currentIndex);
}
root.showAddressBook();
}
}
}
Layout.alignment: Qt.AlignRight
MoneroComponents.StandardButton {
id: cancelButton
KeyNavigation.backtab: addButton
KeyNavigation.tab: deleteButton.visible ? deleteButton : addressLine
small: true
text: qsTr("Cancel") + translationManager.emptyString
primary: false
onClicked: root.showAddressBook();
@@ -478,6 +450,7 @@ Rectangle {
id: deleteButton
KeyNavigation.backtab: cancelButton
KeyNavigation.tab: addressLine
small: true
visible: root.editEntry
text: qsTr("Delete") + translationManager.emptyString
primary: false
@@ -486,6 +459,38 @@ Rectangle {
root.showAddressBook();
}
}
MoneroComponents.StandardButton {
id: addButton
KeyNavigation.backtab: descriptionLine
KeyNavigation.tab: cancelButton
small: true
text: (root.editEntry ? qsTr("Save") : qsTr("Add")) + translationManager.emptyString
enabled: root.checkInformation(addressLine.text, appWindow.persistentSettings.nettype)
onClicked: {
if (!root.editEntry) {
if (currentWallet.addressBook.addRow(addressLine.text.trim(),"", descriptionLine.text)) {
console.log("Entry added")
} else {
informationPopup.title = qsTr("Error") + translationManager.emptyString;
// TODO: check currentWallet.addressBook.errorString() instead.
if (currentWallet.addressBook.errorCode() === AddressBook.Invalid_Address)
informationPopup.text = qsTr("Invalid address") + translationManager.emptyString
else if (currentWallet.addressBook.errorCode() === AddressBook.Invalid_Payment_Id)
informationPopup.text = currentWallet.addressBook.errorString()
else
informationPopup.text = qsTr("Can't create entry") + translationManager.emptyString
informationPopup.onCloseCallback = null
informationPopup.open();
}
} else {
currentWallet.addressBook.setDescription(addressBookListView.currentIndex, descriptionLine.text);
console.log("Description edited")
}
root.showAddressBook()
}
}
}
}
}

View File

@@ -43,6 +43,7 @@ ColumnLayout {
property alias state: stateView.state
MoneroComponents.Navbar {
id: navbarId
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: height
Layout.bottomMargin: height
@@ -128,7 +129,7 @@ ColumnLayout {
PropertyAnimation {
target: enterItem
property: "x"
from: 0 - target.width
from: (navbarId.currentIndex < navbarId.previousIndex ? 1 : -1) * - target.width
to: 0
duration: 300
easing.type: Easing.OutCubic
@@ -137,7 +138,7 @@ ColumnLayout {
target: exitItem
property: "x"
from: 0
to: target.width
to: (navbarId.currentIndex < navbarId.previousIndex ? 1 : -1) * target.width
duration: 300
easing.type: Easing.OutCubic
}

View File

@@ -1013,6 +1013,7 @@ Rectangle {
MoneroComponents.StandardButton {
visible: isout
enabled: currentWallet ? !currentWallet.isHwBacked() : false
anchors.left: btnDetails.right
anchors.leftMargin: 10
text: FontAwesome.productHunt
@@ -1719,7 +1720,7 @@ Rectangle {
}
console.log("getProof: Generate clicked: txid " + hash + ", address " + address);
middlePanel.getProofClicked(hash, address, '');
middlePanel.getProofClicked(hash, address, '', null);
informationPopup.title = qsTr("Payment proof") + translationManager.emptyString;
informationPopup.text = qsTr("Generating payment proof") + "..." + translationManager.emptyString;
informationPopup.onCloseCallback = null

View File

@@ -26,17 +26,21 @@
// 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 QtQml.Models 2.2
import QtQuick 2.9
import QtQuick.Layouts 1.1
import QtQuick.Dialogs 1.2
import "../components" as MoneroComponents
import moneroComponents.Wallet 1.0
import moneroComponents.P2PoolManager 1.0
import moneroComponents.DaemonManager 1.0
Rectangle {
id: root
color: "transparent"
property alias miningHeight: mainLayout.height
property double currentHashRate: 0
property int threads: idealThreadCount / 2
ColumnLayout {
id: mainLayout
@@ -51,13 +55,14 @@ Rectangle {
MoneroComponents.Label {
id: soloTitleLabel
fontSize: 24
text: qsTr("Solo mining") + translationManager.emptyString
text: qsTr("Mining") + translationManager.emptyString
}
MoneroComponents.WarningBox {
Layout.bottomMargin: 8
id: localDaemonWarning
text: qsTr("Mining is only available on local daemons.") + translationManager.emptyString
visible: persistentSettings.useRemoteNode
visible: persistentSettings.useRemoteNode && !persistentSettings.allowRemoteNodeMining
}
MoneroComponents.WarningBox {
@@ -68,7 +73,7 @@ Rectangle {
MoneroComponents.TextPlain {
id: soloMainLabel
text: qsTr("Mining with your computer helps strengthen the Monero network. The more that people mine, the harder it is for the network to be attacked, and every little bit helps.\n\nMining also gives you a small chance to earn some Monero. Your computer will create hashes looking for block solutions. If you find a block, you will get the associated reward. Good luck!") + translationManager.emptyString
text: qsTr("Mining with your computer helps strengthen the Monero network. The more people mine, the harder it is for the network to be attacked, and every little bit helps.\n\nMining also gives you a small chance to earn some Monero. Your computer will create hashes looking for block solutions. If you find a block, you will get the associated reward. Good luck!") + "\n\n" + qsTr("P2Pool mining is a decentralized way to pool mine that pays out more frequently compared to solo mining, while also supporting the network.") + translationManager.emptyString
wrapMode: Text.Wrap
Layout.fillWidth: true
font.family: MoneroComponents.Style.fontRegular.name
@@ -89,6 +94,44 @@ Rectangle {
columnSpacing: 20
rowSpacing: 16
ListModel {
id: miningModeModel
ListElement { column1: qsTr("Solo") ; column2: ""; priority: 0}
ListElement { column1: "P2Pool" ; column2: ""; priority: 1}
}
ColumnLayout {
Layout.fillWidth: true
Layout.alignment : Qt.AlignTop | Qt.AlignLeft
MoneroComponents.Label {
id: miningModeLabel
color: MoneroComponents.Style.defaultFontColor
text: qsTr("Mining mode") + translationManager.emptyString
fontSize: 16
}
}
ColumnLayout {
Layout.topMargin: 5
spacing: 10
MoneroComponents.StandardDropdown {
Layout.maximumWidth: 200
id: miningModeDropdown
visible: true
currentIndex: persistentSettings.miningModeSelected
dataModel: miningModeModel
onChanged: {
persistentSettings.allow_p2pool_mining = miningModeDropdown.currentIndex === 1;
persistentSettings.miningModeSelected = miningModeDropdown.currentIndex;
walletManager.stopMining();
p2poolManager.exit();
}
}
}
ColumnLayout {
Layout.fillWidth: true
Layout.alignment : Qt.AlignTop | Qt.AlignLeft
@@ -106,30 +149,56 @@ Rectangle {
Layout.fillWidth: true
spacing: 16
MoneroComponents.LineEdit {
id: soloMinerThreadsLine
Layout.minimumWidth: 200
text: "1"
validator: IntValidator { bottom: 1; top: idealThreadCount }
}
RowLayout {
MoneroComponents.StandardButton {
id: removeThreadButton
small: true
primary: false
text: ""
enabled: threads > 1
onClicked: threads--
}
MoneroComponents.TextPlain {
id: numAvailableThreadsText
text: qsTr("Max # of CPU threads available for mining: ") + idealThreadCount + translationManager.emptyString
wrapMode: Text.WordWrap
font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 14
color: MoneroComponents.Style.defaultFontColor
MoneroComponents.TextPlain {
Layout.bottomMargin: 1
Layout.minimumWidth: 45
color: MoneroComponents.Style.defaultFontColor
text: threads
horizontalAlignment: Text.AlignHCenter
font.pixelSize: 16
MouseArea {
anchors.fill: parent
scrollGestureEnabled: false
onWheel: {
if (wheel.angleDelta.y > 0 && threads < idealThreadCount) {
return threads++
} else if (wheel.angleDelta.y < 0 && threads > 1) {
return threads--
}
}
}
}
MoneroComponents.StandardButton {
id: addThreadButton
small: true
primary: false
text: "+"
enabled: threads < idealThreadCount
onClicked: threads++
}
}
RowLayout {
MoneroComponents.StandardButton {
id: autoRecommendedThreadsButton
small: true
text: qsTr("Use recommended # of threads") + translationManager.emptyString
primary: false
text: qsTr("Use half (recommended)") + translationManager.emptyString
enabled: startSoloMinerButton.enabled
onClicked: {
soloMinerThreadsLine.text = Math.floor(idealThreadCount / 2);
threads = idealThreadCount / 2
appWindow.showStatusMessage(qsTr("Set to use recommended # of threads"),3)
}
}
@@ -137,25 +206,16 @@ Rectangle {
MoneroComponents.StandardButton {
id: autoSetMaxThreadsButton
small: true
text: qsTr("Use all threads") + translationManager.emptyString
primary: false
text: qsTr("Use all threads") + " (" + idealThreadCount + ")" + translationManager.emptyString
enabled: startSoloMinerButton.enabled
onClicked: {
soloMinerThreadsLine.text = idealThreadCount
threads = idealThreadCount
appWindow.showStatusMessage(qsTr("Set to use all threads") + translationManager.emptyString,3)
}
}
}
RowLayout {
MoneroComponents.CheckBox {
id: backgroundMining
enabled: startSoloMinerButton.enabled
checked: persistentSettings.allow_background_mining
onClicked: {persistentSettings.allow_background_mining = checked}
text: qsTr("Background mining (experimental)") + translationManager.emptyString
}
}
RowLayout {
// Disable this option until stable
visible: false
@@ -169,6 +229,37 @@ Rectangle {
}
}
ColumnLayout {
Layout.alignment: Qt.AlignTop | Qt.AlignLeft
Layout.minimumWidth: 140
MoneroComponents.Label {
id: optionsLabel
color: MoneroComponents.Style.defaultFontColor
visible: !persistentSettings.allow_p2pool_mining
text: qsTr("Options") + translationManager.emptyString
fontSize: 16
wrapMode: Text.Wrap
Layout.preferredWidth: manageSoloMinerLabel.textWidth
}
}
ColumnLayout {
Layout.fillWidth: true
spacing: 16
RowLayout {
MoneroComponents.CheckBox {
id: backgroundMining
visible: !persistentSettings.allow_p2pool_mining
enabled: startSoloMinerButton.enabled && !persistentSettings.allow_p2pool_mining
checked: persistentSettings.allow_background_mining
onClicked: persistentSettings.allow_background_mining = checked
text: qsTr("Background mining (experimental)") + translationManager.emptyString
}
}
}
ColumnLayout {
Layout.alignment : Qt.AlignTop | Qt.AlignLeft
@@ -191,18 +282,55 @@ Rectangle {
visible: true
id: startSoloMinerButton
small: true
primary: !stopSoloMinerButton.enabled
text: qsTr("Start mining") + translationManager.emptyString
onClicked: {
var success = walletManager.startMining(appWindow.currentWallet.address(0, 0), soloMinerThreadsLine.text, persistentSettings.allow_background_mining, persistentSettings.miningIgnoreBattery)
if (success) {
update()
} else {
errorPopup.title = qsTr("Error starting mining") + translationManager.emptyString;
errorPopup.text = qsTr("Couldn't start mining.<br>") + translationManager.emptyString
if (persistentSettings.useRemoteNode)
errorPopup.text += qsTr("Mining is only available on local daemons. Run a local daemon to be able to mine.<br>") + translationManager.emptyString
errorPopup.icon = StandardIcon.Critical
errorPopup.open()
var daemonReady = appWindow.daemonSynced && appWindow.daemonRunning && !persistentSettings.useRemoteNode
if (persistentSettings.allowRemoteNodeMining) {
daemonReady = persistentSettings.useRemoteNode && appWindow.daemonSynced
}
if (daemonReady) {
var success;
if (persistentSettings.allow_p2pool_mining) {
if (p2poolManager.isInstalled()) {
if (persistentSettings.allowRemoteNodeMining) {
startP2Pool()
}
else {
daemonManager.stopAsync(persistentSettings.nettype, startP2PoolLocal)
}
}
else {
confirmationDialog.title = qsTr("P2Pool installation") + translationManager.emptyString;
confirmationDialog.text = qsTr("P2Pool will be installed at %1. Proceed?").arg(applicationDirectory) + translationManager.emptyString;
confirmationDialog.icon = StandardIcon.Question;
confirmationDialog.cancelText = qsTr("No") + translationManager.emptyString;
confirmationDialog.okText = qsTr("Yes") + translationManager.emptyString;
confirmationDialog.onAcceptedCallback = function() {
p2poolManager.download();
statusMessageText.text = "Downloading P2Pool...";
statusMessage.visible = true
startSoloMinerButton.enabled = false;
stopSoloMinerButton.enabled = false;
}
confirmationDialog.open();
}
}
else
{
success = walletManager.startMining(appWindow.currentWallet.address(0, 0), threads, persistentSettings.allow_background_mining, persistentSettings.miningIgnoreBattery)
if (success)
{
update()
}
else
{
miningError(qsTr("Couldn't start mining.<br>") + translationManager.emptyString)
}
}
}
else {
miningError(qsTr("Couldn't start mining.<br>") + translationManager.emptyString)
}
}
}
@@ -211,9 +339,11 @@ Rectangle {
visible: true
id: stopSoloMinerButton
small: true
primary: stopSoloMinerButton.enabled
text: qsTr("Stop mining") + translationManager.emptyString
onClicked: {
walletManager.stopMining()
p2poolManager.exit()
update()
}
}
@@ -246,23 +376,162 @@ Rectangle {
inputPaddingLeft: 0
}
}
ListModel {
id: chainModel
ListElement { column1: qsTr("Mini") ; column2: ""; priority: 0}
ListElement { column1: qsTr("Main") ; column2: ""; priority: 1}
}
ColumnLayout {
Layout.fillWidth: true
Layout.alignment : Qt.AlignTop | Qt.AlignLeft
MoneroComponents.Label {
id: chainLabel
color: MoneroComponents.Style.defaultFontColor
visible: persistentSettings.allow_p2pool_mining
text: qsTr("Chain") + translationManager.emptyString
fontSize: 16
}
MoneroComponents.Tooltip {
id: chainsHelpTooltip
text: qsTr("Use the mini chain if you have a low hashrate.") + translationManager.emptyString
}
MouseArea {
id: chainsTooltipArea
width: parent.width
height: parent.height
enabled: persistentSettings.allow_p2pool_mining
hoverEnabled: true
onEntered: {
chainsHelpTooltip.tooltipPopup.open();
}
onExited: {
chainsHelpTooltip.tooltipPopup.close();
}
}
}
ColumnLayout {
Layout.topMargin: 5
spacing: 10
MoneroComponents.StandardDropdown {
Layout.maximumWidth: 200
id: chainDropdown
visible: persistentSettings.allow_p2pool_mining
currentIndex: persistentSettings.chainDropdownSelected
dataModel: chainModel
onChanged: persistentSettings.chainDropdownSelected = chainDropdown.currentIndex;
}
}
ColumnLayout {
Layout.fillWidth: true
Layout.alignment : Qt.AlignTop | Qt.AlignLeft
MoneroComponents.Label {
id: flagsLabel
visible: persistentSettings.allow_p2pool_mining
color: MoneroComponents.Style.defaultFontColor
text: qsTr("Flags") + translationManager.emptyString
fontSize: 16
}
MoneroComponents.Tooltip {
id: flagsHelpTooltip
text: "
Usage:<br>
--wallet Wallet address to mine to. Subaddresses and integrated addresses are not supported!<br>
--host IP address of your Monero node, default is 127.0.0.1<br>
--rpc-port monerod RPC API port number, default is 18081<br>
--zmq-port monerod ZMQ pub port number, default is 18083 (same port as in monerod\'s \"--zmq-pub\" command line parameter)<br>
--stratum Comma-separated list of IP:port for stratum server to listen on<br>
--p2p Comma-separated list of IP:port for p2p server to listen on<br>
--addpeers Comma-separated list of IP:port of other p2pool nodes to connect to<br>
--light-mode Don't allocate RandomX dataset, saves 2GB of RAM<br>
--loglevel Verbosity of the log, integer number between 0 and 6<br>
--config Name of the p2pool config file<br>
--data-api Path to the p2pool JSON data (use it in tandem with an external web-server)<br>
--local-api Enable /local/ path in api path for Stratum Server and built-in miner statistics<br>
--stratum-api An alias for --local-api<br>
--no-cache Disable p2pool.cache<br>
--no-color Disable colors in console output<br>
--no-randomx Disable internal RandomX hasher: p2pool will use RPC calls to monerod to check PoW hashes<br>
--out-peers N Maximum number of outgoing connections for p2p server (any value between 10 and 1000)<br>
--in-peers N Maximum number of incoming connections for p2p server (any value between 10 and 1000)<br>
--start-mining N Start built-in miner using N threads (any value between 1 and 64)<br>
--help Show this help message
"
}
MouseArea {
id: flagsTooltipArea
width: parent.width
height: parent.height
enabled: persistentSettings.allow_p2pool_mining
hoverEnabled: true
onEntered: {
flagsHelpTooltip.tooltipPopup.open();
}
onExited: {
flagsHelpTooltip.tooltipPopup.close();
}
}
}
ColumnLayout {
Layout.fillWidth: true
MoneroComponents.LineEditMulti {
id: p2poolFlags
Layout.minimumWidth: 100
Layout.bottomMargin: 20
labelFontSize: 14
fontSize: 15
visible: persistentSettings.allow_p2pool_mining
wrapMode: Text.WrapAnywhere
labelText: qsTr("P2Pool startup flags") + translationManager.emptyString
placeholderText: qsTr("(optional)") + translationManager.emptyString
placeholderFontSize: 15
text: persistentSettings.p2poolFlags
addressValidation: false
onEditingFinished: {
persistentSettings.allowRemoteNodeMining = p2poolFlags.text.includes("--host");
persistentSettings.p2poolFlags = p2poolFlags.text;
}
}
}
}
}
function updateStatusText() {
function updateStatusText(p2poolHashrate) {
if (appWindow.isMining) {
var userHashRate = walletManager.miningHashRate();
if (userHashRate === 0) {
statusText.text = qsTr("Mining temporarily suspended.") + translationManager.emptyString;
if (persistentSettings.allow_p2pool_mining) {
if (p2poolHashrate === 0) {
statusText.text = qsTr("Starting P2Pool") + translationManager.emptyString;
}
else {
statusText.text = qsTr("Mining with P2Pool, at %1 H/s").arg(p2poolHashrate) + translationManager.emptyString;
}
}
else {
var blockTime = 120;
var blocksPerDay = 86400 / blockTime;
var globalHashRate = walletManager.networkDifficulty() / blockTime;
var probabilityFindNextBlock = userHashRate / globalHashRate;
var probabilityFindBlockDay = 1 - Math.pow(1 - probabilityFindNextBlock, blocksPerDay);
var chanceFindBlockDay = Math.round(1 / probabilityFindBlockDay);
statusText.text = qsTr("Mining at %1 H/s. It gives you a 1 in %2 daily chance of finding a block.").arg(userHashRate).arg(chanceFindBlockDay) + translationManager.emptyString;
var userHashRate = walletManager.miningHashRate();
if (userHashRate === 0) {
statusText.text = qsTr("Mining temporarily suspended.") + translationManager.emptyString;
}
else {
var blockTime = 120;
var blocksPerDay = 86400 / blockTime;
var globalHashRate = walletManager.networkDifficulty() / blockTime;
var probabilityFindNextBlock = userHashRate / globalHashRate;
var probabilityFindBlockDay = 1 - Math.pow(1 - probabilityFindNextBlock, blocksPerDay);
var chanceFindBlockDay = Math.round(1 / probabilityFindBlockDay);
statusText.text = qsTr("Mining at %1 H/s. It gives you a 1 in %2 daily chance of finding a block.").arg(userHashRate).arg(chanceFindBlockDay) + translationManager.emptyString;
}
}
}
else {
@@ -270,16 +539,35 @@ Rectangle {
}
}
function onMiningStatus(isMining) {
var daemonReady = !persistentSettings.useRemoteNode && appWindow.daemonSynced
function onMiningStatus(isMining, hashrate) {
var daemonReady = appWindow.daemonSynced
if (!persistentSettings.allowRemoteNodeMining) {
var daemonReady = !persistentSettings.useRemoteNode && daemonReady
}
appWindow.isMining = isMining;
updateStatusText()
updateStatusText(hashrate)
startSoloMinerButton.enabled = !appWindow.isMining && daemonReady
stopSoloMinerButton.enabled = !startSoloMinerButton.enabled && daemonReady
}
function update() {
walletManager.miningStatusAsync();
persistentSettings.allow_p2pool_mining = miningModeDropdown.currentIndex === 1;
if (persistentSettings.allow_p2pool_mining) {
p2poolManager.getStatus();
}
else {
walletManager.miningStatusAsync();
}
}
function miningError(message) {
p2poolManager.exit()
errorPopup.title = qsTr("Error starting mining") + translationManager.emptyString;
errorPopup.text = message
if (persistentSettings.useRemoteNode && !persistentSettings.allowRemoteNodeMining)
errorPopup.text += qsTr("Mining is only available on local daemons. Run a local daemon to be able to mine.<br>") + translationManager.emptyString
errorPopup.icon = StandardIcon.Critical
errorPopup.open()
}
MoneroComponents.StandardDialog {
@@ -289,21 +577,67 @@ Rectangle {
Timer {
id: timer
interval: 2000; running: false; repeat: true
interval: 2000
running: middlePanel.advancedView.state === "Mining" && middlePanel.state === "Advanced" && currentWallet !== undefined && (!persistentSettings.useRemoteNode || persistentSettings.allowRemoteNodeMining)
repeat: true
onTriggered: update()
}
function onPageCompleted() {
console.log("Mining page loaded");
update()
timer.running = !persistentSettings.useRemoteNode
function startP2PoolLocal() {
var noSync = false;
var customDaemonArgs = persistentSettings.daemonFlags.toLowerCase();
var daemonArgs = "--zmq-pub " + "tcp://127.0.0.1:18083 " + "--disable-dns-checkpoints "
if (!customDaemonArgs.includes("--zmq-pub") && !customDaemonArgs.includes("--disable-dns-checkpoints") && !customDaemonArgs.includes("--no-zmq")) {
daemonArgs = daemonArgs + customDaemonArgs;
}
var success = daemonManager.start(daemonArgs, persistentSettings.nettype, persistentSettings.blockchainDataDir, persistentSettings.bootstrapNodeAddress, noSync, persistentSettings.pruneBlockchain)
if (success) {
startP2Pool()
}
else {
miningError(qsTr("Couldn't start mining.<br>") + translationManager.emptyString)
}
}
function onPageClosed() {
timer.running = false
function startP2Pool() {
var address = currentWallet.address(0, 0);
var chain = "mini"
if (chainDropdown.currentIndex === 1) {
chain = "main"
}
var p2poolArgs = persistentSettings.p2poolFlags;
var success = p2poolManager.start(p2poolArgs, address, chain, threads);
if (success)
{
update()
}
else {
miningError(qsTr("Couldn't start mining.<br>") + translationManager.emptyString)
}
}
function p2poolDownloadFailed() {
statusMessage.visible = false
errorPopup.title = qsTr("P2Pool Installation Failed") + translationManager.emptyString;
errorPopup.text = qsTr("P2Pool installation failed.") + isWindows ? (" " + qsTr("Try starting the program with administrator privileges.")) : ""
errorPopup.icon = StandardIcon.Critical
errorPopup.open()
update()
}
function p2poolDownloadSucceeded() {
statusMessage.visible = false
informationPopup.title = qsTr("P2Pool Installation Succeeded") + translationManager.emptyString;
informationPopup.text = qsTr("P2Pool has successfully installed.");
informationPopup.icon = StandardIcon.Critical
informationPopup.open()
update()
}
Component.onCompleted: {
walletManager.miningStatus.connect(onMiningStatus);
p2poolManager.p2poolStatus.connect(onMiningStatus);
p2poolManager.p2poolDownloadFailure.connect(p2poolDownloadFailed);
p2poolManager.p2poolDownloadSuccess.connect(p2poolDownloadSucceeded);
}
}

View File

@@ -63,12 +63,11 @@ Rectangle {
function generateQRCodeString() {
if (pageReceive.state == "PaymentRequest") {
return TxUtils.makeQRCodeString(appWindow.current_address,
(amountToReceiveXMR.text != "" && parseFloat(amountToReceiveXMR.text) != 0 ? amountToReceiveXMR.text : ""),
(txDescriptionInput.text != "" ? txDescriptionInput.text : ""),
(receiverNameInput.text != "" ? receiverNameInput.text : ""));
return walletManager.make_uri(appWindow.current_address,
walletManager.amountFromString(amountToReceiveXMR.text),
txDescriptionInput.text, receiverNameInput.text);
} else {
return TxUtils.makeQRCodeString(appWindow.current_address);
return walletManager.make_uri(appWindow.current_address);
}
}
@@ -152,13 +151,16 @@ Rectangle {
Menu {
id: qrMenu
title: "QrCode"
currentIndex: menuItem1.hovered ? 0 : menuItem2.hovered ? 1 : -1
MenuItem {
id: menuItem1
text: qsTr("Copy to clipboard") + translationManager.emptyString;
onTriggered: walletManager.saveQrCodeToClipboard(generateQRCodeString())
}
MenuItem {
id: menuItem2
text: qsTr("Save as Image") + translationManager.emptyString;
onTriggered: qrFileDialog.open()
}
@@ -344,6 +346,7 @@ Rectangle {
id: txDescriptionInput
Layout.preferredWidth: 165
Layout.maximumWidth: 165
maximumLength: 800
topPadding: 7
leftPadding: 7
font.pixelSize: 14
@@ -391,6 +394,7 @@ Rectangle {
selectByMouse: true
color: MoneroComponents.Style.defaultFontColor
placeholderText: qsTr("Visible to the sender") + translationManager.emptyString
maximumLength: 100
background: Rectangle {
color: MoneroComponents.Style.blackTheme ? "transparent" : "white"

View File

@@ -112,11 +112,8 @@ Rectangle {
MoneroComponents.LabelSubheader {
Layout.fillWidth: true
textFormat: Text.RichText
text: "<style type='text/css'>a {text-decoration: none; color: #FF6C3C; font-size: 14px;}</style>" +
qsTr("Outputs marked as spent") + " <a href='#'>" + qsTr("Help") + "</a>" + translationManager.emptyString
onLinkActivated: {
sharedRingDBDialog.title = qsTr("Outputs marked as spent") + translationManager.emptyString;
sharedRingDBDialog.text = qsTr(
text: qsTr("Outputs marked as spent") + translationManager.emptyString
tooltip: qsTr(
"In order to obscure which inputs in a Monero transaction are being spent, a third party should not be able " +
"to tell which inputs in a ring are already known to be spent. Being able to do so would weaken the protection " +
"afforded by ring signatures. If all but one of the inputs are known to be already spent, then the input being " +
@@ -128,9 +125,6 @@ Rectangle {
"Alternatively, you can scan the blockchain (and the blockchain of key-reusing Monero clones) yourself " +
"using the monero-blockchain-mark-spent-outputs tool to create a list of known spent outputs.<br>"
) + translationManager.emptyString
sharedRingDBDialog.icon = StandardIcon.Information
sharedRingDBDialog.open()
}
}
MoneroComponents.TextPlain {
@@ -249,11 +243,8 @@ Rectangle {
Layout.fillWidth: true
Layout.topMargin: 24
textFormat: Text.RichText
text: "<style type='text/css'>a {text-decoration: none; color: #FF6C3C; font-size: 14px;}</style>" +
qsTr("Rings") + " <a href='#'>" + qsTr("Help") + "</a>" + translationManager.emptyString
onLinkActivated: {
sharedRingDBDialog.title = qsTr("Rings") + translationManager.emptyString;
sharedRingDBDialog.text = qsTr(
text: qsTr("Rings") + translationManager.emptyString
tooltip: qsTr(
"In order to avoid nullifying the protection afforded by Monero's ring signatures, an output should not " +
"be spent with different rings on different blockchains. While this is normally not a concern, it can become one " +
"when a key-reusing Monero clone allows you to spend existing outputs. In this case, you need to ensure this " +
@@ -266,9 +257,6 @@ Rectangle {
"If you do not use a key-reusing Monero clone without these safety features, then you do not need to do anything " +
"as it is all automated.<br>"
) + translationManager.emptyString
sharedRingDBDialog.icon = StandardIcon.Information
sharedRingDBDialog.open()
}
}
MoneroComponents.TextPlain {

View File

@@ -394,11 +394,11 @@ Rectangle {
wrapMode: Text.WrapAnywhere
placeholderText: {
if(persistentSettings.nettype == NetworkType.MAINNET){
return "4.. / 8.. / OpenAlias";
return "4.. / 8.. / monero:.. / OpenAlias";
} else if (persistentSettings.nettype == NetworkType.STAGENET){
return "5.. / 7..";
return "5.. / 7.. / monero:..";
} else if(persistentSettings.nettype == NetworkType.TESTNET){
return "9.. / B..";
return "9.. / B.. / monero:..";
}
}
onTextChanged: {
@@ -855,7 +855,6 @@ Rectangle {
StandardButton {
id: sendButton
rightIcon: "qrc:///images/rightArrow.png"
rightIconInactive: "qrc:///images/rightArrowInactive.png"
Layout.topMargin: 4
text: qsTr("Send") + translationManager.emptyString
enabled: !sendButtonWarningBox.visible && !warningContent && !recipientModel.hasEmptyAddress() && !paymentIdWarningBox.visible
@@ -898,6 +897,32 @@ Rectangle {
}
}
AdvancedOptionsItem {
visible: persistentSettings.transferShowAdvanced && appWindow.walletMode >= 2
title: qsTr("Outputs") + translationManager.emptyString
button1.text: qsTr("Export") + translationManager.emptyString
button1.enabled: appWindow.viewOnly
button1.onClicked: {
console.log("Transfer: export outputs clicked")
exportOutputsDialog.open();
}
button2.text: qsTr("Import") + translationManager.emptyString
button2.enabled: !appWindow.viewOnly
button2.onClicked: {
console.log("Transfer: import outputs clicked")
importOutputsDialog.open();
}
tooltip: {
var header = qsTr("Required for cold wallets to sign their corresponding key images") + translationManager.emptyString;
return "<style type='text/css'>.header{ font-size: 13px; } p{line-height:20px; margin-top:0px; margin-bottom:0px; " +
";} p.orange{color:#ff9323;}</style>" +
"<div class='header'>" + header + "</div>" +
"<p>" + qsTr("1. Using view-only wallet, export the outputs into a file") + "</p>" +
"<p>" + qsTr("2. Using cold wallet, import the outputs file") + "</p>" +
translationManager.emptyString
}
}
AdvancedOptionsItem {
visible: persistentSettings.transferShowAdvanced && appWindow.walletMode >= 2
title: qsTr("Key images") + translationManager.emptyString
@@ -932,7 +957,7 @@ Rectangle {
visible: persistentSettings.transferShowAdvanced && appWindow.walletMode >= 2
title: qsTr("Offline transaction signing") + translationManager.emptyString
button1.text: qsTr("Create") + translationManager.emptyString
button1.enabled: appWindow.viewOnly && pageRoot.checkInformation()
button1.enabled: appWindow.viewOnly && pageRoot.checkInformation() && appWindow.daemonSynced
button1.onClicked: {
console.log("Transfer: saveTx Clicked")
var priority = priorityModelV5.get(priorityDropdown.currentIndex).priority
@@ -1005,24 +1030,7 @@ Rectangle {
// deleting transaction object, we don't want memleaks
transaction.destroy();
} else {
confirmationDialog.text = qsTr("\nNumber of transactions: ") + transaction.txCount
for (var i = 0; i < transaction.txCount; ++i) {
confirmationDialog.text += qsTr("\nTransaction #%1").arg(i+1)
+qsTr("\nRecipient: ") + transaction.recipientAddress[i]
+ (transaction.paymentId[i] == "" ? "" : qsTr("\n\payment ID: ") + transaction.paymentId[i])
+ qsTr("\nAmount: ") + walletManager.displayAmount(transaction.amount(i))
+ qsTr("\nFee: ") + walletManager.displayAmount(transaction.fee(i))
+ qsTr("\nRingsize: ") + (transaction.mixin(i)+1)
// TODO: add descriptions to unsigned_tx_set?
// + (transactionDescription === "" ? "" : (qsTr("\n\nDescription: ") + transactionDescription))
+ translationManager.emptyString
if (i > 0) {
confirmationDialog.text += "\n\n"
}
}
confirmationDialog.text = qsTr("\nConfirmation message:\n ") + transaction.confirmationMessage
console.log(transaction.confirmationMessage);
// Show confirmation dialog
@@ -1072,6 +1080,41 @@ Rectangle {
}
FileDialog {
id: exportOutputsDialog
selectMultiple: false
selectExisting: false
onAccepted: {
console.log(walletManager.urlToLocalPath(exportOutputsDialog.fileUrl))
if (currentWallet.exportOutputs(walletManager.urlToLocalPath(exportOutputsDialog.fileUrl), true)) {
appWindow.showStatusMessage(qsTr("Outputs successfully exported to file") + translationManager.emptyString, 3);
} else {
appWindow.showStatusMessage(currentWallet.errorString, 5);
}
}
onRejected: {
console.log("Canceled");
}
}
FileDialog {
id: importOutputsDialog
selectMultiple: false
selectExisting: true
title: qsTr("Please choose a file") + translationManager.emptyString
onAccepted: {
console.log(walletManager.urlToLocalPath(importOutputsDialog.fileUrl))
if (currentWallet.importOutputs(walletManager.urlToLocalPath(importOutputsDialog.fileUrl))) {
appWindow.showStatusMessage(qsTr("Outputs successfully imported to wallet") + translationManager.emptyString, 3);
} else {
appWindow.showStatusMessage(currentWallet.errorString, 5);
}
}
onRejected: {
console.log("Canceled");
}
}
//ExportKeyImagesDialog
FileDialog {
id: exportKeyImagesDialog
@@ -1079,7 +1122,11 @@ Rectangle {
selectExisting: false
onAccepted: {
console.log(walletManager.urlToLocalPath(exportKeyImagesDialog.fileUrl))
currentWallet.exportKeyImages(walletManager.urlToLocalPath(exportKeyImagesDialog.fileUrl));
if (currentWallet.exportKeyImages(walletManager.urlToLocalPath(exportKeyImagesDialog.fileUrl), true)) {
appWindow.showStatusMessage(qsTr("Key images successfully exported to file") + translationManager.emptyString, 3);
} else {
appWindow.showStatusMessage(currentWallet.errorString, 5);
}
}
onRejected: {
console.log("Canceled");
@@ -1094,7 +1141,11 @@ Rectangle {
title: qsTr("Please choose a file") + translationManager.emptyString
onAccepted: {
console.log(walletManager.urlToLocalPath(importKeyImagesDialog.fileUrl))
currentWallet.importKeyImages(walletManager.urlToLocalPath(importKeyImagesDialog.fileUrl));
if (currentWallet.importKeyImages(walletManager.urlToLocalPath(importKeyImagesDialog.fileUrl))) {
appWindow.showStatusMessage(qsTr("Key images successfully imported to wallet") + translationManager.emptyString, 3);
} else {
appWindow.showStatusMessage(currentWallet.errorString, 5);
}
}
onRejected: {
console.log("Canceled");

View File

@@ -60,13 +60,13 @@ Rectangle {
MoneroComponents.Label {
id: soloTitleLabel
fontSize: 24
text: qsTr("Prove Transaction") + translationManager.emptyString
text: qsTr("Prove Transaction") + " / " + qsTr("Reserve") + translationManager.emptyString
}
MoneroComponents.TextPlain {
Layout.fillWidth: true
text: qsTr("Generate a proof of your incoming/outgoing payment by supplying the transaction ID, the recipient address and an optional message. \n" +
"For the case of outgoing payments, you can get a 'Spend Proof' that proves the authorship of a transaction. In this case, you don't need to specify the recipient address.") + translationManager.emptyString
"For the case of outgoing payments, you can get a 'Spend Proof' that proves the authorship of a transaction. In this case, you don't need to specify the recipient address.") + qsTr("\nFor reserve proofs you don't need to specify tx id or address.") + translationManager.emptyString
wrapMode: Text.Wrap
font.family: MoneroComponents.Style.fontRegular.name
font.pixelSize: 14
@@ -83,6 +83,7 @@ Rectangle {
placeholderText: qsTr("Paste tx ID") + translationManager.emptyString
readOnly: false
copyButton: true
enabled: getReserveProofAmtLine.text.length === 0
}
MoneroComponents.LineEdit {
@@ -95,6 +96,38 @@ Rectangle {
placeholderText: qsTr("Recipient's wallet address") + translationManager.emptyString;
readOnly: false
copyButton: true
enabled: getReserveProofAmtLine.text.length === 0
}
MoneroComponents.LineEdit {
id: getReserveProofAmtLine
Layout.fillWidth: true
labelFontSize: 14
labelText: qsTr("Amount") + translationManager.emptyString
fontSize: 16
placeholderFontSize: 16
placeholderText: qsTr("Paste amount of XMR (reserve proof only)") + translationManager.emptyString
readOnly: false
copyButton: true
enabled: getProofAddressLine.text.length === 0 && getProofTxIdLine.text.length === 0
onTextChanged: {
text = text.trim().replace(",", ".");
const match = text.match(/^0+(\d.*)/);
if (match) {
const cursorPosition = cursorPosition;
text = match[1];
cursorPosition = Math.max(cursorPosition, 1) - 1;
} else if(text.indexOf('.') === 0) {
text = '0' + text;
if (text.length > 2) {
cursorPosition = 1;
}
}
error = walletManager.amountFromString(text) > appWindow.getUnlockedBalance();
}
validator: RegExpValidator {
regExp: /^\s*(\d{1,8})?([\.,]\d{1,12})?\s*$/
}
}
MoneroComponents.LineEdit {
@@ -113,10 +146,10 @@ Rectangle {
Layout.topMargin: 16
small: true
text: qsTr("Generate") + translationManager.emptyString
enabled: TxUtils.checkTxID(getProofTxIdLine.text) && (getProofAddressLine.text.length == 0 || TxUtils.checkAddress(getProofAddressLine.text, appWindow.persistentSettings.nettype))
enabled: TxUtils.checkTxID(getProofTxIdLine.text) && (getProofAddressLine.text.length == 0 || TxUtils.checkAddress(getProofAddressLine.text, appWindow.persistentSettings.nettype)) || getReserveProofAmtLine.text.length != 0 && walletManager.amountFromString(getReserveProofAmtLine.text) < appWindow.getUnlockedBalance() && walletManager.amountFromString(getReserveProofAmtLine.text) > 0
onClicked: {
console.log("getProof: Generate clicked: txid " + getProofTxIdLine.text + ", address " + getProofAddressLine.text + ", message: " + getProofMessageLine.text);
middlePanel.getProofClicked(getProofTxIdLine.text, getProofAddressLine.text, getProofMessageLine.text)
middlePanel.getProofClicked(getProofTxIdLine.text, getProofAddressLine.text, getProofMessageLine.text, getReserveProofAmtLine.text)
}
}
@@ -133,12 +166,12 @@ Rectangle {
MoneroComponents.Label {
id: soloTitleLabel2
fontSize: 24
text: qsTr("Check Transaction") + translationManager.emptyString
text: qsTr("Check Transaction") + " / " + qsTr("Reserve") + translationManager.emptyString
}
MoneroComponents.TextPlain {
text: qsTr("Verify that funds were paid to an address by supplying the transaction ID, the recipient address, the message used for signing and the signature.\n" +
"For the case with Spend Proof, you don't need to specify the recipient address.") + translationManager.emptyString
"For the case with Spend Proof, you don't need to specify the recipient address.") + "\n" + qsTr("Transaction is not needed for reserve proof.") + translationManager.emptyString
wrapMode: Text.Wrap
Layout.fillWidth: true
font.family: MoneroComponents.Style.fontRegular.name
@@ -189,7 +222,7 @@ Rectangle {
labelFontSize: 14
labelText: qsTr("Signature") + translationManager.emptyString
placeholderFontSize: 16
placeholderText: qsTr("Paste tx proof") + translationManager.emptyString;
placeholderText: qsTr("Paste tx proof") + " / " + qsTr("reserve proof") + translationManager.emptyString;
readOnly: false
copyButton: true
}
@@ -198,7 +231,7 @@ Rectangle {
Layout.topMargin: 16
small: true
text: qsTr("Check") + translationManager.emptyString
enabled: TxUtils.checkTxID(checkProofTxIdLine.text) && TxUtils.checkSignature(checkProofSignatureLine.text) && ((checkProofSignatureLine.text.indexOf("SpendProofV") === 0 && checkProofAddressLine.text.length == 0) || (checkProofSignatureLine.text.indexOf("SpendProofV") !== 0 && TxUtils.checkAddress(checkProofAddressLine.text, appWindow.persistentSettings.nettype)))
enabled: (TxUtils.checkTxID(checkProofTxIdLine.text) && TxUtils.checkSignature(checkProofSignatureLine.text) && ((checkProofSignatureLine.text.indexOf("SpendProofV") === 0 && checkProofAddressLine.text.length == 0) || (checkProofSignatureLine.text.indexOf("SpendProofV") !== 0 && TxUtils.checkAddress(checkProofAddressLine.text, appWindow.persistentSettings.nettype)))) || (TxUtils.checkSignature(checkProofSignatureLine.text) && checkProofSignatureLine.text.indexOf("ReserveProofV") === 0 && TxUtils.checkAddress(checkProofAddressLine.text, appWindow.persistentSettings.nettype))
onClicked: {
console.log("checkProof: Check clicked: txid " + checkProofTxIdLine.text + ", address " + checkProofAddressLine.text + ", message " + checkProofMessageLine.text + ", signature " + checkProofSignatureLine.text);
middlePanel.checkProofClicked(checkProofTxIdLine.text, checkProofAddressLine.text, checkProofMessageLine.text, checkProofSignatureLine.text)

View File

@@ -211,7 +211,7 @@ Item {
smooth: false
fillMode: Image.PreserveAspectFit
source: "image://qrcode/" + TxUtils.makeQRCodeString(appWindow.current_address, amountToReceive.text)
source: "image://qrcode/" + walletManager.make_uri(appWindow.current_address, walletManager.amountFromString(amountToReceive.text))
MouseArea {
anchors.fill: parent
@@ -400,7 +400,7 @@ Item {
font.pixelSize: 12
font.bold: true
color: _color
text: TxUtils.makeQRCodeString(appWindow.current_address, amountToReceive.text)
text: walletManager.make_uri(appWindow.current_address, walletManager.amountFromString(amountToReceive.text))
themeTransition: false
MouseArea {
@@ -685,7 +685,7 @@ Item {
selectExisting: false
nameFilters: ["Image (*.png)"]
onAccepted: {
if(!walletManager.saveQrCode(TxUtils.makeQRCodeString(appWindow.current_address, amountToReceive.text), walletManager.urlToLocalPath(fileUrl))) {
if (!walletManager.saveQrCode(walletManager.make_uri(appWindow.current_address, walletManager.amountFromString(amountToReceive.text)), walletManager.urlToLocalPath(fileUrl))) {
console.log("Failed to save QrCode to file " + walletManager.urlToLocalPath(fileUrl) )
receivePageDialog.title = qsTr("Save QrCode") + translationManager.emptyString;
receivePageDialog.text = qsTr("Failed to save QrCode to ") + walletManager.urlToLocalPath(fileUrl) + translationManager.emptyString;

View File

@@ -49,6 +49,7 @@ ColumnLayout {
property alias settingsStateViewState: settingsStateView.state
MoneroComponents.Navbar {
id: navbarId
Layout.alignment: Qt.AlignHCenter
Layout.topMargin: height
Layout.bottomMargin: height
@@ -145,7 +146,7 @@ ColumnLayout {
PropertyAnimation {
target: enterItem
property: "x"
from: 0 - target.width
from: (navbarId.currentIndex < navbarId.previousIndex ? 1 : -1) * - target.width
to: 0
duration: 300
easing.type: Easing.OutCubic
@@ -154,7 +155,7 @@ ColumnLayout {
target: exitItem
property: "x"
from: 0
to: target.width
to: (navbarId.currentIndex < navbarId.previousIndex ? 1 : -1) * target.width
duration: 300
easing.type: Easing.OutCubic
}

View File

@@ -191,7 +191,7 @@ Rectangle {
inputDialog.onAcceptedCallback = function() {
var _restoreHeight;
if (inputDialog.inputText) {
_restoreHeight = Utils.parseDateStringOrRestoreHeightAsInteger(inputDialog.inputText);
_restoreHeight = Utils.parseDateStringOrRestoreHeightAsInteger(inputDialog.inputText.trim());
}
if (!isNaN(_restoreHeight)) {
if(_restoreHeight >= 0) {
@@ -409,7 +409,7 @@ Rectangle {
small: true
text: qsTr("Donate to Monero") + translationManager.emptyString
onClicked: {
middlePanel.sendTo("888tNkZrPN6JsEgekjMnABU4TBzc2Dt29EPAvkRxbANsAnjyPbb3iQ1YBRk1UXcdRsiKc9dhwMVgN5S9cQUiyoogDavup3H", "", "Donation to Monero Core Team");
middlePanel.sendTo("888tNkZrPN6JsEgekjMnABU4TBzc2Dt29EPAvkRxbANsAnjyPbb3iQ1YBRk1UXcdRsiKc9dhwMVgN5S9cQUiyoogDavup3H", "", qsTr("Donation to Monero Core Team") + translationManager.emptyString);
}
}
}

View File

@@ -155,6 +155,12 @@ Rectangle {
onMoved: persistentSettings.lockOnUserInActivityInterval = value
}
MoneroComponents.CheckBox {
checked: persistentSettings.askStopLocalNode
onClicked: persistentSettings.askStopLocalNode = !persistentSettings.askStopLocalNode
text: qsTr("Ask to stop local node during program exit") + translationManager.emptyString
}
//! Manage pricing
RowLayout {
MoneroComponents.CheckBox {
@@ -165,7 +171,6 @@ Rectangle {
if (!checked) {
console.log("Disabled price conversion");
persistentSettings.fiatPriceEnabled = false;
appWindow.fiatTimerStop();
}
}
}
@@ -232,8 +237,6 @@ Rectangle {
onClicked: {
console.log("Enabled price conversion");
persistentSettings.fiatPriceEnabled = true;
appWindow.fiatApiRefresh();
appWindow.fiatTimerStart();
}
}
}

View File

@@ -50,6 +50,14 @@ Rectangle {
anchors.topMargin: 0
spacing: 0
MoneroComponents.SettingsListItem {
iconText: FontAwesome.lock
description: qsTr("Locks the wallet on demand.") + translationManager.emptyString
title: qsTr("Lock this wallet") + translationManager.emptyString
symbol: (isMac ? "⌃" : qsTr("Ctrl+")) + "L" + translationManager.emptyString
onClicked: appWindow.lock();
}
MoneroComponents.SettingsListItem {
iconText: FontAwesome.signOutAlt
description: qsTr("Logs out of this wallet.") + translationManager.emptyString
@@ -91,6 +99,7 @@ Rectangle {
}
MoneroComponents.SettingsListItem {
enabled: leftPanel.progressBar.fillLevel == 100
iconText: FontAwesome.repeat
description: qsTr("Use this feature if you think the shown balance is not accurate.") + translationManager.emptyString
title: qsTr("Rescan wallet balance") + translationManager.emptyString
@@ -100,7 +109,11 @@ Rectangle {
if (!currentWallet.rescanSpent()) {
console.error("Error: ", currentWallet.errorString);
informationPopup.title = qsTr("Error") + translationManager.emptyString;
informationPopup.text = qsTr("Error: ") + currentWallet.errorString
if (currentWallet.errorString == "Rescan spent can only be used with a trusted daemon") {
informationPopup.text = qsTr("Error: ") + qsTr("Rescan spent can only be used with a trusted remote node. If you trust the current node you are connected to (%1), you can mark it as trusted in Settings > Node page.").arg(remoteNodesModel.currentRemoteNode().address) + translationManager.emptyString;
} else {
informationPopup.text = qsTr("Error: ") + currentWallet.errorString;
}
informationPopup.icon = StandardIcon.Critical
informationPopup.onCloseCallback = null
informationPopup.open();
@@ -114,6 +127,27 @@ Rectangle {
}
}
MoneroComponents.SettingsListItem {
enabled: leftPanel.progressBar.fillLevel == 100
iconText: FontAwesome.magnifyingGlass
description: qsTr("Use this feature if a transaction is missing in your wallet history. This will expose the transaction ID to the remote node, which can harm your privacy.") + translationManager.emptyString
title: qsTr("Scan transaction") + translationManager.emptyString
onClicked: {
inputDialog.labelText = qsTr("Enter a transaction ID:") + translationManager.emptyString;
inputDialog.onAcceptedCallback = function() {
var txid = inputDialog.inputText.trim();
if (currentWallet.scanTransactions([txid])) {
appWindow.showStatusMessage(qsTr("Transaction successfully scanned"), 3);
} else {
appWindow.showStatusMessage(qsTr("Failed to scan transaction") + ": " + currentWallet.errorString, 5);
}
}
inputDialog.onRejectedCallback = null;
inputDialog.open()
}
}
MoneroComponents.SettingsListItem {
iconText: FontAwesome.ellipsisH
description: qsTr("Change the password of your wallet.") + translationManager.emptyString

16
qml.qrc
View File

@@ -97,6 +97,9 @@
<file>lang/flags/gb.png</file>
<file>lang/flags/us.png</file>
<file>lang/flags/nb_NO.png</file>
<file>lang/flags/el.png</file>
<file>lang/flags/vi.png</file>
<file>lang/flags/is.png</file>
<file>pages/Receive.qml</file>
<file>pages/TxKey.qml</file>
<file>pages/SharedRingDB.qml</file>
@@ -159,8 +162,6 @@
<file>js/TxUtils.js</file>
<file>images/warning.png</file>
<file>images/warning@2x.png</file>
<file>images/rightArrowInactive.png</file>
<file>images/rightArrowInactive@2x.png</file>
<file>js/Windows.js</file>
<file>js/Utils.js</file>
<file>components/RadioButton.qml</file>
@@ -215,6 +216,16 @@
<file>images/restore-wallet-from-hardware.png</file>
<file>images/open-wallet-from-file@2x.png</file>
<file>images/open-wallet-from-file.png</file>
<file>images/open-wallet-from-file-mainnet@2x.png</file>
<file>images/open-wallet-from-file-mainnet.png</file>
<file>images/open-wallet-from-file-stagenet@2x.png</file>
<file>images/open-wallet-from-file-stagenet.png</file>
<file>images/open-wallet-from-file-testnet@2x.png</file>
<file>images/open-wallet-from-file-testnet.png</file>
<file>images/open-wallet-from-file-view-only@2x.png</file>
<file>images/open-wallet-from-file-view-only.png</file>
<file>images/open-wallet-from-file-trezor@2x.png</file>
<file>images/open-wallet-from-file-trezor.png</file>
<file>images/restore-wallet@2x.png</file>
<file>images/restore-wallet.png</file>
<file>images/create-wallet@2x.png</file>
@@ -253,6 +264,7 @@
<file>components/SuccessfulTxDialog.qml</file>
<file>components/TxConfirmationDialog.qml</file>
<file>images/ledgerNanoS.png</file>
<file>images/ledgerNanoSPlus.png</file>
<file>images/ledgerNanoX.png</file>
<file>images/trezor.png</file>
<file>images/trezor@2x.png</file>

View File

@@ -36,6 +36,8 @@ file(GLOB SOURCE_FILES
"libwalletqt/UnsignedTransaction.h"
"daemon/*.h"
"daemon/*.cpp"
"p2pool/*.h"
"p2pool/*.cpp"
"model/*.h"
"model/*.cpp"
"qt/*.h"
@@ -97,13 +99,12 @@ target_include_directories(monero-wallet-gui PUBLIC
${CMAKE_SOURCE_DIR}/monero/external/qrcodegen
${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/daemon
${CMAKE_CURRENT_SOURCE_DIR}/p2pool
${CMAKE_CURRENT_SOURCE_DIR}/libwalletqt
${CMAKE_CURRENT_SOURCE_DIR}/model
${CMAKE_CURRENT_SOURCE_DIR}/QR-Code-scanner
${CMAKE_CURRENT_SOURCE_DIR}/zxcvbn-c
${X11_INCLUDE_DIR}
${Boost_INCLUDE_DIRS}
${OPENSSL_INCLUDE_DIR}
)
target_compile_definitions(monero-wallet-gui
@@ -124,13 +125,13 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
target_link_libraries(monero-wallet-gui
epee
common
net
wallet_api
qrcodegen
easylogging
${Boost_LIBRARIES}
${QT5_LIBRARIES}
${EXTRA_LIBRARIES}
${ICU_LIBRARIES}
openpgp
qrdecoder
translations

View File

@@ -132,3 +132,19 @@ QString AddressBook::getDescription(const QString &address) const
}
return QString::fromStdString(m_rows.value(*it)->getDescription());
}
void AddressBook::setDescription(int index, const QString &description)
{
bool result;
{
QWriteLocker locker(&m_lock);
result = m_addressBookImpl->setDescription(index, description.toStdString());
}
if (result)
{
getAll();
}
}

View File

@@ -52,6 +52,7 @@ public:
Q_INVOKABLE QString errorString() const;
Q_INVOKABLE int errorCode() const;
Q_INVOKABLE QString getDescription(const QString &address) const;
Q_INVOKABLE void setDescription(int index, const QString &label);
enum ErrorCode {
Status_Ok,

View File

@@ -170,7 +170,7 @@ QString TransactionHistory::writeCSV(quint32 accountIndex, QString out)
// write header
QTextStream output(&data);
output << "blockHeight,epoch,date,direction,amount,atomicAmount,fee,txid,label,subaddrAccount,paymentId\n";
output << "blockHeight,epoch,date,direction,amount,atomicAmount,fee,txid,label,subaddrAccount,paymentId,description\n";
QReadLocker locker(&m_lock);
for (const auto &tx : m_pimpl->getAll()) {
@@ -198,6 +198,8 @@ QString TransactionHistory::writeCSV(quint32 accountIndex, QString out)
}
QString label = info.label();
label.remove(QChar('"')); // reserved
QString description = info.description();
description.remove(QChar('"')); // reserved
quint64 blockHeight = info.blockHeight();
QDateTime timeStamp = info.timestamp();
QString date = info.date() + " " + info.time();
@@ -209,11 +211,11 @@ QString TransactionHistory::writeCSV(quint32 accountIndex, QString out)
}
// format and write
QString line = QString("%1,%2,%3,%4,%5,%6,%7,%8,\"%9\",%10,%11\n")
QString line = QString("%1,%2,%3,%4,%5,%6,%7,%8,\"%9\",%10,%11,\"%12\"\n")
.arg(QString::number(blockHeight), QString::number(epoch), date)
.arg(direction, displayAmount, QString::number(atomicAmount))
.arg(info.fee(), info.hash(), label, QString::number(subaddrAccount))
.arg(paymentId);
.arg(paymentId, description);
output << line;
}

View File

@@ -47,6 +47,10 @@ bool TransactionInfo::isFailed() const
return m_failed;
}
bool TransactionInfo::isCoinbase() const
{
return m_coinbase;
}
double TransactionInfo::amount() const
{
@@ -126,6 +130,11 @@ QString TransactionInfo::paymentId() const
return m_paymentId;
}
QString TransactionInfo::description() const
{
return m_description;
}
QString TransactionInfo::destinations_formatted() const
{
QString destinations;
@@ -144,10 +153,12 @@ TransactionInfo::TransactionInfo(const Monero::TransactionInfo *pimpl, QObject *
, m_confirmations(pimpl->confirmations())
, m_direction(static_cast<Direction>(pimpl->direction()))
, m_failed(pimpl->isFailed())
, m_coinbase(pimpl->isCoinbase())
, m_fee(pimpl->fee())
, m_hash(QString::fromStdString(pimpl->hash()))
, m_label(QString::fromStdString(pimpl->label()))
, m_paymentId(QString::fromStdString(pimpl->paymentId()))
, m_description(QString::fromStdString(pimpl->description()))
, m_pending(pimpl->isPending())
, m_subaddrAccount(pimpl->subaddrAccount())
, m_timestamp(QDateTime::fromTime_t(pimpl->timestamp()))

View File

@@ -42,6 +42,7 @@ class TransactionInfo : public QObject
Q_PROPERTY(Direction direction READ direction)
Q_PROPERTY(bool isPending READ isPending)
Q_PROPERTY(bool isFailed READ isFailed)
Q_PROPERTY(bool isCoinbase READ isCoinbase)
Q_PROPERTY(double amount READ amount)
Q_PROPERTY(quint64 atomicAmount READ atomicAmount)
Q_PROPERTY(QString displayAmount READ displayAmount)
@@ -57,6 +58,7 @@ class TransactionInfo : public QObject
Q_PROPERTY(QString date READ date)
Q_PROPERTY(QString time READ time)
Q_PROPERTY(QString paymentId READ paymentId)
Q_PROPERTY(QString description READ description)
Q_PROPERTY(QString destinations_formatted READ destinations_formatted)
public:
@@ -71,6 +73,7 @@ public:
Direction direction() const;
bool isPending() const;
bool isFailed() const;
bool isCoinbase() const;
double amount() const;
quint64 atomicAmount() const;
QString displayAmount() const;
@@ -87,6 +90,7 @@ public:
QString date() const;
QString time() const;
QString paymentId() const;
QString description() const;
//! only applicable for output transactions
//! used in tx details popup
QString destinations_formatted() const;
@@ -104,7 +108,9 @@ private:
QString m_hash;
QString m_label;
QString m_paymentId;
QString m_description;
bool m_pending;
bool m_coinbase;
quint32 m_subaddrAccount;
QSet<quint32> m_subaddrIndex;
QDateTime m_timestamp;

View File

@@ -30,7 +30,9 @@
#include <chrono>
#include <stdexcept>
#include <string>
#include <thread>
#include <vector>
#include "PendingTransaction.h"
#include "UnsignedTransaction.h"
@@ -489,9 +491,9 @@ quint64 Wallet::daemonBlockChainTargetHeight() const
return m_daemonBlockChainTargetHeight;
}
bool Wallet::exportKeyImages(const QString& path)
bool Wallet::exportKeyImages(const QString& path, bool all)
{
return m_walletImpl->exportKeyImages(path.toStdString());
return m_walletImpl->exportKeyImages(path.toStdString(), all);
}
bool Wallet::importKeyImages(const QString& path)
@@ -499,6 +501,24 @@ bool Wallet::importKeyImages(const QString& path)
return m_walletImpl->importKeyImages(path.toStdString());
}
bool Wallet::exportOutputs(const QString& path, bool all) {
return m_walletImpl->exportOutputs(path.toStdString(), all);
}
bool Wallet::importOutputs(const QString& path) {
return m_walletImpl->importOutputs(path.toStdString());
}
bool Wallet::scanTransactions(const QVector<QString> &txids)
{
std::vector<std::string> c;
for (const auto &v : txids)
{
c.push_back(v.toStdString());
}
return m_walletImpl->scanTransactions(c);
}
bool Wallet::refresh(bool historyAndSubaddresses /* = true */)
{
refreshingSet(true);
@@ -525,6 +545,7 @@ bool Wallet::refresh(bool historyAndSubaddresses /* = true */)
void Wallet::startRefresh()
{
m_refreshEnabled = true;
m_refreshNow = true;
}
void Wallet::pauseRefresh()
@@ -836,6 +857,25 @@ Q_INVOKABLE QString Wallet::checkSpendProof(const QString &txid, const QString &
return QString::fromStdString(result);
}
Q_INVOKABLE QString Wallet::getReserveProof(bool all, quint32 account_index, quint64 amount, const QString &message) const
{
qDebug("Generating reserve proof");
std::string result = m_walletImpl->getReserveProof(all, account_index, amount, message.toStdString());
if (result.empty())
result = "error|" + m_walletImpl->errorString();
return QString::fromStdString(result);
}
Q_INVOKABLE QString Wallet::checkReserveProof(const QString &address, const QString &message, const QString &signature) const
{
bool good;
uint64_t total;
uint64_t spent;
bool success = m_walletImpl->checkReserveProof(address.toStdString(), message.toStdString(), signature.toStdString(), good, total, spent);
std::string result = std::string(success ? "true" : "false") + "|" + std::string(good ? "true" : "false") + "|" + QString::number(total).toStdString() + "|" + QString::number(spent).toStdString();
return QString::fromStdString(result);
}
QString Wallet::signMessage(const QString &message, bool filename) const
{
if (filename) {
@@ -925,6 +965,12 @@ bool Wallet::parse_uri(const QString &uri, QString &address, QString &payment_id
return res;
}
QString Wallet::make_uri(const QString &address, const quint64 &amount, const QString &tx_description, const QString &recipient_name) const
{
std::string error;
return QString::fromStdString(m_walletImpl->make_uri(address.toStdString(), "", amount, tx_description.toStdString(), recipient_name.toStdString(), error));
}
bool Wallet::rescanSpent()
{
QMutexLocker locker(&m_asyncMutex);
@@ -1097,6 +1143,7 @@ Wallet::Wallet(Monero::Wallet *w, QObject *parent)
, m_subaddressModel(nullptr)
, m_subaddressAccount(new SubaddressAccount(m_walletImpl->subaddressAccount(), this))
, m_subaddressAccountModel(nullptr)
, m_refreshNow(false)
, m_refreshEnabled(false)
, m_refreshing(false)
, m_scheduler(this)
@@ -1150,10 +1197,11 @@ void Wallet::startRefreshThread()
{
const auto now = std::chrono::steady_clock::now();
const auto elapsed = now - last;
if (elapsed >= refreshInterval)
if (elapsed >= refreshInterval || m_refreshNow)
{
refresh(false);
last = std::chrono::steady_clock::now();
m_refreshNow = false;
}
}

View File

@@ -205,9 +205,16 @@ public:
Q_INVOKABLE void refreshHeightAsync();
//! export/import key images
Q_INVOKABLE bool exportKeyImages(const QString& path);
Q_INVOKABLE bool exportKeyImages(const QString& path, bool all = false);
Q_INVOKABLE bool importKeyImages(const QString& path);
//! export/import outputs
Q_INVOKABLE bool exportOutputs(const QString& path, bool all = false);
Q_INVOKABLE bool importOutputs(const QString& path);
//! scan transactions
Q_INVOKABLE bool scanTransactions(const QVector<QString> &txids);
//! refreshes the wallet
Q_INVOKABLE bool refresh(bool historyAndSubaddresses = true);
@@ -296,6 +303,8 @@ public:
//! Parse URI
Q_INVOKABLE bool parse_uri(const QString &uri, QString &address, QString &payment_id, uint64_t &amount, QString &tx_description, QString &recipient_name, QVector<QString> &unknown_parameters, QString &error);
//! Make URI
Q_INVOKABLE QString make_uri(const QString &address, const quint64 &amount = 0, const QString &tx_description = "", const QString &recipient_name = "") const;
//! Namespace your cacheAttribute keys to avoid collisions
Q_INVOKABLE bool setCacheAttribute(const QString &key, const QString &val);
@@ -312,6 +321,8 @@ public:
Q_INVOKABLE QString getSpendProof(const QString &txid, const QString &message) const;
Q_INVOKABLE void getSpendProofAsync(const QString &txid, const QString &message, const QJSValue &callback);
Q_INVOKABLE QString checkSpendProof(const QString &txid, const QString &message, const QString &signature) const;
Q_INVOKABLE QString getReserveProof(bool all, quint32 account_index, quint64 amount, const QString &message) const;
Q_INVOKABLE QString checkReserveProof(const QString &address, const QString &message, const QString &signature) const;
// Rescan spent outputs
Q_INVOKABLE bool rescanSpent();
@@ -462,6 +473,7 @@ private:
QString m_daemonPassword;
QString m_proxyAddress;
mutable QMutex m_proxyMutex;
std::atomic<bool> m_refreshNow;
std::atomic<bool> m_refreshEnabled;
std::atomic<bool> m_refreshing;
WalletListenerImpl *m_walletListener;

View File

@@ -441,6 +441,14 @@ QVariantMap WalletManager::parse_uri_to_object(const QString &uri) const
return result;
}
QString WalletManager::make_uri(const QString &address, const quint64 &amount, const QString &tx_description, const QString &recipient_name) const
{
QMutexLocker locker(&m_mutex);
if (m_currentWallet)
return m_currentWallet->make_uri(address, amount, tx_description, recipient_name);
return "";
}
void WalletManager::setLogLevel(int logLevel)
{
Monero::WalletManagerFactory::setLogLevel(logLevel);

View File

@@ -179,6 +179,7 @@ public:
Q_INVOKABLE QString resolveOpenAlias(const QString &address) const;
Q_INVOKABLE bool parse_uri(const QString &uri, QString &address, QString &payment_id, uint64_t &amount, QString &tx_description, QString &recipient_name, QVector<QString> &unknown_parameters, QString &error) const;
Q_INVOKABLE QVariantMap parse_uri_to_object(const QString &uri) const;
Q_INVOKABLE QString make_uri(const QString &address, const quint64 &amount = 0, const QString &tx_description = "", const QString &recipient_name = "") const;
Q_INVOKABLE bool saveQrCode(const QString &, const QString &) const;
Q_INVOKABLE void saveQrCodeToClipboard(const QString &) const;
Q_INVOKABLE void checkUpdatesAsync(

View File

@@ -36,7 +36,6 @@
#include <QObject>
#include <QDesktopWidget>
#include <QScreen>
#include <QRegExp>
#include <QThread>
#include <version.h>
@@ -79,6 +78,7 @@
// IOS exclusions
#ifndef Q_OS_IOS
#include "daemon/DaemonManager.h"
#include "p2pool/P2PoolManager.h"
#endif
#if defined(Q_OS_WIN)
@@ -205,6 +205,13 @@ int main(int argc, char *argv[])
qputenv("QML_DISABLE_DISK_CACHE", "1");
for (int i = 0; i < argc; i++) {
if (QString(argv[i]).contains("platformpluginpath")) {
qCritical() << "Setting -platformpluginpath as an argument is disabled"; // CVE-2021-3401
return 1;
}
}
MainApp app(argc, argv);
#if defined(Q_OS_WIN)
@@ -401,6 +408,8 @@ Verify update binary using 'shasum'-compatible (SHA256 algo) output signed by tw
#ifndef Q_OS_IOS
qmlRegisterUncreatableType<DaemonManager>("moneroComponents.DaemonManager", 1, 0, "DaemonManager",
"DaemonManager can't be instantiated directly");
qmlRegisterUncreatableType<P2PoolManager>("moneroComponents.P2PoolManager", 1, 0, "P2PoolManager",
"P2PoolManager can't be instantiated directly");
#endif
qmlRegisterUncreatableType<AddressBookModel>("moneroComponents.AddressBookModel", 1, 0, "AddressBookModel",
"AddressBookModel can't be instantiated directly");
@@ -462,7 +471,9 @@ Verify update binary using 'shasum'-compatible (SHA256 algo) output signed by tw
// Exclude daemon manager from IOS
#ifndef Q_OS_IOS
DaemonManager daemonManager;
P2PoolManager p2poolManager;
engine.rootContext()->setContextProperty("daemonManager", &daemonManager);
engine.rootContext()->setContextProperty("p2poolManager", &p2poolManager);
#endif
engine.rootContext()->setContextProperty("isWindows", isWindows);
@@ -493,7 +504,11 @@ Verify update binary using 'shasum'-compatible (SHA256 algo) output signed by tw
engine.rootContext()->setContextProperty("homePath", QDir::homePath());
engine.rootContext()->setContextProperty("applicationDirectory", QApplication::applicationDirPath());
engine.rootContext()->setContextProperty("idealThreadCount", QThread::idealThreadCount());
#ifdef WITH_UPDATER
engine.rootContext()->setContextProperty("disableCheckUpdatesFlag", parser.isSet(disableCheckUpdatesOption));
#else
engine.rootContext()->setContextProperty("disableCheckUpdatesFlag", true);
#endif
engine.rootContext()->setContextProperty("socksProxyFlag", parser.value(socksProxyOption));
engine.rootContext()->setContextProperty("socksProxyFlagSet", parser.isSet(socksProxyOption));
@@ -503,6 +518,12 @@ Verify update binary using 'shasum'-compatible (SHA256 algo) output signed by tw
#endif
engine.rootContext()->setContextProperty("builtWithScanner", builtWithScanner);
bool builtWithDesktopEntry = false;
#ifdef WITH_DESKTOP_ENTRY
builtWithDesktopEntry = true;
#endif
engine.rootContext()->setContextProperty("builtWithDesktopEntry", builtWithDesktopEntry);
engine.rootContext()->setContextProperty("moneroVersion", MONERO_VERSION_FULL);
// Load main window (context properties needs to be defined obove this line)

Some files were not shown because too many files have changed in this diff Show More