Browse Source

Merge branch 'dev'

master v1.4.0
Duke 6 months ago
parent
commit
775581f942
  1. 71
      SilentDragon-1.3.1.wxs
  2. 87
      SilentDragonX-1.3.1.wxs
  3. 40
      application-sdx.qrc
  4. 14
      doc/relnotes/README.md
  5. 0
      res-drgx/hushdlogo.png
  6. BIN
      res-drgx/silentdragon_be.qm
  7. 2690
      res-drgx/silentdragon_be.ts
  8. BIN
      res-drgx/silentdragon_bg.qm
  9. 2560
      res-drgx/silentdragon_bg.ts
  10. BIN
      res-drgx/silentdragon_de.qm
  11. 2917
      res-drgx/silentdragon_de.ts
  12. BIN
      res-drgx/silentdragon_es.qm
  13. 2898
      res-drgx/silentdragon_es.ts
  14. BIN
      res-drgx/silentdragon_fi.qm
  15. 2911
      res-drgx/silentdragon_fi.ts
  16. BIN
      res-drgx/silentdragon_fil.qm
  17. 2751
      res-drgx/silentdragon_fil.ts
  18. BIN
      res-drgx/silentdragon_fr.qm
  19. 2945
      res-drgx/silentdragon_fr.ts
  20. BIN
      res-drgx/silentdragon_hr.qm
  21. 2754
      res-drgx/silentdragon_hr.ts
  22. BIN
      res-drgx/silentdragon_id.qm
  23. 2464
      res-drgx/silentdragon_id.ts
  24. BIN
      res-drgx/silentdragon_it.qm
  25. 2897
      res-drgx/silentdragon_it.ts
  26. BIN
      res-drgx/silentdragon_nl.qm
  27. 2686
      res-drgx/silentdragon_nl.ts
  28. BIN
      res-drgx/silentdragon_pl.qm
  29. 2689
      res-drgx/silentdragon_pl.ts
  30. BIN
      res-drgx/silentdragon_pt.qm
  31. 2885
      res-drgx/silentdragon_pt.ts
  32. BIN
      res-drgx/silentdragon_ro.qm
  33. 2752
      res-drgx/silentdragon_ro.ts
  34. BIN
      res-drgx/silentdragon_ru.qm
  35. 2691
      res-drgx/silentdragon_ru.ts
  36. BIN
      res-drgx/silentdragon_sr.qm
  37. 2754
      res-drgx/silentdragon_sr.ts
  38. BIN
      res-drgx/silentdragon_tr.qm
  39. 2902
      res-drgx/silentdragon_tr.ts
  40. BIN
      res-drgx/silentdragon_uk.qm
  41. 3152
      res-drgx/silentdragon_uk.ts
  42. BIN
      res-drgx/silentdragon_zh.qm
  43. 3037
      res-drgx/silentdragon_zh.ts
  44. BIN
      res-drgx/tropical-hush.png
  45. BIN
      res/silentdragon_be.qm
  46. 813
      res/silentdragon_be.ts
  47. 815
      res/silentdragon_bg.ts
  48. 815
      res/silentdragon_de.ts
  49. 815
      res/silentdragon_es.ts
  50. BIN
      res/silentdragon_fi.qm
  51. 815
      res/silentdragon_fi.ts
  52. BIN
      res/silentdragon_fil.qm
  53. 815
      res/silentdragon_fil.ts
  54. BIN
      res/silentdragon_fr.qm
  55. 815
      res/silentdragon_fr.ts
  56. 815
      res/silentdragon_hr.ts
  57. BIN
      res/silentdragon_it.qm
  58. 815
      res/silentdragon_it.ts
  59. BIN
      res/silentdragon_nl.qm
  60. 813
      res/silentdragon_nl.ts
  61. BIN
      res/silentdragon_pl.qm
  62. 813
      res/silentdragon_pl.ts
  63. BIN
      res/silentdragon_pt.qm
  64. 815
      res/silentdragon_pt.ts
  65. BIN
      res/silentdragon_ro.qm
  66. 815
      res/silentdragon_ro.ts
  67. BIN
      res/silentdragon_ru.qm
  68. 813
      res/silentdragon_ru.ts
  69. 815
      res/silentdragon_sr.ts
  70. BIN
      res/silentdragon_tr.qm
  71. 815
      res/silentdragon_tr.ts
  72. BIN
      res/silentdragon_uk.qm
  73. 815
      res/silentdragon_uk.ts
  74. BIN
      res/silentdragon_zh.qm
  75. 815
      res/silentdragon_zh.ts
  76. 1
      silentdragon.pro
  77. 39
      silentdragonx.pro
  78. 2
      src/addressbook.h
  79. 6
      src/balancestablemodel.h
  80. 4
      src/connection.cpp
  81. 237
      src/createhushconfdialog.ui
  82. 85
      src/getblock.ui
  83. 1
      src/main.cpp
  84. 82
      src/mainwindow.cpp
  85. 1
      src/mainwindow.h
  86. 26
      src/mainwindow.ui
  87. 6
      src/memoedit.h
  88. 1
      src/precompiled.h
  89. 19
      src/rpc.cpp
  90. 1
      src/rpc.h
  91. 1
      src/settings.cpp
  92. 283
      src/settings.ui
  93. 2
      src/validateaddress.h
  94. 2
      src/version.h
  95. 2
      src/viewalladdresses.h

71
SilentDragon-1.3.1.wxs

@ -0,0 +1,71 @@
<?xml version='1.0' encoding='windows-1252'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
<Product Name='SilentDragon' Id='a2e4bc6c-5911-4a07-a05c-d2fec0a44a7f' UpgradeCode='a41d7a93-a6cb-41fb-89d2-706a8c22bc99'
Language='1033' Codepage='1252' Version='1.3.1' Manufacturer='HUSH'>
<Package Id='*' Keywords='Installer' Description="HUSH SilentDragon Installer"
Comments='' Manufacturer='HUSH'
InstallerVersion='100' Languages='1033' Compressed='yes' SummaryCodepage='1252' />
<Media Id='1' Cabinet='SilentDragon.cab' EmbedCab='yes' DiskPrompt="CD-ROM #1" />
<Property Id='DiskPrompt' Value="HUSH SilentDragon 1.3.1 Installation [1]" />
<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id='ProgramFilesFolder' Name='PFiles'>
<Directory Id='HUSH' Name='HUSH'>
<Directory Id='INSTALLDIR' Name='SilentDragon'>
<Component Id='MainExecutable' Guid='56443570-635d-48e4-8448-8ffd0d7c415a'>
<File Id='SilentDragonEXE' Name='silentdragon.exe' DiskId='1' Source='silentdragon.exe' KeyPath='yes'>
<Shortcut Id="startmenuSilentDragon" Directory="ProgramMenuDir" Name="SilentDragon" WorkingDirectory='INSTALLDIR' Icon="silentdragon.exe" IconIndex="0" Advertise="yes" />
<Shortcut Id="desktopSilentDragon" Directory="DesktopFolder" Name="SilentDragon" WorkingDirectory='INSTALLDIR' Icon="silentdragon.exe" IconIndex="0" Advertise="yes" />
</File>
</Component>
<Component Id="asmap" Guid="190ad39b-44fa-4b22-94ee-d42aca7acc7b">
<File Id="asmap.dat" DiskId='1' Source="asmap.dat" KeyPath="yes"/>
</Component>
<Component Id="hush-cli" Guid="e19e8fd8-aeb9-4dad-99bd-70da0a0aa92c2">
<File Id="hush-cli.exe" DiskId='1' Source="hush-cli.exe" KeyPath="yes"/>
</Component>
<Component Id="hush-tx" Guid="f96b2a39-4734-4a8d-abc3-895006052e97">
<File Id="hush-tx.exe" DiskId='1' Source="hush-tx.exe" KeyPath="yes"/>
</Component>
<Component Id="hushd" Guid="fa66588f-8788-4b29-b6d6-c4a903e49d79">
<File Id="hushd.exe" DiskId='1' Source="hushd.exe" KeyPath="yes"/>
</Component>
<Component Id="sapling-output" Guid="1ecc1590-ddf3-4f6d-94c5-6bf091aef77a">
<File Id="sapling-output.params" DiskId='1' Source="sapling-output.params" KeyPath="yes"/>
</Component>
<Component Id="sapling-spend" Guid="828d3827-5f2b-47c6-8717-8a664054a2af">
<File Id="sapling-spend.params" DiskId='1' Source="sapling-spend.params" KeyPath="yes"/>
</Component>
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder" Name="Programs">
<Directory Id="ProgramMenuDir" Name="SilentDragon">
<Component Id="ProgramMenuDir" Guid="7ac6af1f-1377-4158-915f-c410cc5cd2a9">
<RemoveFolder Id='ProgramMenuDir' On='uninstall' />
<RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes' />
</Component>
</Directory>
</Directory>
<Directory Id="DesktopFolder" Name="Desktop" />
</Directory>
<Feature Id='Complete' Level='1'>
<ComponentRef Id='MainExecutable' />
<ComponentRef Id='ProgramMenuDir' />
<ComponentRef Id='asmap' />
<ComponentRef Id='hush-cli' />
<ComponentRef Id='hush-tx' />
<ComponentRef Id='hushd' />
<ComponentRef Id='sapling-output' />
<ComponentRef Id='sapling-spend' />
</Feature>
<Icon Id="silentdragon.exe" SourceFile="silentdragon.ico" />
</Product>
</Wix>

87
SilentDragonX-1.3.1.wxs

@ -0,0 +1,87 @@
<?xml version='1.0' encoding='windows-1252'?>
<Wix xmlns='http://schemas.microsoft.com/wix/2006/wi'>
<Product Name='SilentDragonX' Id='c2083d6a-4511-4c37-b23c-6699badb781f' UpgradeCode='0877ea1a-0662-48a2-8512-b5868f0a40a6'
Language='1033' Codepage='1252' Version='1.3.1' Manufacturer='HUSH'>
<Package Id='*' Keywords='Installer' Description="HUSH SilentDragonX Installer"
Comments='' Manufacturer='HUSH'
InstallerVersion='100' Languages='1033' Compressed='yes' SummaryCodepage='1252' />
<Media Id='1' Cabinet='SilentDragonX.cab' EmbedCab='yes' DiskPrompt="CD-ROM #1" />
<Property Id='DiskPrompt' Value="HUSH SilentDragonX 1.3.1 Installation [1]" />
<Directory Id='TARGETDIR' Name='SourceDir'>
<Directory Id='ProgramFilesFolder' Name='PFiles'>
<Directory Id='HUSH' Name='HUSH'>
<Directory Id='INSTALLDIR' Name='SilentDragonX'>
<Component Id='MainExecutable' Guid='e96fa770-8ac4-4e69-85b0-1d5b97d658f1'>
<File Id='SilentDragonXEXE' Name='silentdragonx.exe' DiskId='1' Source='silentdragonx.exe' KeyPath='yes'>
<Shortcut Id="startmenuSilentDragonX" Directory="ProgramMenuDir" Name="SilentDragonX" WorkingDirectory='INSTALLDIR' Icon="silentdragonx.exe" IconIndex="0" Advertise="yes" />
<Shortcut Id="desktopSilentDragonX" Directory="DesktopFolder" Name="SilentDragonX" WorkingDirectory='INSTALLDIR' Icon="silentdragonx.exe" IconIndex="0" Advertise="yes" />
</File>
</Component>
<Component Id="asmap" Guid="1e7a811c-6076-4046-b592-3aebf31961c4">
<File Id="asmap.dat" DiskId='1' Source="asmap.dat" KeyPath="yes"/>
</Component>
<Component Id="dragonx-cli" Guid="5b648615-b957-470e-9ec0-777b8896e913">
<File Id="dragonx-cli.bat" DiskId='1' Source="dragonx-cli.bat" KeyPath="yes"/>
</Component>
<Component Id="dragonxd" Guid="779810d3-b092-4349-940b-03ba73ec556d">
<File Id="dragonxd.bat" DiskId='1' Source="dragonxd.bat" KeyPath="yes"/>
</Component>
<Component Id="hush-cli" Guid="305d8117-5685-4d06-b0be-a7cd176f8111">
<File Id="hush-cli.exe" DiskId='1' Source="hush-cli.exe" KeyPath="yes"/>
</Component>
<Component Id="hushd" Guid="5024eceb-fba3-48d8-9ab5-e61ae5c1964d">
<File Id="hushd.exe" DiskId='1' Source="hushd.exe" KeyPath="yes"/>
</Component>
<Component Id="hush-smart-chain" Guid="c66ffa5c-02ae-42e0-bbca-8cc71a4e92e9">
<File Id="hush-smart-chain.bat" DiskId='1' Source="hush-smart-chain.bat" KeyPath="yes"/>
</Component>
<Component Id="hush-tx" Guid="7baac56a-8bf4-4bb2-b97d-a59da5c0edd6">
<File Id="hush-tx.exe" DiskId='1' Source="hush-tx.exe" KeyPath="yes"/>
</Component>
<Component Id="readme" Guid="5edea091-83d0-4f1c-a84f-298e4e8e61e9">
<File Id="README.txt" DiskId='1' Source="README.txt" KeyPath="yes"/>
</Component>
<Component Id="sapling-output" Guid="dddc6a47-8a26-49ec-b5a8-e38a06e11000">
<File Id="sapling-output.params" DiskId='1' Source="sapling-output.params" KeyPath="yes"/>
</Component>
<Component Id="sapling-spend" Guid="42edd54d-b480-4aaa-a976-ec305127dbbb">
<File Id="sapling-spend.params" DiskId='1' Source="sapling-spend.params" KeyPath="yes"/>
</Component>
</Directory>
</Directory>
</Directory>
<Directory Id="ProgramMenuFolder" Name="Programs">
<Directory Id="ProgramMenuDir" Name="SilentDragonX">
<Component Id="ProgramMenuDir" Guid="2ac41712-9a5d-48d6-9ca9-fe31bad57153">
<RemoveFolder Id='ProgramMenuDir' On='uninstall' />
<RegistryValue Root='HKCU' Key='Software\[Manufacturer]\[ProductName]' Type='string' Value='' KeyPath='yes' />
</Component>
</Directory>
</Directory>
<Directory Id="DesktopFolder" Name="Desktop" />
</Directory>
<Feature Id='Complete' Level='1'>
<ComponentRef Id='MainExecutable' />
<ComponentRef Id='ProgramMenuDir' />
<ComponentRef Id='asmap' />
<ComponentRef Id='dragonx-cli' />
<ComponentRef Id='dragonxd' />
<ComponentRef Id='hush-cli' />
<ComponentRef Id='hushd' />
<ComponentRef Id='hush-smart-chain' />
<ComponentRef Id='hush-tx' />
<ComponentRef Id='readme' />
<ComponentRef Id='sapling-output' />
<ComponentRef Id='sapling-spend' />
</Feature>
<Icon Id="silentdragonx.exe" SourceFile="silentdragonx.ico" />
</Product>
</Wix>

40
application-sdx.qrc

@ -24,7 +24,7 @@
<file alias="lock_closed.png">res-drgx/lock_closed.png</file> <file alias="lock_closed.png">res-drgx/lock_closed.png</file>
</qresource> </qresource>
<qresource prefix="/img"> <qresource prefix="/img">
<file alias="hushdlogo.png">res/hushdlogo.png</file> <file alias="hushdlogo.png">res-drgx/hushdlogo.png</file>
<file alias="logobig.gif">res-drgx/logobig.gif</file> <file alias="logobig.gif">res-drgx/logobig.gif</file>
<file alias="silentdragon-animated.gif">res-drgx/silentdragon-animated.gif</file> <file alias="silentdragon-animated.gif">res-drgx/silentdragon-animated.gif</file>
<file alias="silentdragon-animated-dark.gif">res-drgx/silentdragon-animated-dark.gif</file> <file alias="silentdragon-animated-dark.gif">res-drgx/silentdragon-animated-dark.gif</file>
@ -32,25 +32,25 @@
<file alias="silentdragon-animated-startup-dark.gif">res-drgx/silentdragon-animated-startup-dark.gif</file> <file alias="silentdragon-animated-startup-dark.gif">res-drgx/silentdragon-animated-startup-dark.gif</file>
</qresource> </qresource>
<qresource prefix="/translations"> <qresource prefix="/translations">
<file alias="silentdragon_be.qm">res-drgx/silentdragon_be.qm</file> <file alias="silentdragon_be.qm">res/silentdragon_be.qm</file>
<file alias="silentdragon_bg.qm">res-drgx/silentdragon_bg.qm</file> <file alias="silentdragon_bg.qm">res/silentdragon_bg.qm</file>
<file alias="silentdragon_de.qm">res-drgx/silentdragon_de.qm</file> <file alias="silentdragon_de.qm">res/silentdragon_de.qm</file>
<file alias="silentdragon_es.qm">res-drgx/silentdragon_es.qm</file> <file alias="silentdragon_es.qm">res/silentdragon_es.qm</file>
<file alias="silentdragon_fi.qm">res-drgx/silentdragon_fi.qm</file> <file alias="silentdragon_fi.qm">res/silentdragon_fi.qm</file>
<file alias="silentdragon_fil.qm">res-drgx/silentdragon_fil.qm</file> <file alias="silentdragon_fil.qm">res/silentdragon_fil.qm</file>
<file alias="silentdragon_fr.qm">res-drgx/silentdragon_fr.qm</file> <file alias="silentdragon_fr.qm">res/silentdragon_fr.qm</file>
<file alias="silentdragon_hr.qm">res-drgx/silentdragon_hr.qm</file> <file alias="silentdragon_hr.qm">res/silentdragon_hr.qm</file>
<file alias="silentdragon_it.qm">res-drgx/silentdragon_it.qm</file> <file alias="silentdragon_it.qm">res/silentdragon_it.qm</file>
<file alias="silentdragon_id.qm">res-drgx/silentdragon_id.qm</file> <file alias="silentdragon_id.qm">res/silentdragon_id.qm</file>
<file alias="silentdragon_nl.qm">res-drgx/silentdragon_nl.qm</file> <file alias="silentdragon_nl.qm">res/silentdragon_nl.qm</file>
<file alias="silentdragon_pl.qm">res-drgx/silentdragon_pl.qm</file> <file alias="silentdragon_pl.qm">res/silentdragon_pl.qm</file>
<file alias="silentdragon_pt.qm">res-drgx/silentdragon_pt.qm</file> <file alias="silentdragon_pt.qm">res/silentdragon_pt.qm</file>
<file alias="silentdragon_ro.qm">res-drgx/silentdragon_ro.qm</file> <file alias="silentdragon_ro.qm">res/silentdragon_ro.qm</file>
<file alias="silentdragon_ru.qm">res-drgx/silentdragon_ru.qm</file> <file alias="silentdragon_ru.qm">res/silentdragon_ru.qm</file>
<file alias="silentdragon_sr.qm">res-drgx/silentdragon_sr.qm</file> <file alias="silentdragon_sr.qm">res/silentdragon_sr.qm</file>
<file alias="silentdragon_tr.qm">res-drgx/silentdragon_tr.qm</file> <file alias="silentdragon_tr.qm">res/silentdragon_tr.qm</file>
<file alias="silentdragon_uk.qm">res-drgx/silentdragon_uk.qm</file> <file alias="silentdragon_uk.qm">res/silentdragon_uk.qm</file>
<file alias="silentdragon_zh.qm">res-drgx/silentdragon_zh.qm</file> <file alias="silentdragon_zh.qm">res/silentdragon_zh.qm</file>
</qresource> </qresource>
<qresource prefix="/css"> <qresource prefix="/css">
<file alias="blue.css">res/css/blue.css</file> <file alias="blue.css">res/css/blue.css</file>

14
doc/relnotes/README.md

@ -10,6 +10,20 @@ and no longer on Github, since they banned Duke Leto and
also because they censor many people around the world and work with also because they censor many people around the world and work with
evil organizations. evil organizations.
# SilentDragon 1.4.0 "Zany Zooid"
```
95 files changed, 8438 insertions(+), 60854 deletions(-)
```
* Ability to view block info for any height #103
* Support a proxy running on something other than 127.0.0.1 #127
* Bug fix for Windows file path when exporting #128
* Bug fix for `listtransactions` to display more than 10 mining reward txs in Transactions tab #126
* Now compiles on Ubuntu 20.04 thanks to jahway #125
* Translation fixes thanks to onryo #120
* Single set of translations for SD and SDX #122
# SilentDragon 1.3.1 "Omnicompetent Okapi" # SilentDragon 1.3.1 "Omnicompetent Okapi"
``` ```

0
res-drgx/tropical-hush-square.png → res-drgx/hushdlogo.png

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

BIN
res-drgx/silentdragon_be.qm

Binary file not shown.

2690
res-drgx/silentdragon_be.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_bg.qm

Binary file not shown.

2560
res-drgx/silentdragon_bg.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_de.qm

Binary file not shown.

2917
res-drgx/silentdragon_de.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_es.qm

Binary file not shown.

2898
res-drgx/silentdragon_es.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_fi.qm

Binary file not shown.

2911
res-drgx/silentdragon_fi.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_fil.qm

Binary file not shown.

2751
res-drgx/silentdragon_fil.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_fr.qm

Binary file not shown.

2945
res-drgx/silentdragon_fr.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_hr.qm

Binary file not shown.

2754
res-drgx/silentdragon_hr.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_id.qm

Binary file not shown.

2464
res-drgx/silentdragon_id.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_it.qm

Binary file not shown.

2897
res-drgx/silentdragon_it.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_nl.qm

Binary file not shown.

2686
res-drgx/silentdragon_nl.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_pl.qm

Binary file not shown.

2689
res-drgx/silentdragon_pl.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_pt.qm

Binary file not shown.

2885
res-drgx/silentdragon_pt.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_ro.qm

Binary file not shown.

2752
res-drgx/silentdragon_ro.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_ru.qm

Binary file not shown.

2691
res-drgx/silentdragon_ru.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_sr.qm

Binary file not shown.

2754
res-drgx/silentdragon_sr.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_tr.qm

Binary file not shown.

2902
res-drgx/silentdragon_tr.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_uk.qm

Binary file not shown.

3152
res-drgx/silentdragon_uk.ts

File diff suppressed because it is too large

BIN
res-drgx/silentdragon_zh.qm

Binary file not shown.

3037
res-drgx/silentdragon_zh.ts

File diff suppressed because it is too large

BIN
res-drgx/tropical-hush.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 42 KiB

BIN
res/silentdragon_be.qm

Binary file not shown.

813
res/silentdragon_be.ts

File diff suppressed because it is too large

815
res/silentdragon_bg.ts

File diff suppressed because it is too large

815
res/silentdragon_de.ts

File diff suppressed because it is too large

815
res/silentdragon_es.ts

File diff suppressed because it is too large

BIN
res/silentdragon_fi.qm

Binary file not shown.

815
res/silentdragon_fi.ts

File diff suppressed because it is too large

BIN
res/silentdragon_fil.qm

Binary file not shown.

815
res/silentdragon_fil.ts

File diff suppressed because it is too large

BIN
res/silentdragon_fr.qm

Binary file not shown.

815
res/silentdragon_fr.ts

File diff suppressed because it is too large

815
res/silentdragon_hr.ts

File diff suppressed because it is too large

BIN
res/silentdragon_it.qm

Binary file not shown.

815
res/silentdragon_it.ts

File diff suppressed because it is too large

BIN
res/silentdragon_nl.qm

Binary file not shown.

813
res/silentdragon_nl.ts

File diff suppressed because it is too large

BIN
res/silentdragon_pl.qm

Binary file not shown.

813
res/silentdragon_pl.ts

File diff suppressed because it is too large

BIN
res/silentdragon_pt.qm

Binary file not shown.

815
res/silentdragon_pt.ts

File diff suppressed because it is too large

BIN
res/silentdragon_ro.qm

Binary file not shown.

815
res/silentdragon_ro.ts

File diff suppressed because it is too large

BIN
res/silentdragon_ru.qm

Binary file not shown.

813
res/silentdragon_ru.ts

File diff suppressed because it is too large

815
res/silentdragon_sr.ts

File diff suppressed because it is too large

BIN
res/silentdragon_tr.qm

Binary file not shown.

815
res/silentdragon_tr.ts

File diff suppressed because it is too large

BIN
res/silentdragon_uk.qm

Binary file not shown.

815
res/silentdragon_uk.ts

File diff suppressed because it is too large

BIN
res/silentdragon_zh.qm

Binary file not shown.

815
res/silentdragon_zh.ts

File diff suppressed because it is too large

1
silentdragon.pro

@ -89,6 +89,7 @@ HEADERS += \
src/viewalladdresses.h src/viewalladdresses.h
FORMS += \ FORMS += \
src/getblock.ui \
src/mainwindow.ui \ src/mainwindow.ui \
src/qrcode.ui \ src/qrcode.ui \
src/rescandialog.ui \ src/rescandialog.ui \

39
silentdragonx.pro

@ -88,6 +88,7 @@ HEADERS += \
src/viewalladdresses.h src/viewalladdresses.h
FORMS += \ FORMS += \
src/getblock.ui \
src/mainwindow.ui \ src/mainwindow.ui \
src/qrcode.ui \ src/qrcode.ui \
src/rescandialog.ui \ src/rescandialog.ui \
@ -109,25 +110,25 @@ FORMS += \
src/requestdialog.ui src/requestdialog.ui
TRANSLATIONS = res-drgx/silentdragon_be.ts \ TRANSLATIONS = res/silentdragon_be.ts \
res-drgx/silentdragon_bg.ts \ res/silentdragon_bg.ts \
res-drgx/silentdragon_de.ts \ res/silentdragon_de.ts \
res-drgx/silentdragon_es.ts \ res/silentdragon_es.ts \
res-drgx/silentdragon_fi.ts \ res/silentdragon_fi.ts \
res-drgx/silentdragon_fil.ts \ res/silentdragon_fil.ts \
res-drgx/silentdragon_fr.ts \ res/silentdragon_fr.ts \
res-drgx/silentdragon_hr.ts \ res/silentdragon_hr.ts \
res-drgx/silentdragon_id.ts \ res/silentdragon_id.ts \
res-drgx/silentdragon_it.ts \ res/silentdragon_it.ts \
res-drgx/silentdragon_nl.ts \ res/silentdragon_nl.ts \
res-drgx/silentdragon_pl.ts \ res/silentdragon_pl.ts \
res-drgx/silentdragon_pt.ts \ res/silentdragon_pt.ts \
res-drgx/silentdragon_ro.ts \ res/silentdragon_ro.ts \
res-drgx/silentdragon_ru.ts \ res/silentdragon_ru.ts \
res-drgx/silentdragon_sr.ts \ res/silentdragon_sr.ts \
res-drgx/silentdragon_tr.ts \ res/silentdragon_tr.ts \
res-drgx/silentdragon_uk.ts \ res/silentdragon_uk.ts \
res-drgx/silentdragon_zh.ts res/silentdragon_zh.ts
include(singleapplication/singleapplication.pri) include(singleapplication/singleapplication.pri)
DEFINES += QAPPLICATION_CLASS=QApplication _FORTIFY_SOURCE=2 DEFINES += QAPPLICATION_CLASS=QApplication _FORTIFY_SOURCE=2

2
src/addressbook.h

@ -9,6 +9,8 @@ class MainWindow;
class AddressBookModel : public QAbstractTableModel { class AddressBookModel : public QAbstractTableModel {
Q_OBJECT
public: public:
AddressBookModel(QTableView* parent); AddressBookModel(QTableView* parent);
~AddressBookModel(); ~AddressBookModel();

6
src/balancestablemodel.h

@ -13,8 +13,10 @@ struct UnspentOutput {
bool spendable; bool spendable;
}; };
class BalancesTableModel : public QAbstractTableModel class BalancesTableModel : public QAbstractTableModel {
{
Q_OBJECT
public: public:
BalancesTableModel(QObject* parent); BalancesTableModel(QObject* parent);
~BalancesTableModel(); ~BalancesTableModel();

4
src/connection.cpp

@ -211,11 +211,13 @@ void ConnectionLoader::createHushConf() {
// Show the dialog // Show the dialog
QString datadir = ""; QString datadir = "";
bool useTor = false; bool useTor = false;
QString torProxy = "127.0.0.1";
QString torPort = "9050"; QString torPort = "9050";
if (d.exec() == QDialog::Accepted) { if (d.exec() == QDialog::Accepted) {
datadir = ui.lblDirName->text(); datadir = ui.lblDirName->text();
useTor = ui.chkUseTor->isChecked(); useTor = ui.chkUseTor->isChecked();
torProxy = ui.torProxy->text();
torPort = ui.torPort->text(); torPort = ui.torPort->text();
} }
@ -266,7 +268,7 @@ void ConnectionLoader::createHushConf() {
out << "datadir=" % datadir % "\n"; out << "datadir=" % datadir % "\n";
} }
if (useTor) { if (useTor) {
out << "proxy=127.0.0.1:" << torPort << "\n"; out << "proxy="<< torProxy << ":" << torPort << "\n";
} }
file.close(); file.close();

237
src/createhushconfdialog.ui

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>508</width> <width>508</width>
<height>352</height> <height>369</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -95,93 +95,154 @@
<property name="title"> <property name="title">
<string/> <string/>
</property> </property>
<layout class="QGridLayout" name="gridLayout_2"> <widget class="QCheckBox" name="chkCustomDatadir">
<item row="0" column="0"> <property name="geometry">
<widget class="QCheckBox" name="chkCustomDatadir"> <rect>
<property name="text"> <x>8</x>
<string>Use custom datadir</string> <y>8</y>
</property> <width>148</width>
</widget> <height>22</height>
</item> </rect>
<item row="1" column="0"> </property>
<widget class="QLabel" name="label_2"> <property name="text">
<property name="text"> <string>Use custom datadir</string>
<string>Please choose a directory to store your wallet.dat and blockchain</string> </property>
</property> </widget>
</widget> <widget class="QLabel" name="label_2">
</item> <property name="geometry">
<item row="2" column="0"> <rect>
<layout class="QHBoxLayout" name="horizontalLayout"> <x>8</x>
<item> <y>36</y>
<widget class="QPushButton" name="btnPickDir"> <width>395</width>
<property name="text"> <height>18</height>
<string>Choose directory</string> </rect>
</property> </property>
</widget> <property name="text">
</item> <string>Please choose a directory to store your wallet.dat and blockchain</string>
<item> </property>
<widget class="QLabel" name="lblDirName"> </widget>
<property name="text"> <widget class="QLabel" name="label_4">
<string notr="true"/> <property name="geometry">
</property> <rect>
</widget> <x>8</x>
</item> <y>102</y>
<item> <width>16</width>
<spacer name="horizontalSpacer"> <height>18</height>
<property name="orientation"> </rect>
<enum>Qt::Horizontal</enum> </property>
</property> <property name="text">
<property name="sizeHint" stdset="0"> <string notr="true"/>
<size> </property>
<width>40</width> </widget>
<height>20</height> <widget class="QCheckBox" name="chkUseTor">
</size> <property name="geometry">
</property> <rect>
</spacer> <x>8</x>
</item> <y>126</y>
</layout> <width>133</width>
</item> <height>22</height>
<item row="3" column="0"> </rect>
<widget class="QLabel" name="label_4"> </property>
<property name="text"> <property name="text">
<string notr="true"/> <string>Connect over Tor</string>
</property> </property>
</widget> </widget>
</item> <widget class="QLabel" name="label_5">
<property name="geometry">
<item row="4" column="0"> <rect>
<widget class="QCheckBox" name="chkUseTor"> <x>8</x>
<property name="text"> <y>154</y>
<string>Connect over Tor</string> <width>415</width>
</property> <height>18</height>
</widget> </rect>
</item> </property>
<property name="text">
<item row="5" column="0"> <string>Please note that you'll need to already have a Tor service configured</string>
<widget class="QLabel" name="label_5"> </property>
<property name="text"> </widget>
<string>Please note that you'll need to already have a Tor service configured</string> <widget class="QLabel" name="label_tor_port">
</property> <property name="geometry">
</widget> <rect>
</item> <x>178</x>
<y>178</y>
<item row="6" column="0"> <width>49</width>
<widget class="QLabel" name="label_tor_port"> <height>18</height>
<property name="text"> </rect>
<string>Tor Port</string> </property>
</property> <property name="text">
</widget> <string>Tor Port</string>
</item> </property>
</widget>
<item row="6" column="1"> <widget class="QLineEdit" name="torPort">
<widget class="QLineEdit" name="torPort"> <property name="geometry">
<property name="text"> <rect>
<string notr="true">9050</string> <x>230</x>
</property> <y>178</y>
</widget> <width>59</width>
</item> <height>32</height>
</rect>
</layout> </property>
<property name="text">
<string notr="true">9050</string>
</property>
</widget>
<widget class="QLineEdit" name="torProxy">
<property name="geometry">
<rect>
<x>62</x>
<y>180</y>
<width>111</width>
<height>32</height>
</rect>
</property>
<property name="text">
<string notr="true">127.0.0.1</string>
</property>
</widget>
<widget class="QLabel" name="label_tor_proxy">
<property name="geometry">
<rect>
<x>10</x>
<y>180</y>
<width>49</width>
<height>18</height>
</rect>
</property>
<property name="text">
<string>Proxy IP</string>
</property>
</widget>
<widget class="QWidget" name="">
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<widget class="QPushButton" name="btnPickDir">
<property name="text">
<string>Choose directory</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="lblDirName">
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget> </widget>
</item> </item>
</layout> </layout>

85
src/getblock.ui

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>GetBlock</class>
<widget class="QDialog" name="GetBlock">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Get Block Info</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="1">
<widget class="QLabel" name="lblHeight">
<property name="text">
<string>TextLabel</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Block Height:</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<widget class="QTableView" name="tblProps">
<attribute name="horizontalHeaderStretchLastSection">
<bool>true</bool>
</attribute>
</widget>
</item>
<item row="2" column="0" colspan="2">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Close</set>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>GetBlock</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>GetBlock</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

1
src/main.cpp

@ -6,6 +6,7 @@
#include "rpc.h" #include "rpc.h"
#include "settings.h" #include "settings.h"
#include "version.h" #include "version.h"
#include <QCommandLineParser>
bool isdragonx = 0; bool isdragonx = 0;

82
src/mainwindow.cpp

@ -14,6 +14,7 @@
#include "ui_viewalladdresses.h" #include "ui_viewalladdresses.h"
#include "ui_validateaddress.h" #include "ui_validateaddress.h"
#include "ui_rescandialog.h" #include "ui_rescandialog.h"
#include "ui_getblock.h"
#include "rpc.h" #include "rpc.h"
#include "balancestablemodel.h" #include "balancestablemodel.h"
#include "settings.h" #include "settings.h"
@ -22,6 +23,7 @@
#include "connection.h" #include "connection.h"
#include "requestdialog.h" #include "requestdialog.h"
#include <QLCDNumber> #include <QLCDNumber>
#include <QThread>
#include "sd.h" #include "sd.h"
extern bool isdragonx; extern bool isdragonx;
@ -94,6 +96,9 @@ MainWindow::MainWindow(QWidget *parent) :
// Validate Address // Validate Address
QObject::connect(ui->actionValidate_Address, &QAction::triggered, this, &MainWindow::validateAddress); QObject::connect(ui->actionValidate_Address, &QAction::triggered, this, &MainWindow::validateAddress);
// Get Block
QObject::connect(ui->actionGet_Block, &QAction::triggered, this, &MainWindow::getBlock);
// Address Book // Address Book
QObject::connect(ui->action_Address_Book, &QAction::triggered, this, &MainWindow::addressBook); QObject::connect(ui->action_Address_Book, &QAction::triggered, this, &MainWindow::addressBook);
@ -699,8 +704,9 @@ void MainWindow::setupSettingsModal() {
if (!isUsingTor && settings.chkTor->isChecked()) { if (!isUsingTor && settings.chkTor->isChecked()) {
// If "use tor" was previously unchecked and now checked // If "use tor" was previously unchecked and now checked
QString torProxy= settings.torProxy->text();
QString torPort = settings.torPort->text(); QString torPort = settings.torPort->text();
QString proxyConfig = "proxy=127.0.0.1:" % torPort; QString proxyConfig = "proxy="%torProxy%":"%torPort;
Settings::addToHushConf(hushConfLocation, proxyConfig); Settings::addToHushConf(hushConfLocation, proxyConfig);
rpc->getConnection()->config->proxy = proxyConfig; rpc->getConnection()->config->proxy = proxyConfig;
@ -895,7 +901,59 @@ void MainWindow::validateAddress() {
d.exec(); d.exec();
}); });
}
// Get block info
void MainWindow::getBlock() {
// Make sure everything is up and running
if (!getRPC() || !getRPC()->getConnection())
return;
// First thing is ask the user for a block height
bool ok;
int i = QInputDialog::getInt(this, tr("Get Block Info"),
tr("Enter Block Height:"), 1, 1, 2147483647, 1, &ok);
if (!ok)
return;
auto blockheight = QString::number(i);
getRPC()->getBlock(blockheight, [=] (QJsonValue props) {
QDialog d(this);
Ui_GetBlock gb;
gb.setupUi(&d);
Settings::saveRestore(&d);
Settings::saveRestoreTableHeader(gb.tblProps, &d, "getblockprops");
gb.tblProps->horizontalHeader()->setStretchLastSection(true);
gb.lblHeight->setText(blockheight);
QList<QPair<QString, QString>> propsList;
for (QString property_name: props.toObject().keys()) {
QString property_value;
DEBUG("property = " << props.toObject()[property_name] );
if (props.toObject()[property_name].isString()) {
property_value = props.toObject()[property_name].toString();
} else if (props.toObject()[property_name].isDouble()) {
property_value = QString::number( props.toObject()[property_name].toDouble(), 'f', 0);
} else if (props.toObject()[property_name].isBool()) {
property_value = props.toObject()[property_name].toBool() ? "true" : "false" ;
}
propsList.append(
QPair<QString, QString>( property_name,
property_value )
);
}
ValidateAddressesModel model(gb.tblProps, propsList);
gb.tblProps->setModel(&model);
d.exec();
});
} }
void MainWindow::doImport(QList<QString>* keys) { void MainWindow::doImport(QList<QString>* keys) {
@ -1070,10 +1128,16 @@ void MainWindow::importPrivKey() {
*/ */
void MainWindow::exportTransactions() { void MainWindow::exportTransactions() {
// First, get the export file name // First, get the export file name
QString exportName = "hush-transactions-" + QDateTime::currentDateTime().toString("yyyyMMdd") + ".csv"; QString exportName;
if(isdragonx){
exportName = "drgx-transactions-" + QDateTime::currentDateTime().toString("yyyyMMdd") + ".csv";
}else{
exportName = "hush-transactions-" + QDateTime::currentDateTime().toString("yyyyMMdd") + ".csv";
}
QUrl csvName = QFileDialog::getSaveFileUrl(this, QDir docsDir(QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation));
tr("Export transactions"), exportName, "CSV file (*.csv)"); QUrl pName = QUrl::fromLocalFile(docsDir.filePath(exportName));
QUrl csvName = QFileDialog::getSaveFileUrl(this, tr("Export transactions"), pName, "CSV file (*.csv)");
if (csvName.isEmpty()) if (csvName.isEmpty())
return; return;
@ -1093,7 +1157,12 @@ void MainWindow::backupWalletDat() {
return; return;
QDir hushdir(rpc->getConnection()->config->hushDir); QDir hushdir(rpc->getConnection()->config->hushDir);
QString backupDefaultName = "hush-wallet-backup-" + QDateTime::currentDateTime().toString("yyyyMMdd") + ".dat"; QString backupDefaultName;
if(isdragonx){
backupDefaultName = "drgx-wallet-backup-" + QDateTime::currentDateTime().toString("yyyyMMdd") + ".dat";
}else{
backupDefaultName = "hush-wallet-backup-" + QDateTime::currentDateTime().toString("yyyyMMdd") + ".dat";
}
if (Settings::getInstance()->isTestnet()) { if (Settings::getInstance()->isTestnet()) {
hushdir.cd("testnet3"); hushdir.cd("testnet3");
@ -1107,7 +1176,8 @@ void MainWindow::backupWalletDat() {
return; return;
} }
QUrl backupName = QFileDialog::getSaveFileUrl(this, tr("Backup wallet.dat"), backupDefaultName, "Data file (*.dat)"); QUrl pName = QUrl::fromLocalFile(hushdir.filePath(backupDefaultName));
QUrl backupName = QFileDialog::getSaveFileUrl(this, tr("Backup wallet.dat"), pName, "Data file (*.dat)");
if (backupName.isEmpty()) if (backupName.isEmpty())
return; return;

1
src/mainwindow.h

@ -52,6 +52,7 @@ public:
void payHushURI(QString uri = "", QString myAddr = ""); void payHushURI(QString uri = "", QString myAddr = "");
void validateAddress(); void validateAddress();
void getBlock();
void updateLabels(); void updateLabels();
void updateTAddrCombo(bool checked); void updateTAddrCombo(bool checked);

26
src/mainwindow.ui

@ -121,6 +121,7 @@
</property> </property>
<property name="font"> <property name="font">
<font> <font>
<weight>75</weight>
<bold>true</bold> <bold>true</bold>
</font> </font>
</property> </property>
@ -133,6 +134,7 @@
<widget class="QLabel" name="balTotal"> <widget class="QLabel" name="balTotal">
<property name="font"> <property name="font">
<font> <font>
<weight>75</weight>
<bold>true</bold> <bold>true</bold>
</font> </font>
</property> </property>
@ -158,6 +160,7 @@
</property> </property>
<property name="font"> <property name="font">
<font> <font>
<weight>75</weight>
<bold>true</bold> <bold>true</bold>
</font> </font>
</property> </property>
@ -170,6 +173,7 @@
<widget class="QLabel" name="balUSDTotal"> <widget class="QLabel" name="balUSDTotal">
<property name="font"> <property name="font">
<font> <font>
<weight>75</weight>
<bold>true</bold> <bold>true</bold>
</font> </font>
</property> </property>
@ -384,8 +388,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1409</width> <width>1447</width>
<height>865</height> <height>860</height>
</rect> </rect>
</property> </property>
<layout class="QVBoxLayout" name="sendToLayout"> <layout class="QVBoxLayout" name="sendToLayout">
@ -1210,7 +1214,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="13" column="1"> <item row="13" column="1">
<widget class="QLabel" name="clientnamespacer"> <widget class="QLabel" name="clientnamespacer">
<property name="text"> <property name="text">
@ -1245,7 +1248,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="16" column="2"> <item row="16" column="2">
<widget class="QLabel" name="longestchain"> <widget class="QLabel" name="longestchain">
<property name="text"> <property name="text">
@ -1273,7 +1275,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="2"> <item row="1" column="2">
<widget class="QLabel" name="numconnections"> <widget class="QLabel" name="numconnections">
<property name="text"> <property name="text">
@ -1281,8 +1282,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="18" column="0"> <item row="18" column="0">
<widget class="QLabel" name="chaintxcountlabel"> <widget class="QLabel" name="chaintxcountlabel">
<property name="sizePolicy"> <property name="sizePolicy">
@ -1296,7 +1295,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="1" column="0">
<widget class="QLabel" name="label_8"> <widget class="QLabel" name="label_8">
<property name="sizePolicy"> <property name="sizePolicy">
@ -1391,7 +1389,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="12" column="2"> <item row="12" column="2">
<widget class="QLabel" name="rpcport"> <widget class="QLabel" name="rpcport">
<property name="text"> <property name="text">
@ -1446,7 +1443,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="11" column="1"> <item row="11" column="1">
<widget class="QLabel" name="p2pportspacer"> <widget class="QLabel" name="p2pportspacer">
<property name="text"> <property name="text">
@ -1488,7 +1484,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0"> <item row="2" column="0">
<widget class="QLabel" name="label_12"> <widget class="QLabel" name="label_12">
<property name="sizePolicy"> <property name="sizePolicy">
@ -1549,7 +1544,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="18" column="1"> <item row="18" column="1">
<widget class="QLabel" name="chaintxcountspacer"> <widget class="QLabel" name="chaintxcountspacer">
<property name="text"> <property name="text">
@ -1614,7 +1608,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>1487</width> <width>1487</width>
<height>24</height> <height>30</height>
</rect> </rect>
</property> </property>
<widget class="QMenu" name="menuFile"> <widget class="QMenu" name="menuFile">
@ -1646,6 +1640,7 @@
<property name="title"> <property name="title">
<string>&amp;Apps</string> <string>&amp;Apps</string>
</property> </property>
<addaction name="actionGet_Block"/>
<addaction name="actionValidate_Address"/> <addaction name="actionValidate_Address"/>
<addaction name="separator"/> <addaction name="separator"/>
</widget> </widget>
@ -1751,6 +1746,11 @@
<string>Validate Address</string> <string>Validate Address</string>
</property> </property>
</action> </action>
<action name="actionGet_Block">
<property name="text">
<string>Get Block Info</string>
</property>
</action>
</widget> </widget>
<layoutdefault spacing="6" margin="11"/> <layoutdefault spacing="6" margin="11"/>
<customwidgets> <customwidgets>

6
src/memoedit.h

@ -5,8 +5,10 @@
#include "precompiled.h" #include "precompiled.h"
class MemoEdit : public QPlainTextEdit class MemoEdit : public QPlainTextEdit {
{
Q_OBJECT
public: public:
MemoEdit(QWidget* parent); MemoEdit(QWidget* parent);

1
src/precompiled.h

@ -62,7 +62,6 @@
#include <QtNetwork/QNetworkRequest> #include <QtNetwork/QNetworkRequest>
#include <QtNetwork/QNetworkAccessManager> #include <QtNetwork/QNetworkAccessManager>
#include <QtNetwork/QNetworkReply> #include <QtNetwork/QNetworkReply>
#include <QtWebSockets/QtWebSockets>
#include <QJsonDocument> #include <QJsonDocument>
#include <QJsonArray> #include <QJsonArray>
#include <QJsonObject> #include <QJsonObject>

19
src/rpc.cpp

@ -6,6 +6,7 @@
#include "settings.h" #include "settings.h"
#include "senttxstore.h" #include "senttxstore.h"
#include "version.h" #include "version.h"
#include <QThread>
#include "sd.h" #include "sd.h"
extern bool isdragonx; extern bool isdragonx;
@ -373,6 +374,10 @@ void RPC::validateAddress(QString address, const std::function<void(QJsonValue)>
conn->doRPCWithDefaultErrorHandling(makePayload(method, address), cb); conn->doRPCWithDefaultErrorHandling(makePayload(method, address), cb);
} }
void RPC::getBlock(QString height, const std::function<void(QJsonValue)>& cb) {
conn->doRPCWithDefaultErrorHandling(makePayload("getblock", height), cb);
}
void RPC::getBalance(const std::function<void(QJsonValue)>& cb) { void RPC::getBalance(const std::function<void(QJsonValue)>& cb) {
QJsonObject payload = { QJsonObject payload = {
{"jsonrpc", "1.0"}, {"jsonrpc", "1.0"},
@ -395,8 +400,14 @@ void RPC::listBanned(const std::function<void(QJsonValue)>& cb) {
} }
void RPC::getTransactions(const std::function<void(QJsonValue)>& cb) { void RPC::getTransactions(const std::function<void(QJsonValue)>& cb) {
QString method = "listtransactions"; QJsonObject payload = {
conn->doRPCWithDefaultErrorHandling(makePayload(method), cb); {"jsonrpc", "1.0"},
{"id", "42"},
{"method", "listtransactions"},
{"params", QJsonArray { "*", 99999 }}
};
conn->doRPCWithDefaultErrorHandling(payload, cb);
} }
void RPC::mergeToAddress(QJsonArray &params, const std::function<void(QJsonValue)>& cb, void RPC::mergeToAddress(QJsonArray &params, const std::function<void(QJsonValue)>& cb,
@ -757,9 +768,9 @@ void RPC::getInfoThenRefresh(bool force) {
int version = reply["version"].toInt(); int version = reply["version"].toInt();
int p2pport = reply["p2pport"].toInt(); int p2pport = reply["p2pport"].toInt();
int rpcport = reply["rpcport"].toInt(); int rpcport = reply["rpcport"].toInt();
int notarized = reply["notarized"].toInt();
int protocolversion = reply["protocolversion"].toInt(); int protocolversion = reply["protocolversion"].toInt();
int lag = curBlock - notarized; // int notarized = reply["notarized"].toInt();
// int lag = curBlock - notarized;
// TODO: store all future halvings // TODO: store all future halvings
int blocks_until_halving= 2020000 - curBlock; int blocks_until_halving= 2020000 - curBlock;
char halving_days[8]; char halving_days[8];

1
src/rpc.h

@ -110,6 +110,7 @@ public:
void importZPrivKey(QString addr, bool rescan, const std::function<void(QJsonValue)>& cb); void importZPrivKey(QString addr, bool rescan, const std::function<void(QJsonValue)>& cb);
void importTPrivKey(QString addr, bool rescan, const std::function<void(QJsonValue)>& cb); void importTPrivKey(QString addr, bool rescan, const std::function<void(QJsonValue)>& cb);
void validateAddress(QString address, const std::function<void(QJsonValue)>& cb); void validateAddress(QString address, const std::function<void(QJsonValue)>& cb);
void getBlock(QString height, const std::function<void(QJsonValue)>& cb);
void shutdownHushd(); void shutdownHushd();
void noConnection(); void noConnection();

1
src/settings.cpp

@ -3,6 +3,7 @@
#include "mainwindow.h" #include "mainwindow.h"
#include "settings.h" #include "settings.h"
#include "sd.h" #include "sd.h"
#include <QUrlQuery>
extern bool isdragonx; extern bool isdragonx;

283
src/settings.ui

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>623</width> <width>623</width>
<height>653</height> <height>622</height>
</rect> </rect>
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
@ -145,228 +145,165 @@
<string>Options</string> <string>Options</string>
</attribute> </attribute>
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="2"> <item row="0" column="0" colspan="3">
<widget class="QCheckBox" name="chkSaveTxs"> <widget class="QCheckBox" name="chkSaveTxs">
<property name="text"> <property name="text">
<string>Remember shielded transactions</string> <string>Remember shielded transactions</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="0" colspan="2"> <item row="1" column="0" colspan="5">
<widget class="QCheckBox" name="chkAutoShield"> <widget class="QLabel" name="label_5">
<property name="text"> <property name="text">
<string>Shield change from t-Addresses to your sapling address</string> <string>Shielded transactions are saved locally and shown in the transactions tab. If you uncheck this, shielded transactions will not appear in the transactions tab.</string>
</property>
<property name="wordWrap">
<bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1"> <item row="1" column="5">
<widget class="QPushButton" name="btnClearSaved"> <widget class="QPushButton" name="btnClearSaved">
<property name="text"> <property name="text">
<string>Clear History</string> <string>Clear History</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="12" column="0" colspan="2"> <item row="2" column="0" colspan="3">
<widget class="QLabel" name="label_10"> <widget class="QCheckBox" name="chkCustomFees">
<property name="text"> <property name="text">
<string>Connect to the internet to fetch prices</string> <string>Allow custom fees</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="14" column="0" colspan="2"> <item row="3" column="0" colspan="6">
<spacer name="verticalSpacer_2"> <widget class="QLabel" name="label_6">
<property name="orientation"> <property name="text">
<enum>Qt::Vertical</enum> <string>Allow overriding the default fees when sending transactions. Enabling this option may compromise your privacy since fees are transparent. </string>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property> </property>
</spacer> <property name="wordWrap">
</item> <bool>true</bool>
<item row="15" column="1">
<widget class="QComboBox" name="comboBoxTheme">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property> </property>
<item>
<property name="text">
<string notr="true">default</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">blue</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">light</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">dark</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">midnight</string>
</property>
</item>
<item>
<property name="text">
<string>dragonx</string>
</property>
</item>
</widget> </widget>
</item> </item>
<item row="18" column="1"> <item row="4" column="0" colspan="5">
<widget class="QComboBox" name="comboBoxLanguage"> <widget class="QCheckBox" name="chkAutoShield">
<property name="sizePolicy"> <property name="text">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> <string>Shield change from t-Addresses to your sapling address</string>
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="0" colspan="6">
<item row="8" column="0" colspan="2"> <widget class="QLabel" name="label_7">
<widget class="QLabel" name="lblTor">
<property name="text"> <property name="text">
<string>Connect to the Tor network via SOCKS proxy, which runs on 127.0.0.1:9050 by default or 127.0.0.1:9150 for Tor Browser. Please note that you'll have to install and run the Tor service externally.</string> <string>Normally, change from t-Addresses goes to another t-Address. Checking this option will send the change to your shielded sapling address instead. Check this option to increase your privacy.</string>
</property> </property>
<property name="wordWrap"> <property name="wordWrap">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="0" colspan="3">
<item row="9" column="0"> <widget class="QCheckBox" name="chkTor">
<widget class="QLabel" name="label_tor_port">
<property name="text">
<string>Tor Port</string>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QLineEdit" name="torPort">
<property name="text">
<string notr="true">9050</string>
</property>
</widget>
</item>
<item row="2" column="0">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="15" column="0">
<widget class="QLabel" name="label_20">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text"> <property name="text">
<string>Theme</string> <string>Connect via Tor</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
<item row="4" column="0" colspan="2"> <item row="7" column="0" colspan="6">
<widget class="QLabel" name="label_6"> <widget class="QLabel" name="lblTor">
<property name="text"> <property name="text">
<string>Allow overriding the default fees when sending transactions. Enabling this option may compromise your privacy since fees are transparent. </string> <string>Connect to the Tor network via SOCKS proxy, which runs on 127.0.0.1:9050 by default or 127.0.0.1:9150 for Tor Browser. Please note that you'll have to install and run the Tor service externally.</string>
</property> </property>
<property name="wordWrap"> <property name="wordWrap">
<bool>true</bool> <bool>true</bool>
</property> </property>
</widget> </widget>
</item> </item>
<item row="10" column="0" colspan="2"> <item row="8" column="0">
<widget class="QCheckBox" name="chkCheckUpdates"> <widget class="QLabel" name="label_tor_proxy">
<property name="text"> <property name="text">
<string>Check git.hush.is for updates at startup</string> <string>Proxy IP</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="12" column="0" colspan="2"> <item row="8" column="1" colspan="2">
<widget class="QCheckBox" name="chkFetchPrices"> <widget class="QLineEdit" name="torProxy">
<property name="text"> <property name="text">
<string>Fetch prices</string> <string notr="true">127.0.0.1</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="11" column="0" colspan="2"> <item row="8" column="3">
<widget class="QLabel" name="label_8"> <widget class="QLabel" name="label_tor_port">
<property name="text"> <property name="text">
<string>Connect to git.hush.is on startup to check for updates</string> <string>Tor Port</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0"> <item row="8" column="4">
<widget class="QCheckBox" name="chkCustomFees"> <widget class="QLineEdit" name="torPort">
<property name="text"> <property name="text">
<string>Allow custom fees</string> <string notr="true">9050</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0" colspan="2"> <item row="9" column="0" colspan="6">
<widget class="QLabel" name="label_5"> <widget class="QCheckBox" name="chkCheckUpdates">
<property name="text"> <property name="text">
<string>Shielded transactions are saved locally and shown in the transactions tab. If you uncheck this, shielded transactions will not appear in the transactions tab.</string> <string>Connect to git.hush.is on startup to check for updates</string>
</property> </property>
<property name="wordWrap"> </widget>
<bool>true</bool> </item>
<item row="10" column="0" colspan="6">
<widget class="QCheckBox" name="chkFetchPrices">
<property name="text">
<string>Connect to the internet to fetch prices</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="16" column="0"> <item row="11" column="2">
<widget class="QLabel" name="label_201"> <widget class="QComboBox" name="comboBoxTheme">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch> <horstretch>0</horstretch>
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<property name="text"> <item>
<string>Local Currency</string> <property name="text">
</property> <string notr="true">default</string>
<property name="alignment"> </property>
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> </item>
</property> <item>
</widget> <property name="text">
</item> <string notr="true">blue</string>
<item row="7" column="0"> </property>
<widget class="QCheckBox" name="chkTor"> </item>
<property name="text"> <item>
<string>Connect via Tor</string> <property name="text">
</property> <string notr="true">light</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">dark</string>
</property>
</item>
<item>
<property name="text">
<string notr="true">midnight</string>
</property>
</item>
<item>
<property name="text">
<string>dragonx</string>
</property>
</item>
</widget> </widget>
</item> </item>
<item row="18" column="0"> <item row="12" column="0" colspan="2">
<widget class="QLabel" name="langlabel"> <widget class="QLabel" name="label_201">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred"> <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch> <horstretch>0</horstretch>
@ -374,14 +311,14 @@
</sizepolicy> </sizepolicy>
</property> </property>
<property name="text"> <property name="text">
<string>Language</string> <string>Local Currency</string>
</property> </property>
<property name="alignment"> <property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property> </property>
</widget> </widget>
</item> </item>
<item row="16" column="1"> <item row="12" column="2">
<widget class="QComboBox" name="comboBoxCurrency"> <widget class="QComboBox" name="comboBoxCurrency">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
@ -606,13 +543,45 @@
</item> </item>
</widget> </widget>
</item> </item>
<item row="6" column="0" colspan="2"> <item row="13" column="0" colspan="2">
<widget class="QLabel" name="label_7"> <widget class="QLabel" name="langlabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text"> <property name="text">
<string>Normally, change from t-Addresses goes to another t-Address. Checking this option will send the change to your shielded sapling address instead. Check this option to increase your privacy.</string> <string>Language</string>
</property> </property>
<property name="wordWrap"> <property name="alignment">
<bool>true</bool> <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
</widget>
</item>
<item row="13" column="2">
<widget class="QComboBox" name="comboBoxLanguage">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
<item row="11" column="0" colspan="2">
<widget class="QLabel" name="label_20">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text">
<string>Theme</string>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property> </property>
</widget> </widget>
</item> </item>

2
src/validateaddress.h

@ -7,6 +7,8 @@
class ValidateAddressesModel : public QAbstractTableModel { class ValidateAddressesModel : public QAbstractTableModel {
Q_OBJECT
public: public:
ValidateAddressesModel(QTableView* parent, QList<QPair<QString, QString>> props); ValidateAddressesModel(QTableView* parent, QList<QPair<QString, QString>> props);
~ValidateAddressesModel() = default; ~ValidateAddressesModel() = default;

2
src/version.h

@ -1 +1 @@
#define APP_VERSION "1.3.1" #define APP_VERSION "1.4.0"

2
src/viewalladdresses.h

@ -8,6 +8,8 @@
class ViewAllAddressesModel : public QAbstractTableModel { class ViewAllAddressesModel : public QAbstractTableModel {
Q_OBJECT
public: public:
ViewAllAddressesModel(QTableView* parent, QList<QString> taddrs, RPC* rpc); ViewAllAddressesModel(QTableView* parent, QList<QString> taddrs, RPC* rpc);
~ViewAllAddressesModel() = default; ~ViewAllAddressesModel() = default;

Loading…
Cancel
Save