Compare commits

...

22 Commits

Author SHA1 Message Date
288b54be6c restore rescan height dialog, use safe clear+resync approach 2026-03-22 11:23:48 -05:00
221231b53b fix rescan crash: use clear+resync instead of reinitializing lightclient 2026-03-22 11:16:50 -05:00
b7a04bebc1 fix rescan crash: shutdown old lightclient before overwriting 2026-03-22 11:12:19 -05:00
f5d26dd34d fix wallet restore: pass overwrite=true to allow restoring over existing wallet 2026-03-22 11:08:05 -05:00
ff8368ca97 fix birthday parse: treat empty input as 0, update hashes 2026-03-22 10:59:30 -05:00
7ec272df90 v1.1.1: release build with tx display fix, birthday parse fix 2026-03-22 10:52:25 -05:00
e2071653b9 Rebuild with memo filter fix for change detection
The previous fix checked memo.to_utf8().is_none() but empty memos
(all-zero bytes) have first byte 0x00 < 0xF5, so to_utf8() returns
Some(Ok("")) not None. Change outputs were never filtered.
Now checks for empty string as well as None.
2026-03-22 10:36:09 -05:00
90383b0f43 v1.1.1: Bump version, fix CFLAGS in lib/Makefile, rebuild binaries
- Bump APP_VERSION from 1.1.0 to 1.1.1
- Fix CFLAGS in lib/Makefile: remove quoted empty string that broke
  blake3 cross-compilation
- Rebuild Linux and Windows binaries with IVK change detection fix
- Update SHA-256 hashes in release notes
2026-03-22 10:02:51 -05:00
5fe5447474 v1.1.1: Fix sent tx showing wrong addresses, fix CRLF line endings in build.sh
- Fix change output detection using IVK-based decryption instead of
  static address list, so sent transactions only show the actual
  recipient address
- Fix CRLF line endings in build.sh
- Add release notes for v1.1.1
- Update Linux binary
2026-03-22 09:27:56 -05:00
cc34cc3f21 Add clean shutdown, wallet safety, and UI contrast fixes
Shutdown:
- Call litelib_shutdown() to stop Rust background threads on exit
- Add 15-second timeout on wallet save dialog to prevent hang on close
- Add litelib_shutdown FFI declaration in header and controller

UI Contrast (dragonx theme):
- Fix disabled buttons: white text was invisible on white background
- Add QWizard, QMessageBox, QTextBrowser, QPlainTextEdit styling for dark theme
- Add QCheckBox, QRadioButton, QDialogButtonBox contrast rules
- Fix seed word verification buttons: dark themed with explicit text color
- Fix chat bubbles: replace light backgrounds with dark themed colors
- Fix Terms of Service link color: #0000ff -> #6699ff for visibility
- Remove duplicate conflicting QLabel#lblMessage CSS rule

Add v1.1.0 release notes with checksums
2026-03-21 05:39:19 -05:00
e601048fd8 bump version to v1.1.0 2026-03-21 04:42:20 -05:00
cd5a9f3736 DragonX compatibility: crash fixes, reorg detection, server failover, sync perf
- Fix Rust FFI panics with catch_unwind wrappers and safe CString handling
- Handle poisoned mutex/RwLock from prior panics instead of crashing
- Add stuck sync detection (10s stall threshold) and chain reorg user prompt
- Add "Skip Verification" button to seed phrase wizard
- Update payment URIs from hush: to drgx:
- Update branding strings throughout UI
- Add all 6 lite servers (lite, lite1-5.dragonx.is) with random selection
- Add server connectivity probing to skip unreachable servers
- Reuse Tokio runtime across block fetch batches to reduce sync overhead
- Update Cargo.lock dependencies
2026-03-21 03:43:23 -05:00
fekt
b0d7319182 Merge pull request 'Merge dev into master' (#2) from dev into master
Reviewed-on: https://git.hush.is/dragonx/SilentDragonXLite/pulls/2
2024-11-18 04:23:38 +01:00
fekt
336d85e6c7 Update checkpoints 2024-11-17 22:09:45 -05:00
dan_s
54813c8827 updating checkpoints and build script 2024-11-05 16:40:05 -06:00
dan_s
0865358171 updated css for dragonx theme and added as option to settings menu 2024-05-08 23:21:51 -05:00
fekt
573fba9ba0 More translation replacements 2024-04-15 21:10:44 -04:00
fekt
054dcb451b Fix halving calculation 2024-04-15 15:01:39 +00:00
duke
9947c14411 DRGX has a blocktime of 36s 2024-04-15 13:49:54 +00:00
fekt
9f47d1e293 Update blocktime for DRGX
Difficulty, longestchain, and some other data does not render in UI and needs to be fixed. Halving calculations also need to be reviewed for accuracy for DRGX.
2024-04-15 01:41:53 -04:00
fekt
f620f6c519 Update 'README.md' 2024-04-15 05:39:43 +00:00
onryo
00fe0ea59d Merge pull request 'Merge dev into main' (#149) from dev into master
Reviewed-on: https://git.hush.is/hush/SilentDragonLite/pulls/149
2024-03-25 01:49:10 +00:00
286 changed files with 124364 additions and 123603 deletions

View File

@@ -1,6 +1,6 @@
# SilentDragonXLite # SilentDragonXLite
SilentDragonXLite is a lightwallet for DRAGONX ($DRAGONX) runs on Linux and Windows which does not require you to download the full blockchain. This is experimental software under active development! SilentDragonXLite is a lightwallet for DRAGONX ($DRAGONX) runs on Linux, Windows, and Mac which does not require you to download the full blockchain. This is experimental software under active development!
## PRIVACY NOTICE ## PRIVACY NOTICE

55
RELEASE_NOTES_v1.1.0.md Normal file
View File

@@ -0,0 +1,55 @@
# SilentDragonXLite v1.1.0 Release Notes
## What's New
### DragonX Compatibility
- Full compatibility with the DragonX blockchain
- Updated payment URIs from `hush:` to `drgx:`
- Updated branding and UI strings throughout
### Crash Fixes
- Fixed Rust FFI panics with `catch_unwind` wrappers and safe CString construction
- Handle poisoned mutex/RwLock from prior panics instead of crashing
- Fixed empty block list panics in `clear_blocks` and `invalidate_block`
- Removed `throw;` in exception handler that caused undefined behavior
### Reorg Detection & Stuck Sync Recovery
- Detects stuck syncs (10-second stall threshold) and prompts the user to repair
- Chain reorganization detection with one-time user prompt to clear and re-sync
- Prevents duplicate reorg dialogs
### Server Failover
- All 6 lite servers available: lite, lite1-5.dragonx.is
- Random server selection with connectivity probing — dead servers are automatically skipped
- Server dropdown in settings for manual selection
### Faster Block Sync
- Reuses Tokio runtime across block fetch batches, eliminating per-batch runtime creation overhead
### Clean Shutdown
- Added 15-second timeout on wallet save during exit — the app will no longer hang on close
- Rust background threads (mempool monitor) are now cleanly stopped on exit via `litelib_shutdown()`
### Wallet Safety
- Atomic wallet saves: writes to a temp file, then renames over the original — a crash during save can no longer corrupt the wallet
- Automatic `.bak` backup created before each save
- On startup, if the wallet file is missing or corrupted, automatically recovers from the backup
### Seed Phrase
- Added "Skip Verification" button to seed phrase wizard for faster wallet setup
### UI Contrast Improvements
- Fixed disabled buttons being invisible (white text on white background)
- Fixed setup wizard, message boxes, and dialog contrast for the dark theme
- Chat bubbles now use dark themed backgrounds matching the overall UI
- Seed verification buttons styled with proper contrast
- Fixed hyperlink color in Terms of Service (blue on dark was unreadable)
---
## Downloads
| File | SHA-256 |
|---|---|
| `SilentDragonXLite` (Linux) | `f9d3e3a8cd916b2d83dda89bc181670ef2cdd8b9ae5a50ef3a1c0e76e74f04fc` |
| `SilentDragonXLite.exe` (Windows) | `5064082c1300c42bef5c0f767e39743b08c66641eb495e1d975cbfb163b76cb0` |

18
RELEASE_NOTES_v1.1.1.md Normal file
View File

@@ -0,0 +1,18 @@
# SilentDragonXLite v1.1.1 Release Notes
## What's New
### Transaction Display Fix
- **Fixed sent transactions showing wrong addresses** — Previously, sending to a single address would display multiple addresses in the transaction history (the recipient plus the wallet's own diversified change addresses). Change outputs are now correctly detected using Incoming Viewing Key (IVK) decryption instead of a static address list, so only the actual recipient address is shown.
### Wallet Birthday Fix
- **Fixed "Failed to parse wallet birthday" error** — Rescanning the wallet no longer fails due to trailing whitespace in the birthday height input.
---
## Downloads
| File | SHA-256 |
|---|---|
| `SilentDragonXLite` (Linux) | `ac44fbdfa343ffb550829827e3fbb95407e2ca3086d6bc34befdc7b5644763a7` |
| `SilentDragonXLite.exe` (Windows) | `093b6830f23b1f1d407c47f2df90a2c1465b2882a0c3b375237a5b731e36362c` |

BIN
SilentDragonXLite Executable file

Binary file not shown.

View File

@@ -0,0 +1,37 @@
#include <windows.h>
IDI_ICON1 ICON DISCARDABLE "/home/d/external/SilentDragonXLite/res/icon.ico"
VS_VERSION_INFO VERSIONINFO
FILEVERSION 0,0,0,0
PRODUCTVERSION 0,0,0,0
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS VS_FF_DEBUG
#else
FILEFLAGS 0x0L
#endif
FILEOS VOS__WINDOWS32
FILETYPE VFT_APP
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "\0"
VALUE "FileDescription", "\0"
VALUE "FileVersion", "0.0.0.0\0"
VALUE "LegalCopyright", "\0"
VALUE "OriginalFilename", "SilentDragonXLite.exe\0"
VALUE "ProductName", "SilentDragonXLite\0"
VALUE "ProductVersion", "0.0.0.0\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x0409, 1200
END
END
/* End of Version info */

View File

@@ -103,7 +103,7 @@
<file>res/css/Default.css</file> <file>res/css/Default.css</file>
<file>res/css/Light.css</file> <file>res/css/Light.css</file>
<file>res/css/Midnight.css</file> <file>res/css/Midnight.css</file>
<file>res/css/test.css</file> <file>res/css/dragonx.css</file>
</qresource> </qresource>
<qresource prefix="/images/blue"> <qresource prefix="/images/blue">
<file>res/images/blue/unchecked.png</file> <file>res/images/blue/unchecked.png</file>

View File

@@ -49,7 +49,7 @@ CONF=silentdragonx-lite.pro
set -e set -e
qbuild () { qbuild () {
qmake $CONF CONFIG+=debug qmake $CONF CONFIG+=release
#lupdate $CONF #lupdate $CONF
#lrelease $CONF #lrelease $CONF
# default to 2 jobs or use the -j value given as argument to this script # default to 2 jobs or use the -j value given as argument to this script

2
lib/.cargo/config.toml Normal file
View File

@@ -0,0 +1,2 @@
[net]
git-fetch-with-cli = true

49
lib/Cargo.lock generated
View File

@@ -127,7 +127,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f80256bc78f67e7df7e36d77366f636ed976895d91fe2ab9efa3973e8fe8c4f" checksum = "7f80256bc78f67e7df7e36d77366f636ed976895d91fe2ab9efa3973e8fe8c4f"
dependencies = [ dependencies = [
"backtrace-sys", "backtrace-sys",
"cfg-if", "cfg-if 0.1.10",
"libc", "libc",
"rustc-demangle", "rustc-demangle",
] ]
@@ -230,7 +230,7 @@ dependencies = [
"arrayref", "arrayref",
"arrayvec", "arrayvec",
"cc", "cc",
"cfg-if", "cfg-if 0.1.10",
"constant_time_eq", "constant_time_eq",
"crypto-mac", "crypto-mac",
"digest", "digest",
@@ -330,6 +330,12 @@ version = "0.1.10"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]] [[package]]
name = "chrono" name = "chrono"
version = "0.4.10" version = "0.4.10"
@@ -378,7 +384,7 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1" checksum = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
dependencies = [ dependencies = [
"cfg-if", "cfg-if 0.1.10",
] ]
[[package]] [[package]]
@@ -394,7 +400,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4" checksum = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4"
dependencies = [ dependencies = [
"autocfg 0.1.7", "autocfg 0.1.7",
"cfg-if", "cfg-if 0.1.10",
"lazy_static", "lazy_static",
] ]
@@ -438,7 +444,7 @@ version = "2.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3" checksum = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3"
dependencies = [ dependencies = [
"cfg-if", "cfg-if 0.1.10",
"dirs-sys", "dirs-sys",
] ]
@@ -448,7 +454,7 @@ version = "0.3.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "afa0b23de8fd801745c471deffa6e12d248f962c9fd4b4c33787b055599bde7b" checksum = "afa0b23de8fd801745c471deffa6e12d248f962c9fd4b4c33787b055599bde7b"
dependencies = [ dependencies = [
"cfg-if", "cfg-if 0.1.10",
"libc", "libc",
"redox_users", "redox_users",
"winapi 0.3.8", "winapi 0.3.8",
@@ -523,7 +529,7 @@ version = "0.2.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ff6d4dab0aa0c8e6346d46052e93b13a16cf847b54ed357087c35011048cc7d" checksum = "1ff6d4dab0aa0c8e6346d46052e93b13a16cf847b54ed357087c35011048cc7d"
dependencies = [ dependencies = [
"cfg-if", "cfg-if 0.1.10",
"libc", "libc",
"redox_syscall", "redox_syscall",
"winapi 0.3.8", "winapi 0.3.8",
@@ -541,7 +547,7 @@ version = "1.0.13"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6bd6d6f4752952feb71363cffc9ebac9411b75b87c6ab6058c40c8900cf43c0f" checksum = "6bd6d6f4752952feb71363cffc9ebac9411b75b87c6ab6058c40c8900cf43c0f"
dependencies = [ dependencies = [
"cfg-if", "cfg-if 0.1.10",
"crc32fast", "crc32fast",
"libc", "libc",
"miniz_oxide", "miniz_oxide",
@@ -657,7 +663,7 @@ version = "0.1.14"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb" checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
dependencies = [ dependencies = [
"cfg-if", "cfg-if 0.1.10",
"libc", "libc",
"wasi", "wasi",
] ]
@@ -861,9 +867,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]] [[package]]
name = "libc" name = "libc"
version = "0.2.66" version = "0.2.161"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558" checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1"
[[package]] [[package]]
name = "libflate" name = "libflate"
@@ -912,7 +918,7 @@ version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
dependencies = [ dependencies = [
"cfg-if", "cfg-if 0.1.10",
"serde", "serde",
] ]
@@ -974,7 +980,7 @@ version = "0.6.21"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f" checksum = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f"
dependencies = [ dependencies = [
"cfg-if", "cfg-if 0.1.10",
"fuchsia-zircon", "fuchsia-zircon",
"fuchsia-zircon-sys", "fuchsia-zircon-sys",
"iovec", "iovec",
@@ -1044,7 +1050,7 @@ version = "0.2.33"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" checksum = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88"
dependencies = [ dependencies = [
"cfg-if", "cfg-if 0.1.10",
"libc", "libc",
"winapi 0.3.8", "winapi 0.3.8",
] ]
@@ -1335,6 +1341,7 @@ dependencies = [
"lazy_static", "lazy_static",
"libc", "libc",
"silentdragonxlitelib", "silentdragonxlitelib",
"socket2",
] ]
[[package]] [[package]]
@@ -1849,7 +1856,6 @@ dependencies = [
[[package]] [[package]]
name = "silentdragonxlitelib" name = "silentdragonxlitelib"
version = "0.1.0" version = "0.1.0"
source = "git+https://git.hush.is/dragonx/silentdragonxlite-cli?rev=39ec5f36662ba7370dffa6c8346f93633dfa29ce#39ec5f36662ba7370dffa6c8346f93633dfa29ce"
dependencies = [ dependencies = [
"base58", "base58",
"bellman", "bellman",
@@ -1908,13 +1914,12 @@ dependencies = [
[[package]] [[package]]
name = "socket2" name = "socket2"
version = "0.3.11" version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8b74de517221a2cb01a53349cf54182acdc31a074727d3079068448c0676d85" checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
dependencies = [ dependencies = [
"cfg-if", "cfg-if 1.0.0",
"libc", "libc",
"redox_syscall",
"winapi 0.3.8", "winapi 0.3.8",
] ]
@@ -2011,7 +2016,7 @@ version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9" checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9"
dependencies = [ dependencies = [
"cfg-if", "cfg-if 0.1.10",
"libc", "libc",
"rand 0.7.3", "rand 0.7.3",
"redox_syscall", "redox_syscall",
@@ -2367,7 +2372,7 @@ version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1e213bd24252abeb86a0b7060e02df677d367ce6cb772cef17e9214b8390a8d3" checksum = "1e213bd24252abeb86a0b7060e02df677d367ce6cb772cef17e9214b8390a8d3"
dependencies = [ dependencies = [
"cfg-if", "cfg-if 0.1.10",
"log", "log",
"tracing-attributes", "tracing-attributes",
"tracing-core", "tracing-core",
@@ -2507,7 +2512,7 @@ version = "0.2.58"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5205e9afdf42282b192e2310a5b463a6d1c1d774e30dc3c791ac37ab42d2616c" checksum = "5205e9afdf42282b192e2310a5b463a6d1c1d774e30dc3c791ac37ab42d2616c"
dependencies = [ dependencies = [
"cfg-if", "cfg-if 0.1.10",
"wasm-bindgen-macro", "wasm-bindgen-macro",
] ]

View File

@@ -12,4 +12,5 @@ crate-type = ["staticlib"]
libc = "0.2.58" libc = "0.2.58"
lazy_static = "1.4.0" lazy_static = "1.4.0"
blake3 = "0.3.4" blake3 = "0.3.4"
silentdragonxlitelib = { git = "https://git.hush.is/dragonx/silentdragonxlite-cli", rev = "39ec5f36662ba7370dffa6c8346f93633dfa29ce" } silentdragonxlitelib = { path = "/home/d/external/silentdragonxlite-cli/lib" }
socket2 = "0.3.11"

View File

@@ -3,7 +3,7 @@ ifeq ($(shell uname),Darwin)
CFLAGS := "-mmacosx-version-min=10.11" CFLAGS := "-mmacosx-version-min=10.11"
else else
EXT := a EXT := a
CFLAGS := "" CFLAGS :=
endif endif
PWD := $(shell pwd) PWD := $(shell pwd)

View File

@@ -9,12 +9,14 @@ extern bool litelib_wallet_exists (const char* chain_name);
extern char * litelib_initialize_new (bool dangerous, const char* server); extern char * litelib_initialize_new (bool dangerous, const char* server);
extern char * litelib_initialize_new_from_phrase extern char * litelib_initialize_new_from_phrase
(bool dangerous, const char* server, const char* seed, (bool dangerous, const char* server, const char* seed,
unsigned long long birthday, unsigned long long number); unsigned long long birthday, unsigned long long number,
bool overwrite);
extern char * litelib_initialize_existing (bool dangerous,const char* server); extern char * litelib_initialize_existing (bool dangerous,const char* server);
extern char * litelib_execute (const char* s, const char* args); extern char * litelib_execute (const char* s, const char* args);
extern void litelib_rust_free_string (char* s); extern void litelib_rust_free_string (char* s);
extern char * blake3_PW (char* pw); extern char * blake3_PW (char* pw);
extern bool litelib_check_server_online (const char* server); extern bool litelib_check_server_online (const char* server);
extern void litelib_shutdown (void);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@@ -7,9 +7,21 @@ use std::ffi::{CStr, CString};
use std::sync::{Mutex, Arc}; use std::sync::{Mutex, Arc};
use std::cell::RefCell; use std::cell::RefCell;
use std::ptr; use std::ptr;
use std::panic;
use silentdragonxlitelib::{commands, lightclient::{LightClient, LightClientConfig}}; use silentdragonxlitelib::{commands, lightclient::{LightClient, LightClientConfig}};
/// Helper to create a CString, replacing null bytes to avoid panics
fn safe_cstring(s: &str) -> CString {
let cleaned: String = s.replace('\0', "");
CString::new(cleaned).unwrap_or_else(|_| CString::new("Error: failed to create CString").unwrap())
}
/// Helper to create an error CString
fn error_cstring(msg: &str) -> *mut c_char {
safe_cstring(&format!("Error: {}", msg)).into_raw()
}
// We'll use a MUTEX to store a global lightclient instance, // We'll use a MUTEX to store a global lightclient instance,
// so we don't have to keep creating it. We need to store it here, in rust // so we don't have to keep creating it. We need to store it here, in rust
// because we can't return such a complex structure back to C++ // because we can't return such a complex structure back to C++
@@ -100,10 +112,13 @@ pub extern fn litelib_initialize_new(dangerous: bool,server: *const c_char) -> *
} }
} }
LIGHTCLIENT.lock().unwrap().replace(Some(lc)); match LIGHTCLIENT.lock() {
Ok(l) => { l.replace(Some(lc)); },
Err(poisoned) => { poisoned.into_inner().replace(Some(lc)); },
};
// Return the wallet's seed // Return the wallet's seed
let s_str = CString::new(seed).unwrap(); let s_str = safe_cstring(&seed);
return s_str.into_raw(); return s_str.into_raw();
} }
@@ -125,6 +140,17 @@ pub extern "C" fn litelib_initialize_new_from_phrase(dangerous: bool, server: *c
//println!("Initializing with server: {}, seed: {}", server_str, seed_str); //println!("Initializing with server: {}, seed: {}", server_str, seed_str);
// Shut down the existing client if one is running, to stop background threads
if overwrite {
let old_lc = match LIGHTCLIENT.lock() {
Ok(l) => l.borrow().clone(),
Err(poisoned) => poisoned.into_inner().borrow().clone(),
};
if let Some(lc) = old_lc {
lc.shutdown();
}
}
let server = LightClientConfig::get_server_or_default(Some(server_str)); 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, dangerous) {
Ok((c, h)) => { Ok((c, h)) => {
@@ -159,9 +185,12 @@ pub extern "C" fn litelib_initialize_new_from_phrase(dangerous: bool, server: *c
Err(e) => println!("Could not start mempool: {}", e) Err(e) => println!("Could not start mempool: {}", e)
} }
LIGHTCLIENT.lock().unwrap().replace(Some(lc)); match LIGHTCLIENT.lock() {
Ok(l) => { l.replace(Some(lc)); },
Err(poisoned) => { poisoned.into_inner().replace(Some(lc)); },
};
let c_str = CString::new("OK").unwrap_or_else(|_| CString::new("CString creation failed").unwrap()); let c_str = safe_cstring("OK");
return c_str.into_raw(); return c_str.into_raw();
} }
@@ -202,47 +231,56 @@ pub extern fn litelib_initialize_existing(dangerous: bool, server: *const c_char
} }
} }
LIGHTCLIENT.lock().unwrap().replace(Some(lc)); match LIGHTCLIENT.lock() {
Ok(l) => { l.replace(Some(lc)); },
Err(poisoned) => { poisoned.into_inner().replace(Some(lc)); },
};
let c_str = CString::new("OK").unwrap(); let c_str = safe_cstring("OK");
return c_str.into_raw(); return c_str.into_raw();
} }
#[no_mangle] #[no_mangle]
pub extern fn litelib_execute(cmd: *const c_char, args: *const c_char) -> *mut c_char { pub extern fn litelib_execute(cmd: *const c_char, args: *const c_char) -> *mut c_char {
let cmd_str = unsafe { let result = panic::catch_unwind(|| {
assert!(!cmd.is_null()); let cmd_str = unsafe {
assert!(!cmd.is_null());
CStr::from_ptr(cmd).to_string_lossy().into_owned() CStr::from_ptr(cmd).to_string_lossy().into_owned()
};
let arg_str = unsafe {
assert!(!args.is_null());
CStr::from_ptr(args).to_string_lossy().into_owned()
};
let resp: String;
{
let lightclient: Arc<LightClient>;
{
let lc = LIGHTCLIENT.lock().unwrap();
if lc.borrow().is_none() {
let e_str = CString::new("Error: Light Client is not initialized").unwrap();
return e_str.into_raw();
}
lightclient = lc.borrow().as_ref().unwrap().clone();
}; };
let args = if arg_str.is_empty() { vec![] } else { vec![arg_str.as_ref()] }; let arg_str = unsafe {
assert!(!args.is_null());
CStr::from_ptr(args).to_string_lossy().into_owned()
};
resp = commands::do_user_command(&cmd_str, &args, lightclient.as_ref()).clone(); let resp: String;
}; {
let lightclient: Arc<LightClient>;
{
let lc = match LIGHTCLIENT.lock() {
Ok(l) => l,
Err(poisoned) => poisoned.into_inner(),
};
let c_str = CString::new(resp.as_bytes()).unwrap(); if lc.borrow().is_none() {
return c_str.into_raw(); return error_cstring("Light Client is not initialized");
}
lightclient = lc.borrow().as_ref().unwrap().clone();
};
let args = if arg_str.is_empty() { vec![] } else { vec![arg_str.as_ref()] };
resp = commands::do_user_command(&cmd_str, &args, lightclient.as_ref()).clone();
};
safe_cstring(&resp).into_raw()
});
match result {
Ok(ptr) => ptr,
Err(_) => error_cstring("Rust panic in litelib_execute"),
}
} }
// Check is Server Connection is fine // Check is Server Connection is fine
@@ -263,6 +301,20 @@ pub extern "C" fn litelib_check_server_online(server: *const c_char) -> bool {
} }
} }
/// Cleanly shut down the light client, stopping mempool monitor threads.
/// Must be called before exit to prevent hangs.
#[no_mangle]
pub extern "C" fn litelib_shutdown() {
let lc_option = match LIGHTCLIENT.lock() {
Ok(l) => l.borrow().clone(),
Err(poisoned) => poisoned.into_inner().borrow().clone(),
};
if let Some(lc) = lc_option {
lc.shutdown();
}
}
/** /**
* Callers that receive string return values from other functions should call this to return the string * Callers that receive string return values from other functions should call this to return the string
* back to rust, so it can be freed. Failure to call this function will result in a memory leak * back to rust, so it can be freed. Failure to call this function will result in a memory leak

View File

@@ -1,114 +1,596 @@
/*
colors
background: rgb(24, 12, 12)
object-background: #45505e
object-background-hover: #1f242b
object-background-press: #0c0e11
text-main: white
text-secondary: rgba(255, 255, 255, 0.75)
text-dark: rgb(24, 12, 12)
border: rgb(216, 38, 82)
*/
QWidget, QMainWindow, QMenuBar, QMenu, QDialog, QTabWidget, QTableView, QScrollArea, QGroupBox, QPlainTextEdit, QLineEdit, QLabel, MainWindow { QWidget, QMainWindow, QMenuBar, QMenu, QDialog, QTabWidget, QTableView, QScrollArea, QGroupBox, QPlainTextEdit, QLineEdit, QLabel, MainWindow {
background-color: #232834; color: white;
color: #91a4b8; border: 0px solid rgba(0, 0, 0, 0);
background-color: rgb(24, 21, 21);
} }
/* window menu options */
QMenu {
color: white;
border: 1px solid rgba(216, 38, 82, .5);
border-radius: 8px;
background-color: rgba(24, 21, 21, 1);
}
QMenuBar {
color: rgb(216, 38, 82);
color: white;
}
QMenuBar::item {
color: rgb(216, 38, 82);
color: white;
}
#title {
margin-bottom: 8px;
}
QTabWidget QTabBar {
background-color: rgba(41, 21, 21, .25);
width: 600px;
}
QTabWidget QTabBar::tab { QTabWidget QTabBar::tab {
padding-left:20px; margin: 12px 4px;
padding-right:20px; padding: 6px 4px;
padding-top:5px; font-size: 20px;
padding-bottom:5px; border: 0px solid white;
border: 1px solid #343F4B; border-radius: 9px;
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #343F4B, stop: 1 #232834); background-color: rgba(41, 21, 21, 1);
min-width: 130px;
} }
QTabWidget QTabBar::tab::last {
min-width: 280px;
}
QTabWidget QTabBar::tab:selected { QTabWidget QTabBar::tab:selected {
min-height: 10px; color: rgba(255, 255, 255, 0.85);
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #343F4B, stop: 1 #232834); border: 1px solid rgba(216, 38, 82, 0.85);
color:#91a4b8; background-color: rgba(216, 38, 82, 0.25);
border: 1px ridge #91a4b8;
} }
QTabWidget QTabBar::tab:hover { QTabWidget QTabBar::tab:hover {
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #343F4B, stop: 1 #232834); color: white;
color:#91a4b8; border: 1px solid rgba(216, 38, 82, 1);
border: 1px ridge #91a4b8; background-color: rgba(216, 38, 82, 0.4);
min-height: 20px
} }
QHeaderView { QHeaderView {
/* Table Header */ /* Table Header */
background-color:#232834; background-color: rgba(0, 0, 0, 0);
} }
QHeaderView::section { QHeaderView::section {
/* Table Header Sections */ /* Table Header Sections */
qproperty-alignment:center; /* qproperty-alignment:center; */
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #343F4B, stop: 1 #232834);
color:#91a4b8;
min-height:25px; min-height:25px;
font-weight:bold;
font-size:11px;
outline:0; outline:0;
border:1px solid #343F4B;
border-right:1px solid #91a4b8;
border-left:1px solid #91a4b8;
padding-left:5px; padding-left:5px;
padding-right:5px; padding-right:5px;
padding-top:2px; padding-top:2px;
padding-bottom:2px; padding-bottom:2px;
color:#91a4b8;
font-weight:bold;
font-size:11px;
border:1px solid rgb(41, 21, 21);
border-right:1px solid #91a4b8;
border-left:1px solid #91a4b8;
} }
QHeaderView::section:last {
border-right: 0px solid #d7d7d7;
QTabBar {
margin-bottom: 16px;
} }
QScrollArea {
background:transparent; QLabel {
border:0px; color: rgba(255, 255, 255, 0.75);
border: 0px solid rgba(255, 255, 255, 0);
background-color: rgba(255, 255, 255, 0);
} }
QLineEdit {
padding: 2px 4px;
color: white;
border: 1px solid rgb(216, 38, 82);
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
background-color: rgba(41, 21, 21, 0.75);
}
QGroupBox{
padding: 12px;
padding-top: 32px;
background-color: rgba(24, 12, 12, 0.45);
border: 1px solid rgba(216, 38, 82, 0.6);
border-radius: 8px;
font-size: 18px;
}
QGroupBox::title {
padding: 4px 12px;
color: rgba(255, 255, 255, 0.85);
border: 1px solid rgba(216, 38, 82, 0.25);
border-top-left-radius: 8px;
border-bottom-right-radius: 8px;
background-color: rgba(216, 38, 82, 0.05);
}
QGroupBox#groupBox QLabel {
font-size: 16px;
}
QPushButton {
padding: 6px 10px;
color: rgba(255, 255, 255, 0.5);
border: 1px solid rgba(216, 38, 82, 0.5);
border-radius: 4px;
background-color: rgba(216, 38, 82, 0.15);
font-size: 16px;
}
QPushButton:hover {
color: rgba(255, 255, 255, 0.75);
border: 1px solid rgba(216, 38, 82, 0.55);
background-color: rgba(216, 38, 82, 0.45);
}
QPushButton:selected {
color: rgba(255, 255, 255, 0.75);
border: 1px solid rgba(216, 38, 82, 0.75);
background-color: rgba(216, 38, 82, 0.75);
}
QPushButton:disabled {
color: rgba(255, 255, 255, 0.35);
border: 1px solid rgba(216, 38, 82, 0.15);
background-color: rgba(41, 21, 21, 0.5);
}
QComboBox{
margin: 0;
padding: 2px 4px;
border: 1px solid rgba(216, 38, 82, 0.75);
border-radius: 2px;
background-color: rgba(24, 12, 12, 0.5);
}
QScrollArea#sendToScrollArea QWidget {
border: 0px solid rgb(216, 38, 82, 0);
background-color: rgba(24, 12, 12, 0.45);
}
QScrollBar {
border: 0px solid rgba(216, 38, 82, 0);
background-color: rgba(24, 12, 12, 0);
}
QScrollBar:vertical {
width: 22px;
margin: 0 2px;
border: 2px solid rgba(216, 38, 82, 0);
background-color: rgba(0, 0, 0 , 0);
}
QScrollBar::handle:vertical,
QScrollBar::handle:horizontal {
border: 1px solid rgba(216, 38, 82, 1);
border-radius: 6px;
background-color: rgba(216, 38, 82, 0.25);
}
QScrollBar::handle:vertical {
border-radius: 6px;
}
QScrollBar::add-line {
height: 0px;
subcontrol-position: bottom;
subcontrol-origin: margin;
}
QScrollBar::sub-line {
height: 0px;
subcontrol-position: top;
subcontrol-origin: margin;
}
QScrollBar::add-page, QScrollBar::sub-page {
background: none;
}
QComboBox QAbstractItemView {
margin: 0;
padding: 2px 4px;
border: 1px solid rgba(216, 38, 82, 0.75);
border-radius: 2px;
background-color: rgba(24, 12, 12, 0.5);
selection-background-color: rgb(118, 132, 153);
}
QComboBox QAbstractItemView::item{
margin: 0;
padding: 2px 4px;
border: 1px solid rgba(216, 38, 82, 0.25);
border-radius: 2px;
background-color: rgba(24, 12, 12, 0.5);
outline: none;
}
QComboBox QAbstractItemView::item:selected{
margin: 0;
padding: 2px 4px;
border: 1px solid rgba(216, 38, 82, 0.75);
border-radius: 2px;
background-color: rgba(24, 12, 12, 0.5);
outline:none;
}
QComboBox QAbstractItemView::item:hover {
margin: 0;
padding: 2px 4px;
border: 1px solid rgba(216, 38, 82, 0.75);
border-radius: 2px;
background-color: rgba(24, 12, 12, 0.75);
outline:none;
}
QListView{
margin: 0;
padding: 2px 4px;
border: 1px solid rgba(216, 38, 82, 0.75);
border-radius: 2px;
background-color: rgba(24, 12, 12, 0.5);
}
/* TAB 1 - HUSHCHAT */
/* chat window */
QListView#listChat,
QListView#listContactWidget {
border-radius: 8px;
border: 1px solid rgba(216, 38, 82, 0.5);
background-color: rgba(216, 38, 82, 0.05);
}
QPushButton#emojiButton,
QPushButton#pushContact,
QPushButton#safeContactRequest,
QPushButton#givemeZaddr,
QPushButton#sendChatButton {
border-radius: 4px;
}
QLabel#lblMessage {
color: white;
border: 1px solid rgba(216, 38, 82, 0.5);
background-color: rgba(216, 38, 82, 0.05);
}
/* SEND TAB */
QWidget#tab_2 QLabel{
border: 0px solid white;
background-color: rgba(255, 255, 255, 0);
}
/* MEMO */
QWidget#tab_2 QLabel#MemoTxt1,
QWidget#tab_2 QLabel#MemoTxt2,
QWidget#tab_2 QLabel#MemoTxt3,
QWidget#tab_2 QLabel#MemoTxt4,
QWidget#tab_2 QLabel#MemoTxt5,
QWidget#tab_2 QLabel#MemoTxt6 {
border: 1px solid rgba(216, 38, 82, 0.25);
background-color: rgba(24, 12, 12, 0.25);
border-radius: 4px;
padding: 4px 2px;
}
QWidget#tab_2 QLineEdit {
border: 1px solid rgb(216, 38, 82);
padding: 2px 4px;
border-top-right-radius: 4px;
border-bottom-right-radius: 4px;
background-color: rgba(24, 12, 12, 0.75);
}
/* From Section */
/* drop down address menu */
AddressCombo {
margin: 0;
padding: 2px 4px;
border: 1px solid rgba(216, 38, 82, 0.75);
border-radius: 2px;
background-color: rgba(24, 12, 12, 0.5);
}
/* Send To Section */
/* Recipient sub-section */
QWidget#tab_2 QGroupBox{
border: 1px solid rgba(216, 38, 82, 0.5);
border-radius: 4px;
background-color: rgba(216, 38, 82, 0.1);
}
QWidget#tab_2 QGroupBox::title {
margin-left: 24px;
font-size: 6px;
border-radius: 0;
border-bottom-right-radius: 4px;
border-bottom-left-radius: 4px;
}
/* To Section */
QWidget#tab_2 QGroupBox#groupBox_3,
QWidget#tab_2 QGroupBox#groupBox_4 {
border: 1px solid rgba(216, 38, 82, 0.6);
border-radius: 8px;
background-color: rgba(24, 12, 12, 0.45);
}
QWidget#tab_2 QGroupBox#groupBox_3::title,
QWidget#tab_2 QGroupBox#groupBox_4::title {
border-radius: 0;
border-top-left-radius: 8px;
border-bottom-right-radius: 8px;
margin: 0;
}
/* Max Available */
QCheckBox#Max1 {
padding: 4px;
border-radius: 4px;
background-color: rgba(24, 12, 12, 0.25);
}
QCheckBox#Max1:hover {
border: 1px solid rgba(216, 38, 82, 0.25);
background-color: rgba(216, 38, 82, 0.25);
}
QCheckBox#Max1:pressed,
QCheckBox#Max1:checked {
border: 1px solid rgba(216, 38, 82, 0.75);
background-color: rgba(216, 38, 82, 0.5);
color: white;
}
QLabel#AmtUSD1,
QLabel#txtAvailableUSD {
border: 0px solid rgba(216, 38, 82, 0.25);
background-color: rgba(255, 255, 255, 0.15);
border-radius: 2px;
}
QWidget#tab_2 QGroupBox#groupBox_4 {
height: 12px;
padding: 0;
margin: 0;
border: 1px solid rgba(216, 38, 82, 0.25);
color: white;
}
QWidget#tab_2 QPushButton {
color: rgba(255, 255, 255, 0.75);
border: 1px solid rgba(216, 38, 82, 0.25);
background-color: rgba(216, 38, 82, 0.25);
}
QWidget#tab_2 QPushButton:hover {
color: rgba(255, 255, 255, 0.75);
border: 1px solid rgba(216, 38, 82, 0.55);
background-color: rgba(216, 38, 82, 0.45);
}
QWidget#tab_2 QPushButton:selected {
color: rgba(255, 255, 255, 1);
border: 1px solid rgba(216, 38, 82, 0.75);
background-color: rgba(216, 38, 82, 0.5);
}
QWidget#tab_2 QPushButton:disabled {
color: rgba(24, 12, 12, 0.75);
border: 1px solid rgba(216, 38, 82, 0.05);
background-color: rgba(255, 255, 255, 0.15);
}
QTableView { QTableView {
/* Table - has to be selected as a class otherwise it throws off QCalendarWidget */ /* Table - has to be selected as a class otherwise it throws off QCalendarWidget */
background:#232834; qproperty-showGrid: "false";
padding-right: 8px;
color: rgba(0, 0, 0, 0);
background-color: rgba(0, 0, 0, 0);
} }
QTableView QTableCornerButton::section {
border: 0px solid rgba(0, 0, 0, 0);
background-color:rgba(0, 0, 0, 0);
}
QTableView::item { QTableView::item {
/* Table Item */ /* Table Item */
background-color:#232834; padding: 2px;
border:1px solid #91a4b8; color: white;
font-size:12px; font-size:12px;
border: 1px solid rgba(216, 38, 82, .5);
background-color:rgba(216, 38, 82, 0.25);
} }
QTableView::item:selected { QTableView::item:selected {
/* Table Item Selected */ /* Table Item Selected */
background-color:#91a4b8; margin: 4px 0;
color:#232834; color:rgb(41, 21, 21);
border: 1px solid rgba(216, 38, 82, .75);
background-color:rgba(216, 38, 82, 0.5);
} }
QMenuBar {
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #343F4B, stop: 1 #232834); QTableView { outline:none; }
color: #91a4b8;
QTableView#balancesTable {
/* background-color: rgba(255, 255, 255, 0); */
} }
QMenuBar::item { QTableView#balancesTable::item {
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #343F4B, stop: 1 #232834); /* background-color: rgba(255, 255, 255, 0); */
color: #91a4b8; border: 1px solid rgba(216, 38, 82, 0.25);
} }
QMenuBar::item:selected {
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #343F4B, stop: 1 #232834); QHeaderView::section {
border: 1px solid rgba(216, 38, 82, 0.5);
background-color: rgba(0, 0, 0, 0);
} }
QPushButton#startmining {
background-color: #343F4B; QHeaderView::section::first {
border-color: #91A4B8; border-top-left-radius: 10px;
padding: 10px; background-color: rgb(41, 21, 21);
} }
QPushButton#startmining:hover {
background-color: #232834; QHeaderView::section::middle {
background-color: rgb(41, 21, 21);
} }
QPushButton#startmining:pressed {
background-color: #232834; QHeaderView::section::last {
border: 1px solid rgba(216, 38, 82, 0.5);
border-top-right-radius: 10px;
background-color: rgb(41, 21, 21);
} }
QPushButton#startmining:disabled {
background-color: #232834; QHeaderView::section::vertical {
border: 0px solid rgba(0, 0, 0, 0);
background-color: rgba(0, 0, 0, 0);
} }
QPushButton#stopmining {
background-color: #343F4B;
border-color: #91A4B8;
padding: 10px;
margin-top: 7px;
QDialog#requestDialog {
min-width: 820;
min-height: 520;
} }
QPushButton#stopmining:hover {
background-color: #232834;
QDialog#requestDialog QLabel#label_8
{
min-height: 25;
padding-top: 7px;
} }
QPushButton#stopmining:pressed {
background-color: #232834; QDialog#requestDialog QLabel#label_7{
padding-left: 2px;
min-height: 25;
} }
QPushButton#stopmining:disabled { QDialog#requestDialog QLabel#label_5,
background-color: #232834; QDialog#requestDialog QLabel#label_6 {
min-height: 25;
padding-top: 2px;
} }
QComboBox#genproclimit{
font-size: 24px; QDialog#requestDialog QPushButton {
height: 40px; min-height: 32;
} }
QMenu::item:selected{ QDialog#requestDialog QPushButton#addContact {
background-color: #343F4B min-width: 150px;
}
/* ===== SETUP WIZARD & DIALOG CONTRAST FIXES ===== */
QWizard, QWizardPage {
color: white;
background-color: rgb(24, 21, 21);
}
QWizard QLabel, QWizardPage QLabel {
color: rgba(255, 255, 255, 0.85);
}
QWizard QPushButton, QWizardPage QPushButton {
color: rgba(255, 255, 255, 0.75);
border: 1px solid rgba(216, 38, 82, 0.5);
background-color: rgba(216, 38, 82, 0.15);
}
QWizard QPushButton:hover, QWizardPage QPushButton:hover {
color: white;
border: 1px solid rgba(216, 38, 82, 0.75);
background-color: rgba(216, 38, 82, 0.45);
}
QTextBrowser, QPlainTextEdit, QTextEdit {
color: white;
border: 1px solid rgba(216, 38, 82, 0.5);
background-color: rgba(41, 21, 21, 0.75);
}
QCheckBox {
color: rgba(255, 255, 255, 0.85);
}
QCheckBox::indicator {
border: 1px solid rgba(216, 38, 82, 0.75);
background-color: rgba(41, 21, 21, 0.5);
}
QCheckBox::indicator:checked {
background-color: rgba(216, 38, 82, 0.75);
}
QRadioButton {
color: rgba(255, 255, 255, 0.85);
}
QDialogButtonBox QPushButton {
color: rgba(255, 255, 255, 0.75);
border: 1px solid rgba(216, 38, 82, 0.5);
background-color: rgba(216, 38, 82, 0.15);
min-width: 80px;
padding: 6px 16px;
}
QDialogButtonBox QPushButton:hover {
color: white;
border: 1px solid rgba(216, 38, 82, 0.75);
background-color: rgba(216, 38, 82, 0.45);
}
QMessageBox {
color: white;
background-color: rgb(24, 21, 21);
}
QMessageBox QLabel {
color: white;
} }

View File

@@ -82,7 +82,7 @@
<name>ConnectionDialog</name> <name>ConnectionDialog</name>
<message> <message>
<location filename="../src/connection.ui" line="29"/> <location filename="../src/connection.ui" line="29"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
@@ -279,7 +279,7 @@ p, li { white-space: pre-wrap; }
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../src/mainwindow.ui" line="51"/> <location filename="../src/mainwindow.ui" line="51"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
@@ -819,7 +819,7 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="187"/> <location filename="../src/mainwindow.cpp" line="187"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -1579,7 +1579,7 @@ Would you like to visit the releases page?</source>
<message> <message>
<location filename="../src/controller.cpp" line="2017"/> <location filename="../src/controller.cpp" line="2017"/>
<location filename="../src/controller.cpp" line="2025"/> <location filename="../src/controller.cpp" line="2025"/>
<source>Please wait for SilentDragonLite to exit</source> <source>Please wait for SilentDragonXLite to exit</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
@@ -2037,7 +2037,7 @@ Would you like to visit the releases page?</source>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="666"/> <location filename="../src/firsttimewizard.cpp" line="666"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>

View File

@@ -82,8 +82,8 @@
<name>ConnectionDialog</name> <name>ConnectionDialog</name>
<message> <message>
<location filename="../src/connection.ui" line="29"/> <location filename="../src/connection.ui" line="29"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite</translation> <translation>SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/connection.ui" line="70"/> <location filename="../src/connection.ui" line="70"/>
@@ -509,8 +509,8 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="51"/> <location filename="../src/mainwindow.ui" line="51"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite</translation> <translation>SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="1592"/> <location filename="../src/mainwindow.ui" line="1592"/>
@@ -918,8 +918,8 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="187"/> <location filename="../src/mainwindow.cpp" line="187"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation>SilentDragonLite патрабуе 24 словы для аднаўлення кашалька</translation> <translation>SilentDragonXLite патрабуе 24 словы для аднаўлення кашалька</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="198"/> <location filename="../src/mainwindow.cpp" line="198"/>
@@ -1614,8 +1614,8 @@ Would you like to visit the releases page?</source>
<message> <message>
<location filename="../src/controller.cpp" line="2017"/> <location filename="../src/controller.cpp" line="2017"/>
<location filename="../src/controller.cpp" line="2025"/> <location filename="../src/controller.cpp" line="2025"/>
<source>Please wait for SilentDragonLite to exit</source> <source>Please wait for SilentDragonXLite to exit</source>
<translation>Пачакайце, калі ласка SilentDragonLite выходзіць</translation> <translation>Пачакайце, калі ласка SilentDragonXLite выходзіць</translation>
</message> </message>
<message> <message>
<location filename="../src/controller.cpp" line="2018"/> <location filename="../src/controller.cpp" line="2018"/>
@@ -2072,8 +2072,8 @@ Would you like to visit the releases page?</source>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="666"/> <location filename="../src/firsttimewizard.cpp" line="666"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation>SilentDragonLite патрабуе 24 словы для аднаўлення кашалька</translation> <translation>SilentDragonXLite патрабуе 24 словы для аднаўлення кашалька</translation>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="678"/> <location filename="../src/firsttimewizard.cpp" line="678"/>
@@ -2265,7 +2265,7 @@ Would you like to visit the releases page?</source>
<message> <message>
<location filename="../src/about.ui" line="14"/> <location filename="../src/about.ui" line="14"/>
<source>About</source> <source>About</source>
<translation>Аб SilentDragonLite</translation> <translation>Аб SilentDragonXLite</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -2454,7 +2454,7 @@ p, li { white-space: pre-wrap; }
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt; &lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; } p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Ubuntu&apos;; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt; &lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Ubuntu&apos;; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;Ubuntu&apos;; font-size:16pt;&quot;&gt;Калі ласка, выкарыстоўвайце наступны hush-адрас для пераводу сродкаў на SilentDragonLite. Вы можаце скапіяваць адрас альбо скарыстаць QR-код. &lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation> &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;Ubuntu&apos;; font-size:16pt;&quot;&gt;Калі ласка, выкарыстоўвайце наступны hush-адрас для пераводу сродкаў на SilentDragonXLite. Вы можаце скапіяваць адрас альбо скарыстаць QR-код. &lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message> </message>
<message> <message>
<location filename="../src/deposithush.ui" line="134"/> <location filename="../src/deposithush.ui" line="134"/>

View File

@@ -82,12 +82,12 @@
<name>ConnectionDialog</name> <name>ConnectionDialog</name>
<message> <message>
<source>silentdragon</source> <source>silentdragon</source>
<translation type="vanished">SilentDragonLite</translation> <translation type="vanished">SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/connection.ui" line="29"/> <location filename="../src/connection.ui" line="29"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite</translation> <translation>SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/connection.ui" line="70"/> <location filename="../src/connection.ui" line="70"/>
@@ -303,7 +303,7 @@ p, li { white-space: pre-wrap; }
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<source>silentdragon</source> <source>silentdragon</source>
<translation type="vanished">SilentDragonLite</translation> <translation type="vanished">SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="566"/> <location filename="../src/mainwindow.ui" line="566"/>
@@ -556,8 +556,8 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="51"/> <location filename="../src/mainwindow.ui" line="51"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite</translation> <translation>SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="1592"/> <location filename="../src/mainwindow.ui" line="1592"/>
@@ -877,23 +877,23 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<source>Please restart Silentdragonlite to have the theme apply</source> <source>Please restart Silentdragonlite to have the theme apply</source>
<translation type="vanished">Bitte starten sie SilentDragonLite neu</translation> <translation type="vanished">Bitte starten sie SilentDragonXLite neu</translation>
</message> </message>
<message> <message>
<source>You&apos;re using an external hushd. Please restart hushd with -rescan</source> <source>You&apos;re using an external hushd. Please restart hushd with -rescan</source>
<translation type="vanished">Starte SilentDragonLite neu</translation> <translation type="vanished">Starte SilentDragonXLite neu</translation>
</message> </message>
<message> <message>
<source>Some feedback about SilentDragonlite or Hush...</source> <source>Some feedback about SilentDragonlite or Hush...</source>
<translation type="vanished">Etwas Feedback über SilentDragonLite...</translation> <translation type="vanished">Etwas Feedback über SilentDragonXLite...</translation>
</message> </message>
<message> <message>
<source>Send Duke some private and shielded feedback about</source> <source>Send Duke some private and shielded feedback about</source>
<translation type="vanished">Sende DenioD anonym Feedback über</translation> <translation type="vanished">Sende DenioD anonym Feedback über</translation>
</message> </message>
<message> <message>
<source> or SilentDragonLite</source> <source> or SilentDragonXLite</source>
<translation type="vanished"> oder SilentDragonLite</translation> <translation type="vanished"> oder SilentDragonXLite</translation>
</message> </message>
<message> <message>
<source>Send DenioD some private and shielded feedback about</source> <source>Send DenioD some private and shielded feedback about</source>
@@ -952,12 +952,12 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<source>Wallet is already encrypted</source> <source>Wallet is already encrypted</source>
<translation type="vanished">SilentDragonLite ist bereits verschlüsselt</translation> <translation type="vanished">SilentDragonXLite ist bereits verschlüsselt</translation>
</message> </message>
<message> <message>
<source>Your wallet is already encrypted with a password. <source>Your wallet is already encrypted with a password.
Please use &apos;Remove Wallet Encryption&apos; if you want to remove the wallet encryption.</source> Please use &apos;Remove Wallet Encryption&apos; if you want to remove the wallet encryption.</source>
<translation type="vanished">SilentDragonLite ist bereits mit einem Passwort verschlüsselt. Bitte benutzen Sie die Funktion &apos;Verschlüsselung entfernen&apos;.</translation> <translation type="vanished">SilentDragonXLite ist bereits mit einem Passwort verschlüsselt. Bitte benutzen Sie die Funktion &apos;Verschlüsselung entfernen&apos;.</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="555"/> <location filename="../src/mainwindow.cpp" line="555"/>
@@ -972,11 +972,11 @@ Please use &apos;Remove Wallet Encryption&apos; if you want to remove the wallet
</message> </message>
<message> <message>
<source>Wallet Encrypted</source> <source>Wallet Encrypted</source>
<translation type="vanished">SilentDragonLite verschlüsselt</translation> <translation type="vanished">SilentDragonXLite verschlüsselt</translation>
</message> </message>
<message> <message>
<source>Your wallet was successfully encrypted! The password will be needed to send funds or export private keys.</source> <source>Your wallet was successfully encrypted! The password will be needed to send funds or export private keys.</source>
<translation type="vanished">SilentDragonLite wurde erfolgreich verschlüsselt. Sie benötigen Ihr Passwort um Zahlungen zu senden oder Ihre private Keys zu exportieren.</translation> <translation type="vanished">SilentDragonXLite wurde erfolgreich verschlüsselt. Sie benötigen Ihr Passwort um Zahlungen zu senden oder Ihre private Keys zu exportieren.</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="616"/> <location filename="../src/mainwindow.cpp" line="616"/>
@@ -987,15 +987,15 @@ Please use &apos;Remove Wallet Encryption&apos; if you want to remove the wallet
<message> <message>
<location filename="../src/mainwindow.cpp" line="537"/> <location filename="../src/mainwindow.cpp" line="537"/>
<source>Wallet is not encrypted</source> <source>Wallet is not encrypted</source>
<translation>SilentDragonLite ist nicht verschlüsselt</translation> <translation>SilentDragonXLite ist nicht verschlüsselt</translation>
</message> </message>
<message> <message>
<source>Your wallet is not encrypted with a password.</source> <source>Your wallet is not encrypted with a password.</source>
<translation type="vanished">SilentDragonLite ist nicht mit einem Passwort verschlüsselt.</translation> <translation type="vanished">SilentDragonXLite ist nicht mit einem Passwort verschlüsselt.</translation>
</message> </message>
<message> <message>
<source>Wallet Password</source> <source>Wallet Password</source>
<translation type="vanished">SilentDragonLite Passwort</translation> <translation type="vanished">SilentDragonXLite Passwort</translation>
</message> </message>
<message> <message>
<source>Please enter your wallet password</source> <source>Please enter your wallet password</source>
@@ -1003,11 +1003,11 @@ Please use &apos;Remove Wallet Encryption&apos; if you want to remove the wallet
</message> </message>
<message> <message>
<source>Wallet Decryption Failed</source> <source>Wallet Decryption Failed</source>
<translation type="vanished">SilentDragonLite konnte nicht entschlüsselt werden</translation> <translation type="vanished">SilentDragonXLite konnte nicht entschlüsselt werden</translation>
</message> </message>
<message> <message>
<source>Please enter a password to decrypt your wallet!</source> <source>Please enter a password to decrypt your wallet!</source>
<translation type="vanished">Bitte geben Sie das Passwort ein, um SilentDragonLite zu entschlüsseln!</translation> <translation type="vanished">Bitte geben Sie das Passwort ein, um SilentDragonXLite zu entschlüsseln!</translation>
</message> </message>
<message> <message>
<source>Wallet Encryption Removed</source> <source>Wallet Encryption Removed</source>
@@ -1015,7 +1015,7 @@ Please use &apos;Remove Wallet Encryption&apos; if you want to remove the wallet
</message> </message>
<message> <message>
<source>Your wallet was successfully decrypted! You will no longer need a password to send funds or export private keys.</source> <source>Your wallet was successfully decrypted! You will no longer need a password to send funds or export private keys.</source>
<translation type="vanished">SilentDragonLite wurde erfolgreich entschlüsselt. Sie benötigen Ihr Passwort nicht mehr.</translation> <translation type="vanished">SilentDragonXLite wurde erfolgreich entschlüsselt. Sie benötigen Ihr Passwort nicht mehr.</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="771"/> <location filename="../src/mainwindow.cpp" line="771"/>
@@ -1034,13 +1034,13 @@ Please use &apos;Remove Wallet Encryption&apos; if you want to remove the wallet
<translation>Die übernahme der Änderung kann ein paar sekunden dauern.</translation> <translation>Die übernahme der Änderung kann ein paar sekunden dauern.</translation>
</message> </message>
<message> <message>
<source>Please restart SilentDragonLite to have new currencies apply</source> <source>Please restart SilentDragonXLite to have new currencies apply</source>
<translation type="vanished">Bitte starten sie SilentDragonLite neu</translation> <translation type="vanished">Bitte starten sie SilentDragonXLite neu</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="1177"/> <location filename="../src/mainwindow.cpp" line="1177"/>
<source>This is your wallet seed. Please back it up carefully and safely.</source> <source>This is your wallet seed. Please back it up carefully and safely.</source>
<translation>Dies ist Ihr SilentDragonLite Seed. Bitte sichern Sie ihn sorgfältig.</translation> <translation>Dies ist Ihr SilentDragonXLite Seed. Bitte sichern Sie ihn sorgfältig.</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="1185"/> <location filename="../src/mainwindow.cpp" line="1185"/>
@@ -1070,7 +1070,7 @@ Please use &apos;Remove Wallet Encryption&apos; if you want to remove the wallet
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="187"/> <location filename="../src/mainwindow.cpp" line="187"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation type="unfinished">Der Seed benötigt 24 Wörter um das Wallet mit dem Seed wiederherzustellen</translation> <translation type="unfinished">Der Seed benötigt 24 Wörter um das Wallet mit dem Seed wiederherzustellen</translation>
</message> </message>
<message> <message>
@@ -1548,7 +1548,7 @@ Anmerkung: Sie bnötigen 2 Bestätigungen {1
</message> </message>
<message> <message>
<source>This is your new wallet&apos;s seed phrase. PLEASE BACK IT UP SECURELY.</source> <source>This is your new wallet&apos;s seed phrase. PLEASE BACK IT UP SECURELY.</source>
<translation type="vanished">Dies ist Ihr SilentDragonLite Seed. Bitte sichern Sie ihn sorgfältig.</translation> <translation type="vanished">Dies ist Ihr SilentDragonXLite Seed. Bitte sichern Sie ihn sorgfältig.</translation>
</message> </message>
<message> <message>
<location filename="../src/newseed.ui" line="20"/> <location filename="../src/newseed.ui" line="20"/>
@@ -1836,8 +1836,8 @@ Möchten Sie die Release Seite besuchen?</translation>
<message> <message>
<location filename="../src/controller.cpp" line="2017"/> <location filename="../src/controller.cpp" line="2017"/>
<location filename="../src/controller.cpp" line="2025"/> <location filename="../src/controller.cpp" line="2025"/>
<source>Please wait for SilentDragonLite to exit</source> <source>Please wait for SilentDragonXLite to exit</source>
<translation>Bitte warten Sie bis SilentDragonLite beendet ist</translation> <translation>Bitte warten Sie bis SilentDragonXLite beendet ist</translation>
</message> </message>
<message> <message>
<location filename="../src/controller.cpp" line="2018"/> <location filename="../src/controller.cpp" line="2018"/>
@@ -1924,7 +1924,7 @@ Möchten Sie die Release Seite besuchen?</translation>
<location filename="../src/websockets.cpp" line="695"/> <location filename="../src/websockets.cpp" line="695"/>
<location filename="../src/websockets.cpp" line="783"/> <location filename="../src/websockets.cpp" line="783"/>
<source>Node is still syncing.</source> <source>Node is still syncing.</source>
<translation>SilentDragonLite synchronisiert noch.</translation> <translation>SilentDragonXLite synchronisiert noch.</translation>
</message> </message>
<message> <message>
<location filename="../src/websockets.cpp" line="716"/> <location filename="../src/websockets.cpp" line="716"/>
@@ -2078,7 +2078,7 @@ Möchten Sie die Release Seite besuchen?</translation>
<message> <message>
<location filename="../src/recurringmultiple.ui" line="44"/> <location filename="../src/recurringmultiple.ui" line="44"/>
<source>How should silentdragon proceed?</source> <source>How should silentdragon proceed?</source>
<translation>Wie soll SilentDragonLite die Zahlung verarbeiten?</translation> <translation>Wie soll SilentDragonXLite die Zahlung verarbeiten?</translation>
</message> </message>
<message> <message>
<location filename="../src/recurringmultiple.ui" line="51"/> <location filename="../src/recurringmultiple.ui" line="51"/>
@@ -2318,7 +2318,7 @@ Möchten Sie die Release Seite besuchen?</translation>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="666"/> <location filename="../src/firsttimewizard.cpp" line="666"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation>Der Seed benötigt 24 Wörter um das Wallet mit dem Seed wiederherzustellen</translation> <translation>Der Seed benötigt 24 Wörter um das Wallet mit dem Seed wiederherzustellen</translation>
</message> </message>
<message> <message>
@@ -2671,7 +2671,7 @@ Möchten Sie die Release Seite besuchen?</translation>
<message> <message>
<location filename="../src/confirm.ui" line="164"/> <location filename="../src/confirm.ui" line="164"/>
<source>You are sending a transaction while your node is still syncing. This may not work.</source> <source>You are sending a transaction while your node is still syncing. This may not work.</source>
<translation>SilentDragonLite sollte erst vollständig synchronisiert sein, bevor Sie eine Zahlung tätigen.</translation> <translation>SilentDragonXLite sollte erst vollständig synchronisiert sein, bevor Sie eine Zahlung tätigen.</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -2792,7 +2792,7 @@ li.checked::marker { content: &quot;\2612&quot;; }
<message> <message>
<location filename="../src/encryption.ui" line="32"/> <location filename="../src/encryption.ui" line="32"/>
<source>Encrypt Your Wallet</source> <source>Encrypt Your Wallet</source>
<translation>SilentDragonLite verschlüsseln</translation> <translation>SilentDragonXLite verschlüsseln</translation>
</message> </message>
<message> <message>
<location filename="../src/encryption.ui" line="38"/> <location filename="../src/encryption.ui" line="38"/>

View File

@@ -86,7 +86,7 @@
<name>ConnectionDialog</name> <name>ConnectionDialog</name>
<message> <message>
<location filename="../src/connection.ui" line="29"/> <location filename="../src/connection.ui" line="29"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>DragónSilenciosoLigero</translation> <translation>DragónSilenciosoLigero</translation>
</message> </message>
<message> <message>
@@ -364,7 +364,7 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="51"/> <location filename="../src/mainwindow.ui" line="51"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>DragónSilenciosoLigero</translation> <translation>DragónSilenciosoLigero</translation>
</message> </message>
<message> <message>
@@ -854,7 +854,7 @@ p, li { white-space: pre-wrap; }
<translation type="vanished">Algunos comentarios sobre Dragón silencioso ligero o Hush ...</translation> <translation type="vanished">Algunos comentarios sobre Dragón silencioso ligero o Hush ...</translation>
</message> </message>
<message> <message>
<source> or SilentDragonLite</source> <source> or SilentDragonXLite</source>
<translation type="vanished">o Dragón silencioso ligero</translation> <translation type="vanished">o Dragón silencioso ligero</translation>
</message> </message>
<message> <message>
@@ -1059,7 +1059,7 @@ Por favor use &apos;Eliminar la encriptacion de la billetera &apos;si desea elim
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="187"/> <location filename="../src/mainwindow.cpp" line="187"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation type="unfinished">Dragón silencioso ligero necesita 24 palabras para restaurar la billetera</translation> <translation type="unfinished">Dragón silencioso ligero necesita 24 palabras para restaurar la billetera</translation>
</message> </message>
<message> <message>
@@ -1785,7 +1785,7 @@ Would you like to visit the releases page?</source>
<message> <message>
<location filename="../src/controller.cpp" line="2017"/> <location filename="../src/controller.cpp" line="2017"/>
<location filename="../src/controller.cpp" line="2025"/> <location filename="../src/controller.cpp" line="2025"/>
<source>Please wait for SilentDragonLite to exit</source> <source>Please wait for SilentDragonXLite to exit</source>
<translation>Espere a que DragónSilenciosoLigero salga</translation> <translation>Espere a que DragónSilenciosoLigero salga</translation>
</message> </message>
<message> <message>
@@ -2271,7 +2271,7 @@ Would you like to visit the releases page?</source>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="666"/> <location filename="../src/firsttimewizard.cpp" line="666"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation>Dragón silencioso ligero necesita 24 palabras para restaurar la billetera</translation> <translation>Dragón silencioso ligero necesita 24 palabras para restaurar la billetera</translation>
</message> </message>
<message> <message>

View File

@@ -86,7 +86,7 @@
<name>ConnectionDialog</name> <name>ConnectionDialog</name>
<message> <message>
<location filename="../src/connection.ui" line="29"/> <location filename="../src/connection.ui" line="29"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>سایلنت دراگون سبک</translation> <translation>سایلنت دراگون سبک</translation>
</message> </message>
<message> <message>
@@ -303,7 +303,7 @@ p, li { white-space: pre-wrap; }
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../src/mainwindow.ui" line="51"/> <location filename="../src/mainwindow.ui" line="51"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>سایلنت دراگون سبک</translation> <translation>سایلنت دراگون سبک</translation>
</message> </message>
<message> <message>
@@ -943,7 +943,7 @@ Please use &apos;Remove Wallet Encryption&apos; if you want to remove the wallet
<translation>تغییر واحد پول</translation> <translation>تغییر واحد پول</translation>
</message> </message>
<message> <message>
<source>Please restart SilentDragonLite to have new currencies apply</source> <source>Please restart SilentDragonXLite to have new currencies apply</source>
<translation type="vanished">لطفا برای اعمال واحد پول جدید، سایلنت دراگون سبک خود را مجدداً اجرا کنید</translation> <translation type="vanished">لطفا برای اعمال واحد پول جدید، سایلنت دراگون سبک خود را مجدداً اجرا کنید</translation>
</message> </message>
<message> <message>
@@ -960,7 +960,7 @@ Please use &apos;Remove Wallet Encryption&apos; if you want to remove the wallet
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<source> or SilentDragonLite</source> <source> or SilentDragonXLite</source>
<translation type="vanished">یا سایلنت دراگون سبک</translation> <translation type="vanished">یا سایلنت دراگون سبک</translation>
</message> </message>
<message> <message>
@@ -1051,7 +1051,7 @@ Please use &apos;Remove Wallet Encryption&apos; if you want to remove the wallet
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="187"/> <location filename="../src/mainwindow.cpp" line="187"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation type="unfinished">سایلنت دراگون سبک برای بازیابی کیف پول، به 24 کلمه نیاز دارد</translation> <translation type="unfinished">سایلنت دراگون سبک برای بازیابی کیف پول، به 24 کلمه نیاز دارد</translation>
</message> </message>
<message> <message>
@@ -1807,7 +1807,7 @@ Would you like to visit the releases page?</source>
<message> <message>
<location filename="../src/controller.cpp" line="2017"/> <location filename="../src/controller.cpp" line="2017"/>
<location filename="../src/controller.cpp" line="2025"/> <location filename="../src/controller.cpp" line="2025"/>
<source>Please wait for SilentDragonLite to exit</source> <source>Please wait for SilentDragonXLite to exit</source>
<translation>لطفا تا خروج سایلنت دراگون سبک، منتظر بمانید</translation> <translation>لطفا تا خروج سایلنت دراگون سبک، منتظر بمانید</translation>
</message> </message>
<message> <message>
@@ -2293,7 +2293,7 @@ Would you like to visit the releases page?</source>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="666"/> <location filename="../src/firsttimewizard.cpp" line="666"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation>سایلنت دراگون سبک برای بازیابی کیف پول، به 24 کلمه نیاز دارد</translation> <translation>سایلنت دراگون سبک برای بازیابی کیف پول، به 24 کلمه نیاز دارد</translation>
</message> </message>
<message> <message>

View File

@@ -90,8 +90,8 @@
</message> </message>
<message> <message>
<location filename="../src/connection.ui" line="29"/> <location filename="../src/connection.ui" line="29"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite</translation> <translation>SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/connection.ui" line="70"/> <location filename="../src/connection.ui" line="70"/>
@@ -520,8 +520,8 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="51"/> <location filename="../src/mainwindow.ui" line="51"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite</translation> <translation>SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="678"/> <location filename="../src/mainwindow.ui" line="678"/>
@@ -1174,8 +1174,8 @@ Veuillez utiliser &quot;Supprimer le chiffrement du wallet&quot; si vous souhait
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="187"/> <location filename="../src/mainwindow.cpp" line="187"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation type="unfinished">SilentDragonLite a besoin de 24 mots pour restaurer son wallet</translation> <translation type="unfinished">SilentDragonXLite a besoin de 24 mots pour restaurer son wallet</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="198"/> <location filename="../src/mainwindow.cpp" line="198"/>
@@ -1289,7 +1289,7 @@ Veuillez utiliser &quot;Supprimer le chiffrement du wallet&quot; si vous souhait
</message> </message>
<message> <message>
<source>Please restart Silentdragonlite to have the theme apply</source> <source>Please restart Silentdragonlite to have the theme apply</source>
<translation type="vanished">Veuillez redémarrer SilentDragonLite pour aplliqué le thème.</translation> <translation type="vanished">Veuillez redémarrer SilentDragonXLite pour aplliqué le thème.</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="835"/> <location filename="../src/mainwindow.cpp" line="835"/>
@@ -1301,8 +1301,8 @@ Veuillez utiliser &quot;Supprimer le chiffrement du wallet&quot; si vous souhait
<translation type="vanished">Quelques commentaires sur SilentDragonlite ou Hush ...</translation> <translation type="vanished">Quelques commentaires sur SilentDragonlite ou Hush ...</translation>
</message> </message>
<message> <message>
<source> or SilentDragonLite</source> <source> or SilentDragonXLite</source>
<translation type="vanished"> ou SilentDragonLite</translation> <translation type="vanished"> ou SilentDragonXLite</translation>
</message> </message>
<message> <message>
<source>Send DenioD some private and shielded feedback about</source> <source>Send DenioD some private and shielded feedback about</source>
@@ -1980,8 +1980,8 @@ Voulez-vous visiter la page des nouvelles versions ?</translation>
<message> <message>
<location filename="../src/controller.cpp" line="2017"/> <location filename="../src/controller.cpp" line="2017"/>
<location filename="../src/controller.cpp" line="2025"/> <location filename="../src/controller.cpp" line="2025"/>
<source>Please wait for SilentDragonLite to exit</source> <source>Please wait for SilentDragonXLite to exit</source>
<translation>Merci d&apos;attendre la fermeture de SilentDragonLite</translation> <translation>Merci d&apos;attendre la fermeture de SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/controller.cpp" line="2018"/> <location filename="../src/controller.cpp" line="2018"/>
@@ -2659,8 +2659,8 @@ Vous avez soit des fonds non confirmés soit le solde est trop petit pour une mi
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="666"/> <location filename="../src/firsttimewizard.cpp" line="666"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation>SilentDragonLite a besoin de 24 mots pour restaurer son wallet</translation> <translation>SilentDragonXLite a besoin de 24 mots pour restaurer son wallet</translation>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="678"/> <location filename="../src/firsttimewizard.cpp" line="678"/>

View File

@@ -86,8 +86,8 @@
<name>ConnectionDialog</name> <name>ConnectionDialog</name>
<message> <message>
<location filename="../src/connection.ui" line="29"/> <location filename="../src/connection.ui" line="29"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite</translation> <translation>SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/connection.ui" line="70"/> <location filename="../src/connection.ui" line="70"/>
@@ -304,8 +304,8 @@ p, li { white-space: pre-wrap; }
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../src/mainwindow.ui" line="51"/> <location filename="../src/mainwindow.ui" line="51"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite</translation> <translation>SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="566"/> <location filename="../src/mainwindow.ui" line="566"/>
@@ -932,7 +932,7 @@ Molimo koristite &apos;Uklonite šifriranje novčanika&apos; ako želite uklonit
</message> </message>
<message> <message>
<source>Please restart Silentdragonlite to have the theme apply</source> <source>Please restart Silentdragonlite to have the theme apply</source>
<translation type="vanished">Molimo ponovno pokrenite SilentDragonLite ako želite primjeniti temu</translation> <translation type="vanished">Molimo ponovno pokrenite SilentDragonXLite ako želite primjeniti temu</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="835"/> <location filename="../src/mainwindow.cpp" line="835"/>
@@ -940,8 +940,8 @@ Molimo koristite &apos;Uklonite šifriranje novčanika&apos; ako želite uklonit
<translation>Razmjena valuta</translation> <translation>Razmjena valuta</translation>
</message> </message>
<message> <message>
<source>Please restart SilentDragonLite to have new currencies apply</source> <source>Please restart SilentDragonXLite to have new currencies apply</source>
<translation type="vanished">Molimo ponovno pokrenite SilentDragonLite ako želite primjeniti novu valutu</translation> <translation type="vanished">Molimo ponovno pokrenite SilentDragonXLite ako želite primjeniti novu valutu</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="835"/> <location filename="../src/mainwindow.cpp" line="835"/>
@@ -950,15 +950,15 @@ Molimo koristite &apos;Uklonite šifriranje novčanika&apos; ako želite uklonit
</message> </message>
<message> <message>
<source>Some feedback about SilentDragonlite or Hush...</source> <source>Some feedback about SilentDragonlite or Hush...</source>
<translation type="vanished">Neke povratne informaciej o SilentDragonLite ili Hush...</translation> <translation type="vanished">Neke povratne informaciej o SilentDragonXLite ili Hush...</translation>
</message> </message>
<message> <message>
<source>Send Duke some private and shielded feedback about</source> <source>Send Duke some private and shielded feedback about</source>
<translation type="vanished">Pošaljite Duke neku privatnu i zaštićenu povratnu informaciju</translation> <translation type="vanished">Pošaljite Duke neku privatnu i zaštićenu povratnu informaciju</translation>
</message> </message>
<message> <message>
<source> or SilentDragonLite</source> <source> or SilentDragonXLite</source>
<translation type="vanished"> ili SilentDragonLite</translation> <translation type="vanished"> ili SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="1011"/> <location filename="../src/mainwindow.cpp" line="1011"/>
@@ -1044,8 +1044,8 @@ Molimo koristite &apos;Uklonite šifriranje novčanika&apos; ako želite uklonit
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="187"/> <location filename="../src/mainwindow.cpp" line="187"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation type="unfinished">SilentDragonLite treba 24 riječi za obnovu novčanika</translation> <translation type="unfinished">SilentDragonXLite treba 24 riječi za obnovu novčanika</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="198"/> <location filename="../src/mainwindow.cpp" line="198"/>
@@ -1810,8 +1810,8 @@ Would you like to visit the releases page?</source>
<message> <message>
<location filename="../src/controller.cpp" line="2017"/> <location filename="../src/controller.cpp" line="2017"/>
<location filename="../src/controller.cpp" line="2025"/> <location filename="../src/controller.cpp" line="2025"/>
<source>Please wait for SilentDragonLite to exit</source> <source>Please wait for SilentDragonXLite to exit</source>
<translation>Molimo pričekajte da se SilentDragonLite zatvori</translation> <translation>Molimo pričekajte da se SilentDragonXLite zatvori</translation>
</message> </message>
<message> <message>
<location filename="../src/controller.cpp" line="2018"/> <location filename="../src/controller.cpp" line="2018"/>
@@ -2296,8 +2296,8 @@ Would you like to visit the releases page?</source>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="666"/> <location filename="../src/firsttimewizard.cpp" line="666"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation>SilentDragonLite treba 24 riječi za obnovu novčanika</translation> <translation>SilentDragonXLite treba 24 riječi za obnovu novčanika</translation>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="678"/> <location filename="../src/firsttimewizard.cpp" line="678"/>

View File

@@ -82,8 +82,8 @@
<name>ConnectionDialog</name> <name>ConnectionDialog</name>
<message> <message>
<location filename="../src/connection.ui" line="29"/> <location filename="../src/connection.ui" line="29"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite</translation> <translation>SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/connection.ui" line="70"/> <location filename="../src/connection.ui" line="70"/>
@@ -326,8 +326,8 @@ p, li { white-space: pre-wrap; }
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../src/mainwindow.ui" line="51"/> <location filename="../src/mainwindow.ui" line="51"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite</translation> <translation>SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="567"/> <location filename="../src/mainwindow.ui" line="567"/>
@@ -948,8 +948,8 @@ Mohon Gunakan &apos;Hapus Enkripsi Dompet&apos; Jika anda ingin menghapus Enkrip
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="207"/> <location filename="../src/mainwindow.cpp" line="207"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation type="unfinished">SilentDragonLite membutuhkan 24 kata untuk mengembalikan dompet</translation> <translation type="unfinished">SilentDragonXLite membutuhkan 24 kata untuk mengembalikan dompet</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="218"/> <location filename="../src/mainwindow.cpp" line="218"/>
@@ -993,8 +993,8 @@ Mohon Gunakan &apos;Hapus Enkripsi Dompet&apos; Jika anda ingin menghapus Enkrip
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="918"/> <location filename="../src/mainwindow.cpp" line="918"/>
<source> or SilentDragonLite</source> <source> or SilentDragonXLite</source>
<translation>atau SilentDragonLite</translation> <translation>atau SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="918"/> <location filename="../src/mainwindow.cpp" line="918"/>
@@ -1763,8 +1763,8 @@ Maukah anda mengunjungi laman pembaruan ini</translation>
<message> <message>
<location filename="../src/controller.cpp" line="2042"/> <location filename="../src/controller.cpp" line="2042"/>
<location filename="../src/controller.cpp" line="2050"/> <location filename="../src/controller.cpp" line="2050"/>
<source>Please wait for SilentDragonLite to exit</source> <source>Please wait for SilentDragonXLite to exit</source>
<translation>Mohon tunggu untuk SilentDragonLite untuk keluar</translation> <translation>Mohon tunggu untuk SilentDragonXLite untuk keluar</translation>
</message> </message>
<message> <message>
<location filename="../src/controller.cpp" line="2043"/> <location filename="../src/controller.cpp" line="2043"/>
@@ -2236,8 +2236,8 @@ Maukah anda mengunjungi laman pembaruan ini</translation>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="643"/> <location filename="../src/firsttimewizard.cpp" line="643"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation>SilentDragonLite membutuhkan 24 kata untuk mengembalikan dompet</translation> <translation>SilentDragonXLite membutuhkan 24 kata untuk mengembalikan dompet</translation>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="653"/> <location filename="../src/firsttimewizard.cpp" line="653"/>

View File

@@ -90,7 +90,7 @@
</message> </message>
<message> <message>
<location filename="../src/connection.ui" line="29"/> <location filename="../src/connection.ui" line="29"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -509,7 +509,7 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="51"/> <location filename="../src/mainwindow.ui" line="51"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -1017,7 +1017,7 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="187"/> <location filename="../src/mainwindow.cpp" line="187"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -1756,7 +1756,7 @@ Would you like to visit the releases page?</source>
<message> <message>
<location filename="../src/controller.cpp" line="2017"/> <location filename="../src/controller.cpp" line="2017"/>
<location filename="../src/controller.cpp" line="2025"/> <location filename="../src/controller.cpp" line="2025"/>
<source>Please wait for SilentDragonLite to exit</source> <source>Please wait for SilentDragonXLite to exit</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -2416,7 +2416,7 @@ Avete fondi non confermati o il saldo è troppo basso per una migrazione automat
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="666"/> <location filename="../src/firsttimewizard.cpp" line="666"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>

View File

@@ -82,7 +82,7 @@
<name>ConnectionDialog</name> <name>ConnectionDialog</name>
<message> <message>
<location filename="../src/connection.ui" line="29"/> <location filename="../src/connection.ui" line="29"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>Silent Dragon Lite</translation> <translation>Silent Dragon Lite</translation>
</message> </message>
<message> <message>
@@ -508,7 +508,7 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="51"/> <location filename="../src/mainwindow.ui" line="51"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>Silent Dragon Lite</translation> <translation>Silent Dragon Lite</translation>
</message> </message>
<message> <message>
@@ -912,7 +912,7 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="187"/> <location filename="../src/mainwindow.cpp" line="187"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation>Silent Dragon Lite heeft 24 woorden nodig om de wallet te herstellen</translation> <translation>Silent Dragon Lite heeft 24 woorden nodig om de wallet te herstellen</translation>
</message> </message>
<message> <message>
@@ -1608,7 +1608,7 @@ Wilt u de releasepagina bezoeken?</translation>
<message> <message>
<location filename="../src/controller.cpp" line="2017"/> <location filename="../src/controller.cpp" line="2017"/>
<location filename="../src/controller.cpp" line="2025"/> <location filename="../src/controller.cpp" line="2025"/>
<source>Please wait for SilentDragonLite to exit</source> <source>Please wait for SilentDragonXLite to exit</source>
<translation>Wacht totdat Silent Dragon Lite afgesloten is</translation> <translation>Wacht totdat Silent Dragon Lite afgesloten is</translation>
</message> </message>
<message> <message>
@@ -2066,7 +2066,7 @@ Wilt u de releasepagina bezoeken?</translation>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="666"/> <location filename="../src/firsttimewizard.cpp" line="666"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation>Silent Dragon Lite heeft 24 woorden nodig om de wallet te herstellen</translation> <translation>Silent Dragon Lite heeft 24 woorden nodig om de wallet te herstellen</translation>
</message> </message>
<message> <message>

View File

@@ -82,8 +82,8 @@
<name>ConnectionDialog</name> <name>ConnectionDialog</name>
<message> <message>
<location filename="../src/connection.ui" line="29"/> <location filename="../src/connection.ui" line="29"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite</translation> <translation>SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/connection.ui" line="70"/> <location filename="../src/connection.ui" line="70"/>
@@ -514,8 +514,8 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="51"/> <location filename="../src/mainwindow.ui" line="51"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite</translation> <translation>SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="1592"/> <location filename="../src/mainwindow.ui" line="1592"/>
@@ -918,8 +918,8 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="187"/> <location filename="../src/mainwindow.cpp" line="187"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation>SilentDragonLite potrzebuje 24 słów, aby przywrócić portfel</translation> <translation>SilentDragonXLite potrzebuje 24 słów, aby przywrócić portfel</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="198"/> <location filename="../src/mainwindow.cpp" line="198"/>
@@ -1611,8 +1611,8 @@ Czy chciałbyś odwiedzić stronę wydań?</translation>
<message> <message>
<location filename="../src/controller.cpp" line="2017"/> <location filename="../src/controller.cpp" line="2017"/>
<location filename="../src/controller.cpp" line="2025"/> <location filename="../src/controller.cpp" line="2025"/>
<source>Please wait for SilentDragonLite to exit</source> <source>Please wait for SilentDragonXLite to exit</source>
<translation>Proszę poczekać na SilentDragonLite zakończy pracę</translation> <translation>Proszę poczekać na SilentDragonXLite zakończy pracę</translation>
</message> </message>
<message> <message>
<location filename="../src/controller.cpp" line="2018"/> <location filename="../src/controller.cpp" line="2018"/>
@@ -2069,8 +2069,8 @@ Czy chciałbyś odwiedzić stronę wydań?</translation>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="666"/> <location filename="../src/firsttimewizard.cpp" line="666"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation>SilentDragonLite potrzebuje 24 słów, aby przywrócić portfel</translation> <translation>SilentDragonXLite potrzebuje 24 słów, aby przywrócić portfel</translation>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="678"/> <location filename="../src/firsttimewizard.cpp" line="678"/>
@@ -2262,7 +2262,7 @@ Czy chciałbyś odwiedzić stronę wydań?</translation>
<message> <message>
<location filename="../src/about.ui" line="14"/> <location filename="../src/about.ui" line="14"/>
<source>About</source> <source>About</source>
<translation>O SilentDragonLite</translation> <translation>O SilentDragonXLite</translation>
</message> </message>
</context> </context>
<context> <context>
@@ -2451,7 +2451,7 @@ p, li { white-space: pre-wrap; }
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt; &lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; } p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Ubuntu&apos;; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt; &lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Ubuntu&apos;; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;Ubuntu&apos;; font-size:16pt;&quot;&gt;Prosimy o użycie następującego hush adresu do przelewu środków na SilentDragonLite. Można skopiować adres lub użyć kodu QR. &lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation> &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;Ubuntu&apos;; font-size:16pt;&quot;&gt;Prosimy o użycie następującego hush adresu do przelewu środków na SilentDragonXLite. Można skopiować adres lub użyć kodu QR. &lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message> </message>
<message> <message>
<location filename="../src/deposithush.ui" line="134"/> <location filename="../src/deposithush.ui" line="134"/>

View File

@@ -90,8 +90,8 @@
</message> </message>
<message> <message>
<location filename="../src/connection.ui" line="29"/> <location filename="../src/connection.ui" line="29"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite</translation> <translation>SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/connection.ui" line="70"/> <location filename="../src/connection.ui" line="70"/>
@@ -703,8 +703,8 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="51"/> <location filename="../src/mainwindow.ui" line="51"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite</translation> <translation>SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="744"/> <location filename="../src/mainwindow.ui" line="744"/>
@@ -956,8 +956,8 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="187"/> <location filename="../src/mainwindow.cpp" line="187"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation type="unfinished">SilentDragonLite precisa de 24 palavras para recuperar a carteira</translation> <translation type="unfinished">SilentDragonXLite precisa de 24 palavras para recuperar a carteira</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="198"/> <location filename="../src/mainwindow.cpp" line="198"/>
@@ -1252,7 +1252,7 @@ Por favor usa &apos;Desencriptar carteira&apos; se quiser remover a encriptaçã
</message> </message>
<message> <message>
<source>Please restart Silentdragonlite to have the theme apply</source> <source>Please restart Silentdragonlite to have the theme apply</source>
<translation type="vanished">Por favor reinicie a SilentDragonLite para aplicar o tema</translation> <translation type="vanished">Por favor reinicie a SilentDragonXLite para aplicar o tema</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="835"/> <location filename="../src/mainwindow.cpp" line="835"/>
@@ -1264,8 +1264,8 @@ Por favor usa &apos;Desencriptar carteira&apos; se quiser remover a encriptaçã
<translation type="vanished">Alguma sugestão acerca da SilentDragonlite ou Hush...</translation> <translation type="vanished">Alguma sugestão acerca da SilentDragonlite ou Hush...</translation>
</message> </message>
<message> <message>
<source> or SilentDragonLite</source> <source> or SilentDragonXLite</source>
<translation type="vanished">ou SilentDragonLite</translation> <translation type="vanished">ou SilentDragonXLite</translation>
</message> </message>
<message> <message>
<source>Send DenioD some private and shielded feedback about</source> <source>Send DenioD some private and shielded feedback about</source>
@@ -1924,8 +1924,8 @@ Would you like to visit the releases page?</source>
<message> <message>
<location filename="../src/controller.cpp" line="2017"/> <location filename="../src/controller.cpp" line="2017"/>
<location filename="../src/controller.cpp" line="2025"/> <location filename="../src/controller.cpp" line="2025"/>
<source>Please wait for SilentDragonLite to exit</source> <source>Please wait for SilentDragonXLite to exit</source>
<translation>Por favor aguarde pela SilentDragonLite terminar</translation> <translation>Por favor aguarde pela SilentDragonXLite terminar</translation>
</message> </message>
<message> <message>
<location filename="../src/controller.cpp" line="2018"/> <location filename="../src/controller.cpp" line="2018"/>
@@ -1935,7 +1935,7 @@ Would you like to visit the releases page?</source>
</message> </message>
<message> <message>
<source>Please wait for silentdragon to exit</source> <source>Please wait for silentdragon to exit</source>
<translation type="vanished">Por favor aguarde pela SilentDragonLite terminar</translation> <translation type="vanished">Por favor aguarde pela SilentDragonXLite terminar</translation>
</message> </message>
<message> <message>
<source>Waiting for hushd to exit</source> <source>Waiting for hushd to exit</source>
@@ -2604,8 +2604,8 @@ Você possui fundos não confirmados ou o saldo é muito baixo para uma migraç
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="666"/> <location filename="../src/firsttimewizard.cpp" line="666"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation>SilentDragonLite precisa de 24 palavras para recuperar a carteira</translation> <translation>SilentDragonXLite precisa de 24 palavras para recuperar a carteira</translation>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="678"/> <location filename="../src/firsttimewizard.cpp" line="678"/>

View File

@@ -82,8 +82,8 @@
<name>ConnectionDialog</name> <name>ConnectionDialog</name>
<message> <message>
<location filename="../src/connection.ui" line="29"/> <location filename="../src/connection.ui" line="29"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite</translation> <translation>SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/connection.ui" line="70"/> <location filename="../src/connection.ui" line="70"/>
@@ -326,8 +326,8 @@ p, li { white-space: pre-wrap; }
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../src/mainwindow.ui" line="51"/> <location filename="../src/mainwindow.ui" line="51"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite</translation> <translation>SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="567"/> <location filename="../src/mainwindow.ui" line="567"/>
@@ -933,7 +933,7 @@ Rugam sa folositi &apos;Eliminati Criptarea Portofelului&apos; daca doriti sa el
<message> <message>
<location filename="../src/mainwindow.cpp" line="916"/> <location filename="../src/mainwindow.cpp" line="916"/>
<source>Some feedback about SilentDragonlite or Hush...</source> <source>Some feedback about SilentDragonlite or Hush...</source>
<translation>Feedback despre SilentDragonLite sau Hush...</translation> <translation>Feedback despre SilentDragonXLite sau Hush...</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="832"/> <location filename="../src/mainwindow.cpp" line="832"/>
@@ -948,8 +948,8 @@ Rugam sa folositi &apos;Eliminati Criptarea Portofelului&apos; daca doriti sa el
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="207"/> <location filename="../src/mainwindow.cpp" line="207"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation type="unfinished">SilentDragonLite are nevoie de semnatura de 24 de cuvinte pentru restabilirea portofelului</translation> <translation type="unfinished">SilentDragonXLite are nevoie de semnatura de 24 de cuvinte pentru restabilirea portofelului</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="218"/> <location filename="../src/mainwindow.cpp" line="218"/>
@@ -993,8 +993,8 @@ Rugam sa folositi &apos;Eliminati Criptarea Portofelului&apos; daca doriti sa el
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="918"/> <location filename="../src/mainwindow.cpp" line="918"/>
<source> or SilentDragonLite</source> <source> or SilentDragonXLite</source>
<translation>sau SilentDragonLite</translation> <translation>sau SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="918"/> <location filename="../src/mainwindow.cpp" line="918"/>
@@ -1755,8 +1755,8 @@ Doriti sa vizitati pagina veriunii?</translation>
<message> <message>
<location filename="../src/controller.cpp" line="2042"/> <location filename="../src/controller.cpp" line="2042"/>
<location filename="../src/controller.cpp" line="2050"/> <location filename="../src/controller.cpp" line="2050"/>
<source>Please wait for SilentDragonLite to exit</source> <source>Please wait for SilentDragonXLite to exit</source>
<translation>Rugam sa asteptati pina ce SilentDragonLite sa o sa iasa</translation> <translation>Rugam sa asteptati pina ce SilentDragonXLite sa o sa iasa</translation>
</message> </message>
<message> <message>
<location filename="../src/controller.cpp" line="2043"/> <location filename="../src/controller.cpp" line="2043"/>
@@ -2228,8 +2228,8 @@ Doriti sa vizitati pagina veriunii?</translation>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="643"/> <location filename="../src/firsttimewizard.cpp" line="643"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation>SilentDragonLite are nevoie de semnatura de 24 de cuvinte pentru restabilirea portofelului</translation> <translation>SilentDragonXLite are nevoie de semnatura de 24 de cuvinte pentru restabilirea portofelului</translation>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="653"/> <location filename="../src/firsttimewizard.cpp" line="653"/>

View File

@@ -82,8 +82,8 @@
<name>ConnectionDialog</name> <name>ConnectionDialog</name>
<message> <message>
<location filename="../src/connection.ui" line="29"/> <location filename="../src/connection.ui" line="29"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite</translation> <translation>SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/connection.ui" line="70"/> <location filename="../src/connection.ui" line="70"/>
@@ -478,8 +478,8 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="51"/> <location filename="../src/mainwindow.ui" line="51"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite</translation> <translation>SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="678"/> <location filename="../src/mainwindow.ui" line="678"/>
@@ -903,8 +903,8 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="187"/> <location filename="../src/mainwindow.cpp" line="187"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation>SilentDragonLite требует 24 слова для восстановления кошелька</translation> <translation>SilentDragonXLite требует 24 слова для восстановления кошелька</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="198"/> <location filename="../src/mainwindow.cpp" line="198"/>
@@ -1475,8 +1475,8 @@ Would you like to visit the releases page?</source>
<message> <message>
<location filename="../src/controller.cpp" line="2017"/> <location filename="../src/controller.cpp" line="2017"/>
<location filename="../src/controller.cpp" line="2025"/> <location filename="../src/controller.cpp" line="2025"/>
<source>Please wait for SilentDragonLite to exit</source> <source>Please wait for SilentDragonXLite to exit</source>
<translation>Пожалуйста подождите SilentDragonLite для выхода</translation> <translation>Пожалуйста подождите SilentDragonXLite для выхода</translation>
</message> </message>
<message> <message>
<location filename="../src/controller.cpp" line="2018"/> <location filename="../src/controller.cpp" line="2018"/>
@@ -2072,8 +2072,8 @@ Would you like to visit the releases page?</source>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="666"/> <location filename="../src/firsttimewizard.cpp" line="666"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation>SilentDragonLite нужно 24 слова для восстановления кошелька</translation> <translation>SilentDragonXLite нужно 24 слова для восстановления кошелька</translation>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="678"/> <location filename="../src/firsttimewizard.cpp" line="678"/>
@@ -2454,7 +2454,7 @@ p, li { white-space: pre-wrap; }
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt; &lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; } p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Ubuntu&apos;; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt; &lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;Ubuntu&apos;; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;Ubuntu&apos;; font-size:16pt;&quot;&gt;Используйте следующий hush адрес для перевода средств в SilentDragonLite. Вы можете скопировать адрес или использовать QR-код. &lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation> &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:&apos;Ubuntu&apos;; font-size:16pt;&quot;&gt;Используйте следующий hush адрес для перевода средств в SilentDragonXLite. Вы можете скопировать адрес или использовать QR-код. &lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message> </message>
<message> <message>
<location filename="../src/deposithush.ui" line="134"/> <location filename="../src/deposithush.ui" line="134"/>

View File

@@ -86,8 +86,8 @@
<name>ConnectionDialog</name> <name>ConnectionDialog</name>
<message> <message>
<location filename="../src/connection.ui" line="29"/> <location filename="../src/connection.ui" line="29"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite</translation> <translation>SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/connection.ui" line="70"/> <location filename="../src/connection.ui" line="70"/>
@@ -304,8 +304,8 @@ p, li { white-space: pre-wrap; }
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../src/mainwindow.ui" line="51"/> <location filename="../src/mainwindow.ui" line="51"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite</translation> <translation>SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="566"/> <location filename="../src/mainwindow.ui" line="566"/>
@@ -932,7 +932,7 @@ Molimo koristite &apos;Uklonite šifrovanje novčanika&apos; ako želite uklonit
</message> </message>
<message> <message>
<source>Please restart Silentdragonlite to have the theme apply</source> <source>Please restart Silentdragonlite to have the theme apply</source>
<translation type="vanished">Molimo ponovo pokrenite SilentDragonLite ako želite primeniti temu</translation> <translation type="vanished">Molimo ponovo pokrenite SilentDragonXLite ako želite primeniti temu</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="835"/> <location filename="../src/mainwindow.cpp" line="835"/>
@@ -940,8 +940,8 @@ Molimo koristite &apos;Uklonite šifrovanje novčanika&apos; ako želite uklonit
<translation>Razmena valuta</translation> <translation>Razmena valuta</translation>
</message> </message>
<message> <message>
<source>Please restart SilentDragonLite to have new currencies apply</source> <source>Please restart SilentDragonXLite to have new currencies apply</source>
<translation type="vanished">Molimo ponovo pokrenite SilentDragonLite ako želite primeniti novu valutu</translation> <translation type="vanished">Molimo ponovo pokrenite SilentDragonXLite ako želite primeniti novu valutu</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="835"/> <location filename="../src/mainwindow.cpp" line="835"/>
@@ -950,15 +950,15 @@ Molimo koristite &apos;Uklonite šifrovanje novčanika&apos; ako želite uklonit
</message> </message>
<message> <message>
<source>Some feedback about SilentDragonlite or Hush...</source> <source>Some feedback about SilentDragonlite or Hush...</source>
<translation type="vanished">Neke povratne informacije o SilentDragonLite ili Hush...</translation> <translation type="vanished">Neke povratne informacije o SilentDragonXLite ili Hush...</translation>
</message> </message>
<message> <message>
<source>Send Duke some private and shielded feedback about</source> <source>Send Duke some private and shielded feedback about</source>
<translation type="vanished">Pošaljite Duke neku privatnu i zaštićenu povratnu informaciju</translation> <translation type="vanished">Pošaljite Duke neku privatnu i zaštićenu povratnu informaciju</translation>
</message> </message>
<message> <message>
<source> or SilentDragonLite</source> <source> or SilentDragonXLite</source>
<translation type="vanished"> ili SilentDragonLite</translation> <translation type="vanished"> ili SilentDragonXLite</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="1011"/> <location filename="../src/mainwindow.cpp" line="1011"/>
@@ -1044,8 +1044,8 @@ Molimo koristite &apos;Uklonite šifrovanje novčanika&apos; ako želite uklonit
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="187"/> <location filename="../src/mainwindow.cpp" line="187"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation type="unfinished">SilentDragonLite treba 24 reči za obnovu novčanika</translation> <translation type="unfinished">SilentDragonXLite treba 24 reči za obnovu novčanika</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="198"/> <location filename="../src/mainwindow.cpp" line="198"/>
@@ -1810,8 +1810,8 @@ Would you like to visit the releases page?</source>
<message> <message>
<location filename="../src/controller.cpp" line="2017"/> <location filename="../src/controller.cpp" line="2017"/>
<location filename="../src/controller.cpp" line="2025"/> <location filename="../src/controller.cpp" line="2025"/>
<source>Please wait for SilentDragonLite to exit</source> <source>Please wait for SilentDragonXLite to exit</source>
<translation>Molimo pričekajte da se SilentDragonLite zatvori</translation> <translation>Molimo pričekajte da se SilentDragonXLite zatvori</translation>
</message> </message>
<message> <message>
<location filename="../src/controller.cpp" line="2018"/> <location filename="../src/controller.cpp" line="2018"/>
@@ -2296,8 +2296,8 @@ Would you like to visit the releases page?</source>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="666"/> <location filename="../src/firsttimewizard.cpp" line="666"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation>SilentDragonLite treba 24 reči za obnovu novčanika</translation> <translation>SilentDragonXLite treba 24 reči za obnovu novčanika</translation>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="678"/> <location filename="../src/firsttimewizard.cpp" line="678"/>

View File

@@ -31,7 +31,7 @@
<name>ConnectionDialog</name> <name>ConnectionDialog</name>
<message> <message>
<location filename="../src/connection.ui" line="17"/> <location filename="../src/connection.ui" line="17"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -102,7 +102,7 @@ Please enter your wallet password</source>
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../src/mainwindow.ui" line="14"/> <location filename="../src/mainwindow.ui" line="14"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -681,7 +681,7 @@ Please use &apos;Remove Wallet Encryption&apos; if you want to remove the wallet
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="537"/> <location filename="../src/mainwindow.cpp" line="537"/>
<source> or SilentDragonLite</source> <source> or SilentDragonXLite</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -1212,7 +1212,7 @@ Would you like to visit the releases page?</source>
</message> </message>
<message> <message>
<location filename="../src/controller.cpp" line="1660"/> <location filename="../src/controller.cpp" line="1660"/>
<source>Please wait for SilentDragonLite to exit</source> <source>Please wait for SilentDragonXLite to exit</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -1616,7 +1616,7 @@ Would you like to visit the releases page?</source>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="133"/> <location filename="../src/firsttimewizard.cpp" line="133"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>

View File

@@ -577,7 +577,7 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="51"/> <location filename="../src/mainwindow.ui" line="51"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -1100,7 +1100,7 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="187"/> <location filename="../src/mainwindow.cpp" line="187"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -1900,7 +1900,7 @@ Yayınlanan sürümler sayfasını ziyaret etmek ister misiniz?</translation>
<message> <message>
<location filename="../src/controller.cpp" line="2017"/> <location filename="../src/controller.cpp" line="2017"/>
<location filename="../src/controller.cpp" line="2025"/> <location filename="../src/controller.cpp" line="2025"/>
<source>Please wait for SilentDragonLite to exit</source> <source>Please wait for SilentDragonXLite to exit</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -2609,7 +2609,7 @@ Onaylanmamış fonunuz var veya otomatik geçiş için bakiye çok düşük.</tr
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="666"/> <location filename="../src/firsttimewizard.cpp" line="666"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>

View File

@@ -86,8 +86,8 @@
<name>ConnectionDialog</name> <name>ConnectionDialog</name>
<message> <message>
<location filename="../src/connection.ui" line="29"/> <location filename="../src/connection.ui" line="29"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite سائلینٹ ڈراگون لائٹ</translation> <translation>SilentDragonXLite سائلینٹ ڈراگون لائٹ</translation>
</message> </message>
<message> <message>
<location filename="../src/connection.ui" line="70"/> <location filename="../src/connection.ui" line="70"/>
@@ -330,8 +330,8 @@ p, li { white-space: pre-wrap; }
<name>MainWindow</name> <name>MainWindow</name>
<message> <message>
<location filename="../src/mainwindow.ui" line="51"/> <location filename="../src/mainwindow.ui" line="51"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation>SilentDragonLite سائلینٹ ڈراگون لائٹ</translation> <translation>SilentDragonXLite سائلینٹ ڈراگون لائٹ</translation>
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="567"/> <location filename="../src/mainwindow.ui" line="567"/>
@@ -952,7 +952,7 @@ Please use &apos;Remove Wallet Encryption&apos; if you want to remove the wallet
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="207"/> <location filename="../src/mainwindow.cpp" line="207"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation type="unfinished">سائلنٹ ڈریگن لائٹ والیٹ کو بحال کرنے کے لئے 24 خوفیا الفاظ کی ضرورت ہے</translation> <translation type="unfinished">سائلنٹ ڈریگن لائٹ والیٹ کو بحال کرنے کے لئے 24 خوفیا الفاظ کی ضرورت ہے</translation>
</message> </message>
<message> <message>
@@ -997,7 +997,7 @@ Please use &apos;Remove Wallet Encryption&apos; if you want to remove the wallet
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="918"/> <location filename="../src/mainwindow.cpp" line="918"/>
<source> or SilentDragonLite</source> <source> or SilentDragonXLite</source>
<translation>یا سائلنٹ ڈریگن لائٹ</translation> <translation>یا سائلنٹ ڈریگن لائٹ</translation>
</message> </message>
<message> <message>
@@ -1772,7 +1772,7 @@ Would you like to visit the releases page?</source>
<message> <message>
<location filename="../src/controller.cpp" line="2042"/> <location filename="../src/controller.cpp" line="2042"/>
<location filename="../src/controller.cpp" line="2050"/> <location filename="../src/controller.cpp" line="2050"/>
<source>Please wait for SilentDragonLite to exit</source> <source>Please wait for SilentDragonXLite to exit</source>
<translation> باہر جانے کا انتظار کریں Silent DragonLite براہ کرم</translation> <translation> باہر جانے کا انتظار کریں Silent DragonLite براہ کرم</translation>
</message> </message>
<message> <message>
@@ -2253,7 +2253,7 @@ Would you like to visit the releases page?</source>
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="643"/> <location filename="../src/firsttimewizard.cpp" line="643"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation>سائلنٹ ڈریگن لائٹ والیٹ کو بحال کرنے کے لئے 24 خوفیا الفاظ کی ضرورت ہے</translation> <translation>سائلنٹ ڈریگن لائٹ والیٹ کو بحال کرنے کے لئے 24 خوفیا الفاظ کی ضرورت ہے</translation>
</message> </message>
<message> <message>

View File

@@ -90,7 +90,7 @@
</message> </message>
<message> <message>
<location filename="../src/connection.ui" line="29"/> <location filename="../src/connection.ui" line="29"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -383,7 +383,7 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../src/mainwindow.ui" line="51"/> <location filename="../src/mainwindow.ui" line="51"/>
<source>SilentDragonLite</source> <source>SilentDragonXLite</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -1058,7 +1058,7 @@ p, li { white-space: pre-wrap; }
</message> </message>
<message> <message>
<location filename="../src/mainwindow.cpp" line="187"/> <location filename="../src/mainwindow.cpp" line="187"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -1986,7 +1986,7 @@ Please set the host/port and user/password in the Edit-&gt;Settings menu.</sourc
<message> <message>
<location filename="../src/controller.cpp" line="2017"/> <location filename="../src/controller.cpp" line="2017"/>
<location filename="../src/controller.cpp" line="2025"/> <location filename="../src/controller.cpp" line="2025"/>
<source>Please wait for SilentDragonLite to exit</source> <source>Please wait for SilentDragonXLite to exit</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>
@@ -2557,7 +2557,7 @@ You either have unconfirmed funds or the balance is too low for an automatic mig
</message> </message>
<message> <message>
<location filename="../src/firsttimewizard.cpp" line="666"/> <location filename="../src/firsttimewizard.cpp" line="666"/>
<source>SilentDragonLite needs 24 words to restore wallet</source> <source>SilentDragonXLite needs 24 words to restore wallet</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message> <message>

View File

@@ -201,11 +201,11 @@ distclean.depends += librustclean
QMAKE_EXTRA_TARGETS += librust libsodium librustclean distclean QMAKE_EXTRA_TARGETS += librust libsodium librustclean distclean
QMAKE_CLEAN += $$PWD/lib/target/release/libsilentdragonxlite.a res/libsodium.a QMAKE_CLEAN += $$PWD/lib/target/release/libsilentdragonxlite.a res/libsodium.a
win32: LIBS += -L$$PWD/lib/target/x86_64-pc-windows-gnu/release -lsilentdragonxlite -L$$PWD/res/ -llibsodium -lsecur32 -lcrypt32 -lncrypt win32: LIBS += -L$$PWD/lib/target/x86_64-pc-windows-gnu/release -lsilentdragonxlite -L$$PWD/lib/libsodium-mingw/ -lsodium -lsecur32 -lcrypt32 -lncrypt
else:macx: LIBS += -L$$PWD/lib/target/release -lsilentdragonxlite -framework Security -framework Foundation -L$$PWD/res/ -lsodium else:macx: LIBS += -L$$PWD/lib/target/release -lsilentdragonxlite -framework Security -framework Foundation -L$$PWD/res/ -lsodium
else:unix: LIBS += -L$$PWD/lib/target/release -lsilentdragonxlite -ldl -L$$PWD/res/ -lsodium else:unix: LIBS += -L$$PWD/lib/target/release -lsilentdragonxlite -ldl -L$$PWD/res/ -lsodium
win32: PRE_TARGETDEPS += $$PWD/lib/target/x86_64-pc-windows-gnu/release/silentdragonxlite.lib $$PWD/res/libsodium.a win32: PRE_TARGETDEPS += $$PWD/lib/target/x86_64-pc-windows-gnu/release/silentdragonxlite.lib $$PWD/lib/libsodium-mingw/libsodium.a
else:unix::PRE_TARGETDEPS += $$PWD/lib/target/release/libsilentdragonxlite.a $$PWD/res/libsodium.a else:unix::PRE_TARGETDEPS += $$PWD/lib/target/release/libsilentdragonxlite.a $$PWD/res/libsodium.a
INCLUDEPATH += $$PWD/res INCLUDEPATH += $$PWD/res

View File

@@ -0,0 +1,16 @@
// This file is autogenerated by qmake. It imports static plugin classes for
// static plugins specified using QTPLUGIN and QT_PLUGIN_CLASS.<plugin> variables.
#include <QtPlugin>
Q_IMPORT_PLUGIN(QWindowsVistaStylePlugin)
Q_IMPORT_PLUGIN(QWindowsIntegrationPlugin)
Q_IMPORT_PLUGIN(QGifPlugin)
Q_IMPORT_PLUGIN(QICNSPlugin)
Q_IMPORT_PLUGIN(QICOPlugin)
Q_IMPORT_PLUGIN(QJp2Plugin)
Q_IMPORT_PLUGIN(QJpegPlugin)
Q_IMPORT_PLUGIN(QMngPlugin)
Q_IMPORT_PLUGIN(QTgaPlugin)
Q_IMPORT_PLUGIN(QTiffPlugin)
Q_IMPORT_PLUGIN(QWbmpPlugin)
Q_IMPORT_PLUGIN(QWebpPlugin)
Q_IMPORT_PLUGIN(QGenericEnginePlugin)

View File

@@ -18,7 +18,7 @@
<item> <item>
<widget class="QGroupBox" name="groupBox"> <widget class="QGroupBox" name="groupBox">
<property name="title"> <property name="title">
<string notr="true">SilentDragonLite</string> <string notr="true">SilentDragonXLite</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_2"> <layout class="QVBoxLayout" name="verticalLayout_2">
<item> <item>

View File

@@ -212,7 +212,7 @@ void AddressBook::open(MainWindow* parent, QLineEdit* target)
QMessageBox::critical( QMessageBox::critical(
parent, parent,
QObject::tr("Address Format Error"), QObject::tr("Address Format Error"),
QObject::tr("%1 doesn't seem to be a valid hush address.").arg(addr), QObject::tr("%1 doesn't seem to be a valid DRGX address.").arg(addr),
QMessageBox::Ok QMessageBox::Ok
); );
return; return;

View File

@@ -105,7 +105,7 @@ QVariant BalancesTableModel::data(const QModelIndex &index, int role) const
QString theme_name = Settings::getInstance()->get_theme_name(); QString theme_name = Settings::getInstance()->get_theme_name();
QBrush b; QBrush b;
QColor color; QColor color;
if (theme_name == "Dark" || theme_name == "Midnight") { if (theme_name == "Dark" || theme_name == "Midnight" || theme_name == "dragonx") {
color = COLOR_WHITE; color = COLOR_WHITE;
}else{ }else{
color = COLOR_BLACK; color = COLOR_BLACK;

View File

@@ -15,14 +15,16 @@
</property> </property>
<property name="styleSheet"> <property name="styleSheet">
<string notr="true">QWidget{ <string notr="true">QWidget{
background: whitesmoke; background: rgba(216, 38, 82, 0.15);
border: 1px solid #afafaf; border: 1px solid rgba(216, 38, 82, 0.4);
border-radius: 3px; border-radius: 3px;
color: white;
} }
QLabel QLabel
{ {
background: none; background: none;
border: none; border: none;
color: rgba(255, 255, 255, 0.9);
}</string> }</string>
</property> </property>
<widget class="QLabel" name="lblMessage"> <widget class="QLabel" name="lblMessage">

View File

@@ -15,14 +15,16 @@
</property> </property>
<property name="styleSheet"> <property name="styleSheet">
<string notr="true">QWidget{ <string notr="true">QWidget{
background: #c8e1ff; background: rgba(41, 21, 21, 0.75);
border: 1px solid #fefefe; border: 1px solid rgba(216, 38, 82, 0.3);
border-radius: 3px; border-radius: 3px;
color: white;
} }
QLabel QLabel
{ {
background: none; background: none;
border: none; border: none;
color: rgba(255, 255, 255, 0.85);
}</string> }</string>
</property> </property>
<widget class="QLabel" name="lblMessage"> <widget class="QLabel" name="lblMessage">

View File

@@ -97,7 +97,7 @@ void MainWindow::renderContactRequest(){
QString icon; QString icon;
auto theme = Settings::getInstance()->get_theme_name(); auto theme = Settings::getInstance()->get_theme_name();
if (theme == "Dark" || theme == "Midnight") { if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
icon = ":/icons/res/unknownWhite.png"; icon = ":/icons/res/unknownWhite.png";
}else{ }else{
icon = ":/icons/res/unknownBlack.png"; icon = ":/icons/res/unknownBlack.png";
@@ -571,7 +571,7 @@ void MainWindow::sendChat() {
movie1->setFileName(":/img/res/loaderwhite.gif"); movie1->setFileName(":/img/res/loaderwhite.gif");
auto theme = Settings::getInstance()->get_theme_name(); auto theme = Settings::getInstance()->get_theme_name();
if (theme == "Dark" || theme == "Midnight") { if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
connect(movie, &QMovie::frameChanged, [=]{ connect(movie, &QMovie::frameChanged, [=]{
ui->sendChatButton->setIcon(movie->currentPixmap()); ui->sendChatButton->setIcon(movie->currentPixmap());
@@ -603,7 +603,7 @@ void MainWindow::sendChat() {
QTimer::singleShot(1000, [=]() { QTimer::singleShot(1000, [=]() {
if (theme == "Dark" || theme == "Midnight") { if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
QPixmap send(":/icons/res/send-white.png"); QPixmap send(":/icons/res/send-white.png");
QIcon sendIcon(send); QIcon sendIcon(send);
ui->sendChatButton->setIcon(sendIcon); ui->sendChatButton->setIcon(sendIcon);
@@ -640,7 +640,7 @@ void MainWindow::sendChat() {
movie->stop(); movie->stop();
if (theme == "Dark" || theme == "Midnight") { if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
QPixmap send(":/icons/res/send-white.png"); QPixmap send(":/icons/res/send-white.png");
QIcon sendIcon(send); QIcon sendIcon(send);
ui->sendChatButton->setIcon(sendIcon); ui->sendChatButton->setIcon(sendIcon);
@@ -870,7 +870,7 @@ void MainWindow::ContactRequest() {
QMovie *movie1 = new QMovie(":/img/res/silentdragonxlite-animated-startup-dark.gif"); QMovie *movie1 = new QMovie(":/img/res/silentdragonxlite-animated-startup-dark.gif");
QMovie *movie2 = new QMovie(":/img/res/silentdragonxlite-animated-startup-dark.gif"); QMovie *movie2 = new QMovie(":/img/res/silentdragonxlite-animated-startup-dark.gif");
auto theme = Settings::getInstance()->get_theme_name(); auto theme = Settings::getInstance()->get_theme_name();
if (theme == "Dark" || theme == "Midnight") { if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
movie2->setScaledSize(QSize(512,512)); movie2->setScaledSize(QSize(512,512));
connD->topIcon->setMovie(movie2); connD->topIcon->setMovie(movie2);
movie2->start(); movie2->start();

View File

@@ -37,7 +37,7 @@ ConnectionLoader::ConnectionLoader(MainWindow* main, Controller* rpc)
//DEBUG("theme " << theme << " has loaded"); //DEBUG("theme " << theme << " has loaded");
auto size = QSize(512,512); auto size = QSize(512,512);
if (theme == "Dark" || theme == "Midnight") { if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
QMovie *movie2 = new QMovie(":/img/res/silentdragonxlite-animated-startup-dark.gif");; QMovie *movie2 = new QMovie(":/img/res/silentdragonxlite-animated-startup-dark.gif");;
movie2->setScaledSize(size); movie2->setScaledSize(size);
qDebug() << "Animation dark loaded"; qDebug() << "Animation dark loaded";
@@ -108,6 +108,7 @@ void ConnectionLoader::ShowProgress()
} }
auto me = this; auto me = this;
delete isSyncing;
isSyncing = new QAtomicInteger<bool>(true); isSyncing = new QAtomicInteger<bool>(true);
DEBUG("isSyncing set to true"); DEBUG("isSyncing set to true");
@@ -123,6 +124,9 @@ void ConnectionLoader::ShowProgress()
DEBUG("sync rpc error! server=" << config->server); DEBUG("sync rpc error! server=" << config->server);
}); });
lastSyncedBlock = -1;
syncStallCount = 0;
QObject::connect(syncTimer, &QTimer::timeout, [=]() { QObject::connect(syncTimer, &QTimer::timeout, [=]() {
if (!isSyncing || !isSyncing->load()) { if (!isSyncing || !isSyncing->load()) {
DEBUG("Syncing complete or isSyncing is null, stopping timer"); DEBUG("Syncing complete or isSyncing is null, stopping timer");
@@ -140,6 +144,29 @@ void ConnectionLoader::ShowProgress()
me->showInformation( me->showInformation(
"Syncing... " + QString::number(synced) + " / " + QString::number(total) "Syncing... " + QString::number(synced) + " / " + QString::number(total)
); );
// Stuck sync detection
if (synced <= me->lastSyncedBlock && synced < total) {
me->syncStallCount++;
if (me->syncStallCount >= 10) {
qDebug() << "Import sync stuck at block" << synced << "for 10s, clearing and rescanning";
me->showInformation("Sync stuck, rescanning...");
me->syncStallCount = 0;
me->lastSyncedBlock = -1;
connection->doRPC("clear", "", [=](auto) {
connection->doRPC("rescan", "", [=](auto) {
qDebug() << "Rescan complete after stuck import sync";
}, [=](auto) {
qDebug() << "Rescan error after stuck import sync";
});
}, [=](auto) {
qDebug() << "Clear error during stuck import sync";
});
}
} else {
me->syncStallCount = 0;
me->lastSyncedBlock = synced;
}
} }
}, [=](QString err) { }, [=](QString err) {
DEBUG("Sync status error: " << err); DEBUG("Sync status error: " << err);
@@ -148,7 +175,6 @@ void ConnectionLoader::ShowProgress()
}); });
} catch (const std::exception& e) { } catch (const std::exception& e) {
DEBUG("Exception caught in syncstatus: " << e.what()); DEBUG("Exception caught in syncstatus: " << e.what());
throw;
} }
}); });
@@ -225,6 +251,7 @@ void ConnectionLoader::doAutoConnect()
DEBUG("Connection is online."); DEBUG("Connection is online.");
connection->setInfo(reply); connection->setInfo(reply);
DEBUG("getting Connection reply"); DEBUG("getting Connection reply");
delete isSyncing;
isSyncing = new QAtomicInteger<bool>(); isSyncing = new QAtomicInteger<bool>();
isSyncing->store(true); isSyncing->store(true);
DEBUG("isSyncing set to true"); DEBUG("isSyncing set to true");
@@ -239,7 +266,76 @@ void ConnectionLoader::doAutoConnect()
syncTimer->deleteLater(); syncTimer->deleteLater();
// When sync is done, set the connection // When sync is done, set the connection
this->doRPCSetConnection(connection); this->doRPCSetConnection(connection);
}, [=](auto) mutable { }, [=](QString err) mutable {
qDebug() << "sync rpc error:" << err;
// If user already confirmed clearing from stuck detection, do it now (old sync is finished)
if (me->reorgHandled) {
qDebug() << "Old sync finished, performing deferred clear+resync";
me->showInformation("Clearing old data and resyncing...");
syncTimer->stop();
connection->doRPC("clear", "", [=](auto) {
qDebug() << "State cleared, starting fresh sync";
me->syncStallCount = 0;
me->lastSyncedBlock = -1;
me->reorgHandled = false;
isSyncing->store(true);
syncTimer->start();
connection->doRPC("sync", "", [=](auto) {
qDebug() << "Fresh sync complete";
isSyncing->store(false);
syncTimer->deleteLater();
this->doRPCSetConnection(connection);
}, [=](auto) {
qDebug() << "Fresh sync also failed";
});
}, [=](auto) {
qDebug() << "Failed to clear wallet state";
});
return;
}
// Detect reorg failure from incompatible old chain data
if (err.contains("Reorg") || err.contains("reorg")) {
qDebug() << "Detected incompatible chain data, prompting user for fresh sync";
isSyncing->store(false);
syncTimer->stop();
QMessageBox::StandardButton reply = QMessageBox::question(
main,
QObject::tr("Incompatible Block Data"),
QObject::tr("The wallet contains block data from an old or incompatible chain. "
"This prevents syncing.\n\n"
"Would you like to clear the old data and sync fresh from the network?\n"
"(Your wallet keys and addresses will be preserved)"),
QMessageBox::Yes | QMessageBox::No
);
if (reply == QMessageBox::Yes) {
qDebug() << "User chose to rescan, clearing state";
me->showInformation("Clearing old data and resyncing...");
connection->doRPC("clear", "", [=](auto) {
qDebug() << "State cleared, starting fresh sync";
isSyncing->store(true);
syncTimer->start();
connection->doRPC("sync", "", [=](auto) {
qDebug() << "Fresh sync complete";
isSyncing->store(false);
syncTimer->deleteLater();
this->doRPCSetConnection(connection);
}, [=](auto) {
qDebug() << "Fresh sync also failed";
});
}, [=](auto) {
qDebug() << "Failed to clear wallet state";
});
} else {
me->showError(QObject::tr("Sync cannot proceed with incompatible chain data. "
"Please manually delete the wallet data file and restart."));
}
return;
}
DEBUG("sync rpc error! server=" << config->server); DEBUG("sync rpc error! server=" << config->server);
// Attempt to retry sync RPC with a delay // Attempt to retry sync RPC with a delay
QTimer::singleShot(5000, [=]() { // 5-second delay QTimer::singleShot(5000, [=]() { // 5-second delay
@@ -257,6 +353,12 @@ void ConnectionLoader::doAutoConnect()
}); });
// While it is syncing, we'll show the status updates while it is alive. // While it is syncing, we'll show the status updates while it is alive.
// Also detect stuck syncs: if synced_blocks doesn't advance (or goes backwards) for 10 ticks (10s),
// show reorg dialog.
lastSyncedBlock = -1;
syncStallCount = 0;
reorgHandled = false;
QObject::connect(syncTimer, &QTimer::timeout, [=]() { QObject::connect(syncTimer, &QTimer::timeout, [=]() {
DEBUG("Check the sync status"); DEBUG("Check the sync status");
if (isSyncing != nullptr && isSyncing->load()) { if (isSyncing != nullptr && isSyncing->load()) {
@@ -269,6 +371,38 @@ void ConnectionLoader::doAutoConnect()
me->showInformation( me->showInformation(
"Syncing... " + QString::number(synced) + " / " + QString::number(total) "Syncing... " + QString::number(synced) + " / " + QString::number(total)
); );
// Stuck sync detection: if synced block hasn't advanced (or goes backwards) in 10 seconds
if (synced <= me->lastSyncedBlock && synced < total) {
me->syncStallCount++;
if (me->syncStallCount >= 10 && !me->reorgHandled) {
qDebug() << "Sync stuck/backwards at block" << synced << "for 10s, showing reorg dialog";
// Set flag BEFORE showing dialog to prevent re-entry from timer events
me->reorgHandled = true;
QMessageBox::StandardButton reply = QMessageBox::question(
main,
QObject::tr("Incompatible Block Data"),
QObject::tr("The wallet contains block data from an old or incompatible chain. "
"This prevents syncing.\n\n"
"Would you like to clear the old data and sync fresh from the network?\n"
"(Your wallet keys and addresses will be preserved)"),
QMessageBox::Yes | QMessageBox::No
);
if (reply == QMessageBox::Yes) {
qDebug() << "User chose to clear, waiting for current sync to finish";
me->showInformation("Please wait, preparing to clear old data...");
} else {
syncTimer->stop();
me->showError(QObject::tr("Sync cannot proceed with incompatible chain data. "
"Please manually delete the wallet data file and restart."));
}
}
} else {
me->syncStallCount = 0;
me->lastSyncedBlock = synced;
}
} }
}, },
[=](QString err) { [=](QString err) {

View File

@@ -49,6 +49,10 @@ private:
QTimer* syncTimer = nullptr; QTimer* syncTimer = nullptr;
QAtomicInteger<bool>* isSyncing = nullptr; QAtomicInteger<bool>* isSyncing = nullptr;
qint64 lastSyncedBlock = -1;
int syncStallCount = 0;
bool reorgHandled = false;
QDialog* d = nullptr; QDialog* d = nullptr;
Ui_ConnectionDialog* connD = nullptr; Ui_ConnectionDialog* connD = nullptr;

View File

@@ -26,7 +26,7 @@
</size> </size>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
<string>SilentDragonLite</string> <string>SilentDragonXLite</string>
</property> </property>
<property name="modal"> <property name="modal">
<bool>true</bool> <bool>true</bool>

View File

@@ -130,13 +130,13 @@ void MainWindow::showRequesthush() {
} }
if (d.exec() == QDialog::Accepted) { if (d.exec() == QDialog::Accepted) {
// Construct a hush Payment URI with the data and pay it immediately. // Construct a DRGX Payment URI with the data and pay it immediately.
CAmount amount = CAmount::fromDecimalString(req.txtAmount->text()); CAmount amount = CAmount::fromDecimalString(req.txtAmount->text());
QString memoURI = "hush:" + req.lblAddressInfo->text() QString memoURI = "drgx:" + req.lblAddressInfo->text()
+ "?amt=" + amount.toDecimalString() + "?amt=" + amount.toDecimalString()
+ "&memo=" + QUrl::toPercentEncoding(req.txtMemo->toPlainText()); + "&memo=" + QUrl::toPercentEncoding(req.txtMemo->toPlainText());
QString sendURI = "hush:" + AddressBook::addressFromAddressLabel(req.txtFrom->text()) QString sendURI = "drgx:" + AddressBook::addressFromAddressLabel(req.txtFrom->text())
+ "?amt=0.0001" + "?amt=0.0001"
+ "&memo=" + QUrl::toPercentEncoding(memoURI); + "&memo=" + QUrl::toPercentEncoding(memoURI);

View File

@@ -7,6 +7,7 @@
#include "settings.h" #include "settings.h"
#include "version.h" #include "version.h"
#include "camount.h" #include "camount.h"
#include "../lib/silentdragonxlitelib.h"
#include "Model/ChatItem.h" #include "Model/ChatItem.h"
#include "DataStore/DataStore.h" #include "DataStore/DataStore.h"
#include <future> #include <future>
@@ -320,9 +321,10 @@ void Controller::getInfoThenRefresh(bool force)
int curBlock = reply["latest_block_height"].get<json::number_integer_t>(); int curBlock = reply["latest_block_height"].get<json::number_integer_t>();
bool doUpdate = force || (model->getLatestBlock() != curBlock); bool doUpdate = force || (model->getLatestBlock() != curBlock);
int difficulty = reply["difficulty"].get<json::number_integer_t>(); int difficulty = reply["difficulty"].get<json::number_integer_t>();
int num_halvings = 1; // number of halvings that have occured already int halving_interval = 3500000;
int blocks_until_halving = (num_halvings*1680000 + 340000) - curBlock; int num_halvings = curBlock / halving_interval;
int blocktime = 75; int blocks_until_halving = ((num_halvings + 1) * halving_interval) - curBlock;
int blocktime = 36;
int halving_days = (blocks_until_halving * blocktime) / (60 * 60 * 24) ; int halving_days = (blocks_until_halving * blocktime) / (60 * 60 * 24) ;
int longestchain = reply["longestchain"].get<json::number_integer_t>(); int longestchain = reply["longestchain"].get<json::number_integer_t>();
int notarized = reply["notarized"].get<json::number_integer_t>(); int notarized = reply["notarized"].get<json::number_integer_t>();
@@ -2018,6 +2020,9 @@ void Controller::refreshDRAGONXPrice()
void Controller::shutdownhushd() void Controller::shutdownhushd()
{ {
// Signal Rust to stop background threads (mempool monitor, etc.)
litelib_shutdown();
// Save the wallet and exit the lightclient library cleanly. // Save the wallet and exit the lightclient library cleanly.
if (!zrpc) { if (!zrpc) {
zrpc = new LiteInterface(); zrpc = new LiteInterface();
@@ -2032,14 +2037,14 @@ void Controller::shutdownhushd()
auto theme = Settings::getInstance()->get_theme_name(); auto theme = Settings::getInstance()->get_theme_name();
auto size = QSize(512,512); auto size = QSize(512,512);
if (theme == "Dark" || theme == "Midnight") { if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
QMovie *movie2 = new QMovie(":/img/res/silentdragonxlite-animated-startup-dark.gif");; QMovie *movie2 = new QMovie(":/img/res/silentdragonxlite-animated-startup-dark.gif");;
movie2->setScaledSize(size); movie2->setScaledSize(size);
qDebug() << "Animation dark loaded"; qDebug() << "Animation dark loaded";
connD.topIcon->setMovie(movie2); connD.topIcon->setMovie(movie2);
movie2->start(); movie2->start();
connD.status->setText(QObject::tr("Please wait for SilentDragonXLite to exit")); connD.status->setText(QObject::tr("Please wait for SilentDragonXLite to exit"));
connD.statusDetail->setText(QObject::tr("It may take several minutes")); connD.statusDetail->setText(QObject::tr("Saving wallet..."));
} else { } else {
QMovie *movie1 = new QMovie(":/img/res/silentdragonxlite-animated-startup-dark.gif");; QMovie *movie1 = new QMovie(":/img/res/silentdragonxlite-animated-startup-dark.gif");;
movie1->setScaledSize(size); movie1->setScaledSize(size);
@@ -2047,7 +2052,7 @@ void Controller::shutdownhushd()
connD.topIcon->setMovie(movie1); connD.topIcon->setMovie(movie1);
movie1->start(); movie1->start();
connD.status->setText(QObject::tr("Please wait for SilentDragonXLite to exit")); connD.status->setText(QObject::tr("Please wait for SilentDragonXLite to exit"));
connD.statusDetail->setText(QObject::tr("It may take several minutes")); connD.statusDetail->setText(QObject::tr("Saving wallet..."));
} }
bool finished = false; bool finished = false;
@@ -2058,6 +2063,15 @@ void Controller::shutdownhushd()
qDebug() << __func__ << ": saveWallet finished"; qDebug() << __func__ << ": saveWallet finished";
}); });
// Add a timeout so the dialog can't hang forever
QTimer::singleShot(15000, &d, [&]() {
if (!finished) {
qDebug() << __func__ << ": saveWallet timed out after 15 seconds, forcing exit";
finished = true;
d.accept();
}
});
if (!finished) if (!finished)
d.exec(); d.exec();
} else { } else {

View File

@@ -28,12 +28,10 @@ void FilledIconLabel::resizeEvent(QResizeEvent*) {
color = COLOR_BLUE_BG; color = COLOR_BLUE_BG;
}else if(theme_name == "Light"){ }else if(theme_name == "Light"){
color = COLOR_LIGHT_BG; color = COLOR_LIGHT_BG;
}else if(theme_name == "Dark"){ }else if(theme_name == "Dark" || theme_name == "dragonx"){
color = COLOR_DARK_BG; color = COLOR_DARK_BG;
}else if(theme_name =="Midnight"){ }else if(theme_name =="Midnight"){
color = COLOR_MIDNIGHT_BG; color = COLOR_MIDNIGHT_BG;
}else if(theme_name =="dragonx"){
color = COLOR_DRAGONX_BG;
}else{ }else{
color = COLOR_DEFAULT_BG; color = COLOR_DEFAULT_BG;
} }

View File

@@ -36,7 +36,7 @@ void FirstTimeWizard::slot_change_theme(const QString& theme_name) {
} }
catch (...) catch (...)
{ {
saved_theme_name = "Dark"; saved_theme_name = "dragonx";
} }
QFile qFile(":/css/res/css/" + saved_theme_name +".css"); QFile qFile(":/css/res/css/" + saved_theme_name +".css");
@@ -209,7 +209,10 @@ NewOrRestorePage::NewOrRestorePage(FirstTimeWizard *parent) : QWizardPage(parent
crypto_pwhash_ALG_DEFAULT) != 0) { crypto_pwhash_ALG_DEFAULT) != 0) {
/* out of memory */ /* out of memory */
qDebug() << __func__ << ": crypto_pwhash failed! Possibly out of memory"; qDebug() << __func__ << ": crypto_pwhash failed! Possibly out of memory";
exit(1); QMessageBox::critical(nullptr, "Fatal Error",
"Password hashing failed (possibly out of memory). The application cannot continue.");
qApp->exit(1);
return;
} }
QString passphraseHash1 = QByteArray(reinterpret_cast<const char*>(key), KEY_LEN).toHex(); QString passphraseHash1 = QByteArray(reinterpret_cast<const char*>(key), KEY_LEN).toHex();
DataStore::getChatDataStore()->setPassword(passphraseHash1); DataStore::getChatDataStore()->setPassword(passphraseHash1);
@@ -409,7 +412,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word1, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word1, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word1 + " "); verifyseed.verify->insertPlainText(word1 + " ");
verifyseed.word1->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word1->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word1->font(); QFont button = verifyseed.word1->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word1->setFont(button); verifyseed.word1->setFont(button);
@@ -418,7 +421,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word2, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word2, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word2); verifyseed.verify->insertPlainText(word2);
verifyseed.word2->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word2->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word2->font(); QFont button = verifyseed.word2->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word2->setFont(button); verifyseed.word2->setFont(button);
@@ -427,7 +430,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word3, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word3, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word3 + " "); verifyseed.verify->insertPlainText(word3 + " ");
verifyseed.word3->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word3->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word3->font(); QFont button = verifyseed.word3->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word3->setFont(button); verifyseed.word3->setFont(button);
@@ -436,7 +439,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word4, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word4, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word4 + " "); verifyseed.verify->insertPlainText(word4 + " ");
verifyseed.word4->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word4->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word4->font(); QFont button = verifyseed.word4->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word4->setFont(button); verifyseed.word4->setFont(button);
@@ -445,7 +448,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word5, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word5, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word5 + " "); verifyseed.verify->insertPlainText(word5 + " ");
verifyseed.word5->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word5->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word5->font(); QFont button = verifyseed.word5->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word5->setFont(button); verifyseed.word5->setFont(button);
@@ -454,7 +457,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word6, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word6, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word6 + " "); verifyseed.verify->insertPlainText(word6 + " ");
verifyseed.word6->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word6->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word6->font(); QFont button = verifyseed.word6->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word6->setFont(button); verifyseed.word6->setFont(button);
@@ -463,7 +466,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word7, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word7, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word7 + " "); verifyseed.verify->insertPlainText(word7 + " ");
verifyseed.word7->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word7->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word7->font(); QFont button = verifyseed.word7->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word7->setFont(button); verifyseed.word7->setFont(button);
@@ -472,7 +475,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word8, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word8, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word8 + " "); verifyseed.verify->insertPlainText(word8 + " ");
verifyseed.word8->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word8->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word8->font(); QFont button = verifyseed.word8->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word8->setFont(button); verifyseed.word8->setFont(button);
@@ -481,7 +484,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word9, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word9, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word9 + " "); verifyseed.verify->insertPlainText(word9 + " ");
verifyseed.word9->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word9->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word9->font(); QFont button = verifyseed.word9->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word9->setFont(button); verifyseed.word9->setFont(button);
@@ -490,7 +493,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word10, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word10, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word10 + " "); verifyseed.verify->insertPlainText(word10 + " ");
verifyseed.word10->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word10->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word10->font(); QFont button = verifyseed.word10->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word10->setFont(button); verifyseed.word10->setFont(button);
@@ -499,7 +502,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word11, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word11, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word11 + " "); verifyseed.verify->insertPlainText(word11 + " ");
verifyseed.word11->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word11->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word11->font(); QFont button = verifyseed.word11->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word11->setFont(button); verifyseed.word11->setFont(button);
@@ -508,7 +511,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word12, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word12, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word12 + " "); verifyseed.verify->insertPlainText(word12 + " ");
verifyseed.word12->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word12->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word12->font(); QFont button = verifyseed.word12->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word12->setFont(button); verifyseed.word12->setFont(button);
@@ -517,7 +520,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word13, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word13, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word13 + " "); verifyseed.verify->insertPlainText(word13 + " ");
verifyseed.word13->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word13->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word13->font(); QFont button = verifyseed.word13->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word13->setFont(button); verifyseed.word13->setFont(button);
@@ -526,7 +529,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word14, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word14, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word14 + " "); verifyseed.verify->insertPlainText(word14 + " ");
verifyseed.word14->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word14->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word14->font(); QFont button = verifyseed.word14->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word14->setFont(button); verifyseed.word14->setFont(button);
@@ -535,7 +538,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word15, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word15, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word15 + " "); verifyseed.verify->insertPlainText(word15 + " ");
verifyseed.word15->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word15->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word15->font(); QFont button = verifyseed.word15->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word15->setFont(button); verifyseed.word15->setFont(button);
@@ -544,7 +547,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word16, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word16, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word16 + " "); verifyseed.verify->insertPlainText(word16 + " ");
verifyseed.word16->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word16->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word16->font(); QFont button = verifyseed.word16->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word16->setFont(button); verifyseed.word16->setFont(button);
@@ -553,7 +556,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word17, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word17, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word17 + " "); verifyseed.verify->insertPlainText(word17 + " ");
verifyseed.word17->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word17->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word17->font(); QFont button = verifyseed.word17->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word17->setFont(button); verifyseed.word17->setFont(button);
@@ -562,7 +565,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word18, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word18, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word18 + " "); verifyseed.verify->insertPlainText(word18 + " ");
verifyseed.word18->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word18->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word18->font(); QFont button = verifyseed.word18->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word18->setFont(button); verifyseed.word18->setFont(button);
@@ -571,7 +574,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word19, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word19, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word19 + " "); verifyseed.verify->insertPlainText(word19 + " ");
verifyseed.word19->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word19->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word19->font(); QFont button = verifyseed.word19->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word19->setFont(button); verifyseed.word19->setFont(button);
@@ -580,7 +583,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word20, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word20, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word20 + " "); verifyseed.verify->insertPlainText(word20 + " ");
verifyseed.word20->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word20->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word20->font(); QFont button = verifyseed.word20->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word20->setFont(button); verifyseed.word20->setFont(button);
@@ -589,7 +592,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word21, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word21, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word21 + " "); verifyseed.verify->insertPlainText(word21 + " ");
verifyseed.word21->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word21->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word21->font(); QFont button = verifyseed.word21->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word21->setFont(button); verifyseed.word21->setFont(button);
@@ -598,7 +601,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word22, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word22, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word22 + " "); verifyseed.verify->insertPlainText(word22 + " ");
verifyseed.word22->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word22->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word22->font(); QFont button = verifyseed.word22->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word22->setFont(button); verifyseed.word22->setFont(button);
@@ -607,7 +610,7 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word23, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word23, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word23 + " "); verifyseed.verify->insertPlainText(word23 + " ");
verifyseed.word23->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word23->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word23->font(); QFont button = verifyseed.word23->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word23->setFont(button); verifyseed.word23->setFont(button);
@@ -616,14 +619,38 @@ bool NewSeedPage::validatePage() {
QObject::connect(verifyseed.word24, &QPushButton::clicked, [&] () { QObject::connect(verifyseed.word24, &QPushButton::clicked, [&] () {
verifyseed.verify->insertPlainText(word24 + " "); verifyseed.verify->insertPlainText(word24 + " ");
verifyseed.word24->setStyleSheet("background-color: rgb(182,182,182);"); verifyseed.word24->setStyleSheet("background-color: rgba(216, 38, 82, 0.3); color: rgba(255,255,255,0.5);");
QFont button = verifyseed.word24->font(); QFont button = verifyseed.word24->font();
button.setStrikeOut(true); button.setStrikeOut(true);
verifyseed.word24->setFont(button); verifyseed.word24->setFont(button);
verifyseed.word24->setEnabled(false); verifyseed.word24->setEnabled(false);
}); });
dialog.exec(); // Add a "Skip Verification" button to the dialog
QPushButton *skipButton = verifyseed.buttonBox->addButton(tr("Skip Verification"), QDialogButtonBox::ActionRole);
QObject::connect(skipButton, &QPushButton::clicked, [&dialog] () {
dialog.done(2); // custom result code for skip
});
int dialogResult = dialog.exec();
// Skip verification: save wallet and proceed
if (dialogResult == 2) {
QString reply = "";
try {
char* resp = litelib_execute("save", "");
reply = litelib_process_response(resp);
} catch (const std::exception& e) {
qDebug() << __func__ << ": caught an exception, ignoring: " << e.what();
}
auto parsed = json::parse(reply.toStdString().c_str(), nullptr, false);
if (parsed.is_discarded() || parsed.is_null() || parsed.find("result") == parsed.end()) {
QMessageBox::warning(this, tr("Failed to save wallet"),
tr("Couldn't save the wallet") + "\n" + reply, QMessageBox::Ok);
return false;
}
return true;
}
QString reply = ""; QString reply = "";
if ((verifyseed.verify->toPlainText() == seed) && (verifyseed.verifyBirthday->toPlainText() == birthday)) { if ((verifyseed.verify->toPlainText() == seed) && (verifyseed.verifyBirthday->toPlainText() == birthday)) {
@@ -733,7 +760,7 @@ bool RestoreSeedPage::validatePage() {
QString reply = ""; QString reply = "";
try { try {
char *resp = litelib_initialize_new_from_phrase(parent->dangerous, parent->server.toStdString().c_str(), char *resp = litelib_initialize_new_from_phrase(parent->dangerous, parent->server.toStdString().c_str(),
seed.toStdString().c_str(), birthday, number); seed.toStdString().c_str(), birthday, number, true);
if (resp != nullptr) { if (resp != nullptr) {
reply = litelib_process_response(resp); reply = litelib_process_response(resp);
@@ -752,7 +779,7 @@ if (reply.toUpper().trimmed() != "OK") {
qDebug() << __func__ << ": new server is " << parent->server; qDebug() << __func__ << ": new server is " << parent->server;
char *resp = litelib_initialize_new_from_phrase(parent->dangerous, parent->server.toStdString().c_str(), char *resp = litelib_initialize_new_from_phrase(parent->dangerous, parent->server.toStdString().c_str(),
seed.toStdString().c_str(), birthday, number); seed.toStdString().c_str(), birthday, number, true);
if (resp != nullptr) { if (resp != nullptr) {
reply = litelib_process_response(resp); reply = litelib_process_response(resp);
} else { } else {
@@ -778,7 +805,7 @@ if (reply.toUpper().trimmed() != "OK") {
// make a new connection to the new server // make a new connection to the new server
char* resp = litelib_initialize_new_from_phrase(parent->dangerous, parent->server.toStdString().c_str(), char* resp = litelib_initialize_new_from_phrase(parent->dangerous, parent->server.toStdString().c_str(),
seed.toStdString().c_str(), birthday, number); seed.toStdString().c_str(), birthday, number, true);
reply = litelib_process_response(resp); reply = litelib_process_response(resp);
// retry with the new server // retry with the new server

View File

@@ -150,11 +150,11 @@ public:
// Command line parser // Command line parser
QCommandLineParser parser; QCommandLineParser parser;
parser.setApplicationDescription("Shielded desktop light wallet for hush"); parser.setApplicationDescription("Shielded desktop light wallet for DragonX");
parser.addHelpOption(); parser.addHelpOption();
// Positional argument will specify a hush payment URI // Positional argument will specify a DRGX payment URI
parser.addPositionalArgument("hushURI", "An optional hush URI to pay"); parser.addPositionalArgument("drgxURI", "An optional DRGX URI to pay");
parser.process(a); parser.process(a);
@@ -201,7 +201,9 @@ public:
if (sodium_init() < 0) { if (sodium_init() < 0) {
/* panic! the library couldn't be initialized, it is not safe to use */ /* panic! the library couldn't be initialized, it is not safe to use */
qDebug() << "libsodium is not initialized!"; qDebug() << "libsodium is not initialized!";
exit(0); QMessageBox::critical(nullptr, "Fatal Error",
"Failed to initialize libsodium cryptography library. The application cannot continue.");
return 1;
} }
Settings::getInstance()->setUseEmbedded(false); Settings::getInstance()->setUseEmbedded(false);

View File

@@ -71,7 +71,7 @@ MainWindow::MainWindow(QWidget *parent) :
} }
catch (...) catch (...)
{ {
theme_name = "Dark"; theme_name = "dragonx";
} }
this->slot_change_theme(theme_name); this->slot_change_theme(theme_name);
@@ -160,143 +160,37 @@ MainWindow::MainWindow(QWidget *parent) :
// Rescan // Rescan
QObject::connect(ui->actionRescan, &QAction::triggered, [=]() { QObject::connect(ui->actionRescan, &QAction::triggered, [=]() {
DEBUG("rescan action triggered"); DEBUG("rescan action triggered");
Ui_Restore restoreSeed;
QDialog dialog(this);
restoreSeed.setupUi(&dialog);
Settings::saveRestore(&dialog);
rpc->fetchSeed([=](json reply) { // Ask user for rescan height
if (isJsonError(reply)) { bool ok;
QString heightStr = QInputDialog::getText(this, tr("Rescan Wallet"),
tr("Rescan from height (0 to rescan from the beginning):"),
QLineEdit::Normal, "0", &ok);
if (!ok) return;
QString height = heightStr.trimmed();
if (height.isEmpty()) height = "0";
// Validate it's a number
height.toULongLong(&ok);
if (!ok) {
QMessageBox::warning(this, tr("Invalid height"),
tr("Please enter a valid block height number."),
QMessageBox::Ok);
return; return;
} }
restoreSeed.seed->setReadOnly(true); // Clear wallet state from the specified height, then resync
restoreSeed.seed->setLineWrapMode(QPlainTextEdit::LineWrapMode::NoWrap); rpc->getConnection()->doRPCWithDefaultErrorHandling("clear", height, [=] (auto) {
QString seedJson = QString::fromStdString(reply["seed"].get<json::string_t>()); qDebug() << "Cleared wallet state to height" << height;
restoreSeed.seed->setPlainText(seedJson);
QString birthday = QString::number(reply["birthday"].get<json::number_unsigned_t>());
restoreSeed.birthday->setPlainText(birthday);
});
QObject::connect(restoreSeed.restore, &QPushButton::clicked, [&](){
QString seed = restoreSeed.seed->toPlainText();
if (seed.trimmed().split(" ").length() != 24) {
QMessageBox::warning(this, tr("Failed to restore wallet"),
tr("SilentDragonXLite needs 24 words to restore wallet"),
QMessageBox::Ok);
return false;
}
// 2. Validate birthday
QString birthday_str = restoreSeed.birthday->toPlainText();
bool ok;
qint64 birthday = birthday_str.toUInt(&ok);
if (!ok) {
QMessageBox::warning(this, tr("Failed to parse wallet birthday"),
tr("Couldn't understand wallet birthday. This should be a block height from where to rescan the wallet. You can leave it as '0' if you don't know what it should be."),
QMessageBox::Ok);
return false;
}
QString number_str = restoreSeed.quantity->text();
qint64 number = number_str.toUInt();
auto config = std::shared_ptr<ConnectionConfig>(new ConnectionConfig());
config->server = Settings::getInstance()->getSettings().server;
// 3. Attempt to restore wallet with the seed phrase
{
QString reply = "";
try {
char* resp = litelib_initialize_new_from_phrase(config->dangerous, config->server.toStdString().c_str(),
seed.toStdString().c_str(), birthday, number);
reply = litelib_process_response(resp);
} catch (const std::exception& e) {
qDebug() << __func__ << ": caught an exception, ignoring: " << e.what();
}
if (reply.toUpper().trimmed() != "OK") {
qDebug() << "Lite server " << config->server << " is down, getting a random one";
config->server = Settings::getRandomServer();
qDebug() << __func__ << ": new server is " << config->server;
// retry with the new server
char* resp = litelib_initialize_new_from_phrase(config->dangerous,config->server.toStdString().c_str(),
seed.toStdString().c_str(), birthday, number);
reply = litelib_process_response(resp);
}
if (reply.toUpper().trimmed() != "OK") {
QMessageBox::warning(this, tr("Failed to restore wallet"),
tr("Couldn't restore the wallet") + "\n" + "server=" + config->server + "\n" + reply,
QMessageBox::Ok);
return false;
}
}
// 4. Finally attempt to save the wallet
{
QString reply = "";
try {
char* resp = litelib_execute("save", "");
QString reply = litelib_process_response(resp);
} catch (const std::exception& e) {
qDebug() << __func__ << ": caught an exception, ignoring: " << e.what();
}
if (reply.isEmpty()) {
qDebug() << "Lite server " << config->server << " is down, getting a random one";
config->server = Settings::getRandomServer();
qDebug() << __func__ << ": new server is " << config->server;
// make a new connection to the new server
char* resp = litelib_initialize_new_from_phrase(config->dangerous,config->server.toStdString().c_str(),
seed.toStdString().c_str(), birthday, number);
reply = litelib_process_response(resp);
// retry with the new server
try {
resp = litelib_execute("save", "");
reply = litelib_process_response(resp);
} catch (const std::exception& e) {
qDebug() << __func__ << ": caught an exception with new server, something is fucky: " << e.what();
}
}
QByteArray ba_reply = reply.toUtf8();
QJsonDocument jd_reply = QJsonDocument::fromJson(ba_reply);
QJsonObject parsed = jd_reply.object();
if (parsed.isEmpty() || parsed["result"].isNull()) {
QMessageBox::warning(this, tr("Failed to save wallet"),
tr("Couldn't save the wallet") + "\n" + "server=" + config->server + "\n" + reply,
QMessageBox::Ok);
} else {
qDebug() << __func__ << ": saved wallet correctly";
}
dialog.close();
// To rescan, we clear the wallet state, and then reload the connection
// This will start a sync, and show the scanning status.
this->getRPC()->clearWallet([=] (auto) {
qDebug() << "Clearing wallet...";
// Save the wallet
this->getRPC()->saveWallet([=] (auto) { this->getRPC()->saveWallet([=] (auto) {
qDebug() << "Saving wallet..."; qDebug() << "Saved cleared wallet, reloading connection to start rescan...";
// Then reload the connection. The ConnectionLoader deletes itself. auto cl = new ConnectionLoader(this, rpc);
auto cl = new ConnectionLoader(this, rpc); cl->loadConnection();
cl->loadConnection();
}); });
}); });
}); // actionRescan
}
});
dialog.exec();
}); // actionReason
// Import Privkey // Import Privkey
QObject::connect(ui->actionImport_Privatkey, &QAction::triggered, this, &MainWindow::importPrivKey); QObject::connect(ui->actionImport_Privatkey, &QAction::triggered, this, &MainWindow::importPrivKey);
@@ -847,7 +741,11 @@ void MainWindow::setupSettingsModal() {
// List of default servers // List of default servers
settings.cmbServer->addItem("https://lite.dragonx.is"); settings.cmbServer->addItem("https://lite.dragonx.is");
settings.cmbServer->addItem("https://dragonlite.printogre.com"); settings.cmbServer->addItem("https://lite1.dragonx.is");
settings.cmbServer->addItem("https://lite2.dragonx.is");
settings.cmbServer->addItem("https://lite3.dragonx.is");
settings.cmbServer->addItem("https://lite4.dragonx.is");
settings.cmbServer->addItem("https://lite5.dragonx.is");
//TODO: seperate lists of https/Tor servers, only show user or attempt //TODO: seperate lists of https/Tor servers, only show user or attempt
// connection to .onion if user has it enabled // connection to .onion if user has it enabled
@@ -1026,7 +924,7 @@ void MainWindow::payhushURI(QString uri, QString myAddr) {
PaymentURI paymentInfo = Settings::parseURI(uri); PaymentURI paymentInfo = Settings::parseURI(uri);
if (!paymentInfo.error.isEmpty()) { if (!paymentInfo.error.isEmpty()) {
QMessageBox::critical(this, tr("Error paying DRGX URI"), QMessageBox::critical(this, tr("Error paying DRGX URI"),
tr("URI should be of the form 'hush:<addr>?amt=x&memo=y") + "\n" + paymentInfo.error); tr("URI should be of the form 'drgx:<addr>?amt=x&memo=y") + "\n" + paymentInfo.error);
return; return;
} }
@@ -1429,7 +1327,7 @@ void MainWindow::setupTransactionsTab() {
}); });
// Payment Request // Payment Request
if (!memo.isEmpty() && memo.startsWith("hush:")) { if (!memo.isEmpty() && memo.startsWith("drgx:")) {
menu.addAction(tr("View Payment Request"), [=] () { menu.addAction(tr("View Payment Request"), [=] () {
RequestDialog::showPaymentConfirmation(this, memo); RequestDialog::showPaymentConfirmation(this, memo);
}); });
@@ -1486,7 +1384,7 @@ void MainWindow::setupchatTab() {
/////////////Setting Icons for Chattab and different themes /////////////Setting Icons for Chattab and different themes
auto theme = Settings::getInstance()->get_theme_name(); auto theme = Settings::getInstance()->get_theme_name();
if (theme == "Dark" || theme == "Midnight") { if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
QPixmap send(":/icons/res/send-white.png"); QPixmap send(":/icons/res/send-white.png");
QIcon sendIcon(send); QIcon sendIcon(send);
ui->sendChatButton->setIcon(sendIcon); ui->sendChatButton->setIcon(sendIcon);
@@ -2003,7 +1901,7 @@ void MainWindow::sendMoneyChat() {
movie1->setFileName(":/img/res/loaderwhite.gif"); movie1->setFileName(":/img/res/loaderwhite.gif");
auto theme = Settings::getInstance()->get_theme_name(); auto theme = Settings::getInstance()->get_theme_name();
if (theme == "Dark" || theme == "Midnight") { if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
connect(movie, &QMovie::frameChanged, [=]{ connect(movie, &QMovie::frameChanged, [=]{
ui->sendChatButton->setIcon(movie->currentPixmap()); ui->sendChatButton->setIcon(movie->currentPixmap());
@@ -2033,7 +1931,7 @@ void MainWindow::sendMoneyChat() {
QTimer::singleShot(1000, [=]() { QTimer::singleShot(1000, [=]() {
if (theme == "Dark" || theme == "Midnight") { if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
QPixmap send(":/icons/res/send-white.png"); QPixmap send(":/icons/res/send-white.png");
QIcon sendIcon(send); QIcon sendIcon(send);
ui->sendChatButton->setIcon(sendIcon); ui->sendChatButton->setIcon(sendIcon);
@@ -2071,7 +1969,7 @@ void MainWindow::sendMoneyChat() {
ui->memoTxtChat->setEnabled(true); ui->memoTxtChat->setEnabled(true);
if (theme == "Dark" || theme == "Midnight") { if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
QPixmap send(":/icons/res/send-white.png"); QPixmap send(":/icons/res/send-white.png");
QIcon sendIcon(send); QIcon sendIcon(send);
ui->sendChatButton->setIcon(sendIcon); ui->sendChatButton->setIcon(sendIcon);
@@ -2292,7 +2190,7 @@ void MainWindow::sendMoneyRequestChat() {
movie1->setFileName(":/img/res/loaderwhite.gif"); movie1->setFileName(":/img/res/loaderwhite.gif");
auto theme = Settings::getInstance()->get_theme_name(); auto theme = Settings::getInstance()->get_theme_name();
if (theme == "Dark" || theme == "Midnight") { if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
connect(movie, &QMovie::frameChanged, [=]{ connect(movie, &QMovie::frameChanged, [=]{
ui->sendChatButton->setIcon(movie->currentPixmap()); ui->sendChatButton->setIcon(movie->currentPixmap());
@@ -2321,7 +2219,7 @@ void MainWindow::sendMoneyRequestChat() {
QTimer::singleShot(1000, [=]() { QTimer::singleShot(1000, [=]() {
if (theme == "Dark" || theme == "Midnight") { if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
QPixmap send(":/icons/res/send-white.png"); QPixmap send(":/icons/res/send-white.png");
QIcon sendIcon(send); QIcon sendIcon(send);
ui->sendChatButton->setIcon(sendIcon); ui->sendChatButton->setIcon(sendIcon);
@@ -2354,7 +2252,7 @@ void MainWindow::sendMoneyRequestChat() {
movie->stop(); movie->stop();
if (theme == "Dark" || theme == "Midnight") { if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
QPixmap send(":/icons/res/send-white.png"); QPixmap send(":/icons/res/send-white.png");
QIcon sendIcon(send); QIcon sendIcon(send);
ui->sendChatButton->setIcon(sendIcon); ui->sendChatButton->setIcon(sendIcon);
@@ -2692,7 +2590,7 @@ void MainWindow::slot_change_theme(const QString& theme_name) {
Settings::getInstance()->set_theme_name(theme_name); Settings::getInstance()->set_theme_name(theme_name);
} else { } else {
qDebug() << __func__ << ": ignoring invalid theme_name=" << theme_name; qDebug() << __func__ << ": ignoring invalid theme_name=" << theme_name;
Settings::getInstance()->set_theme_name("Dark"); Settings::getInstance()->set_theme_name("dragonx");
} }
// Include css // Include css
@@ -2701,7 +2599,7 @@ void MainWindow::slot_change_theme(const QString& theme_name) {
saved_theme_name = Settings::getInstance()->get_theme_name(); saved_theme_name = Settings::getInstance()->get_theme_name();
} catch (const std::exception& e) { } catch (const std::exception& e) {
qDebug() << QString("Ignoring theme change Exception! : "); qDebug() << QString("Ignoring theme change Exception! : ");
saved_theme_name = "Dark"; saved_theme_name = "dragonx";
} }
QString filename = ":/css/res/css/" + saved_theme_name +".css"; QString filename = ":/css/res/css/" + saved_theme_name +".css";

View File

@@ -90,7 +90,7 @@
p, li { white-space: pre-wrap; } p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt; &lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;h1 align=&quot;center&quot; style=&quot; margin-top:18px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:xx-large; font-weight:600;&quot;&gt;DragonX + HushChat Terms of Service&lt;/span&gt;&lt;/h1&gt; &lt;h1 align=&quot;center&quot; style=&quot; margin-top:18px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:xx-large; font-weight:600;&quot;&gt;DragonX + HushChat Terms of Service&lt;/span&gt;&lt;/h1&gt;
&lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;All users of this platform agree to not use it for initiating or threatening any forceful interference or violence on an individual or their property, aka, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Non-aggression_principle&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#0000ff;&quot;&gt;Non-Aggression Principle&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt; &lt;p style=&quot; margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;All users of this platform agree to not use it for initiating or threatening any forceful interference or violence on an individual or their property, aka, the &lt;a href=&quot;https://en.wikipedia.org/wiki/Non-aggression_principle&quot;&gt;&lt;span style=&quot; text-decoration: underline; color:#6699ff;&quot;&gt;Non-Aggression Principle&lt;/span&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;THE SERVICE IS PROVIDED “AS IS” AND The Hush Developers DO NOT MAKE ANY SPECIFIC COMMITMENTS OR WARRANTIES ABOUT THE SERVICE.&lt;/p&gt; &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;THE SERVICE IS PROVIDED “AS IS” AND The Hush Developers DO NOT MAKE ANY SPECIFIC COMMITMENTS OR WARRANTIES ABOUT THE SERVICE.&lt;/p&gt;
&lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt; &lt;p style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;By clicking OK, you agree to use Hush, the SilentDragon family of wallets, HushChat, and any software developed by The Hush Developers in accordance with your local laws, that all liabilities related to using this service are your own, and The Hush Developers WILL NOT BE RESPONSIBLE FOR any losses related to using this software.&lt;/p&gt; &lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;By clicking OK, you agree to use Hush, the SilentDragon family of wallets, HushChat, and any software developed by The Hush Developers in accordance with your local laws, that all liabilities related to using this service are your own, and The Hush Developers WILL NOT BE RESPONSIBLE FOR any losses related to using this software.&lt;/p&gt;

View File

@@ -50,7 +50,7 @@ void RequestDialog::showPaymentConfirmation(MainWindow* main, QString paymentURI
PaymentURI payInfo = Settings::parseURI(paymentURI); PaymentURI payInfo = Settings::parseURI(paymentURI);
if (!payInfo.error.isEmpty()) { if (!payInfo.error.isEmpty()) {
QMessageBox::critical(main, tr("Error paying DRGX URI"), QMessageBox::critical(main, tr("Error paying DRGX URI"),
tr("URI should be of the form 'hush:<addr>?amt=x&memo=y") + "\n" + payInfo.error); tr("URI should be of the form 'drgx:<addr>?amt=x&memo=y") + "\n" + payInfo.error);
return; return;
} }
@@ -177,13 +177,13 @@ void RequestDialog::showRequesthush(MainWindow* main) {
req.txtFrom->setFocus(); req.txtFrom->setFocus();
if (d.exec() == QDialog::Accepted) { if (d.exec() == QDialog::Accepted) {
// Construct a hush Payment URI with the data and pay it immediately. // Construct a DRGX Payment URI with the data and pay it immediately.
CAmount amount = CAmount::fromDecimalString(req.txtAmount->text()); CAmount amount = CAmount::fromDecimalString(req.txtAmount->text());
QString memoURI = "hush:" + req.cmbMyAddress->currentText() QString memoURI = "drgx:" + req.cmbMyAddress->currentText()
+ "?amt=" + amount.toDecimalString() + "?amt=" + amount.toDecimalString()
+ "&memo=" + QUrl::toPercentEncoding(req.txtMemo->toPlainText()); + "&memo=" + QUrl::toPercentEncoding(req.txtMemo->toPlainText());
QString sendURI = "hush:" + AddressBook::addressFromAddressLabel(req.txtFrom->text()) QString sendURI = "drgx:" + AddressBook::addressFromAddressLabel(req.txtFrom->text())
+ "?amt=0.0001" + "?amt=0.0001"
+ "&memo=" + QUrl::toPercentEncoding(memoURI); + "&memo=" + QUrl::toPercentEncoding(memoURI);

View File

@@ -864,7 +864,7 @@ void MainWindow::sendButton() {
QMovie *movie1 = new QMovie(":/img/res/silentdragonxlite-animated-startup-dark.gif");; QMovie *movie1 = new QMovie(":/img/res/silentdragonxlite-animated-startup-dark.gif");;
QMovie *movie2 = new QMovie(":/img/res/silentdragonxlite-animated-startup-dark.gif");; QMovie *movie2 = new QMovie(":/img/res/silentdragonxlite-animated-startup-dark.gif");;
auto theme = Settings::getInstance()->get_theme_name(); auto theme = Settings::getInstance()->get_theme_name();
if (theme == "Dark" || theme == "Midnight") { if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
movie2->setScaledSize(QSize(512,512)); movie2->setScaledSize(QSize(512,512));
connD->topIcon->setMovie(movie2); connD->topIcon->setMovie(movie2);
movie2->start(); movie2->start();

View File

@@ -277,7 +277,7 @@ void Settings::set_currency_name(QString currency_name) {
QString Settings::get_theme_name() { QString Settings::get_theme_name() {
// Load from the QT Settings. // Load from the QT Settings.
return QSettings().value("options/theme_name", "Dark").toString(); return QSettings().value("options/theme_name", "dragonx").toString();
} }
void Settings::set_theme_name(QString theme_name) { void Settings::set_theme_name(QString theme_name) {
@@ -307,7 +307,11 @@ QString Settings::getRandomServer() {
// The more servers from different TLDs, the better // The more servers from different TLDs, the better
QList<QString> servers = { QList<QString> servers = {
"https://lite.dragonx.is", "https://lite.dragonx.is",
"https://dragonlite.printogre.com" "https://lite1.dragonx.is",
"https://lite2.dragonx.is",
"https://lite3.dragonx.is",
"https://lite4.dragonx.is",
"https://lite5.dragonx.is"
}; };
// we don't need cryptographic random-ness, but we want // we don't need cryptographic random-ness, but we want
@@ -401,7 +405,7 @@ PaymentURI Settings::parseURI(QString uri) {
return ans; return ans;
} }
uri = uri.right(uri.length() - QString("hush:").length()); uri = uri.right(uri.length() - QString("drgx:").length());
QRegExp re("([a-zA-Z0-9]+)"); QRegExp re("([a-zA-Z0-9]+)");
int pos; int pos;

View File

@@ -127,6 +127,11 @@
<verstretch>0</verstretch> <verstretch>0</verstretch>
</sizepolicy> </sizepolicy>
</property> </property>
<item>
<property name="text">
<string>dragonx</string>
</property>
</item>
<item> <item>
<property name="text"> <property name="text">
<string>Dark</string> <string>Dark</string>
@@ -152,6 +157,7 @@
<string>Default</string> <string>Default</string>
</property> </property>
</item> </item>
</widget> </widget>
<widget class="QCheckBox" name="chkFetchPrices"> <widget class="QCheckBox" name="chkFetchPrices">
<property name="geometry"> <property name="geometry">

View File

@@ -93,7 +93,7 @@ QVariant TxTableModel::data(const QModelIndex &index, int role) const {
QString theme_name = Settings::getInstance()->get_theme_name(); QString theme_name = Settings::getInstance()->get_theme_name();
QBrush b; QBrush b;
QColor color; QColor color;
if (theme_name == "Dark" || theme_name == "Midnight") { if (theme_name == "Dark" || theme_name == "Midnight" || theme_name == "dragonx") {
color = COLOR_WHITE; color = COLOR_WHITE;
}else{ }else{
color = COLOR_BLACK; color = COLOR_BLACK;
@@ -143,7 +143,7 @@ QVariant TxTableModel::data(const QModelIndex &index, int role) const {
// If there are multiple memos, then mark them as such // If there are multiple memos, then mark them as such
if (dat.items.length() == 1) { if (dat.items.length() == 1) {
auto memo = dat.items[0].memo; auto memo = dat.items[0].memo;
if (memo.startsWith("hush:")) { if (memo.startsWith("drgx:")) {
return Settings::paymentURIPretty(Settings::parseURI(memo)); return Settings::paymentURIPretty(Settings::parseURI(memo));
} else { } else {
return modeldata->at(index.row()).type + return modeldata->at(index.row()).type +
@@ -205,7 +205,7 @@ QVariant TxTableModel::data(const QModelIndex &index, int role) const {
} }
// If the memo is a Payment URI, then show a payment request icon // If the memo is a Payment URI, then show a payment request icon
if (dat.items.length() == 1 && dat.items[0].memo.startsWith("hush:")) { if (dat.items.length() == 1 && dat.items[0].memo.startsWith("drgx:")) {
QImage image = colorizeIcon(QIcon(":/icons/res/paymentreq.gif"), color); QImage image = colorizeIcon(QIcon(":/icons/res/paymentreq.gif"), color);
QIcon icon; QIcon icon;
icon.addPixmap(QPixmap::fromImage(image)); icon.addPixmap(QPixmap::fromImage(image));

View File

@@ -1 +1 @@
#define APP_VERSION "1.0.0" #define APP_VERSION "1.1.1"

View File

@@ -3,12 +3,12 @@
VERSION=$(cat src/version.h |cut -d\" -f2) VERSION=$(cat src/version.h |cut -d\" -f2)
echo "Compiling SilentDragonXLite $VERSION .exe with $JOBS threads..." echo "Compiling SilentDragonXLite $VERSION .exe with $JOBS threads..."
CONF=silentdragon-lite.pro CONF=silentdragonx-lite.pro
set -e set -e
echo 'source $HOME/.cargo/env' >> $HOME/.bashrc echo 'source $HOME/.cargo/env' >> $HOME/.bashrc
CC_x86_64_pc_windows_gnu="x86_64-w64-mingw32.static-gcc" CC_x86_64_pc_windows_gnu="x86_64-w64-mingw32.static-gcc"
PATH="/home/$USER/git/mxe/usr/bin:${PATH}" PATH="/home/$USER/mxe/usr/bin:${PATH}"
if [ ! -d "release" ] if [ ! -d "release" ]
then then
@@ -17,7 +17,7 @@ fi
cp src/precompiled.h release/ cp src/precompiled.h release/
qbuild () { qbuild () {
/home/$USER/git/mxe/usr/bin/x86_64-w64-mingw32.static-qmake-qt5 $CONF CONFIG+=release /home/$USER/mxe/usr/bin/x86_64-w64-mingw32.static-qmake-qt5 $CONF CONFIG+=release
#lupdate $CONF #lupdate $CONF
#lrelease $CONF #lrelease $CONF