Compare commits
22 Commits
45f69aa78f
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| 288b54be6c | |||
| 221231b53b | |||
| b7a04bebc1 | |||
| f5d26dd34d | |||
| ff8368ca97 | |||
| 7ec272df90 | |||
| e2071653b9 | |||
| 90383b0f43 | |||
| 5fe5447474 | |||
| cc34cc3f21 | |||
| e601048fd8 | |||
| cd5a9f3736 | |||
|
|
b0d7319182 | ||
|
|
336d85e6c7 | ||
|
|
54813c8827 | ||
|
|
0865358171 | ||
|
|
573fba9ba0 | ||
|
|
054dcb451b | ||
|
|
9947c14411 | ||
|
|
9f47d1e293 | ||
|
|
f620f6c519 | ||
|
|
00fe0ea59d |
@@ -1,6 +1,6 @@
|
||||
# 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
|
||||
|
||||
|
||||
55
RELEASE_NOTES_v1.1.0.md
Normal file
55
RELEASE_NOTES_v1.1.0.md
Normal 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
18
RELEASE_NOTES_v1.1.1.md
Normal 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
BIN
SilentDragonXLite
Executable file
Binary file not shown.
37
SilentDragonXLite_resource.rc
Normal file
37
SilentDragonXLite_resource.rc
Normal 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 */
|
||||
|
||||
@@ -103,7 +103,7 @@
|
||||
<file>res/css/Default.css</file>
|
||||
<file>res/css/Light.css</file>
|
||||
<file>res/css/Midnight.css</file>
|
||||
<file>res/css/test.css</file>
|
||||
<file>res/css/dragonx.css</file>
|
||||
</qresource>
|
||||
<qresource prefix="/images/blue">
|
||||
<file>res/images/blue/unchecked.png</file>
|
||||
|
||||
2
build.sh
2
build.sh
@@ -49,7 +49,7 @@ CONF=silentdragonx-lite.pro
|
||||
|
||||
set -e
|
||||
qbuild () {
|
||||
qmake $CONF CONFIG+=debug
|
||||
qmake $CONF CONFIG+=release
|
||||
#lupdate $CONF
|
||||
#lrelease $CONF
|
||||
# default to 2 jobs or use the -j value given as argument to this script
|
||||
|
||||
2
lib/.cargo/config.toml
Normal file
2
lib/.cargo/config.toml
Normal file
@@ -0,0 +1,2 @@
|
||||
[net]
|
||||
git-fetch-with-cli = true
|
||||
49
lib/Cargo.lock
generated
49
lib/Cargo.lock
generated
@@ -127,7 +127,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7f80256bc78f67e7df7e36d77366f636ed976895d91fe2ab9efa3973e8fe8c4f"
|
||||
dependencies = [
|
||||
"backtrace-sys",
|
||||
"cfg-if",
|
||||
"cfg-if 0.1.10",
|
||||
"libc",
|
||||
"rustc-demangle",
|
||||
]
|
||||
@@ -230,7 +230,7 @@ dependencies = [
|
||||
"arrayref",
|
||||
"arrayvec",
|
||||
"cc",
|
||||
"cfg-if",
|
||||
"cfg-if 0.1.10",
|
||||
"constant_time_eq",
|
||||
"crypto-mac",
|
||||
"digest",
|
||||
@@ -330,6 +330,12 @@ version = "0.1.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822"
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "1.0.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||
|
||||
[[package]]
|
||||
name = "chrono"
|
||||
version = "0.4.10"
|
||||
@@ -378,7 +384,7 @@ version = "1.2.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ba125de2af0df55319f41944744ad91c71113bf74a4646efff39afe1f6842db1"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cfg-if 0.1.10",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -394,7 +400,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4"
|
||||
dependencies = [
|
||||
"autocfg 0.1.7",
|
||||
"cfg-if",
|
||||
"cfg-if 0.1.10",
|
||||
"lazy_static",
|
||||
]
|
||||
|
||||
@@ -438,7 +444,7 @@ version = "2.0.2"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "13aea89a5c93364a98e9b37b2fa237effbb694d5cfe01c5b70941f7eb087d5e3"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cfg-if 0.1.10",
|
||||
"dirs-sys",
|
||||
]
|
||||
|
||||
@@ -448,7 +454,7 @@ version = "0.3.4"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "afa0b23de8fd801745c471deffa6e12d248f962c9fd4b4c33787b055599bde7b"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cfg-if 0.1.10",
|
||||
"libc",
|
||||
"redox_users",
|
||||
"winapi 0.3.8",
|
||||
@@ -523,7 +529,7 @@ version = "0.2.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1ff6d4dab0aa0c8e6346d46052e93b13a16cf847b54ed357087c35011048cc7d"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cfg-if 0.1.10",
|
||||
"libc",
|
||||
"redox_syscall",
|
||||
"winapi 0.3.8",
|
||||
@@ -541,7 +547,7 @@ version = "1.0.13"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "6bd6d6f4752952feb71363cffc9ebac9411b75b87c6ab6058c40c8900cf43c0f"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cfg-if 0.1.10",
|
||||
"crc32fast",
|
||||
"libc",
|
||||
"miniz_oxide",
|
||||
@@ -657,7 +663,7 @@ version = "0.1.14"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7abc8dd8451921606d809ba32e95b6111925cd2906060d2dcc29c070220503eb"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cfg-if 0.1.10",
|
||||
"libc",
|
||||
"wasi",
|
||||
]
|
||||
@@ -861,9 +867,9 @@ checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
|
||||
|
||||
[[package]]
|
||||
name = "libc"
|
||||
version = "0.2.66"
|
||||
version = "0.2.161"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558"
|
||||
checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1"
|
||||
|
||||
[[package]]
|
||||
name = "libflate"
|
||||
@@ -912,7 +918,7 @@ version = "0.4.8"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cfg-if 0.1.10",
|
||||
"serde",
|
||||
]
|
||||
|
||||
@@ -974,7 +980,7 @@ version = "0.6.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cfg-if 0.1.10",
|
||||
"fuchsia-zircon",
|
||||
"fuchsia-zircon-sys",
|
||||
"iovec",
|
||||
@@ -1044,7 +1050,7 @@ version = "0.2.33"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cfg-if 0.1.10",
|
||||
"libc",
|
||||
"winapi 0.3.8",
|
||||
]
|
||||
@@ -1335,6 +1341,7 @@ dependencies = [
|
||||
"lazy_static",
|
||||
"libc",
|
||||
"silentdragonxlitelib",
|
||||
"socket2",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
@@ -1849,7 +1856,6 @@ dependencies = [
|
||||
[[package]]
|
||||
name = "silentdragonxlitelib"
|
||||
version = "0.1.0"
|
||||
source = "git+https://git.hush.is/dragonx/silentdragonxlite-cli?rev=39ec5f36662ba7370dffa6c8346f93633dfa29ce#39ec5f36662ba7370dffa6c8346f93633dfa29ce"
|
||||
dependencies = [
|
||||
"base58",
|
||||
"bellman",
|
||||
@@ -1908,13 +1914,12 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "socket2"
|
||||
version = "0.3.11"
|
||||
version = "0.3.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "e8b74de517221a2cb01a53349cf54182acdc31a074727d3079068448c0676d85"
|
||||
checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cfg-if 1.0.0",
|
||||
"libc",
|
||||
"redox_syscall",
|
||||
"winapi 0.3.8",
|
||||
]
|
||||
|
||||
@@ -2011,7 +2016,7 @@ version = "3.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7a6e24d9338a0a5be79593e2fa15a648add6138caa803e2d5bc782c371732ca9"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cfg-if 0.1.10",
|
||||
"libc",
|
||||
"rand 0.7.3",
|
||||
"redox_syscall",
|
||||
@@ -2367,7 +2372,7 @@ version = "0.1.12"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1e213bd24252abeb86a0b7060e02df677d367ce6cb772cef17e9214b8390a8d3"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cfg-if 0.1.10",
|
||||
"log",
|
||||
"tracing-attributes",
|
||||
"tracing-core",
|
||||
@@ -2507,7 +2512,7 @@ version = "0.2.58"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "5205e9afdf42282b192e2310a5b463a6d1c1d774e30dc3c791ac37ab42d2616c"
|
||||
dependencies = [
|
||||
"cfg-if",
|
||||
"cfg-if 0.1.10",
|
||||
"wasm-bindgen-macro",
|
||||
]
|
||||
|
||||
|
||||
@@ -12,4 +12,5 @@ crate-type = ["staticlib"]
|
||||
libc = "0.2.58"
|
||||
lazy_static = "1.4.0"
|
||||
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"
|
||||
|
||||
@@ -3,7 +3,7 @@ ifeq ($(shell uname),Darwin)
|
||||
CFLAGS := "-mmacosx-version-min=10.11"
|
||||
else
|
||||
EXT := a
|
||||
CFLAGS := ""
|
||||
CFLAGS :=
|
||||
endif
|
||||
|
||||
PWD := $(shell pwd)
|
||||
|
||||
@@ -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_from_phrase
|
||||
(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_execute (const char* s, const char* args);
|
||||
extern void litelib_rust_free_string (char* s);
|
||||
extern char * blake3_PW (char* pw);
|
||||
extern bool litelib_check_server_online (const char* server);
|
||||
extern void litelib_shutdown (void);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
122
lib/src/lib.rs
122
lib/src/lib.rs
@@ -7,9 +7,21 @@ use std::ffi::{CStr, CString};
|
||||
use std::sync::{Mutex, Arc};
|
||||
use std::cell::RefCell;
|
||||
use std::ptr;
|
||||
use std::panic;
|
||||
|
||||
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,
|
||||
// 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++
|
||||
@@ -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
|
||||
let s_str = CString::new(seed).unwrap();
|
||||
let s_str = safe_cstring(&seed);
|
||||
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);
|
||||
|
||||
// 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 (config, _latest_block_height) = match LightClientConfig::create(server, dangerous) {
|
||||
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)
|
||||
}
|
||||
|
||||
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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub extern fn litelib_execute(cmd: *const c_char, args: *const c_char) -> *mut c_char {
|
||||
let cmd_str = unsafe {
|
||||
assert!(!cmd.is_null());
|
||||
|
||||
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 result = panic::catch_unwind(|| {
|
||||
let cmd_str = unsafe {
|
||||
assert!(!cmd.is_null());
|
||||
CStr::from_ptr(cmd).to_string_lossy().into_owned()
|
||||
};
|
||||
|
||||
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();
|
||||
return c_str.into_raw();
|
||||
if lc.borrow().is_none() {
|
||||
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
|
||||
@@ -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
|
||||
* back to rust, so it can be freed. Failure to call this function will result in a memory leak
|
||||
|
||||
@@ -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 {
|
||||
background-color: #232834;
|
||||
color: #91a4b8;
|
||||
color: white;
|
||||
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 {
|
||||
padding-left:20px;
|
||||
padding-right:20px;
|
||||
padding-top:5px;
|
||||
padding-bottom:5px;
|
||||
border: 1px solid #343F4B;
|
||||
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #343F4B, stop: 1 #232834);
|
||||
margin: 12px 4px;
|
||||
padding: 6px 4px;
|
||||
font-size: 20px;
|
||||
border: 0px solid white;
|
||||
border-radius: 9px;
|
||||
background-color: rgba(41, 21, 21, 1);
|
||||
min-width: 130px;
|
||||
}
|
||||
QTabWidget QTabBar::tab::last {
|
||||
min-width: 280px;
|
||||
}
|
||||
|
||||
QTabWidget QTabBar::tab:selected {
|
||||
min-height: 10px;
|
||||
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #343F4B, stop: 1 #232834);
|
||||
color:#91a4b8;
|
||||
border: 1px ridge #91a4b8;
|
||||
color: rgba(255, 255, 255, 0.85);
|
||||
border: 1px solid rgba(216, 38, 82, 0.85);
|
||||
background-color: rgba(216, 38, 82, 0.25);
|
||||
}
|
||||
|
||||
QTabWidget QTabBar::tab:hover {
|
||||
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #343F4B, stop: 1 #232834);
|
||||
color:#91a4b8;
|
||||
border: 1px ridge #91a4b8;
|
||||
min-height: 20px
|
||||
color: white;
|
||||
border: 1px solid rgba(216, 38, 82, 1);
|
||||
background-color: rgba(216, 38, 82, 0.4);
|
||||
}
|
||||
|
||||
QHeaderView {
|
||||
/* Table Header */
|
||||
background-color:#232834;
|
||||
background-color: rgba(0, 0, 0, 0);
|
||||
}
|
||||
|
||||
QHeaderView::section {
|
||||
/* Table Header Sections */
|
||||
qproperty-alignment:center;
|
||||
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #343F4B, stop: 1 #232834);
|
||||
color:#91a4b8;
|
||||
/* qproperty-alignment:center; */
|
||||
min-height:25px;
|
||||
font-weight:bold;
|
||||
font-size:11px;
|
||||
outline:0;
|
||||
border:1px solid #343F4B;
|
||||
border-right:1px solid #91a4b8;
|
||||
border-left:1px solid #91a4b8;
|
||||
padding-left:5px;
|
||||
padding-right:5px;
|
||||
padding-top: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;
|
||||
border:0px;
|
||||
|
||||
QLabel {
|
||||
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 {
|
||||
/* 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 {
|
||||
/* Table Item */
|
||||
background-color:#232834;
|
||||
border:1px solid #91a4b8;
|
||||
padding: 2px;
|
||||
color: white;
|
||||
font-size:12px;
|
||||
border: 1px solid rgba(216, 38, 82, .5);
|
||||
background-color:rgba(216, 38, 82, 0.25);
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
QTableView::item:selected {
|
||||
/* Table Item Selected */
|
||||
background-color:#91a4b8;
|
||||
color:#232834;
|
||||
margin: 4px 0;
|
||||
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);
|
||||
color: #91a4b8;
|
||||
|
||||
QTableView { outline:none; }
|
||||
|
||||
|
||||
QTableView#balancesTable {
|
||||
/* background-color: rgba(255, 255, 255, 0); */
|
||||
|
||||
}
|
||||
QMenuBar::item {
|
||||
background-color:qlineargradient(x1: 0, y1: 0, x2: 0, y2: 0.25, stop: 0 #343F4B, stop: 1 #232834);
|
||||
color: #91a4b8;
|
||||
QTableView#balancesTable::item {
|
||||
/* background-color: rgba(255, 255, 255, 0); */
|
||||
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;
|
||||
border-color: #91A4B8;
|
||||
padding: 10px;
|
||||
|
||||
QHeaderView::section::first {
|
||||
border-top-left-radius: 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 {
|
||||
background-color: #232834;
|
||||
QDialog#requestDialog QLabel#label_5,
|
||||
QDialog#requestDialog QLabel#label_6 {
|
||||
min-height: 25;
|
||||
padding-top: 2px;
|
||||
}
|
||||
QComboBox#genproclimit{
|
||||
font-size: 24px;
|
||||
height: 40px;
|
||||
|
||||
QDialog#requestDialog QPushButton {
|
||||
min-height: 32;
|
||||
}
|
||||
QMenu::item:selected{
|
||||
background-color: #343F4B
|
||||
QDialog#requestDialog QPushButton#addContact {
|
||||
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;
|
||||
}
|
||||
@@ -82,7 +82,7 @@
|
||||
<name>ConnectionDialog</name>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="29"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -279,7 +279,7 @@ p, li { white-space: pre-wrap; }
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="51"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -819,7 +819,7 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
@@ -1579,7 +1579,7 @@ Would you like to visit the releases page?</source>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2017"/>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
@@ -2037,7 +2037,7 @@ Would you like to visit the releases page?</source>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
|
||||
@@ -82,8 +82,8 @@
|
||||
<name>ConnectionDialog</name>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="29"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="70"/>
|
||||
@@ -509,8 +509,8 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="51"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="1592"/>
|
||||
@@ -918,8 +918,8 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="187"/>
|
||||
<source>SilentDragonLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonLite патрабуе 24 словы для аднаўлення кашалька</translation>
|
||||
<source>SilentDragonXLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonXLite патрабуе 24 словы для аднаўлення кашалька</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="198"/>
|
||||
@@ -1614,8 +1614,8 @@ Would you like to visit the releases page?</source>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2017"/>
|
||||
<location filename="../src/controller.cpp" line="2025"/>
|
||||
<source>Please wait for SilentDragonLite to exit</source>
|
||||
<translation>Пачакайце, калі ласка SilentDragonLite выходзіць</translation>
|
||||
<source>Please wait for SilentDragonXLite to exit</source>
|
||||
<translation>Пачакайце, калі ласка SilentDragonXLite выходзіць</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2018"/>
|
||||
@@ -2072,8 +2072,8 @@ Would you like to visit the releases page?</source>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/firsttimewizard.cpp" line="666"/>
|
||||
<source>SilentDragonLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonLite патрабуе 24 словы для аднаўлення кашалька</translation>
|
||||
<source>SilentDragonXLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonXLite патрабуе 24 словы для аднаўлення кашалька</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/firsttimewizard.cpp" line="678"/>
|
||||
@@ -2265,7 +2265,7 @@ Would you like to visit the releases page?</source>
|
||||
<message>
|
||||
<location filename="../src/about.ui" line="14"/>
|
||||
<source>About</source>
|
||||
<translation>Аб SilentDragonLite</translation>
|
||||
<translation>Аб SilentDragonXLite</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -2454,7 +2454,7 @@ p, li { white-space: pre-wrap; }
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:16pt;">Калі ласка, выкарыстоўвайце наступны hush-адрас для пераводу сродкаў на SilentDragonLite. Вы можаце скапіяваць адрас альбо скарыстаць QR-код. </span></p></body></html></translation>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:16pt;">Калі ласка, выкарыстоўвайце наступны hush-адрас для пераводу сродкаў на SilentDragonXLite. Вы можаце скапіяваць адрас альбо скарыстаць QR-код. </span></p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/deposithush.ui" line="134"/>
|
||||
|
||||
@@ -82,12 +82,12 @@
|
||||
<name>ConnectionDialog</name>
|
||||
<message>
|
||||
<source>silentdragon</source>
|
||||
<translation type="vanished">SilentDragonLite</translation>
|
||||
<translation type="vanished">SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="29"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="70"/>
|
||||
@@ -303,7 +303,7 @@ p, li { white-space: pre-wrap; }
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<source>silentdragon</source>
|
||||
<translation type="vanished">SilentDragonLite</translation>
|
||||
<translation type="vanished">SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="566"/>
|
||||
@@ -556,8 +556,8 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="51"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="1592"/>
|
||||
@@ -877,23 +877,23 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<source>You'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>
|
||||
<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>
|
||||
<source>Send Duke some private and shielded feedback about</source>
|
||||
<translation type="vanished">Sende DenioD anonym Feedback über</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source> or SilentDragonLite</source>
|
||||
<translation type="vanished"> oder SilentDragonLite</translation>
|
||||
<source> or SilentDragonXLite</source>
|
||||
<translation type="vanished"> oder SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send DenioD some private and shielded feedback about</source>
|
||||
@@ -952,12 +952,12 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<source>Your wallet is already encrypted with a password.
|
||||
Please use 'Remove Wallet Encryption' 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 'Verschlüsselung entfernen'.</translation>
|
||||
<translation type="vanished">SilentDragonXLite ist bereits mit einem Passwort verschlüsselt. Bitte benutzen Sie die Funktion 'Verschlüsselung entfernen'.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="555"/>
|
||||
@@ -972,11 +972,11 @@ Please use 'Remove Wallet Encryption' if you want to remove the wallet
|
||||
</message>
|
||||
<message>
|
||||
<source>Wallet Encrypted</source>
|
||||
<translation type="vanished">SilentDragonLite verschlüsselt</translation>
|
||||
<translation type="vanished">SilentDragonXLite verschlüsselt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<location filename="../src/mainwindow.cpp" line="616"/>
|
||||
@@ -987,15 +987,15 @@ Please use 'Remove Wallet Encryption' if you want to remove the wallet
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="537"/>
|
||||
<source>Wallet is not encrypted</source>
|
||||
<translation>SilentDragonLite ist nicht verschlüsselt</translation>
|
||||
<translation>SilentDragonXLite ist nicht verschlüsselt</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<source>Wallet Password</source>
|
||||
<translation type="vanished">SilentDragonLite Passwort</translation>
|
||||
<translation type="vanished">SilentDragonXLite Passwort</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please enter your wallet password</source>
|
||||
@@ -1003,11 +1003,11 @@ Please use 'Remove Wallet Encryption' if you want to remove the wallet
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<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>
|
||||
<source>Wallet Encryption Removed</source>
|
||||
@@ -1015,7 +1015,7 @@ Please use 'Remove Wallet Encryption' if you want to remove the wallet
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<location filename="../src/mainwindow.cpp" line="771"/>
|
||||
@@ -1034,13 +1034,13 @@ Please use 'Remove Wallet Encryption' if you want to remove the wallet
|
||||
<translation>Die übernahme der Änderung kann ein paar sekunden dauern.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please restart SilentDragonLite to have new currencies apply</source>
|
||||
<translation type="vanished">Bitte starten sie SilentDragonLite neu</translation>
|
||||
<source>Please restart SilentDragonXLite to have new currencies apply</source>
|
||||
<translation type="vanished">Bitte starten sie SilentDragonXLite neu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="1177"/>
|
||||
<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>
|
||||
<location filename="../src/mainwindow.cpp" line="1185"/>
|
||||
@@ -1070,7 +1070,7 @@ Please use 'Remove Wallet Encryption' if you want to remove the wallet
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
@@ -1548,7 +1548,7 @@ Anmerkung: Sie bnötigen 2 Bestätigungen {1
|
||||
</message>
|
||||
<message>
|
||||
<source>This is your new wallet'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>
|
||||
<location filename="../src/newseed.ui" line="20"/>
|
||||
@@ -1836,8 +1836,8 @@ Möchten Sie die Release Seite besuchen?</translation>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2017"/>
|
||||
<location filename="../src/controller.cpp" line="2025"/>
|
||||
<source>Please wait for SilentDragonLite to exit</source>
|
||||
<translation>Bitte warten Sie bis SilentDragonLite beendet ist</translation>
|
||||
<source>Please wait for SilentDragonXLite to exit</source>
|
||||
<translation>Bitte warten Sie bis SilentDragonXLite beendet ist</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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="783"/>
|
||||
<source>Node is still syncing.</source>
|
||||
<translation>SilentDragonLite synchronisiert noch.</translation>
|
||||
<translation>SilentDragonXLite synchronisiert noch.</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/websockets.cpp" line="716"/>
|
||||
@@ -2078,7 +2078,7 @@ Möchten Sie die Release Seite besuchen?</translation>
|
||||
<message>
|
||||
<location filename="../src/recurringmultiple.ui" line="44"/>
|
||||
<source>How should silentdragon proceed?</source>
|
||||
<translation>Wie soll SilentDragonLite die Zahlung verarbeiten?</translation>
|
||||
<translation>Wie soll SilentDragonXLite die Zahlung verarbeiten?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/recurringmultiple.ui" line="51"/>
|
||||
@@ -2318,7 +2318,7 @@ Möchten Sie die Release Seite besuchen?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
@@ -2671,7 +2671,7 @@ Möchten Sie die Release Seite besuchen?</translation>
|
||||
<message>
|
||||
<location filename="../src/confirm.ui" line="164"/>
|
||||
<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>
|
||||
</context>
|
||||
<context>
|
||||
@@ -2792,7 +2792,7 @@ li.checked::marker { content: "\2612"; }
|
||||
<message>
|
||||
<location filename="../src/encryption.ui" line="32"/>
|
||||
<source>Encrypt Your Wallet</source>
|
||||
<translation>SilentDragonLite verschlüsseln</translation>
|
||||
<translation>SilentDragonXLite verschlüsseln</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/encryption.ui" line="38"/>
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
<name>ConnectionDialog</name>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="29"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>DragónSilenciosoLigero</translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -364,7 +364,7 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="51"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>DragónSilenciosoLigero</translation>
|
||||
</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>
|
||||
</message>
|
||||
<message>
|
||||
<source> or SilentDragonLite</source>
|
||||
<source> or SilentDragonXLite</source>
|
||||
<translation type="vanished">o Dragón silencioso ligero</translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -1059,7 +1059,7 @@ Por favor use 'Eliminar la encriptacion de la billetera 'si desea elim
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
@@ -1785,7 +1785,7 @@ Would you like to visit the releases page?</source>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2017"/>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
@@ -2271,7 +2271,7 @@ Would you like to visit the releases page?</source>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
<name>ConnectionDialog</name>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="29"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>سایلنت دراگون سبک</translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -303,7 +303,7 @@ p, li { white-space: pre-wrap; }
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="51"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>سایلنت دراگون سبک</translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -943,7 +943,7 @@ Please use 'Remove Wallet Encryption' if you want to remove the wallet
|
||||
<translation>تغییر واحد پول</translation>
|
||||
</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>
|
||||
</message>
|
||||
<message>
|
||||
@@ -960,7 +960,7 @@ Please use 'Remove Wallet Encryption' if you want to remove the wallet
|
||||
<translation></translation>
|
||||
</message>
|
||||
<message>
|
||||
<source> or SilentDragonLite</source>
|
||||
<source> or SilentDragonXLite</source>
|
||||
<translation type="vanished">یا سایلنت دراگون سبک</translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -1051,7 +1051,7 @@ Please use 'Remove Wallet Encryption' if you want to remove the wallet
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
@@ -1807,7 +1807,7 @@ Would you like to visit the releases page?</source>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2017"/>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
@@ -2293,7 +2293,7 @@ Would you like to visit the releases page?</source>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
|
||||
@@ -90,8 +90,8 @@
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="29"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="70"/>
|
||||
@@ -520,8 +520,8 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="51"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="678"/>
|
||||
@@ -1174,8 +1174,8 @@ Veuillez utiliser "Supprimer le chiffrement du wallet" si vous souhait
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="187"/>
|
||||
<source>SilentDragonLite needs 24 words to restore wallet</source>
|
||||
<translation type="unfinished">SilentDragonLite a besoin de 24 mots pour restaurer son wallet</translation>
|
||||
<source>SilentDragonXLite needs 24 words to restore wallet</source>
|
||||
<translation type="unfinished">SilentDragonXLite a besoin de 24 mots pour restaurer son wallet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="198"/>
|
||||
@@ -1289,7 +1289,7 @@ Veuillez utiliser "Supprimer le chiffrement du wallet" si vous souhait
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<location filename="../src/mainwindow.cpp" line="835"/>
|
||||
@@ -1301,8 +1301,8 @@ Veuillez utiliser "Supprimer le chiffrement du wallet" si vous souhait
|
||||
<translation type="vanished">Quelques commentaires sur SilentDragonlite ou Hush ...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source> or SilentDragonLite</source>
|
||||
<translation type="vanished"> ou SilentDragonLite</translation>
|
||||
<source> or SilentDragonXLite</source>
|
||||
<translation type="vanished"> ou SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send DenioD some private and shielded feedback about</source>
|
||||
@@ -1980,8 +1980,8 @@ Voulez-vous visiter la page des nouvelles versions ?</translation>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2017"/>
|
||||
<location filename="../src/controller.cpp" line="2025"/>
|
||||
<source>Please wait for SilentDragonLite to exit</source>
|
||||
<translation>Merci d'attendre la fermeture de SilentDragonLite</translation>
|
||||
<source>Please wait for SilentDragonXLite to exit</source>
|
||||
<translation>Merci d'attendre la fermeture de SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<location filename="../src/firsttimewizard.cpp" line="666"/>
|
||||
<source>SilentDragonLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonLite a besoin de 24 mots pour restaurer son wallet</translation>
|
||||
<source>SilentDragonXLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonXLite a besoin de 24 mots pour restaurer son wallet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/firsttimewizard.cpp" line="678"/>
|
||||
|
||||
@@ -86,8 +86,8 @@
|
||||
<name>ConnectionDialog</name>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="29"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="70"/>
|
||||
@@ -304,8 +304,8 @@ p, li { white-space: pre-wrap; }
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="51"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="566"/>
|
||||
@@ -932,7 +932,7 @@ Molimo koristite 'Uklonite šifriranje novčanika' ako želite uklonit
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<location filename="../src/mainwindow.cpp" line="835"/>
|
||||
@@ -940,8 +940,8 @@ Molimo koristite 'Uklonite šifriranje novčanika' ako želite uklonit
|
||||
<translation>Razmjena valuta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please restart SilentDragonLite to have new currencies apply</source>
|
||||
<translation type="vanished">Molimo ponovno pokrenite SilentDragonLite ako želite primjeniti novu valutu</translation>
|
||||
<source>Please restart SilentDragonXLite to have new currencies apply</source>
|
||||
<translation type="vanished">Molimo ponovno pokrenite SilentDragonXLite ako želite primjeniti novu valutu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="835"/>
|
||||
@@ -950,15 +950,15 @@ Molimo koristite 'Uklonite šifriranje novčanika' ako želite uklonit
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
<source> or SilentDragonLite</source>
|
||||
<translation type="vanished"> ili SilentDragonLite</translation>
|
||||
<source> or SilentDragonXLite</source>
|
||||
<translation type="vanished"> ili SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="1011"/>
|
||||
@@ -1044,8 +1044,8 @@ Molimo koristite 'Uklonite šifriranje novčanika' ako želite uklonit
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="187"/>
|
||||
<source>SilentDragonLite needs 24 words to restore wallet</source>
|
||||
<translation type="unfinished">SilentDragonLite treba 24 riječi za obnovu novčanika</translation>
|
||||
<source>SilentDragonXLite needs 24 words to restore wallet</source>
|
||||
<translation type="unfinished">SilentDragonXLite treba 24 riječi za obnovu novčanika</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="198"/>
|
||||
@@ -1810,8 +1810,8 @@ Would you like to visit the releases page?</source>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2017"/>
|
||||
<location filename="../src/controller.cpp" line="2025"/>
|
||||
<source>Please wait for SilentDragonLite to exit</source>
|
||||
<translation>Molimo pričekajte da se SilentDragonLite zatvori</translation>
|
||||
<source>Please wait for SilentDragonXLite to exit</source>
|
||||
<translation>Molimo pričekajte da se SilentDragonXLite zatvori</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2018"/>
|
||||
@@ -2296,8 +2296,8 @@ Would you like to visit the releases page?</source>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/firsttimewizard.cpp" line="666"/>
|
||||
<source>SilentDragonLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonLite treba 24 riječi za obnovu novčanika</translation>
|
||||
<source>SilentDragonXLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonXLite treba 24 riječi za obnovu novčanika</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/firsttimewizard.cpp" line="678"/>
|
||||
|
||||
@@ -82,8 +82,8 @@
|
||||
<name>ConnectionDialog</name>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="29"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="70"/>
|
||||
@@ -326,8 +326,8 @@ p, li { white-space: pre-wrap; }
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="51"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="567"/>
|
||||
@@ -948,8 +948,8 @@ Mohon Gunakan 'Hapus Enkripsi Dompet' Jika anda ingin menghapus Enkrip
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="207"/>
|
||||
<source>SilentDragonLite needs 24 words to restore wallet</source>
|
||||
<translation type="unfinished">SilentDragonLite membutuhkan 24 kata untuk mengembalikan dompet</translation>
|
||||
<source>SilentDragonXLite needs 24 words to restore wallet</source>
|
||||
<translation type="unfinished">SilentDragonXLite membutuhkan 24 kata untuk mengembalikan dompet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="218"/>
|
||||
@@ -993,8 +993,8 @@ Mohon Gunakan 'Hapus Enkripsi Dompet' Jika anda ingin menghapus Enkrip
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="918"/>
|
||||
<source> or SilentDragonLite</source>
|
||||
<translation>atau SilentDragonLite</translation>
|
||||
<source> or SilentDragonXLite</source>
|
||||
<translation>atau SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="918"/>
|
||||
@@ -1763,8 +1763,8 @@ Maukah anda mengunjungi laman pembaruan ini</translation>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2042"/>
|
||||
<location filename="../src/controller.cpp" line="2050"/>
|
||||
<source>Please wait for SilentDragonLite to exit</source>
|
||||
<translation>Mohon tunggu untuk SilentDragonLite untuk keluar</translation>
|
||||
<source>Please wait for SilentDragonXLite to exit</source>
|
||||
<translation>Mohon tunggu untuk SilentDragonXLite untuk keluar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2043"/>
|
||||
@@ -2236,8 +2236,8 @@ Maukah anda mengunjungi laman pembaruan ini</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/firsttimewizard.cpp" line="643"/>
|
||||
<source>SilentDragonLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonLite membutuhkan 24 kata untuk mengembalikan dompet</translation>
|
||||
<source>SilentDragonXLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonXLite membutuhkan 24 kata untuk mengembalikan dompet</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/firsttimewizard.cpp" line="653"/>
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="29"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -509,7 +509,7 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="51"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -1017,7 +1017,7 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
@@ -1756,7 +1756,7 @@ Would you like to visit the releases page?</source>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2017"/>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
@@ -2416,7 +2416,7 @@ Avete fondi non confermati o il saldo è troppo basso per una migrazione automat
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
<name>ConnectionDialog</name>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="29"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>Silent Dragon Lite</translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -508,7 +508,7 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="51"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>Silent Dragon Lite</translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -912,7 +912,7 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
@@ -1608,7 +1608,7 @@ Wilt u de releasepagina bezoeken?</translation>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2017"/>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
@@ -2066,7 +2066,7 @@ Wilt u de releasepagina bezoeken?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
|
||||
@@ -82,8 +82,8 @@
|
||||
<name>ConnectionDialog</name>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="29"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="70"/>
|
||||
@@ -514,8 +514,8 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="51"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="1592"/>
|
||||
@@ -918,8 +918,8 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="187"/>
|
||||
<source>SilentDragonLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonLite potrzebuje 24 słów, aby przywrócić portfel</translation>
|
||||
<source>SilentDragonXLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonXLite potrzebuje 24 słów, aby przywrócić portfel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="198"/>
|
||||
@@ -1611,8 +1611,8 @@ Czy chciałbyś odwiedzić stronę wydań?</translation>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2017"/>
|
||||
<location filename="../src/controller.cpp" line="2025"/>
|
||||
<source>Please wait for SilentDragonLite to exit</source>
|
||||
<translation>Proszę poczekać na SilentDragonLite zakończy pracę</translation>
|
||||
<source>Please wait for SilentDragonXLite to exit</source>
|
||||
<translation>Proszę poczekać na SilentDragonXLite zakończy pracę</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2018"/>
|
||||
@@ -2069,8 +2069,8 @@ Czy chciałbyś odwiedzić stronę wydań?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/firsttimewizard.cpp" line="666"/>
|
||||
<source>SilentDragonLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonLite potrzebuje 24 słów, aby przywrócić portfel</translation>
|
||||
<source>SilentDragonXLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonXLite potrzebuje 24 słów, aby przywrócić portfel</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/firsttimewizard.cpp" line="678"/>
|
||||
@@ -2262,7 +2262,7 @@ Czy chciałbyś odwiedzić stronę wydań?</translation>
|
||||
<message>
|
||||
<location filename="../src/about.ui" line="14"/>
|
||||
<source>About</source>
|
||||
<translation>O SilentDragonLite</translation>
|
||||
<translation>O SilentDragonXLite</translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
@@ -2451,7 +2451,7 @@ p, li { white-space: pre-wrap; }
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:16pt;">Prosimy o użycie następującego hush adresu do przelewu środków na SilentDragonLite. Można skopiować adres lub użyć kodu QR. </span></p></body></html></translation>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:16pt;">Prosimy o użycie następującego hush adresu do przelewu środków na SilentDragonXLite. Można skopiować adres lub użyć kodu QR. </span></p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/deposithush.ui" line="134"/>
|
||||
|
||||
@@ -90,8 +90,8 @@
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="29"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="70"/>
|
||||
@@ -703,8 +703,8 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="51"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="744"/>
|
||||
@@ -956,8 +956,8 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="187"/>
|
||||
<source>SilentDragonLite needs 24 words to restore wallet</source>
|
||||
<translation type="unfinished">SilentDragonLite precisa de 24 palavras para recuperar a carteira</translation>
|
||||
<source>SilentDragonXLite needs 24 words to restore wallet</source>
|
||||
<translation type="unfinished">SilentDragonXLite precisa de 24 palavras para recuperar a carteira</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="198"/>
|
||||
@@ -1252,7 +1252,7 @@ Por favor usa 'Desencriptar carteira' se quiser remover a encriptaçã
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<location filename="../src/mainwindow.cpp" line="835"/>
|
||||
@@ -1264,8 +1264,8 @@ Por favor usa 'Desencriptar carteira' se quiser remover a encriptaçã
|
||||
<translation type="vanished">Alguma sugestão acerca da SilentDragonlite ou Hush...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source> or SilentDragonLite</source>
|
||||
<translation type="vanished">ou SilentDragonLite</translation>
|
||||
<source> or SilentDragonXLite</source>
|
||||
<translation type="vanished">ou SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Send DenioD some private and shielded feedback about</source>
|
||||
@@ -1924,8 +1924,8 @@ Would you like to visit the releases page?</source>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2017"/>
|
||||
<location filename="../src/controller.cpp" line="2025"/>
|
||||
<source>Please wait for SilentDragonLite to exit</source>
|
||||
<translation>Por favor aguarde pela SilentDragonLite terminar</translation>
|
||||
<source>Please wait for SilentDragonXLite to exit</source>
|
||||
<translation>Por favor aguarde pela SilentDragonXLite terminar</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2018"/>
|
||||
@@ -1935,7 +1935,7 @@ Would you like to visit the releases page?</source>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<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>
|
||||
<location filename="../src/firsttimewizard.cpp" line="666"/>
|
||||
<source>SilentDragonLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonLite precisa de 24 palavras para recuperar a carteira</translation>
|
||||
<source>SilentDragonXLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonXLite precisa de 24 palavras para recuperar a carteira</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/firsttimewizard.cpp" line="678"/>
|
||||
|
||||
@@ -82,8 +82,8 @@
|
||||
<name>ConnectionDialog</name>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="29"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="70"/>
|
||||
@@ -326,8 +326,8 @@ p, li { white-space: pre-wrap; }
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="51"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="567"/>
|
||||
@@ -933,7 +933,7 @@ Rugam sa folositi 'Eliminati Criptarea Portofelului' daca doriti sa el
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="916"/>
|
||||
<source>Some feedback about SilentDragonlite or Hush...</source>
|
||||
<translation>Feedback despre SilentDragonLite sau Hush...</translation>
|
||||
<translation>Feedback despre SilentDragonXLite sau Hush...</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="832"/>
|
||||
@@ -948,8 +948,8 @@ Rugam sa folositi 'Eliminati Criptarea Portofelului' daca doriti sa el
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="207"/>
|
||||
<source>SilentDragonLite needs 24 words to restore wallet</source>
|
||||
<translation type="unfinished">SilentDragonLite are nevoie de semnatura de 24 de cuvinte pentru restabilirea portofelului</translation>
|
||||
<source>SilentDragonXLite needs 24 words to restore wallet</source>
|
||||
<translation type="unfinished">SilentDragonXLite are nevoie de semnatura de 24 de cuvinte pentru restabilirea portofelului</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="218"/>
|
||||
@@ -993,8 +993,8 @@ Rugam sa folositi 'Eliminati Criptarea Portofelului' daca doriti sa el
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="918"/>
|
||||
<source> or SilentDragonLite</source>
|
||||
<translation>sau SilentDragonLite</translation>
|
||||
<source> or SilentDragonXLite</source>
|
||||
<translation>sau SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="918"/>
|
||||
@@ -1755,8 +1755,8 @@ Doriti sa vizitati pagina veriunii?</translation>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2042"/>
|
||||
<location filename="../src/controller.cpp" line="2050"/>
|
||||
<source>Please wait for SilentDragonLite to exit</source>
|
||||
<translation>Rugam sa asteptati pina ce SilentDragonLite sa o sa iasa</translation>
|
||||
<source>Please wait for SilentDragonXLite to exit</source>
|
||||
<translation>Rugam sa asteptati pina ce SilentDragonXLite sa o sa iasa</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2043"/>
|
||||
@@ -2228,8 +2228,8 @@ Doriti sa vizitati pagina veriunii?</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/firsttimewizard.cpp" line="643"/>
|
||||
<source>SilentDragonLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonLite are nevoie de semnatura de 24 de cuvinte pentru restabilirea portofelului</translation>
|
||||
<source>SilentDragonXLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonXLite are nevoie de semnatura de 24 de cuvinte pentru restabilirea portofelului</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/firsttimewizard.cpp" line="653"/>
|
||||
|
||||
@@ -82,8 +82,8 @@
|
||||
<name>ConnectionDialog</name>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="29"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="70"/>
|
||||
@@ -478,8 +478,8 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="51"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="678"/>
|
||||
@@ -903,8 +903,8 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="187"/>
|
||||
<source>SilentDragonLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonLite требует 24 слова для восстановления кошелька</translation>
|
||||
<source>SilentDragonXLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonXLite требует 24 слова для восстановления кошелька</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="198"/>
|
||||
@@ -1475,8 +1475,8 @@ Would you like to visit the releases page?</source>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2017"/>
|
||||
<location filename="../src/controller.cpp" line="2025"/>
|
||||
<source>Please wait for SilentDragonLite to exit</source>
|
||||
<translation>Пожалуйста подождите SilentDragonLite для выхода</translation>
|
||||
<source>Please wait for SilentDragonXLite to exit</source>
|
||||
<translation>Пожалуйста подождите SilentDragonXLite для выхода</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2018"/>
|
||||
@@ -2072,8 +2072,8 @@ Would you like to visit the releases page?</source>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/firsttimewizard.cpp" line="666"/>
|
||||
<source>SilentDragonLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonLite нужно 24 слова для восстановления кошелька</translation>
|
||||
<source>SilentDragonXLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonXLite нужно 24 слова для восстановления кошелька</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/firsttimewizard.cpp" line="678"/>
|
||||
@@ -2454,7 +2454,7 @@ p, li { white-space: pre-wrap; }
|
||||
<html><head><meta name="qrichtext" content="1" /><style type="text/css">
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:16pt;">Используйте следующий hush адрес для перевода средств в SilentDragonLite. Вы можете скопировать адрес или использовать QR-код. </span></p></body></html></translation>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:16pt;">Используйте следующий hush адрес для перевода средств в SilentDragonXLite. Вы можете скопировать адрес или использовать QR-код. </span></p></body></html></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/deposithush.ui" line="134"/>
|
||||
|
||||
@@ -86,8 +86,8 @@
|
||||
<name>ConnectionDialog</name>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="29"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="70"/>
|
||||
@@ -304,8 +304,8 @@ p, li { white-space: pre-wrap; }
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="51"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="566"/>
|
||||
@@ -932,7 +932,7 @@ Molimo koristite 'Uklonite šifrovanje novčanika' ako želite uklonit
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<location filename="../src/mainwindow.cpp" line="835"/>
|
||||
@@ -940,8 +940,8 @@ Molimo koristite 'Uklonite šifrovanje novčanika' ako želite uklonit
|
||||
<translation>Razmena valuta</translation>
|
||||
</message>
|
||||
<message>
|
||||
<source>Please restart SilentDragonLite to have new currencies apply</source>
|
||||
<translation type="vanished">Molimo ponovo pokrenite SilentDragonLite ako želite primeniti novu valutu</translation>
|
||||
<source>Please restart SilentDragonXLite to have new currencies apply</source>
|
||||
<translation type="vanished">Molimo ponovo pokrenite SilentDragonXLite ako želite primeniti novu valutu</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="835"/>
|
||||
@@ -950,15 +950,15 @@ Molimo koristite 'Uklonite šifrovanje novčanika' ako želite uklonit
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
<source> or SilentDragonLite</source>
|
||||
<translation type="vanished"> ili SilentDragonLite</translation>
|
||||
<source> or SilentDragonXLite</source>
|
||||
<translation type="vanished"> ili SilentDragonXLite</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="1011"/>
|
||||
@@ -1044,8 +1044,8 @@ Molimo koristite 'Uklonite šifrovanje novčanika' ako želite uklonit
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="187"/>
|
||||
<source>SilentDragonLite needs 24 words to restore wallet</source>
|
||||
<translation type="unfinished">SilentDragonLite treba 24 reči za obnovu novčanika</translation>
|
||||
<source>SilentDragonXLite needs 24 words to restore wallet</source>
|
||||
<translation type="unfinished">SilentDragonXLite treba 24 reči za obnovu novčanika</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="198"/>
|
||||
@@ -1810,8 +1810,8 @@ Would you like to visit the releases page?</source>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2017"/>
|
||||
<location filename="../src/controller.cpp" line="2025"/>
|
||||
<source>Please wait for SilentDragonLite to exit</source>
|
||||
<translation>Molimo pričekajte da se SilentDragonLite zatvori</translation>
|
||||
<source>Please wait for SilentDragonXLite to exit</source>
|
||||
<translation>Molimo pričekajte da se SilentDragonXLite zatvori</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2018"/>
|
||||
@@ -2296,8 +2296,8 @@ Would you like to visit the releases page?</source>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/firsttimewizard.cpp" line="666"/>
|
||||
<source>SilentDragonLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonLite treba 24 reči za obnovu novčanika</translation>
|
||||
<source>SilentDragonXLite needs 24 words to restore wallet</source>
|
||||
<translation>SilentDragonXLite treba 24 reči za obnovu novčanika</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/firsttimewizard.cpp" line="678"/>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<name>ConnectionDialog</name>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="17"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -102,7 +102,7 @@ Please enter your wallet password</source>
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="14"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -681,7 +681,7 @@ Please use 'Remove Wallet Encryption' if you want to remove the wallet
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="537"/>
|
||||
<source> or SilentDragonLite</source>
|
||||
<source> or SilentDragonXLite</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -1212,7 +1212,7 @@ Would you like to visit the releases page?</source>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
@@ -1616,7 +1616,7 @@ Would you like to visit the releases page?</source>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
|
||||
@@ -577,7 +577,7 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="51"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -1100,7 +1100,7 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
@@ -1900,7 +1900,7 @@ Yayınlanan sürümler sayfasını ziyaret etmek ister misiniz?</translation>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2017"/>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
@@ -2609,7 +2609,7 @@ Onaylanmamış fonunuz var veya otomatik geçiş için bakiye çok düşük.</tr
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
|
||||
@@ -86,8 +86,8 @@
|
||||
<name>ConnectionDialog</name>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="29"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite سائلینٹ ڈراگون لائٹ</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite سائلینٹ ڈراگون لائٹ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="70"/>
|
||||
@@ -330,8 +330,8 @@ p, li { white-space: pre-wrap; }
|
||||
<name>MainWindow</name>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="51"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<translation>SilentDragonLite سائلینٹ ڈراگون لائٹ</translation>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation>SilentDragonXLite سائلینٹ ڈراگون لائٹ</translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="567"/>
|
||||
@@ -952,7 +952,7 @@ Please use 'Remove Wallet Encryption' if you want to remove the wallet
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
@@ -997,7 +997,7 @@ Please use 'Remove Wallet Encryption' if you want to remove the wallet
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.cpp" line="918"/>
|
||||
<source> or SilentDragonLite</source>
|
||||
<source> or SilentDragonXLite</source>
|
||||
<translation>یا سائلنٹ ڈریگن لائٹ</translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -1772,7 +1772,7 @@ Would you like to visit the releases page?</source>
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2042"/>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
@@ -2253,7 +2253,7 @@ Would you like to visit the releases page?</source>
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/connection.ui" line="29"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -383,7 +383,7 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../src/mainwindow.ui" line="51"/>
|
||||
<source>SilentDragonLite</source>
|
||||
<source>SilentDragonXLite</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
@@ -1058,7 +1058,7 @@ p, li { white-space: pre-wrap; }
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
@@ -1986,7 +1986,7 @@ Please set the host/port and user/password in the Edit->Settings menu.</sourc
|
||||
<message>
|
||||
<location filename="../src/controller.cpp" line="2017"/>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
@@ -2557,7 +2557,7 @@ You either have unconfirmed funds or the balance is too low for an automatic mig
|
||||
</message>
|
||||
<message>
|
||||
<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>
|
||||
</message>
|
||||
<message>
|
||||
|
||||
@@ -201,11 +201,11 @@ distclean.depends += librustclean
|
||||
QMAKE_EXTRA_TARGETS += librust libsodium librustclean distclean
|
||||
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: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
|
||||
|
||||
INCLUDEPATH += $$PWD/res
|
||||
|
||||
16
silentdragonxlite_plugin_import.cpp
Normal file
16
silentdragonxlite_plugin_import.cpp
Normal 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)
|
||||
@@ -18,7 +18,7 @@
|
||||
<item>
|
||||
<widget class="QGroupBox" name="groupBox">
|
||||
<property name="title">
|
||||
<string notr="true">SilentDragonLite</string>
|
||||
<string notr="true">SilentDragonXLite</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
|
||||
@@ -212,7 +212,7 @@ void AddressBook::open(MainWindow* parent, QLineEdit* target)
|
||||
QMessageBox::critical(
|
||||
parent,
|
||||
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
|
||||
);
|
||||
return;
|
||||
|
||||
@@ -105,7 +105,7 @@ QVariant BalancesTableModel::data(const QModelIndex &index, int role) const
|
||||
QString theme_name = Settings::getInstance()->get_theme_name();
|
||||
QBrush b;
|
||||
QColor color;
|
||||
if (theme_name == "Dark" || theme_name == "Midnight") {
|
||||
if (theme_name == "Dark" || theme_name == "Midnight" || theme_name == "dragonx") {
|
||||
color = COLOR_WHITE;
|
||||
}else{
|
||||
color = COLOR_BLACK;
|
||||
|
||||
@@ -15,14 +15,16 @@
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QWidget{
|
||||
background: whitesmoke;
|
||||
border: 1px solid #afafaf;
|
||||
background: rgba(216, 38, 82, 0.15);
|
||||
border: 1px solid rgba(216, 38, 82, 0.4);
|
||||
border-radius: 3px;
|
||||
color: white;
|
||||
}
|
||||
QLabel
|
||||
{
|
||||
background: none;
|
||||
border: none;
|
||||
color: rgba(255, 255, 255, 0.9);
|
||||
}</string>
|
||||
</property>
|
||||
<widget class="QLabel" name="lblMessage">
|
||||
|
||||
@@ -15,14 +15,16 @@
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">QWidget{
|
||||
background: #c8e1ff;
|
||||
border: 1px solid #fefefe;
|
||||
background: rgba(41, 21, 21, 0.75);
|
||||
border: 1px solid rgba(216, 38, 82, 0.3);
|
||||
border-radius: 3px;
|
||||
color: white;
|
||||
}
|
||||
QLabel
|
||||
{
|
||||
background: none;
|
||||
border: none;
|
||||
color: rgba(255, 255, 255, 0.85);
|
||||
}</string>
|
||||
</property>
|
||||
<widget class="QLabel" name="lblMessage">
|
||||
|
||||
@@ -97,7 +97,7 @@ void MainWindow::renderContactRequest(){
|
||||
|
||||
QString icon;
|
||||
auto theme = Settings::getInstance()->get_theme_name();
|
||||
if (theme == "Dark" || theme == "Midnight") {
|
||||
if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
|
||||
icon = ":/icons/res/unknownWhite.png";
|
||||
}else{
|
||||
icon = ":/icons/res/unknownBlack.png";
|
||||
@@ -571,7 +571,7 @@ void MainWindow::sendChat() {
|
||||
movie1->setFileName(":/img/res/loaderwhite.gif");
|
||||
|
||||
auto theme = Settings::getInstance()->get_theme_name();
|
||||
if (theme == "Dark" || theme == "Midnight") {
|
||||
if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
|
||||
|
||||
connect(movie, &QMovie::frameChanged, [=]{
|
||||
ui->sendChatButton->setIcon(movie->currentPixmap());
|
||||
@@ -603,7 +603,7 @@ void MainWindow::sendChat() {
|
||||
|
||||
QTimer::singleShot(1000, [=]() {
|
||||
|
||||
if (theme == "Dark" || theme == "Midnight") {
|
||||
if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
|
||||
QPixmap send(":/icons/res/send-white.png");
|
||||
QIcon sendIcon(send);
|
||||
ui->sendChatButton->setIcon(sendIcon);
|
||||
@@ -640,7 +640,7 @@ void MainWindow::sendChat() {
|
||||
movie->stop();
|
||||
|
||||
|
||||
if (theme == "Dark" || theme == "Midnight") {
|
||||
if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
|
||||
QPixmap send(":/icons/res/send-white.png");
|
||||
QIcon sendIcon(send);
|
||||
ui->sendChatButton->setIcon(sendIcon);
|
||||
@@ -870,7 +870,7 @@ void MainWindow::ContactRequest() {
|
||||
QMovie *movie1 = 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();
|
||||
if (theme == "Dark" || theme == "Midnight") {
|
||||
if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
|
||||
movie2->setScaledSize(QSize(512,512));
|
||||
connD->topIcon->setMovie(movie2);
|
||||
movie2->start();
|
||||
|
||||
@@ -37,7 +37,7 @@ ConnectionLoader::ConnectionLoader(MainWindow* main, Controller* rpc)
|
||||
//DEBUG("theme " << theme << " has loaded");
|
||||
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");;
|
||||
movie2->setScaledSize(size);
|
||||
qDebug() << "Animation dark loaded";
|
||||
@@ -108,6 +108,7 @@ void ConnectionLoader::ShowProgress()
|
||||
}
|
||||
|
||||
auto me = this;
|
||||
delete isSyncing;
|
||||
isSyncing = new QAtomicInteger<bool>(true);
|
||||
DEBUG("isSyncing set to true");
|
||||
|
||||
@@ -123,6 +124,9 @@ void ConnectionLoader::ShowProgress()
|
||||
DEBUG("sync rpc error! server=" << config->server);
|
||||
});
|
||||
|
||||
lastSyncedBlock = -1;
|
||||
syncStallCount = 0;
|
||||
|
||||
QObject::connect(syncTimer, &QTimer::timeout, [=]() {
|
||||
if (!isSyncing || !isSyncing->load()) {
|
||||
DEBUG("Syncing complete or isSyncing is null, stopping timer");
|
||||
@@ -140,6 +144,29 @@ void ConnectionLoader::ShowProgress()
|
||||
me->showInformation(
|
||||
"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) {
|
||||
DEBUG("Sync status error: " << err);
|
||||
@@ -148,7 +175,6 @@ void ConnectionLoader::ShowProgress()
|
||||
});
|
||||
} catch (const std::exception& e) {
|
||||
DEBUG("Exception caught in syncstatus: " << e.what());
|
||||
throw;
|
||||
}
|
||||
});
|
||||
|
||||
@@ -225,6 +251,7 @@ void ConnectionLoader::doAutoConnect()
|
||||
DEBUG("Connection is online.");
|
||||
connection->setInfo(reply);
|
||||
DEBUG("getting Connection reply");
|
||||
delete isSyncing;
|
||||
isSyncing = new QAtomicInteger<bool>();
|
||||
isSyncing->store(true);
|
||||
DEBUG("isSyncing set to true");
|
||||
@@ -239,7 +266,76 @@ void ConnectionLoader::doAutoConnect()
|
||||
syncTimer->deleteLater();
|
||||
// When sync is done, set the 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);
|
||||
// Attempt to retry sync RPC with a 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.
|
||||
// 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, [=]() {
|
||||
DEBUG("Check the sync status");
|
||||
if (isSyncing != nullptr && isSyncing->load()) {
|
||||
@@ -269,6 +371,38 @@ void ConnectionLoader::doAutoConnect()
|
||||
me->showInformation(
|
||||
"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) {
|
||||
|
||||
@@ -49,6 +49,10 @@ private:
|
||||
QTimer* syncTimer = nullptr;
|
||||
QAtomicInteger<bool>* isSyncing = nullptr;
|
||||
|
||||
qint64 lastSyncedBlock = -1;
|
||||
int syncStallCount = 0;
|
||||
bool reorgHandled = false;
|
||||
|
||||
QDialog* d = nullptr;
|
||||
Ui_ConnectionDialog* connD = nullptr;
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
</size>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>SilentDragonLite</string>
|
||||
<string>SilentDragonXLite</string>
|
||||
</property>
|
||||
<property name="modal">
|
||||
<bool>true</bool>
|
||||
|
||||
@@ -130,13 +130,13 @@ void MainWindow::showRequesthush() {
|
||||
}
|
||||
|
||||
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());
|
||||
QString memoURI = "hush:" + req.lblAddressInfo->text()
|
||||
QString memoURI = "drgx:" + req.lblAddressInfo->text()
|
||||
+ "?amt=" + amount.toDecimalString()
|
||||
+ "&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"
|
||||
+ "&memo=" + QUrl::toPercentEncoding(memoURI);
|
||||
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "settings.h"
|
||||
#include "version.h"
|
||||
#include "camount.h"
|
||||
#include "../lib/silentdragonxlitelib.h"
|
||||
#include "Model/ChatItem.h"
|
||||
#include "DataStore/DataStore.h"
|
||||
#include <future>
|
||||
@@ -320,9 +321,10 @@ void Controller::getInfoThenRefresh(bool force)
|
||||
int curBlock = reply["latest_block_height"].get<json::number_integer_t>();
|
||||
bool doUpdate = force || (model->getLatestBlock() != curBlock);
|
||||
int difficulty = reply["difficulty"].get<json::number_integer_t>();
|
||||
int num_halvings = 1; // number of halvings that have occured already
|
||||
int blocks_until_halving = (num_halvings*1680000 + 340000) - curBlock;
|
||||
int blocktime = 75;
|
||||
int halving_interval = 3500000;
|
||||
int num_halvings = curBlock / halving_interval;
|
||||
int blocks_until_halving = ((num_halvings + 1) * halving_interval) - curBlock;
|
||||
int blocktime = 36;
|
||||
int halving_days = (blocks_until_halving * blocktime) / (60 * 60 * 24) ;
|
||||
int longestchain = reply["longestchain"].get<json::number_integer_t>();
|
||||
int notarized = reply["notarized"].get<json::number_integer_t>();
|
||||
@@ -2018,6 +2020,9 @@ void Controller::refreshDRAGONXPrice()
|
||||
|
||||
void Controller::shutdownhushd()
|
||||
{
|
||||
// Signal Rust to stop background threads (mempool monitor, etc.)
|
||||
litelib_shutdown();
|
||||
|
||||
// Save the wallet and exit the lightclient library cleanly.
|
||||
if (!zrpc) {
|
||||
zrpc = new LiteInterface();
|
||||
@@ -2032,14 +2037,14 @@ void Controller::shutdownhushd()
|
||||
auto theme = Settings::getInstance()->get_theme_name();
|
||||
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");;
|
||||
movie2->setScaledSize(size);
|
||||
qDebug() << "Animation dark loaded";
|
||||
connD.topIcon->setMovie(movie2);
|
||||
movie2->start();
|
||||
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 {
|
||||
QMovie *movie1 = new QMovie(":/img/res/silentdragonxlite-animated-startup-dark.gif");;
|
||||
movie1->setScaledSize(size);
|
||||
@@ -2047,7 +2052,7 @@ void Controller::shutdownhushd()
|
||||
connD.topIcon->setMovie(movie1);
|
||||
movie1->start();
|
||||
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;
|
||||
@@ -2058,6 +2063,15 @@ void Controller::shutdownhushd()
|
||||
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)
|
||||
d.exec();
|
||||
} else {
|
||||
|
||||
@@ -28,12 +28,10 @@ void FilledIconLabel::resizeEvent(QResizeEvent*) {
|
||||
color = COLOR_BLUE_BG;
|
||||
}else if(theme_name == "Light"){
|
||||
color = COLOR_LIGHT_BG;
|
||||
}else if(theme_name == "Dark"){
|
||||
}else if(theme_name == "Dark" || theme_name == "dragonx"){
|
||||
color = COLOR_DARK_BG;
|
||||
}else if(theme_name =="Midnight"){
|
||||
color = COLOR_MIDNIGHT_BG;
|
||||
}else if(theme_name =="dragonx"){
|
||||
color = COLOR_DRAGONX_BG;
|
||||
}else{
|
||||
color = COLOR_DEFAULT_BG;
|
||||
}
|
||||
|
||||
@@ -36,7 +36,7 @@ void FirstTimeWizard::slot_change_theme(const QString& theme_name) {
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
saved_theme_name = "Dark";
|
||||
saved_theme_name = "dragonx";
|
||||
}
|
||||
|
||||
QFile qFile(":/css/res/css/" + saved_theme_name +".css");
|
||||
@@ -209,7 +209,10 @@ NewOrRestorePage::NewOrRestorePage(FirstTimeWizard *parent) : QWizardPage(parent
|
||||
crypto_pwhash_ALG_DEFAULT) != 0) {
|
||||
/* 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();
|
||||
DataStore::getChatDataStore()->setPassword(passphraseHash1);
|
||||
@@ -409,7 +412,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word1, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word1->setFont(button);
|
||||
@@ -418,7 +421,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word2, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word2->setFont(button);
|
||||
@@ -427,7 +430,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word3, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word3->setFont(button);
|
||||
@@ -436,7 +439,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word4, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word4->setFont(button);
|
||||
@@ -445,7 +448,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word5, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word5->setFont(button);
|
||||
@@ -454,7 +457,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word6, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word6->setFont(button);
|
||||
@@ -463,7 +466,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word7, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word7->setFont(button);
|
||||
@@ -472,7 +475,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word8, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word8->setFont(button);
|
||||
@@ -481,7 +484,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word9, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word9->setFont(button);
|
||||
@@ -490,7 +493,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word10, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word10->setFont(button);
|
||||
@@ -499,7 +502,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word11, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word11->setFont(button);
|
||||
@@ -508,7 +511,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word12, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word12->setFont(button);
|
||||
@@ -517,7 +520,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word13, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word13->setFont(button);
|
||||
@@ -526,7 +529,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word14, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word14->setFont(button);
|
||||
@@ -535,7 +538,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word15, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word15->setFont(button);
|
||||
@@ -544,7 +547,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word16, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word16->setFont(button);
|
||||
@@ -553,7 +556,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word17, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word17->setFont(button);
|
||||
@@ -562,7 +565,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word18, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word18->setFont(button);
|
||||
@@ -571,7 +574,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word19, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word19->setFont(button);
|
||||
@@ -580,7 +583,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word20, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word20->setFont(button);
|
||||
@@ -589,7 +592,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word21, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word21->setFont(button);
|
||||
@@ -598,7 +601,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word22, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word22->setFont(button);
|
||||
@@ -607,7 +610,7 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word23, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word23->setFont(button);
|
||||
@@ -616,14 +619,38 @@ bool NewSeedPage::validatePage() {
|
||||
QObject::connect(verifyseed.word24, &QPushButton::clicked, [&] () {
|
||||
|
||||
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();
|
||||
button.setStrikeOut(true);
|
||||
verifyseed.word24->setFont(button);
|
||||
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 = "";
|
||||
if ((verifyseed.verify->toPlainText() == seed) && (verifyseed.verifyBirthday->toPlainText() == birthday)) {
|
||||
@@ -733,7 +760,7 @@ bool RestoreSeedPage::validatePage() {
|
||||
QString reply = "";
|
||||
try {
|
||||
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) {
|
||||
reply = litelib_process_response(resp);
|
||||
@@ -752,7 +779,7 @@ if (reply.toUpper().trimmed() != "OK") {
|
||||
qDebug() << __func__ << ": new server is " << parent->server;
|
||||
|
||||
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) {
|
||||
reply = litelib_process_response(resp);
|
||||
} else {
|
||||
@@ -778,7 +805,7 @@ if (reply.toUpper().trimmed() != "OK") {
|
||||
|
||||
// make a new connection to the new server
|
||||
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);
|
||||
|
||||
// retry with the new server
|
||||
|
||||
10
src/main.cpp
10
src/main.cpp
@@ -150,11 +150,11 @@ public:
|
||||
|
||||
// Command line parser
|
||||
QCommandLineParser parser;
|
||||
parser.setApplicationDescription("Shielded desktop light wallet for hush");
|
||||
parser.setApplicationDescription("Shielded desktop light wallet for DragonX");
|
||||
parser.addHelpOption();
|
||||
|
||||
// Positional argument will specify a hush payment URI
|
||||
parser.addPositionalArgument("hushURI", "An optional hush URI to pay");
|
||||
// Positional argument will specify a DRGX payment URI
|
||||
parser.addPositionalArgument("drgxURI", "An optional DRGX URI to pay");
|
||||
|
||||
parser.process(a);
|
||||
|
||||
@@ -201,7 +201,9 @@ public:
|
||||
if (sodium_init() < 0) {
|
||||
/* panic! the library couldn't be initialized, it is not safe to use */
|
||||
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);
|
||||
|
||||
@@ -71,7 +71,7 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
theme_name = "Dark";
|
||||
theme_name = "dragonx";
|
||||
}
|
||||
|
||||
this->slot_change_theme(theme_name);
|
||||
@@ -160,143 +160,37 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||
// Rescan
|
||||
QObject::connect(ui->actionRescan, &QAction::triggered, [=]() {
|
||||
DEBUG("rescan action triggered");
|
||||
Ui_Restore restoreSeed;
|
||||
QDialog dialog(this);
|
||||
restoreSeed.setupUi(&dialog);
|
||||
Settings::saveRestore(&dialog);
|
||||
|
||||
rpc->fetchSeed([=](json reply) {
|
||||
if (isJsonError(reply)) {
|
||||
// Ask user for rescan height
|
||||
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;
|
||||
}
|
||||
|
||||
restoreSeed.seed->setReadOnly(true);
|
||||
restoreSeed.seed->setLineWrapMode(QPlainTextEdit::LineWrapMode::NoWrap);
|
||||
QString seedJson = QString::fromStdString(reply["seed"].get<json::string_t>());
|
||||
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
|
||||
// Clear wallet state from the specified height, then resync
|
||||
rpc->getConnection()->doRPCWithDefaultErrorHandling("clear", height, [=] (auto) {
|
||||
qDebug() << "Cleared wallet state to height" << height;
|
||||
this->getRPC()->saveWallet([=] (auto) {
|
||||
qDebug() << "Saving wallet...";
|
||||
// Then reload the connection. The ConnectionLoader deletes itself.
|
||||
auto cl = new ConnectionLoader(this, rpc);
|
||||
cl->loadConnection();
|
||||
qDebug() << "Saved cleared wallet, reloading connection to start rescan...";
|
||||
auto cl = new ConnectionLoader(this, rpc);
|
||||
cl->loadConnection();
|
||||
});
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
});
|
||||
dialog.exec();
|
||||
}); // actionReason
|
||||
}); // actionRescan
|
||||
|
||||
// Import Privkey
|
||||
QObject::connect(ui->actionImport_Privatkey, &QAction::triggered, this, &MainWindow::importPrivKey);
|
||||
@@ -847,7 +741,11 @@ void MainWindow::setupSettingsModal() {
|
||||
|
||||
// List of default servers
|
||||
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
|
||||
// connection to .onion if user has it enabled
|
||||
@@ -1026,7 +924,7 @@ void MainWindow::payhushURI(QString uri, QString myAddr) {
|
||||
PaymentURI paymentInfo = Settings::parseURI(uri);
|
||||
if (!paymentInfo.error.isEmpty()) {
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -1429,7 +1327,7 @@ void MainWindow::setupTransactionsTab() {
|
||||
});
|
||||
|
||||
// Payment Request
|
||||
if (!memo.isEmpty() && memo.startsWith("hush:")) {
|
||||
if (!memo.isEmpty() && memo.startsWith("drgx:")) {
|
||||
menu.addAction(tr("View Payment Request"), [=] () {
|
||||
RequestDialog::showPaymentConfirmation(this, memo);
|
||||
});
|
||||
@@ -1486,7 +1384,7 @@ void MainWindow::setupchatTab() {
|
||||
/////////////Setting Icons for Chattab and different themes
|
||||
|
||||
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");
|
||||
QIcon sendIcon(send);
|
||||
ui->sendChatButton->setIcon(sendIcon);
|
||||
@@ -2003,7 +1901,7 @@ void MainWindow::sendMoneyChat() {
|
||||
movie1->setFileName(":/img/res/loaderwhite.gif");
|
||||
|
||||
auto theme = Settings::getInstance()->get_theme_name();
|
||||
if (theme == "Dark" || theme == "Midnight") {
|
||||
if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
|
||||
|
||||
connect(movie, &QMovie::frameChanged, [=]{
|
||||
ui->sendChatButton->setIcon(movie->currentPixmap());
|
||||
@@ -2033,7 +1931,7 @@ void MainWindow::sendMoneyChat() {
|
||||
|
||||
QTimer::singleShot(1000, [=]() {
|
||||
|
||||
if (theme == "Dark" || theme == "Midnight") {
|
||||
if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
|
||||
QPixmap send(":/icons/res/send-white.png");
|
||||
QIcon sendIcon(send);
|
||||
ui->sendChatButton->setIcon(sendIcon);
|
||||
@@ -2071,7 +1969,7 @@ void MainWindow::sendMoneyChat() {
|
||||
ui->memoTxtChat->setEnabled(true);
|
||||
|
||||
|
||||
if (theme == "Dark" || theme == "Midnight") {
|
||||
if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
|
||||
QPixmap send(":/icons/res/send-white.png");
|
||||
QIcon sendIcon(send);
|
||||
ui->sendChatButton->setIcon(sendIcon);
|
||||
@@ -2292,7 +2190,7 @@ void MainWindow::sendMoneyRequestChat() {
|
||||
movie1->setFileName(":/img/res/loaderwhite.gif");
|
||||
|
||||
auto theme = Settings::getInstance()->get_theme_name();
|
||||
if (theme == "Dark" || theme == "Midnight") {
|
||||
if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
|
||||
|
||||
connect(movie, &QMovie::frameChanged, [=]{
|
||||
ui->sendChatButton->setIcon(movie->currentPixmap());
|
||||
@@ -2321,7 +2219,7 @@ void MainWindow::sendMoneyRequestChat() {
|
||||
|
||||
QTimer::singleShot(1000, [=]() {
|
||||
|
||||
if (theme == "Dark" || theme == "Midnight") {
|
||||
if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
|
||||
QPixmap send(":/icons/res/send-white.png");
|
||||
QIcon sendIcon(send);
|
||||
ui->sendChatButton->setIcon(sendIcon);
|
||||
@@ -2354,7 +2252,7 @@ void MainWindow::sendMoneyRequestChat() {
|
||||
movie->stop();
|
||||
|
||||
|
||||
if (theme == "Dark" || theme == "Midnight") {
|
||||
if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
|
||||
QPixmap send(":/icons/res/send-white.png");
|
||||
QIcon sendIcon(send);
|
||||
ui->sendChatButton->setIcon(sendIcon);
|
||||
@@ -2692,7 +2590,7 @@ void MainWindow::slot_change_theme(const QString& theme_name) {
|
||||
Settings::getInstance()->set_theme_name(theme_name);
|
||||
} else {
|
||||
qDebug() << __func__ << ": ignoring invalid theme_name=" << theme_name;
|
||||
Settings::getInstance()->set_theme_name("Dark");
|
||||
Settings::getInstance()->set_theme_name("dragonx");
|
||||
}
|
||||
|
||||
// Include css
|
||||
@@ -2701,7 +2599,7 @@ void MainWindow::slot_change_theme(const QString& theme_name) {
|
||||
saved_theme_name = Settings::getInstance()->get_theme_name();
|
||||
} catch (const std::exception& e) {
|
||||
qDebug() << QString("Ignoring theme change Exception! : ");
|
||||
saved_theme_name = "Dark";
|
||||
saved_theme_name = "dragonx";
|
||||
}
|
||||
|
||||
QString filename = ":/css/res/css/" + saved_theme_name +".css";
|
||||
|
||||
@@ -90,7 +90,7 @@
|
||||
p, li { white-space: pre-wrap; }
|
||||
</style></head><body style=" font-family:'Ubuntu'; font-size:11pt; font-weight:400; font-style:normal;">
|
||||
<h1 align="center" style=" margin-top:18px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:xx-large; font-weight:600;">DragonX + HushChat Terms of Service</span></h1>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">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 <a href="https://en.wikipedia.org/wiki/Non-aggression_principle"><span style=" text-decoration: underline; color:#0000ff;">Non-Aggression Principle</span></a>.</p>
|
||||
<p style=" margin-top:12px; margin-bottom:12px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">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 <a href="https://en.wikipedia.org/wiki/Non-aggression_principle"><span style=" text-decoration: underline; color:#6699ff;">Non-Aggression Principle</span></a>.</p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">THE SERVICE IS PROVIDED “AS IS” AND The Hush Developers DO NOT MAKE ANY SPECIFIC COMMITMENTS OR WARRANTIES ABOUT THE SERVICE.</p>
|
||||
<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><br /></p>
|
||||
<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">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.</p>
|
||||
|
||||
@@ -50,7 +50,7 @@ void RequestDialog::showPaymentConfirmation(MainWindow* main, QString paymentURI
|
||||
PaymentURI payInfo = Settings::parseURI(paymentURI);
|
||||
if (!payInfo.error.isEmpty()) {
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -177,13 +177,13 @@ void RequestDialog::showRequesthush(MainWindow* main) {
|
||||
req.txtFrom->setFocus();
|
||||
|
||||
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());
|
||||
QString memoURI = "hush:" + req.cmbMyAddress->currentText()
|
||||
QString memoURI = "drgx:" + req.cmbMyAddress->currentText()
|
||||
+ "?amt=" + amount.toDecimalString()
|
||||
+ "&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"
|
||||
+ "&memo=" + QUrl::toPercentEncoding(memoURI);
|
||||
|
||||
|
||||
@@ -864,7 +864,7 @@ void MainWindow::sendButton() {
|
||||
QMovie *movie1 = 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();
|
||||
if (theme == "Dark" || theme == "Midnight") {
|
||||
if (theme == "Dark" || theme == "Midnight" || theme == "dragonx") {
|
||||
movie2->setScaledSize(QSize(512,512));
|
||||
connD->topIcon->setMovie(movie2);
|
||||
movie2->start();
|
||||
|
||||
@@ -277,7 +277,7 @@ void Settings::set_currency_name(QString currency_name) {
|
||||
|
||||
QString Settings::get_theme_name() {
|
||||
// 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) {
|
||||
@@ -307,7 +307,11 @@ QString Settings::getRandomServer() {
|
||||
// The more servers from different TLDs, the better
|
||||
QList<QString> servers = {
|
||||
"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
|
||||
@@ -401,7 +405,7 @@ PaymentURI Settings::parseURI(QString uri) {
|
||||
return ans;
|
||||
}
|
||||
|
||||
uri = uri.right(uri.length() - QString("hush:").length());
|
||||
uri = uri.right(uri.length() - QString("drgx:").length());
|
||||
|
||||
QRegExp re("([a-zA-Z0-9]+)");
|
||||
int pos;
|
||||
|
||||
@@ -127,6 +127,11 @@
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>dragonx</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Dark</string>
|
||||
@@ -152,6 +157,7 @@
|
||||
<string>Default</string>
|
||||
</property>
|
||||
</item>
|
||||
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="chkFetchPrices">
|
||||
<property name="geometry">
|
||||
|
||||
@@ -93,7 +93,7 @@ QVariant TxTableModel::data(const QModelIndex &index, int role) const {
|
||||
QString theme_name = Settings::getInstance()->get_theme_name();
|
||||
QBrush b;
|
||||
QColor color;
|
||||
if (theme_name == "Dark" || theme_name == "Midnight") {
|
||||
if (theme_name == "Dark" || theme_name == "Midnight" || theme_name == "dragonx") {
|
||||
color = COLOR_WHITE;
|
||||
}else{
|
||||
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 (dat.items.length() == 1) {
|
||||
auto memo = dat.items[0].memo;
|
||||
if (memo.startsWith("hush:")) {
|
||||
if (memo.startsWith("drgx:")) {
|
||||
return Settings::paymentURIPretty(Settings::parseURI(memo));
|
||||
} else {
|
||||
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 (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);
|
||||
QIcon icon;
|
||||
icon.addPixmap(QPixmap::fromImage(image));
|
||||
|
||||
@@ -1 +1 @@
|
||||
#define APP_VERSION "1.0.0"
|
||||
#define APP_VERSION "1.1.1"
|
||||
|
||||
@@ -3,12 +3,12 @@
|
||||
|
||||
VERSION=$(cat src/version.h |cut -d\" -f2)
|
||||
echo "Compiling SilentDragonXLite $VERSION .exe with $JOBS threads..."
|
||||
CONF=silentdragon-lite.pro
|
||||
CONF=silentdragonx-lite.pro
|
||||
|
||||
set -e
|
||||
echo 'source $HOME/.cargo/env' >> $HOME/.bashrc
|
||||
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" ]
|
||||
then
|
||||
@@ -17,7 +17,7 @@ fi
|
||||
|
||||
cp src/precompiled.h release/
|
||||
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
|
||||
#lrelease $CONF
|
||||
|
||||
Reference in New Issue
Block a user