Browse Source

Merge pull request #170 from MyHush/dev

v1.3.8
pull/175/head 1.3.8
Denio 4 years ago
committed by GitHub
parent
commit
740913411e
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 12
      .travis.yml
  2. 26
      application.qrc
  3. 144
      lib/Cargo.lock
  4. 2
      lib/Cargo.toml
  5. 6
      lib/silentdragonlitelib.h
  6. 16
      lib/src/lib.rs
  7. BIN
      res/emoji/SD.png
  8. BIN
      res/emoji/emoji1.png
  9. BIN
      res/emoji/face-with-rolling-eyes.png
  10. BIN
      res/emoji/face-with-tongue.png
  11. BIN
      res/emoji/face_with_3hearts.png
  12. BIN
      res/emoji/heart_shaped_eyes.png
  13. BIN
      res/emoji/hush-money-white.png
  14. BIN
      res/emoji/innocent.png
  15. BIN
      res/emoji/joy.png
  16. BIN
      res/emoji/laughing.png
  17. BIN
      res/emoji/money-mouth.png
  18. BIN
      res/emoji/nauseated-face.png
  19. BIN
      res/emoji/partying_face.png
  20. BIN
      res/emoji/pile-of-poo.png
  21. BIN
      res/emoji/serious-face-with-symbols-covering-mouth.png
  22. BIN
      res/emoji/smiling-face-with-sunglasses.png
  23. BIN
      res/emoji/stuck-out.png
  24. BIN
      res/emoji/sweet_smile.png
  25. BIN
      res/hush-money-white.png
  26. BIN
      res/hush-money.png
  27. BIN
      res/money-mouth.png
  28. BIN
      res/money-outgoing.png
  29. 13
      res/silentdragonlite.desktop
  30. 4
      silentdragon-lite.pro
  31. 43
      src/Chat/Helper/ChatDelegator.h
  32. 40
      src/DataStore/ChatDataStore.cpp
  33. 2
      src/DataStore/ChatDataStore.h
  34. 39
      src/Model/ChatItem.cpp
  35. 3
      src/addressbook.cpp
  36. 21
      src/chatmodel.cpp
  37. 29
      src/connection.cpp
  38. 3
      src/connection.h
  39. 62
      src/controller.cpp
  40. 339
      src/emoji.ui
  41. 28
      src/firsttimewizard.cpp
  42. 3
      src/firsttimewizard.h
  43. 930
      src/mainwindow.cpp
  44. 14
      src/mainwindow.h
  45. 69
      src/mainwindow.ui
  46. 72
      src/restoreSeed.ui
  47. 9
      src/scripts/mkrelease.sh
  48. 114
      src/seedrestore.ui
  49. 276
      src/sendHushTransactionChat.ui
  50. 2
      src/version.h

12
.travis.yml

@ -4,12 +4,12 @@ matrix:
include:
# works on Precise and Trusty
- os: linux
- dist: xenial
- dist: bionec
compiler: clang
addons:
apt:
sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-precise-3.7']
packages: ['clang-3.7', 'g++-5']
sources: ['ubuntu-toolchain-r-test', 'llvm-toolchain-precise-7']
packages: ['clang-7', 'g++-5']
before_script:
- export PATH="$PATH:$HOME/.cargo/bin"
@ -20,10 +20,10 @@ before_install:
- gem install bundler
- curl -sSL https://sh.rustup.rs | sh -s -- -y --default-toolchain=nightly --profile=minimal
- export PATH="$PATH:$HOME/.cargo/bin"
- sudo add-apt-repository ppa:beineri/opt-qt591-xenial -y
- sudo add-apt-repository ppa:beineri/opt-qt-5.14.2-bionic -y
- sudo apt-get update -qq
- sudo apt-get install qt59base qt59websockets libgl1-mesa-dev
- source /opt/qt59/bin/qt59-env.sh
- sudo apt-get install qt514base qt514websockets libgl1-mesa-dev
- source /opt/qt514/bin/qt514-env.sh
- chmod +x res/libsodium/buildlibsodium.sh
script:

26
application.qrc

@ -47,8 +47,11 @@
<file>res/addContactBlack.png</file>
<file>res/unknownBlack.png</file>
<file>res/unknownWhite.png</file>
<file>res/hush-passion.png</file>
<file>res/dark-01.png</file>
<file>res/money-mouth.png</file>
<file>res/money-outgoing.png</file>
<file>res/hush-money-white.png</file>
</qresource>
<qresource prefix="/img">
<file>res/hushdlogo.gif</file>
@ -59,6 +62,27 @@
<file>res/loaderblack.gif</file>
<file>res/loaderwhite.gif</file>
</qresource>
<qresource prefix="/emoji">
<file>res/emoji/emoji1.png</file>
<file>res/emoji/laughing.png</file>
<file>res/emoji/money-mouth.png</file>
<file>res/emoji/sweet_smile.png</file>
<file>res/emoji/joy.png</file>
<file>res/emoji/innocent.png</file>
<file>res/emoji/partying_face.png</file>
<file>res/emoji/face_with_3hearts.png</file>
<file>res/emoji/face-with-rolling-eyes.png</file>
<file>res/emoji/face-with-tongue.png</file>
<file>res/emoji/heart_shaped_eyes.png</file>
<file>res/emoji/nauseated-face.png</file>
<file>res/emoji/pile-of-poo.png</file>
<file>res/emoji/serious-face-with-symbols-covering-mouth.png</file>
<file>res/emoji/smiling-face-with-sunglasses.png</file>
<file>res/emoji/stuck-out.png</file>
<file>res/emoji/sweet_smile.png</file>
<file>res/emoji/hush-money-white.png</file>
<file>res/emoji/SD.png</file>
</qresource>
<qresource prefix="/translations">
<file>res/silentdragonlite_de.qm</file>
<file>res/silentdragonlite_es.qm</file>

144
lib/Cargo.lock

@ -128,14 +128,6 @@ name = "base58"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "base64"
version = "0.10.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "base64"
version = "0.11.0"
@ -315,16 +307,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
name = "core-foundation"
version = "0.6.4"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
"core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "core-foundation-sys"
version = "0.6.2"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@ -598,7 +590,7 @@ dependencies = [
[[package]]
name = "h2"
version = "0.2.1"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
@ -610,8 +602,8 @@ dependencies = [
"indexmap 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -687,23 +679,23 @@ dependencies = [
[[package]]
name = "hyper"
version = "0.13.2"
version = "0.13.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-channel 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-util 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"h2 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"h2 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
"http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"itoa 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)",
"pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"socket2 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)",
"time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
"tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"want 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -1050,7 +1042,7 @@ dependencies = [
[[package]]
name = "percent-encoding"
version = "1.0.1"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
[[package]]
@ -1192,7 +1184,7 @@ dependencies = [
"blake3 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"silentdragonlitelib 0.1.0 (git+https://github.com/MyHush/silentdragonlite-cli?rev=07288de82d84b9bf35d1210ccc98eb1e4b757eb7)",
"silentdragonlitelib 0.1.0 (git+https://github.com/MyHush/silentdragonlite-cli?rev=6c3f6f22bfc642c714c1e43f6e09cb4d34c7a1de)",
]
[[package]]
@ -1490,10 +1482,10 @@ dependencies = [
[[package]]
name = "rustls"
version = "0.16.0"
version = "0.17.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
"base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"ring 0.16.11 (registry+https://github.com/rust-lang/crates.io-index)",
"sct 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1502,13 +1494,13 @@ dependencies = [
[[package]]
name = "rustls-native-certs"
version = "0.1.0"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"openssl-probe 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rustls 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rustls 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
"schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)",
"security-framework 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)",
"security-framework 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -1557,21 +1549,22 @@ dependencies = [
[[package]]
name = "security-framework"
version = "0.3.4"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)",
"core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
"security-framework-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)",
"bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"security-framework-sys 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "security-framework-sys"
version = "0.3.3"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
"core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
@ -1655,7 +1648,7 @@ dependencies = [
[[package]]
name = "silentdragonlitelib"
version = "0.1.0"
source = "git+https://github.com/MyHush/silentdragonlite-cli?rev=07288de82d84b9bf35d1210ccc98eb1e4b757eb7#07288de82d84b9bf35d1210ccc98eb1e4b757eb7"
source = "git+https://github.com/MyHush/silentdragonlite-cli?rev=6c3f6f22bfc642c714c1e43f6e09cb4d34c7a1de#6c3f6f22bfc642c714c1e43f6e09cb4d34c7a1de"
dependencies = [
"base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"bellman 0.1.0 (git+https://github.com/MyHush/librustzcash.git?rev=1a0204113d487cdaaf183c2967010e5214ff9e37)",
@ -1682,9 +1675,9 @@ dependencies = [
"sha2 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)",
"sodiumoxide 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
"tiny-bip39 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio-rustls 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
"tonic 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio-rustls 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
"tonic 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"tonic-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
"webpki 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)",
"webpki-roots 0.18.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1843,7 +1836,7 @@ dependencies = [
[[package]]
name = "tokio"
version = "0.2.11"
version = "0.2.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1860,13 +1853,13 @@ dependencies = [
"pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"signal-hook-registry 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio-macros 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio-macros 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)",
"winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "tokio-macros"
version = "0.2.4"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"proc-macro2 1.0.8 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1876,18 +1869,18 @@ dependencies = [
[[package]]
name = "tokio-rustls"
version = "0.12.2"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"futures-core 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"rustls 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"rustls 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
"webpki 0.21.2 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "tokio-util"
version = "0.2.0"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1895,31 +1888,31 @@ dependencies = [
"futures-sink 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"pin-project-lite 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
]
[[package]]
name = "tonic"
version = "0.1.1"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"async-stream 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)",
"async-trait 0.1.24 (registry+https://github.com/rust-lang/crates.io-index)",
"base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)",
"base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)",
"bytes 0.5.4 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-core 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"futures-util 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"http 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)",
"percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)",
"hyper 0.13.6 (registry+https://github.com/rust-lang/crates.io-index)",
"percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"prost 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
"prost-derive 0.6.1 (registry+https://github.com/rust-lang/crates.io-index)",
"rustls-native-certs 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio-rustls 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)",
"rustls-native-certs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio-rustls 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"tower 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"tower-balance 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"tower-load 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1968,7 +1961,7 @@ dependencies = [
"pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"rand 0.7.3 (registry+https://github.com/rust-lang/crates.io-index)",
"slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
"tower-discover 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"tower-layer 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"tower-load 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
@ -1985,7 +1978,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"futures-core 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
"tower-layer 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"tracing 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
@ -2013,7 +2006,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"futures-core 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
"tower-layer 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -2026,7 +2019,7 @@ dependencies = [
"futures-core 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
"tower-discover 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -2047,7 +2040,7 @@ name = "tower-make"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
"tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -2060,7 +2053,7 @@ dependencies = [
"futures-util 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"indexmap 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)",
"log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
"tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -2071,7 +2064,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"futures-core 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
"pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
"tower-layer 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -2087,7 +2080,7 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
dependencies = [
"pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)",
"tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)",
"tower-layer 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
"tower-service 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)",
]
@ -2468,7 +2461,6 @@ dependencies = [
"checksum backtrace 0.3.43 (registry+https://github.com/rust-lang/crates.io-index)" = "7f80256bc78f67e7df7e36d77366f636ed976895d91fe2ab9efa3973e8fe8c4f"
"checksum backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491"
"checksum base58 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5024ee8015f02155eee35c711107ddd9a9bf3cb689cf2a9089c97e79b6e1ae83"
"checksum base64 0.10.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b25d992356d2eb0ed82172f5248873db5560c4721f564b13cb5193bda5e668e"
"checksum base64 0.11.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b41b7ea54a0c9d92199de89e20e58d49f02f8e699814ef3fdf266f6f748d15c7"
"checksum bech32 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "cdcf67bb7ba7797a081cd19009948ab533af7c355d5caf1d08c777582d351e9c"
"checksum bellman 0.1.0 (git+https://github.com/MyHush/librustzcash.git?rev=1a0204113d487cdaaf183c2967010e5214ff9e37)" = "<none>"
@ -2492,8 +2484,8 @@ dependencies = [
"checksum chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "31850b4a4d6bae316f7a09e691c944c28299298837edc0a03f755618c23cbc01"
"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f"
"checksum constant_time_eq 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "245097e9a4535ee1e3e3931fcfcd55a796a44c643e8596ff6566d68f09b87bbc"
"checksum core-foundation 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)" = "25b9e03f145fd4f2bf705e07b900cd41fc636598fe5dc452fd0db1441c3f496d"
"checksum core-foundation-sys 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e7ca8a5221364ef15ce201e8ed2f609fc312682a8f4e0e3d4aa5879764e0fa3b"
"checksum core-foundation 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "57d24c7a13c43e870e37c1556b74555437870a04514f7685f5b354e090567171"
"checksum core-foundation-sys 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b3a71ab494c0b5b860bdc8407ae08978052417070c2ced38573a9157ad75b8ac"
"checksum crc32fast 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
"checksum crossbeam 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "24ce9782d4d5c53674646a6a4c1863a21a8fc0cb649b3c94dfc16e45071dea19"
"checksum crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4"
@ -2528,7 +2520,7 @@ dependencies = [
"checksum generic-array 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "c68f0274ae0e023facc3c97b2e00f076be70e254bc851d972503b328db79b2ec"
"checksum getrandom 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)" = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
"checksum group 0.1.0 (git+https://github.com/MyHush/librustzcash.git?rev=1a0204113d487cdaaf183c2967010e5214ff9e37)" = "<none>"
"checksum h2 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "b9433d71e471c1736fd5a61b671fc0b148d7a2992f666c958d03cd8feb3b88d1"
"checksum h2 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "79b7246d7e4b979c03fa093da39cfb3617a96bbeee6310af63991668d7e843ff"
"checksum hashbrown 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "3bae29b6653b3412c2e71e9d486db9f9df5d701941d86683005efb9f2d28e3da"
"checksum heck 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "20564e78d53d2bb135c343b3f47714a56af2061f1c928fdb541dc7b9fdd94205"
"checksum hermit-abi 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "eff2656d88f158ce120947499e971d743c05dbcbed62e5bd2f38f1698bbc3772"
@ -2538,7 +2530,7 @@ dependencies = [
"checksum http-body 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "13d5ff830006f7646652e057693569bfe0d51760c0085a071769d142a205111b"
"checksum httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9"
"checksum humantime 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "df004cfca50ef23c36850aaaa59ad52cc70d0e90243c3c7737a4dd32dc7a3c4f"
"checksum hyper 0.13.2 (registry+https://github.com/rust-lang/crates.io-index)" = "fa1c527bbc634be72aa7ba31e4e4def9bbb020f5416916279b7c705cd838893e"
"checksum hyper 0.13.6 (registry+https://github.com/rust-lang/crates.io-index)" = "a6e7655b9594024ad0ee439f3b5a7299369dc2a3f459b47c696f9ff676f9aa1f"
"checksum indexmap 1.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0b54058f0a6ff80b6803da8faf8997cde53872b38f4023728f6830b06cd3c0dc"
"checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e"
"checksum itertools 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484"
@ -2578,7 +2570,7 @@ dependencies = [
"checksum parking_lot 0.7.1 (registry+https://github.com/rust-lang/crates.io-index)" = "ab41b4aed082705d1056416ae4468b6ea99d52599ecf3169b00088d43113e337"
"checksum parking_lot_core 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94c8c7923936b28d546dfd14d4472eaf34c99b14e1c973a32b3e6d4eb04298c9"
"checksum pbkdf2 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "006c038a43a45995a9670da19e67600114740e8511d4333bf97a56e66a7542d9"
"checksum percent-encoding 1.0.1 (registry+https://github.com/rust-lang/crates.io-index)" = "31010dd2e1ac33d5b46a5b413495239882813e0369f8ed8a5e266f173602f831"
"checksum percent-encoding 2.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
"checksum petgraph 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)" = "29c127eea4a29ec6c85d153c59dc1213f33ec74cead30fe4730aecc88cc1fd92"
"checksum pin-project 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "7804a463a8d9572f13453c516a5faea534a2403d7ced2f0c7e100eeff072772c"
"checksum pin-project-internal 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "385322a45f2ecf3410c68d2a549a4a2685e8051d0f278e39743ff4e451cb9b3f"
@ -2628,16 +2620,16 @@ dependencies = [
"checksum rust-embed-utils 5.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "97655158074ccb2d2cfb1ccb4c956ef0f4054e43a2c1e71146d4991e6961e105"
"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783"
"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a"
"checksum rustls 0.16.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b25a18b1bf7387f0145e7f8324e700805aade3842dd3db2e74e4cdeb4677c09e"
"checksum rustls-native-certs 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "51ffebdbb48c14f84eba0b715197d673aff1dd22cc1007ca647e28483bbcc307"
"checksum rustls 0.17.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c0d4a31f5d68413404705d6982529b0e11a9aacd4839d1d6222ee3b8cb4015e1"
"checksum rustls-native-certs 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a75ffeb84a6bd9d014713119542ce415db3a3e4748f0bfce1e1416cd224a23a5"
"checksum ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8"
"checksum same-file 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
"checksum schannel 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "87f550b06b6cba9c8b8be3ee73f391990116bf527450d2556e9b9ce263b9a021"
"checksum scopeguard 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "94258f53601af11e6a49f722422f6e3425c52b06245a5cf9bc09908b174f5e27"
"checksum sct 0.6.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e3042af939fca8c3453b7af0f1c66e533a15a86169e39de2657310ade8f98d3c"
"checksum secp256k1 0.15.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e0344a794ff109f85547039536028e12f313178ac1545e49fdf16a530d900a7b"
"checksum security-framework 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "8ef2429d7cefe5fd28bd1d2ed41c944547d4ff84776f5935b456da44593a16df"
"checksum security-framework-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e31493fc37615debb8c5090a7aeb4a9730bc61e77ab10b9af59f1a202284f895"
"checksum security-framework 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "97bbedbe81904398b6ebb054b3e912f99d55807125790f3198ac990d98def5b0"
"checksum security-framework-sys 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "17bf11d99252f512695eb468de5516e5cf75455521e69dfe343f3b74e4748405"
"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403"
"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3"
"checksum serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449"
@ -2647,7 +2639,7 @@ dependencies = [
"checksum serde_yaml 0.8.11 (registry+https://github.com/rust-lang/crates.io-index)" = "691b17f19fc1ec9d94ec0b5864859290dff279dbd7b03f017afda54eb36c3c35"
"checksum sha2 0.8.1 (registry+https://github.com/rust-lang/crates.io-index)" = "27044adfd2e1f077f649f59deb9490d3941d674002f7d062870a60ebe9bd47a0"
"checksum signal-hook-registry 1.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "94f478ede9f64724c5d173d7bb56099ec3e2d9fc2774aac65d34b8b890405f41"
"checksum silentdragonlitelib 0.1.0 (git+https://github.com/MyHush/silentdragonlite-cli?rev=07288de82d84b9bf35d1210ccc98eb1e4b757eb7)" = "<none>"
"checksum silentdragonlitelib 0.1.0 (git+https://github.com/MyHush/silentdragonlite-cli?rev=6c3f6f22bfc642c714c1e43f6e09cb4d34c7a1de)" = "<none>"
"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8"
"checksum smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6"
"checksum socket2 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "e8b74de517221a2cb01a53349cf54182acdc31a074727d3079068448c0676d85"
@ -2665,11 +2657,11 @@ dependencies = [
"checksum thread-id 3.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "c7fbf4c9d56b320106cd64fd024dadfa0be7cb4706725fc44a7d7ce952d820c1"
"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f"
"checksum tiny-bip39 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c1c5676413eaeb1ea35300a0224416f57abc3bd251657e0fafc12c47ff98c060"
"checksum tokio 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)" = "8fdd17989496f49cdc57978c96f0c9fe5e4a58a8bddc6813c449a4624f6a030b"
"checksum tokio-macros 0.2.4 (registry+https://github.com/rust-lang/crates.io-index)" = "f4b1e7ed7d5d4c2af3d999904b0eebe76544897cdbfb2b9684bed2174ab20f7c"
"checksum tokio-rustls 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)" = "141afec0978abae6573065a48882c6bae44c5cc61db9b511ac4abf6a09bfd9cc"
"checksum tokio-util 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "571da51182ec208780505a32528fc5512a8fe1443ab960b3f2f3ef093cd16930"
"checksum tonic 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "08283643b1d483eb7f3fc77069e63b5cba3e4db93514b3d45470e67f123e4e48"
"checksum tokio 0.2.21 (registry+https://github.com/rust-lang/crates.io-index)" = "d099fa27b9702bed751524694adbe393e18b36b204da91eb1cbbbbb4a5ee2d58"
"checksum tokio-macros 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f0c3acc6aa564495a0f2e1d59fab677cd7f81a19994cfc7f3ad0e64301560389"
"checksum tokio-rustls 0.13.0 (registry+https://github.com/rust-lang/crates.io-index)" = "4adb8b3e5f86b707f1b54e7c15b6de52617a823608ccda98a15d3a24222f265a"
"checksum tokio-util 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "be8242891f2b6cbef26a2d7e8605133c2c554cd35b3e4948ea892d6d68436499"
"checksum tonic 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "4afef9ce97ea39593992cf3fa00ff33b1ad5eb07665b31355df63a690e38c736"
"checksum tonic-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "0436413ba71545bcc6c2b9a0f9d78d72deb0123c6a75ccdfe7c056f9930f5e52"
"checksum tower 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "fd3169017c090b7a28fce80abaad0ab4f5566423677c9331bb320af7e49cfe62"
"checksum tower-balance 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "a792277613b7052448851efcf98a2c433e6f1d01460832dc60bef676bc275d4c"

2
lib/Cargo.toml

@ -12,4 +12,4 @@ crate-type = ["staticlib"]
libc = "0.2.58"
lazy_static = "1.4.0"
blake3 = "0.3.4"
silentdragonlitelib = { git = "https://github.com/MyHush/silentdragonlite-cli", rev = "07288de82d84b9bf35d1210ccc98eb1e4b757eb7" }
silentdragonlitelib = { git = "https://github.com/MyHush/silentdragonlite-cli", rev = "6c3f6f22bfc642c714c1e43f6e09cb4d34c7a1de" }

6
lib/silentdragonlitelib.h

@ -6,11 +6,11 @@ extern "C" {
#endif
extern bool litelib_wallet_exists (const char* chain_name);
extern char * litelib_initialize_new (bool dangerous, const char* server);
extern char * litelib_initialize_new (const char* server);
extern char * litelib_initialize_new_from_phrase
(bool dangerous, const char* server, const char* seed,
(const char* server, const char* seed,
unsigned long long birthday, unsigned long long number);
extern char * litelib_initialize_existing (bool dangerous, const char* server);
extern char * litelib_initialize_existing (const char* server);
extern char * litelib_execute (const char* s, const char* args);
extern void litelib_rust_free_string (char* s);
extern char * blake3_PW (char* pw);

16
lib/src/lib.rs

@ -57,7 +57,7 @@ return e_str.into_raw();
/// Create a new wallet and return the seed for the newly created wallet.
#[no_mangle]
pub extern fn litelib_initialize_new(dangerous: bool, server: *const c_char) -> *mut c_char {
pub extern fn litelib_initialize_new(server: *const c_char) -> *mut c_char {
let server_str = unsafe {
assert!(!server.is_null());
@ -65,7 +65,7 @@ pub extern fn litelib_initialize_new(dangerous: bool, server: *const c_char) ->
};
let server = LightClientConfig::get_server_or_default(Some(server_str));
let (config, latest_block_height) = match LightClientConfig::create(server, dangerous) {
let (config, latest_block_height) = match LightClientConfig::create(server) {
Ok((c, h)) => (c, h),
Err(e) => {
let e_str = CString::new(format!("Error: {}", e)).unwrap();
@ -101,8 +101,8 @@ pub extern fn litelib_initialize_new(dangerous: bool, server: *const c_char) ->
/// Restore a wallet from the seed phrase
#[no_mangle]
pub extern fn litelib_initialize_new_from_phrase(dangerous: bool, server: *const c_char,
seed: *const c_char, birthday: u64, number: u64) -> *mut c_char {
pub extern fn litelib_initialize_new_from_phrase(server: *const c_char,
seed: *const c_char, birthday: u64, number: u64, overwrite: bool) -> *mut c_char {
let server_str = unsafe {
assert!(!server.is_null());
@ -116,7 +116,7 @@ pub extern fn litelib_initialize_new_from_phrase(dangerous: bool, server: *const
};
let server = LightClientConfig::get_server_or_default(Some(server_str));
let (config, _latest_block_height) = match LightClientConfig::create(server, dangerous) {
let (config, _latest_block_height) = match LightClientConfig::create(server) {
Ok((c, h)) => (c, h),
Err(e) => {
let e_str = CString::new(format!("Error: {}", e)).unwrap();
@ -124,7 +124,7 @@ pub extern fn litelib_initialize_new_from_phrase(dangerous: bool, server: *const
}
};
let lightclient = match LightClient::new_from_phrase(seed_str, &config, birthday, number, false) {
let lightclient = match LightClient::new_from_phrase(seed_str, &config, birthday, number, overwrite) {
Ok(l) => l,
Err(e) => {
let e_str = CString::new(format!("Error: {}", e)).unwrap();
@ -143,7 +143,7 @@ pub extern fn litelib_initialize_new_from_phrase(dangerous: bool, server: *const
// Initialize a new lightclient and store its value
#[no_mangle]
pub extern fn litelib_initialize_existing(dangerous: bool, server: *const c_char) -> *mut c_char {
pub extern fn litelib_initialize_existing(server: *const c_char) -> *mut c_char {
let server_str = unsafe {
assert!(!server.is_null());
@ -151,7 +151,7 @@ pub extern fn litelib_initialize_existing(dangerous: bool, server: *const c_char
};
let server = LightClientConfig::get_server_or_default(Some(server_str));
let (config, _latest_block_height) = match LightClientConfig::create(server, dangerous) {
let (config, _latest_block_height) = match LightClientConfig::create(server) {
Ok((c, h)) => (c, h),
Err(e) => {
let e_str = CString::new(format!("Error: {}", e)).unwrap();

BIN
res/emoji/SD.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

BIN
res/emoji/emoji1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

BIN
res/emoji/face-with-rolling-eyes.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

BIN
res/emoji/face-with-tongue.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

BIN
res/emoji/face_with_3hearts.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
res/emoji/heart_shaped_eyes.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
res/emoji/hush-money-white.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

BIN
res/emoji/innocent.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
res/emoji/joy.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
res/emoji/laughing.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
res/emoji/money-mouth.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
res/emoji/nauseated-face.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.8 KiB

BIN
res/emoji/partying_face.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

BIN
res/emoji/pile-of-poo.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

BIN
res/emoji/serious-face-with-symbols-covering-mouth.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
res/emoji/smiling-face-with-sunglasses.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
res/emoji/stuck-out.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
res/emoji/sweet_smile.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
res/hush-money-white.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
res/hush-money.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
res/money-mouth.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
res/money-outgoing.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

13
res/silentdragonlite.desktop

@ -0,0 +1,13 @@
[Desktop Entry]
Name=SilentDragonLite
Comment=Lightclient UI wallet for Hush
GenericName=Wallet
Exec=SilentDragonLite %u
Icon=SilentDragonLite
Type=Application
StartupNotify=true
StartupWMClass=SilentDragonLite
Categories=Utility;
MimeType=x-scheme-handler/hush;
Keywords=SilentDragonLite;

4
silentdragon-lite.pro

@ -14,6 +14,7 @@ QT += widgets
QT += websockets
TARGET = SilentDragonLite
TEMPLATE = app
@ -121,6 +122,7 @@ HEADERS += \
FORMS += \
src/contactrequest.ui \
src/deposithush.ui \
src/emoji.ui \
src/encryption.ui \
src/hushrequest.ui \
src/mainwindow.ui \
@ -129,6 +131,8 @@ FORMS += \
src/newwallet.ui \
src/recurringpayments.ui \
src/restoreseed.ui \
src/seedrestore.ui \
src/sendHushTransactionChat.ui \
src/settings.ui \
src/about.ui \
src/confirm.ui \

43
src/Chat/Helper/ChatDelegator.h

@ -51,6 +51,27 @@ inline void ListViewDelegate::paint(QPainter *painter, QStyleOptionViewItem cons
bodydoc.setDefaultFont(QFont("Roboto", 12));
QString bodytext(index.data(Qt::DisplayRole).toString());
bodydoc.setHtml(bodytext.replace("\n", "<br>"));
bodydoc.setHtml(bodytext.replace(":smiley:", "<img src=':/emoji/res/emoji/emoji1.png'>"));
bodydoc.setHtml(bodytext.replace(":-)", "<img src=':/emoji/res/emoji/emoji1.png'>"));
bodydoc.setHtml(bodytext.replace(":money_mouth:", "<img src=':/emoji/res/emoji/money-mouth.png'>"));
bodydoc.setHtml(bodytext.replace(":laughing:", "<img src=':/emoji/res/emoji/laughing.png'>"));
bodydoc.setHtml(bodytext.replace(":sweet_smile:", "<img src=':/emoji/res/emoji/sweet_smile.png'>"));
bodydoc.setHtml(bodytext.replace(":joy:", "<img src=':/emoji/res/emoji/joy.png'>"));
bodydoc.setHtml(bodytext.replace(":innocent:", "<img src=':/emoji/res/emoji/innocent.png'>"));
bodydoc.setHtml(bodytext.replace(":partying_face:", "<img src=':/emoji/res/emoji/partying_face.png'>"));
bodydoc.setHtml(bodytext.replace(":fire:", "<img src=':/emoji/res/emoji/fire.png'>"));
bodydoc.setHtml(bodytext.replace(":rolling_eyes:", "<img src=':/emoji/res/emoji/face-with-rolling-eyes.png'>"));
bodydoc.setHtml(bodytext.replace(":stuck_out_tongue:", "<img src=':/emoji/res/emoji/face-with-tongue.png'>"));
bodydoc.setHtml(bodytext.replace(":face_with_3hearts:", "<img src=':/emoji/res/emoji/face_with_3hearts.png'>"));
bodydoc.setHtml(bodytext.replace(":heart_eyes:", "<img src=':/emoji/res/emoji/heart_shaped_eyes.png'>"));
bodydoc.setHtml(bodytext.replace(":nauseated:", "<img src=':/emoji/res/emoji/nauseated-face.png'>"));
bodydoc.setHtml(bodytext.replace(":poop:", "<img src=':/emoji/res/emoji/pile-of-poo.png'>"));
bodydoc.setHtml(bodytext.replace(":symbols_mouth:", "<img src=':/emoji/res/emoji/serious-face-with-symbols-covering-mouth.png'>"));
bodydoc.setHtml(bodytext.replace(":sunglass:", "<img src=':/emoji/res/emoji/smiling-face-with-sunglasses.png'>"));
bodydoc.setHtml(bodytext.replace(":stuck_out:", "<img src=':/emoji/res/emoji/stuck-out.png'>"));
bodydoc.setHtml(bodytext.replace(";p", "<img src=':/emoji/res/emoji/stuck-out.png'>"));
bodydoc.setHtml(bodytext.replace(":hush_white:", "<img src=':/emoji/res/emoji/hush-money-white.png'>"));
bodydoc.setHtml(bodytext.replace(":sd:", "<img src=':/emoji/res/emoji/SD.png'>"));
qreal contentswidth = option.rect.width() * d_widthfraction - d_horizontalmargin - d_pointerwidth - d_leftpadding - d_rightpadding;
bodydoc.setTextWidth(contentswidth);
qreal bodyheight = bodydoc.size().height();
@ -174,7 +195,27 @@ inline QSize ListViewDelegate::sizeHint(QStyleOptionViewItem const &option, QMod
bodydoc.setDefaultFont(QFont("Roboto", 12));
QString bodytext(index.data(Qt::DisplayRole).toString());
bodydoc.setHtml(bodytext.replace("\n", "<br>"));
bodydoc.setHtml(bodytext.replace(":smiley:", "<img src=':/emoji/res/emoji/emoji1.png'>"));
bodydoc.setHtml(bodytext.replace(":-)", "<img src=':/emoji/res/emoji/emoji1.png'>"));
bodydoc.setHtml(bodytext.replace(":money_mouth:", "<img src=':/emoji/res/emoji/money-mouth.png'>"));
bodydoc.setHtml(bodytext.replace(":laughing:", "<img src=':/emoji/res/emoji/laughing.png'>"));
bodydoc.setHtml(bodytext.replace(":sweet_smile:", "<img src=':/emoji/res/emoji/sweet_smile.png'>"));
bodydoc.setHtml(bodytext.replace(":joy:", "<img src=':/emoji/res/emoji/joy.png'>"));
bodydoc.setHtml(bodytext.replace(":innocent:", "<img src=':/emoji/res/emoji/innocent.png'>"));
bodydoc.setHtml(bodytext.replace(":partying_face:", "<img src=':/emoji/res/emoji/partying_face.png'>"));
bodydoc.setHtml(bodytext.replace(":fire:", "<img src=':/emoji/res/emoji/fire.png'>"));
bodydoc.setHtml(bodytext.replace(":rolling_eyes:", "<img src=':/emoji/res/emoji/face-with-rolling-eyes.png'>"));
bodydoc.setHtml(bodytext.replace(":stuck_out_tongue:", "<img src=':/emoji/res/emoji/face-with-tongue.png'>"));
bodydoc.setHtml(bodytext.replace(":face_with_3hearts:", "<img src=':/emoji/res/emoji/face_with_3hearts.png'>"));
bodydoc.setHtml(bodytext.replace(":heart_eyes:", "<img src=':/emoji/res/emoji/heart_shaped_eyes.png'>"));
bodydoc.setHtml(bodytext.replace(":nauseated:", "<img src=':/emoji/res/emoji/nauseated-face.png'>"));
bodydoc.setHtml(bodytext.replace(":poop:", "<img src=':/emoji/res/emoji/pile-of-poo.png'>"));
bodydoc.setHtml(bodytext.replace(":symbols_mouth:", "<img src=':/emoji/res/emoji/serious-face-with-symbols-covering-mouth.png'>"));
bodydoc.setHtml(bodytext.replace(":sunglass:", "<img src=':/emoji/res/emoji/smiling-face-with-sunglasses.png'>"));
bodydoc.setHtml(bodytext.replace(":stuck_out:", "<img src=':/emoji/res/emoji/stuck-out.png'>"));
bodydoc.setHtml(bodytext.replace(";p", "<img src=':/emoji/res/emoji/stuck-out.png'>"));
bodydoc.setHtml(bodytext.replace(":hush_white:", "<img src=':/emoji/res/emoji/hush-money-white.png'>"));
bodydoc.setHtml(bodytext.replace(":sd:", "<img src=':/emoji/res/emoji/SD.png'>"));
// the width of the contents are the (a fraction of the window width) minus (margins + padding + width of the bubble's tail)
qreal contentswidth = option.rect.width() * d_widthfraction - d_horizontalmargin - d_pointerwidth - d_leftpadding - d_rightpadding;

40
src/DataStore/ChatDataStore.cpp

@ -116,6 +116,46 @@ std::map<QString, ChatItem> ChatDataStore::getAllOldContactRequests()
return filteredItems;
}
std::map<QString, ChatItem> ChatDataStore::getAllCashMemosIncoming()
{
std::map<QString, ChatItem> filteredItems;
for(auto &c: this->data)
{
if (
(c.second.isOutgoing() == false) &&
(c.second.getType() == "Money") &&
(c.second.getMemo().startsWith("{"))
)
{
filteredItems[c.first] = c.second;
}
}
return filteredItems;
}
std::map<QString, ChatItem> ChatDataStore::getAllCashMemosOutgoing()
{
std::map<QString, ChatItem> filteredItems;
for(auto &c: this->data)
{
if (
(c.second.isOutgoing() == true) &&
(c.second.getType() == "Money") &&
(c.second.getMemo().startsWith("{"))
)
{
filteredItems[c.first] = c.second;
}
}
return filteredItems;
}
std::map<QString, ChatItem> ChatDataStore::getAllMemos()
{
std::map<QString, ChatItem> filteredItems;

2
src/DataStore/ChatDataStore.h

@ -22,6 +22,8 @@ class ChatDataStore
ChatItem getData(QString key);
std::map<QString, ChatItem> getAllRawChatItems();
std::map<QString, ChatItem> getAllNewContactRequests();
std::map<QString, ChatItem> getAllCashMemosOutgoing();
std::map<QString, ChatItem> getAllCashMemosIncoming();
std::map<QString, ChatItem> getAllOldContactRequests();
std::map<QString, ChatItem> getAllMemos();
QString getPassword();

39
src/Model/ChatItem.cpp

@ -158,6 +158,9 @@ QString ChatItem::toChatLine()
{
QDateTime myDateTime;
QString lock;
QString money;
QString moneyText;
QString moneyTextRequest;
myDateTime.setTime_t(_timestamp);
if (_notarize == true)
@ -175,11 +178,43 @@ QString ChatItem::toChatLine()
{
lock = "<b> <img src=':/icons/res/lock_green.png'><b>";
}
}else{}
if (_memo.startsWith("Money transaction of :"))
{
if (_outgoing == true)
{
moneyText = QString("<br>") + QString("<br>") + QString("<pr> Outgoing Money Transaction </pr>") + QString("<b> <img src=':/icons/res/money-outgoing.png'><b>");
}else{
moneyText = QString("<br>") + QString("<br>") + QString("<pr> Incoming Money Transaction </pr>") + QString("<b> <img src=':/icons/res/money-mouth.png'><b>");
}
}else{money = "";
moneyText = ""; }
if (_memo.startsWith("Request of :"))
{
if (_outgoing == true)
{
moneyTextRequest = QString("<br>") + QString("<br>") + QString("<pr> Outgoing Hush Request </pr>") + QString("<b> <img src=':/icons/res/money-outgoing.png'><b>");
}else{
moneyTextRequest = QString("<br>") + QString("<br>") + QString("<pr> Incoming Hush Request </pr>") + QString("<b> <img src=':/icons/res/money-mouth.png'><b>");
}
}else{moneyTextRequest = "";
moneyTextRequest = ""; }
QString line = QString("<small>") + myDateTime.toString("yyyy-MM-dd hh:mm");
line += QString(lock) + QString("</small>");
line += QString(lock) + QString(moneyText) + QString(moneyTextRequest) + QString("</small>");
line +=QString("<p>") + _memo.toHtmlEscaped() + QString("</p>");
return line;
}

3
src/addressbook.cpp

@ -250,6 +250,9 @@ void AddressBook::open(MainWindow* parent, QLineEdit* target)
);
parent->ui->listChat->verticalScrollBar()->setValue(
parent->ui->listChat->verticalScrollBar()->maximum());
});
// AddressBook::getInstance()->addAddressLabel(newLabel, ab.addr->text(), cid);

21
src/chatmodel.cpp

@ -466,6 +466,8 @@ Tx MainWindow::createTxFromChatPage() {
if (crypto_kx_seed_keypair(pk,sk,
MESSAGEAS1) !=0) {
this->logger->write("Suspicious keypair, bail out ");
}
////////////////Get the pubkey from Bob, so we can create the share key
@ -475,7 +477,7 @@ Tx MainWindow::createTxFromChatPage() {
if (crypto_kx_server_session_keys(server_rx, server_tx,
pk, sk, pubkeyBob) != 0) {
/* Suspicious client public key, bail out */
this->logger->write("Suspicious client public send key, bail out ");
}
@ -542,6 +544,7 @@ void MainWindow::sendChat() {
QMessageBox msg(QMessageBox::Critical, tr("You have to select a contact and insert a Memo"),
tr("You have selected no Contact from Contactlist,\n") + tr("\nor your Memo is empty"),
QMessageBox::Ok, this);
ui->memoTxtChat->setEnabled(true);
msg.exec();
return;
@ -571,6 +574,7 @@ void MainWindow::sendChat() {
QMessageBox::Ok, this);
msg.exec();
ui->memoTxtChat->setEnabled(true);
// abort the Tx
return;
@ -590,6 +594,7 @@ void MainWindow::sendChat() {
movie->start();
ui->sendChatButton->show();
ui->sendChatButton->setEnabled(false);
ui->memoTxtChat->setEnabled(true);
} else {
@ -599,6 +604,8 @@ void MainWindow::sendChat() {
movie1->start();
ui->sendChatButton->show();
ui->sendChatButton->setEnabled(false);
ui->memoTxtChat->setEnabled(true);
}
ui->memoTxtChat->clear();
@ -617,6 +624,8 @@ void MainWindow::sendChat() {
ui->sendChatButton->setIcon(sendIcon);
movie->stop();
ui->sendChatButton->setEnabled(true);
ui->memoTxtChat->setEnabled(true);
}else{
QPixmap send(":/icons/res/sendBlack.png");
@ -624,6 +633,7 @@ void MainWindow::sendChat() {
ui->sendChatButton->setIcon(sendIcon);
movie1->stop();
ui->sendChatButton->setEnabled(true);
ui->memoTxtChat->setEnabled(true);
}
});
@ -636,6 +646,7 @@ void MainWindow::sendChat() {
// Errored out
[=] (QString opid, QString errStr) {
ui->statusBar->showMessage(QObject::tr(" Tx ") % opid % QObject::tr(" failed"), 15 * 1000);
ui->memoTxtChat->setEnabled(true);
if (!opid.isEmpty())
errStr = QObject::tr("The transaction with id ") % opid % QObject::tr(" failed. The error was") + ":\n\n" + errStr;
@ -650,6 +661,7 @@ void MainWindow::sendChat() {
ui->sendChatButton->setIcon(sendIcon);
movie->stop();
ui->sendChatButton->setEnabled(true);
ui->memoTxtChat->setEnabled(true);
}else{
QPixmap send(":/icons/res/sendBlack.png");
@ -657,6 +669,7 @@ void MainWindow::sendChat() {
ui->sendChatButton->setIcon(sendIcon);
movie1->stop();
ui->sendChatButton->setEnabled(true);
ui->memoTxtChat->setEnabled(true);
}
@ -674,6 +687,7 @@ QString MainWindow::doSendChatTxValidations(Tx tx) {
if (!Settings::isValidAddress(toAddr.addr)) {
QString addr = (toAddr.addr.length() > 100 ? toAddr.addr.left(100) + "..." : toAddr.addr);
return QString(tr("Recipient Address ")) % addr % tr(" is Invalid");
ui->memoTxtChat->setEnabled(true);
}
// This technically shouldn't be possible, but issue #62 seems to have discovered a bug
@ -691,6 +705,7 @@ QString MainWindow::doSendChatTxValidations(Tx tx) {
if (available < total) {
return tr("Not enough available funds to send this transaction\n\nHave: %1\nNeed: %2\n\nNote: Funds need 1 confirmations before they can be spent")
.arg(available.toDecimalhushString(), total.toDecimalhushString());
ui->memoTxtChat->setEnabled(true);
}
return "";
@ -796,7 +811,7 @@ Tx MainWindow::createTxForSafeContactRequest()
unsigned char pk[crypto_kx_PUBLICKEYBYTES];
if (crypto_kx_seed_keypair(pk, sk, MESSAGEAS1) !=0) {
//
this->logger->write("Suspicious client public contact request key, bail out ");
}
QString publicKey = QByteArray(reinterpret_cast<const char*>(pk), crypto_kx_PUBLICKEYBYTES).toHex();
@ -828,8 +843,6 @@ void MainWindow::ContactRequest() {
if (size > max){
// auto addr = "";
// if (! Settings::isZAddress(AddressBook::addressFromAddressLabel(addr->text()))) {
QMessageBox msg(QMessageBox::Critical, tr("Your Message is too long"),
tr("You can only write messages with 512 character maximum \n") + tr("\n Please reduce your message to 235 character."),
QMessageBox::Ok, this);

29
src/connection.cpp

@ -67,7 +67,6 @@ void ConnectionLoader::doAutoConnect()
{
qDebug() << "Doing autoconnect";
auto config = std::shared_ptr<ConnectionConfig>(new ConnectionConfig());
config->dangerous = false;
config->server = Settings::getInstance()->getSettings().server;
// Initialize the library
@ -78,7 +77,6 @@ void ConnectionLoader::doAutoConnect()
{
main->logger->write(QObject::tr("Using existing wallet."));
char* resp = litelib_initialize_existing(
config->dangerous,
config->server.toStdString().c_str()
);
QString response = litelib_process_response(resp);
@ -93,7 +91,7 @@ void ConnectionLoader::doAutoConnect()
else
{
main->logger->write(QObject::tr("Create/restore wallet."));
createOrRestore(config->dangerous, config->server);
createOrRestore(config->server);
d->show();
}
@ -105,11 +103,14 @@ void ConnectionLoader::doAutoConnect()
// If success, set the connection
main->logger->write("Connection is online.");
connection->setInfo(reply);
main->logger->write("getting Connection reply");
isSyncing = new QAtomicInteger<bool>();
isSyncing->storeRelaxed(true);
main->logger->write("isSyncing");
// Do a sync at startup
syncTimer = new QTimer(main);
main->logger->write("Beginning sync");
connection->doRPCWithDefaultErrorHandling("sync", "", [=](QJsonValue) {
isSyncing->storeRelaxed(false);
// Cancel the timer
@ -124,10 +125,13 @@ void ConnectionLoader::doAutoConnect()
if (isSyncing != nullptr && isSyncing->loadRelaxed()) {
// Get the sync status
connection->doRPC("syncstatus", "", [=](QJsonValue reply) {
if (isSyncing != nullptr && !reply.toObject()["synced_blocks"].isUndefined())
{
qint64 synced = reply["synced_blocks"].toInt();
main->logger->write("synced_blocks" + synced) ;
qint64 total = reply["total_blocks"].toInt();
main->logger->write("total_blocks" + total) ;
me->showInformation(
"Synced " + QString::number(synced) + " / " + QString::number(total)
);
@ -141,30 +145,45 @@ void ConnectionLoader::doAutoConnect()
syncTimer->setInterval(1* 1000);
syncTimer->start();
main->logger->write("Start sync timer");
}, [=](QString err) {
showError(err);
});
}
void ConnectionLoader::createOrRestore(bool dangerous, QString server)
void ConnectionLoader::createOrRestore(QString server)
{
// Close the startup dialog, since we'll be showing the wizard
d->hide();
// Create a wizard
FirstTimeWizard wizard(dangerous, server);
FirstTimeWizard wizard(server);
main->logger->write("Start new Wallet with FirstimeWizard");
wizard.exec();
}
void ConnectionLoader::doRPCSetConnection(Connection* conn)
{
qDebug() << "Connectionloader finished, setting connection";
main->logger->write("Connectionloader finished, setting connection");
rpc->setConnection(conn);
d->accept();
QTimer::singleShot(1, [=]() { delete this; });
try
{
QFile plaintextWallet(dirwalletconnection);
main->logger->write("Path to Wallet.dat : " );
plaintextWallet.remove();
}catch (...)
{
main->logger->write("no Plaintext wallet.dat");
}
}
Connection* ConnectionLoader::makeConnection(std::shared_ptr<ConnectionConfig> config)

3
src/connection.h

@ -10,7 +10,6 @@ class Controller;
struct ConnectionConfig {
QString server;
bool dangerous;
QString proxy;
};
@ -32,7 +31,7 @@ private:
void doAutoConnect();
void createOrRestore(bool dangerous, QString server);
void createOrRestore(QString server);
void showError(QString explanation);
void showInformation(QString info, QString detail = "");

62
src/controller.cpp

@ -101,6 +101,9 @@ void Controller::setConnection(Connection* c)
ui->listContactWidget
);
ui->listChat->verticalScrollBar()->setValue(
ui->listChat->verticalScrollBar()->maximum());
}
std::string Controller::encryptDecrypt(std::string toEncrypt)
@ -635,7 +638,7 @@ void Controller::getInfoThenRefresh(bool force)
refreshAddresses(); // This calls refreshZSentTransactions() and refreshReceivedZTrans()
refreshTransactions();
}
refreshBalances();
int lag = longestchain - notarized ;
this->setLag(lag);
}, [=](QString err) {
@ -727,7 +730,7 @@ void Controller::processUnspent(const QJsonValue& reply, QMap<QString, CAmount>*
QString qsAddr = it["address"].toString();
int block = it["created_in_block"].toInt();
QString txid = it["created_in_txid"].toString();
CAmount amount = CAmount::fromqint64(it["value"].toInt());
CAmount amount = CAmount::fromqint64(it["value"].toDouble());
bool spendable = it["unconfirmed_spent"].isNull() && it["spent"].isNull(); // TODO: Wait for 1 confirmations
bool pending = !it["unconfirmed_spent"].isNull();
@ -738,7 +741,7 @@ void Controller::processUnspent(const QJsonValue& reply, QMap<QString, CAmount>*
if (spendable)
{
(*balancesMap)[qsAddr] = (*balancesMap)[qsAddr] +
CAmount::fromqint64(it["value"].toInt());
CAmount::fromqint64(it["value"].toDouble());
}
}
};
@ -903,9 +906,9 @@ void Controller::refreshBalances()
// 1. Get the Balances
zrpc->fetchBalance([=] (QJsonValue reply) {
CAmount balT = CAmount::fromqint64(reply["tbalance"].toInt());
CAmount balZ = CAmount::fromqint64(reply["zbalance"].toInt());
CAmount balVerified = CAmount::fromqint64(reply["verified_zbalance"].toInt());
CAmount balT = CAmount::fromqint64(reply["tbalance"].toDouble());
CAmount balZ = CAmount::fromqint64(reply["zbalance"].toDouble());
CAmount balVerified = CAmount::fromqint64(reply["verified_zbalance"].toDouble());
model->setBalT(balT);
model->setBalZ(balZ);
@ -982,7 +985,7 @@ void Controller::refreshTransactions() {
address = o.toObject()["address"].toString();
// Sent items are -ve
CAmount amount = CAmount::fromqint64(-1* o.toObject()["value"].toInt());
CAmount amount = CAmount::fromqint64(-1* o.toObject()["value"].toDouble());
// Check for Memos
@ -990,7 +993,7 @@ void Controller::refreshTransactions() {
chatModel->addconfirmations(txid, confirmations);
}
if ((confirmations == 1) && (chatModel->getConfirmationByTx(txid) != QString("0xdeadbeef"))) {
if ((confirmations > 0) && (chatModel->getConfirmationByTx(txid) != QString("0xdeadbeef"))) {
DataStore::getChatDataStore()->clear();
chatModel->killConfirmationCache();
chatModel->killMemoCache();
@ -1083,7 +1086,7 @@ void Controller::refreshTransactions() {
if (crypto_kx_seed_keypair(pk, sk, MESSAGEAS1) !=0)
{
// ?
main->logger->write("Keypair outgoing error");
}
unsigned char server_rx[crypto_kx_SESSIONKEYBYTES], server_tx[crypto_kx_SESSIONKEYBYTES];
@ -1095,7 +1098,7 @@ void Controller::refreshTransactions() {
if (crypto_kx_server_session_keys(server_rx, server_tx, pk, sk, pubkeyBob) != 0)
{
/* Suspicious client public key, bail out */
main->logger->write("Suspicious client public outgoing key, bail out ");
}
const QByteArray ba = QByteArray::fromHex(memo.toUtf8());
@ -1108,7 +1111,7 @@ void Controller::refreshTransactions() {
QString memodecrypt;
if (encryptedMemoSize1 > 15)
if ((encryptedMemoSize1 - crypto_secretstream_xchacha20poly1305_ABYTES) > 0)
{
//////unsigned char* as message from QString
#define MESSAGE2 (const unsigned char *) encryptedMemo
@ -1143,6 +1146,7 @@ void Controller::refreshTransactions() {
}
else
{
memodecrypt = "";
}
@ -1165,7 +1169,7 @@ void Controller::refreshTransactions() {
);
DataStore::getChatDataStore()->setData(ChatIDGenerator::getInstance()->generateID(item), item);
updateUIBalances();
// updateUIBalances();
}
}
@ -1190,18 +1194,18 @@ void Controller::refreshTransactions() {
}
else
{
// Incoming Transaction
{ // Incoming Transaction
address = (it.toObject()["address"].isNull() ? "" : it.toObject()["address"].toString());
model->markAddressUsed(address);
QString memo;
if (!it.toObject()["memo"].isNull()) {
if (!it.toObject()["memo"].isNull())
memo = it.toObject()["memo"].toString();
}
items.push_back(TransactionItemDetail{
address,
CAmount::fromqint64(it.toObject()["amount"].toInt()),
CAmount::fromqint64(it.toObject()["amount"].toDouble()),
memo
});
@ -1210,7 +1214,14 @@ void Controller::refreshTransactions() {
};
txdata.push_back(tx);
}
address = (it.toObject()["address"].isNull() ? "" : it.toObject()["address"].toString());
model->markAddressUsed(address);
QString memo;
if (!it.toObject()["memo"].isNull())
memo = it.toObject()["memo"].toString();
QString type;
QString publickey;
QString headerbytes;
@ -1306,7 +1317,9 @@ void Controller::refreshTransactions() {
int position = it.toObject()["position"].toInt();
if ((memo.startsWith("{") == false) && (headerbytes > 0))
int ciphercheck = memo.length() - crypto_secretstream_xchacha20poly1305_ABYTES;
if ((memo.startsWith("{") == false) && (headerbytes > 0) && (ciphercheck > 0))
{
if (chatModel->getMemoByTx(txid) == QString("0xdeadbeef"))
{
@ -1337,7 +1350,7 @@ void Controller::refreshTransactions() {
if (crypto_kx_seed_keypair(pk, sk, MESSAGEAS1) !=0)
{
//
main->logger->write("Suspicious outgoing key pair, bail out ");
}
unsigned char client_rx[crypto_kx_SESSIONKEYBYTES], client_tx[crypto_kx_SESSIONKEYBYTES];
@ -1348,7 +1361,7 @@ void Controller::refreshTransactions() {
if (crypto_kx_client_session_keys(client_rx, client_tx, pk, sk, pubkeyBob) != 0)
{
/* Suspicious client public key, bail out */
main->logger->write("Suspicious client public incoming key, bail out ");
}
const QByteArray ba = QByteArray::fromHex(memo.toUtf8());
@ -1379,12 +1392,12 @@ void Controller::refreshTransactions() {
/////Only the QString gives weird data, so convert first to std::string
// crypto_secretstream_xchacha20poly1305_keygen(client_rx);
if (crypto_secretstream_xchacha20poly1305_init_pull(&state, header, client_rx) != 0) {
/* Invalid header, no need to go any further */
main->logger->write("Invalid header incoming, no need to go any further ");
}
if (crypto_secretstream_xchacha20poly1305_pull
(&state, decrypted, NULL, tag, MESSAGE2, CIPHERTEXT1_LEN, NULL, 0) != 0) {
/* Invalid/incomplete/corrupted ciphertext - abort */
main->logger->write("Invalid/incomplete/corrupted ciphertext - abort");
}
std::string decryptedMemo(reinterpret_cast<char*>(decrypted),MESSAGE1_LEN);
@ -1464,8 +1477,9 @@ void Controller::refreshTransactions() {
chat->renderChatBox(ui, ui->listChat,ui->memoSizeChat);
ui->listChat->verticalScrollBar()->setValue(
ui->listChat->verticalScrollBar()->maximum());
});
}
void Controller::refreshChat(QListView *listWidget, QLabel *label)
@ -1479,6 +1493,8 @@ void Controller::refreshChat(QListView *listWidget, QLabel *label)
void Controller::refreshContacts(QListView *listWidget)
{
contactModel->renderContactList(listWidget);
ui->listChat->verticalScrollBar()->setValue(
ui->listChat->verticalScrollBar()->maximum());
}
// If the wallet is encrpyted and locked, we need to unlock it

339
src/emoji.ui

@ -0,0 +1,339 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>emojiDialog</class>
<widget class="QDialog" name="emojiDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>261</width>
<height>150</height>
</rect>
</property>
<property name="windowTitle">
<string>Emoji</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
<item>
<widget class="QPushButton" name="smiley">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normalon>:/emoji/res/emoji/emoji1.png</normalon>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="laughing">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normalon>:/emoji/res/emoji/laughing.png</normalon>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="sweet_smile">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normalon>:/emoji/res/emoji/sweet_smile.png</normalon>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="joy">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normalon>:/emoji/res/emoji/joy.png</normalon>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="innocent">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normalon>:/emoji/res/emoji/innocent.png</normalon>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="partying_face">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normalon>:/emoji/res/emoji/partying_face.png</normalon>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="money">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normalon>:/icons/res/money-mouth.png</normalon>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
<item>
<widget class="QPushButton" name="rolling_eyes">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normalon>:/emoji/res/emoji/face-with-rolling-eyes.png</normalon>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="tongue">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normalon>:/emoji/res/emoji/face-with-tongue.png</normalon>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="hearts3">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normalon>:/emoji/res/emoji/face_with_3hearts.png</normalon>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="heart_eyes">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normalon>:/emoji/res/emoji/heart_shaped_eyes.png</normalon>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="nauseated">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normalon>:/emoji/res/emoji/nauseated-face.png</normalon>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="poop">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normalon>:/emoji/res/emoji/pile-of-poo.png</normalon>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="symbols_mouth">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normalon>:/emoji/res/emoji/serious-face-with-symbols-covering-mouth.png</normalon>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
<item>
<widget class="QPushButton" name="sunglass">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normalon>:/emoji/res/emoji/smiling-face-with-sunglasses.png</normalon>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="stuck_out">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normalon>:/emoji/res/emoji/stuck-out.png</normalon>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="hush_white">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normalon>:/emoji/res/emoji/hush-money-white.png</normalon>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="sd">
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normalon>:/emoji/res/emoji/SD.png</normalon>
</iconset>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

28
src/firsttimewizard.cpp

@ -9,10 +9,9 @@
#include "../lib/silentdragonlitelib.h"
FirstTimeWizard::FirstTimeWizard(bool dangerous, QString server)
FirstTimeWizard::FirstTimeWizard(QString server)
{
setWindowTitle("New wallet wizard");
this->dangerous = dangerous;
this->server = server;
////backup addresslabels.dat if there is one, to restore it later
@ -65,12 +64,23 @@ NewOrRestorePage::NewOrRestorePage(FirstTimeWizard *parent) : QWizardPage(parent
parent->button(QWizard::CommitButton)->setEnabled(false);
setButtonText(QWizard::CommitButton, "Next");
form.txtPassword->setEnabled(false);
form.txtConfirmPassword->setEnabled(false);
QObject::connect(form.TOS, &QRadioButton::clicked, [=](bool checked) {
if (checked) {
form.txtPassword->setEnabled(true);
form.txtConfirmPassword->setEnabled(true);
}
});
auto fnPasswordEdited = [=](const QString&) {
// Enable the Finish button if the passwords match.
QString passphraseBlank = form.txtPassword->text();
QString passphrase = QString("HUSH3") + passphraseBlank + QString("SDL");
@ -83,6 +93,7 @@ NewOrRestorePage::NewOrRestorePage(FirstTimeWizard *parent) : QWizardPage(parent
form.radioRestoreWallet->setEnabled(true);
form.radioNewWallet->setEnabled(true);
form.radioNewWallet->setChecked(true);
parent->button(QWizard::CommitButton)->setEnabled(true);
int length = passphrase.length();
@ -134,12 +145,7 @@ NewOrRestorePage::NewOrRestorePage(FirstTimeWizard *parent) : QWizardPage(parent
}
});
QObject::connect(form.TOS, &QRadioButton::clicked, [=](bool checked) {
if (checked) {
parent->button(QWizard::CommitButton)->setEnabled(true);
}
});
@ -187,7 +193,7 @@ NewSeedPage::NewSeedPage(FirstTimeWizard *parent) : QWizardPage(parent) {
void NewSeedPage::initializePage() {
// Call the library to create a new wallet.
char* resp = litelib_initialize_new(parent->dangerous, parent->server.toStdString().c_str());
char* resp = litelib_initialize_new(parent->server.toStdString().c_str());
QString reply = litelib_process_response(resp);
QByteArray ba_reply = reply.toUtf8();
@ -266,7 +272,7 @@ QString number_str = form.number->text();
qint64 number = number_str.toUInt();
// 3. Attempt to restore wallet with the seed phrase
{
char* resp = litelib_initialize_new_from_phrase(parent->dangerous, parent->server.toStdString().c_str(),
char* resp = litelib_initialize_new_from_phrase(parent->server.toStdString().c_str(),
seed.toStdString().c_str(), birthday, number);
QString reply = litelib_process_response(resp);

3
src/firsttimewizard.h

@ -16,7 +16,7 @@ class FirstTimeWizard: public QWizard
public:
FirstTimeWizard(bool dangerous, QString server);
FirstTimeWizard(QString server);
protected:
@ -29,7 +29,6 @@ private:
Page_Restore
};
bool dangerous;
QString server;
friend class NewOrRestorePage;

930
src/mainwindow.cpp

File diff suppressed because it is too large

14
src/mainwindow.h

@ -49,12 +49,18 @@ public:
QString doSendTxValidations(Tx tx);
QString doSendChatTxValidations(Tx tx);
QString doSendChatMoneyTxValidations(Tx tx);
QString doSendRequestTxValidations(Tx tx);
QString doSendChatMoneyRequestTxValidations(Tx tx);
QString getCid();
QString getAmt();
QString getMoneyMemo();
QString getPassword();
std::map<QString, QString> pubkeyMap;
QString getPubkeyByAddress(QString requestZaddr);
void setPassword(QString Password);
void setAmt(QString Amt);
void setMoneyMemo(QString MoneyMemo);
void addPubkey(QString requestZaddr, QString pubkey);
@ -105,12 +111,15 @@ private slots:
void on_givemeZaddr_clicked();
void on_emojiButton_clicked();
private:
bool fileExists(QString path);
void closeEvent(QCloseEvent* event);
void closeEventpw(QCloseEvent* event);
QString _password;
QString _amt;
QString _moneymemo;
void setupSendTab();
@ -135,7 +144,8 @@ private:
Tx createTxFromChatPage();
Tx createTxForSafeContactRequest();
Tx createTxFromSendChatPage();
Tx createTxFromSendRequestChatPage();
void encryptWallet();
void removeWalletEncryption();
@ -144,6 +154,8 @@ private:
void cancelButton();
void sendButton();
void sendChat();
void sendMoneyChat();
void sendMoneyRequestChat();
void addContact();
void ContactRequest();

69
src/mainwindow.ui

@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>1274</width>
<width>1308</width>
<height>779</height>
</rect>
</property>
@ -59,7 +59,7 @@
<item row="0" column="0" colspan="2">
<widget class="QTabWidget" name="tabWidget">
<property name="currentIndex">
<number>5</number>
<number>0</number>
</property>
<widget class="QWidget" name="tab">
<attribute name="title">
@ -428,7 +428,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>1226</width>
<width>1260</width>
<height>509</height>
</rect>
</property>
@ -1341,8 +1341,8 @@
<attribute name="title">
<string>HushChat</string>
</attribute>
<layout class="QGridLayout" name="gridLayout_7">
<item row="0" column="1" rowspan="4">
<layout class="QGridLayout" name="gridLayout_3">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout_6">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_18" stretch="0,0,0,0">
@ -1546,7 +1546,7 @@
</item>
</layout>
</item>
<item row="0" column="5" rowspan="4">
<item row="0" column="1">
<layout class="QVBoxLayout" name="verticalLayout_11">
<property name="sizeConstraint">
<enum>QLayout::SetDefaultConstraint</enum>
@ -1683,6 +1683,12 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>850</width>
<height>0</height>
</size>
</property>
<property name="autoFillBackground">
<bool>false</bool>
</property>
@ -1706,9 +1712,48 @@
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="emojiButton">
<property name="minimumSize">
<size>
<width>20</width>
<height>0</height>
</size>
</property>
<property name="text">
<string/>
</property>
<property name="icon">
<iconset>
<normalon>:/emoji/res/emoji/emoji1.png</normalon>
</iconset>
</property>
<property name="iconSize">
<size>
<width>17</width>
<height>17</height>
</size>
</property>
<property name="flat">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<layout class="QVBoxLayout" name="verticalLayout_7">
<item alignment="Qt::AlignBottom">
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
<item>
<widget class="QPushButton" name="sendChatButton">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
@ -1716,6 +1761,12 @@
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>50</height>
</size>
</property>
<property name="baseSize">
<size>
<width>100</width>
@ -1747,7 +1798,7 @@
</property>
</widget>
</item>
<item alignment="Qt::AlignHCenter">
<item>
<widget class="QLabel" name="memoSizeChat">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Fixed">
@ -1783,7 +1834,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>1274</width>
<width>1308</width>
<height>22</height>
</rect>
</property>

72
src/restoreSeed.ui

@ -0,0 +1,72 @@
<ui version="4.0" >
<author></author>
<comment></comment>
<exportmacro></exportmacro>
<class>Dialog</class>
<widget class="QDialog" name="Dialog" >
<property name="geometry" >
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle" >
<string>Dialog</string>
</property>
<widget class="QDialogButtonBox" name="buttonBox" >
<property name="geometry" >
<rect>
<x>30</x>
<y>240</y>
<width>341</width>
<height>32</height>
</rect>
</property>
<property name="orientation" >
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons" >
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
</property>
</widget>
</widget>
<pixmapfunction></pixmapfunction>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>Dialog</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>Dialog</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>

9
src/scripts/mkrelease.sh

@ -35,6 +35,15 @@ rm -rf bin/SilentDragonLite* > /dev/null
# Build the lib first
cd lib && make release && cd ..
make -j$(nproc) > /dev/null
make install INSTALL_ROOT=AppDir
# now, build AppImage using linuxdeploy and linuxdeploy-plugin-qt
# download linuxdeploy and its Qt plugin
wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage
# make them executable
chmod +x linuxdeploy*.AppImage
echo "[OK]"

114
src/seedrestore.ui

@ -0,0 +1,114 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Restore</class>
<widget class="QDialog" name="Restore">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>637</width>
<height>429</height>
</rect>
</property>
<property name="windowTitle">
<string>Restore your Wallet</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0" colspan="3">
<widget class="QPlainTextEdit" name="seed">
<property name="minimumSize">
<size>
<width>0</width>
<height>284</height>
</size>
</property>
</widget>
</item>
<item row="1" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QLabel" name="label">
<property name="text">
<string>Birthday :</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_2">
<property name="text">
<string>Quantity :</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="1" column="1" colspan="2">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QPlainTextEdit" name="birthday">
<property name="minimumSize">
<size>
<width>529</width>
<height>0</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>25</height>
</size>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="quantity">
<property name="minimumSize">
<size>
<width>529</width>
<height>0</height>
</size>
</property>
<property name="text">
<string/>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0" colspan="2">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>521</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="2" column="2">
<widget class="QPushButton" name="restore">
<property name="maximumSize">
<size>
<width>89</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Restore</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections/>
</ui>

276
src/sendHushTransactionChat.ui

@ -0,0 +1,276 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>transactionHush</class>
<widget class="QDialog" name="transactionHush">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>212</width>
<height>405</height>
</rect>
</property>
<property name="windowTitle">
<string>Send or Request Hush</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<widget class="QLabel" name="label_2">
<property name="text">
<string>To :</string>
</property>
</widget>
</item>
<item row="1" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
</property>
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
<item>
<widget class="QListView" name="contactName">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>70</height>
</size>
</property>
<property name="verticalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="horizontalScrollBarPolicy">
<enum>Qt::ScrollBarAlwaysOff</enum>
</property>
<property name="editTriggers">
<set>QAbstractItemView::NoEditTriggers</set>
</property>
<property name="showDropIndicator" stdset="0">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
<item row="2" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
</property>
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
<item>
<widget class="QLabel" name="label_6">
<property name="maximumSize">
<size>
<width>80</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Amount: </string>
</property>
</widget>
</item>
<item>
<widget class="QLineEdit" name="amountChat">
<property name="maximumSize">
<size>
<width>80</width>
<height>16777215</height>
</size>
</property>
<property name="baseSize">
<size>
<width>200</width>
<height>0</height>
</size>
</property>
<property name="maxLength">
<number>9</number>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
</property>
<property name="placeholderText">
<string>Amount</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="label_3">
<property name="maximumSize">
<size>
<width>35</width>
<height>16777215</height>
</size>
</property>
<property name="text">
<string>Hush</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label">
<property name="text">
<string>Memo :</string>
</property>
</widget>
</item>
<item row="3" column="1">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
<item row="4" column="0" colspan="2">
<widget class="QLineEdit" name="MemoMoney">
<property name="minimumSize">
<size>
<width>0</width>
<height>41</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>41</height>
</size>
</property>
<property name="maxLength">
<number>100</number>
</property>
</widget>
</item>
<item row="5" column="1">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>39</height>
</size>
</property>
</spacer>
</item>
<item row="6" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
</property>
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
<item>
<widget class="QPushButton" name="requestHush">
<property name="text">
<string>Request Hush</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="sendHush">
<property name="maximumSize">
<size>
<width>16777215</width>
<height>25</height>
</size>
</property>
<property name="text">
<string>Send Hush</string>
</property>
</widget>
</item>
</layout>
</item>
<item row="7" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<property name="sizeConstraint">
<enum>QLayout::SetFixedSize</enum>
</property>
<property name="leftMargin">
<number>6</number>
</property>
<property name="topMargin">
<number>6</number>
</property>
<property name="rightMargin">
<number>6</number>
</property>
<property name="bottomMargin">
<number>6</number>
</property>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::Cancel</set>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>transactionHush</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>

2
src/version.h

@ -1 +1 @@
#define APP_VERSION "1.3.6"
#define APP_VERSION "1.3.8"

Loading…
Cancel
Save