Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
732f34b595 | ||
|
|
eb2f004d45 | ||
|
|
8b6eff5fb8 | ||
|
|
af743fc62f | ||
|
|
2c33333000 | ||
|
|
2548134302 | ||
|
|
7a995706b7 | ||
|
|
47aca44551 | ||
|
|
08e069b3d9 | ||
|
|
6b7b4badcd | ||
|
|
a6cec46ecc | ||
|
|
5ae3d42d1f | ||
|
|
fedeaa5c0d | ||
|
|
ecca86a1ce | ||
|
|
ea08119fa3 | ||
|
|
c3b7ae3ab1 | ||
|
|
6bb1f00082 | ||
|
|
d6eea75b6a | ||
|
|
341f83f71f | ||
|
|
10be6d49cb | ||
|
|
09c0e488a8 | ||
|
|
57736b1fee | ||
|
|
e284c2e349 | ||
|
|
675fe02cb1 | ||
|
|
5fe631037c | ||
|
|
736f10eb8a | ||
|
|
c7c4237d10 | ||
|
|
5e6bd0b9bb | ||
|
|
c1699c2c79 | ||
|
|
d7364e1d80 | ||
|
|
d248aaf8b3 | ||
|
|
67dff741dd | ||
|
|
21fe180a84 | ||
|
|
3f83d74bac | ||
|
|
ec142556d8 | ||
|
|
fc426abfc0 | ||
|
|
6241c2e1de | ||
|
|
ba940d6df4 | ||
|
|
29f4d627d2 | ||
|
|
774fa969a3 | ||
|
|
f7d76eef98 | ||
|
|
63dc0179c1 | ||
|
|
0131476a5d | ||
|
|
1b89370c1c | ||
|
|
c8606126f0 | ||
|
|
52850ccf23 | ||
|
|
60540b87d0 | ||
|
|
db5ba12190 | ||
|
|
7cf050ff8e | ||
|
|
b9d8128880 | ||
|
|
3e10b25068 |
@@ -1,138 +1,50 @@
|
|||||||
---
|
---
|
||||||
kind: pipeline
|
kind: pipeline
|
||||||
type: docker
|
type: docker
|
||||||
name: linux-release
|
name: linux-build
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: build
|
- name: linux-build
|
||||||
image: feather:linux
|
image: wowlet/wowlet-linux:v0.1
|
||||||
volumes:
|
volumes:
|
||||||
- name: ccache_linux_release
|
- name: cache
|
||||||
path: /root/.ccache
|
|
||||||
- name: monero
|
|
||||||
path: /drone/src/monero
|
path: /drone/src/monero
|
||||||
- name: files_linux_release
|
- name: files
|
||||||
path: /files
|
path: /tmp/wowlet_linux
|
||||||
commands:
|
commands:
|
||||||
- TOR_BIN="/usr/local/tor/bin/tor" make -j11 release-static
|
- make release-static -j3
|
||||||
- contrib/build-appimage.sh
|
- export WOW="wowlet-`echo $DRONE_COMMIT_AFTER | cut -c 1-10`"
|
||||||
environment:
|
- cp build/bin/wowlet /tmp/wowlet_linux/$WOW
|
||||||
OPENSSL_ROOT_DIR: /usr/local/openssl/
|
|
||||||
CMAKEFLAGS_EXTRA: -DFETCH_DEPS=Off
|
|
||||||
- name: deploy
|
|
||||||
image: feather:linux
|
|
||||||
volumes:
|
|
||||||
- name: ccache_linux_release
|
|
||||||
path: /root/.ccache
|
|
||||||
- name: files_linux_release
|
|
||||||
path: /linux-release
|
|
||||||
- name: files_linux_appimage
|
|
||||||
path: /linux-release-appimage
|
|
||||||
commands:
|
|
||||||
- export FN="feather-`echo $DRONE_COMMIT_AFTER | cut -c 1-7`.zip"
|
|
||||||
- export TARGET_DIR="/linux-release/$DRONE_SOURCE_BRANCH"
|
|
||||||
- mkdir -p "$TARGET_DIR"
|
|
||||||
- echo "writing to $TARGET_DIR/$FN"
|
|
||||||
- strip -s build/bin/feather
|
|
||||||
- zip -j "$TARGET_DIR/$FN" build/feather.log build/bin/feather
|
|
||||||
- echo "[*] written to https://build.featherwallet.org/files/linux-release/$DRONE_SOURCE_BRANCH/$FN"
|
|
||||||
- # AppImage
|
|
||||||
- export FN="feather-`git rev-parse --short HEAD`.AppImage"
|
|
||||||
- export TARGET_DIR="/linux-release-appimage/$DRONE_SOURCE_BRANCH"
|
|
||||||
- mkdir -p "$TARGET_DIR"
|
|
||||||
- echo "writing to $TARGET_DIR/$FN"
|
|
||||||
- mv "feather.AppImage" "$TARGET_DIR/$FN"
|
|
||||||
- echo "[*] written to https://build.featherwallet.org/files/linux-release-appimage/$DRONE_SOURCE_BRANCH/$FN"
|
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
- name: ccache_linux_release
|
- name: cache
|
||||||
host:
|
host:
|
||||||
path: /var/drone/ccache_linux_release/
|
path: /home/wow/wowlet_wownero
|
||||||
- name: monero
|
- name: files
|
||||||
host:
|
host:
|
||||||
path: /var/drone/monero
|
path: /home/wow/wowlet_linux
|
||||||
- name: files_linux_release
|
|
||||||
host:
|
|
||||||
path: /build/feather_files/files/linux-release/
|
|
||||||
- name: files_linux_appimage
|
|
||||||
host:
|
|
||||||
path: /build/feather_files/files/linux-release-appimage/
|
|
||||||
|
|
||||||
---
|
---
|
||||||
kind: pipeline
|
kind: pipeline
|
||||||
type: docker
|
type: docker
|
||||||
name: windows-release
|
name: windows-build
|
||||||
steps:
|
steps:
|
||||||
- name: build
|
- name: windows-build
|
||||||
image: feather:win
|
image: wowlet/wowlet-win:v0.1
|
||||||
volumes:
|
volumes:
|
||||||
- name: ccache_win_release
|
- name: cache
|
||||||
path: /root/.ccache
|
|
||||||
- name: files_win_release
|
|
||||||
path: /files
|
|
||||||
- name: monero
|
|
||||||
path: /drone/src/monero
|
path: /drone/src/monero
|
||||||
|
- name: files
|
||||||
|
path: /tmp/wowlet_windows
|
||||||
commands:
|
commands:
|
||||||
- TOR_BIN="/usr/local/tor/bin/tor.exe" make depends root=/depends target=x86_64-w64-mingw32 tag=win-x64 -j11
|
- make depends root=/depends target=x86_64-w64-mingw32 tag=win-x64 -j3
|
||||||
environment:
|
- export WOW="wowlet-`echo $DRONE_COMMIT_AFTER | cut -c 1-10`.exe"
|
||||||
CMAKEFLAGS_EXTRA: -DFETCH_DEPS=Off
|
- cp build/x86_64-w64-mingw32/release/bin/wowlet.exe /tmp/wowlet_windows/$WOW
|
||||||
- name: deploy
|
|
||||||
image: feather:win
|
|
||||||
volumes:
|
|
||||||
- name: files_win_release
|
|
||||||
path: /files
|
|
||||||
commands:
|
|
||||||
- export FN="feather-`echo $DRONE_COMMIT_AFTER | cut -c 1-7`.zip"
|
|
||||||
- export TARGET_DIR="/files/$DRONE_SOURCE_BRANCH"
|
|
||||||
- mkdir -p "$TARGET_DIR"
|
|
||||||
- echo "writing to $TARGET_DIR/$FN"
|
|
||||||
- zip -j "$TARGET_DIR/$FN" build/x86_64-w64-mingw32/release/bin/feather.exe
|
|
||||||
- echo "[*] written to https://build.featherwallet.org/files/windows-release/$DRONE_SOURCE_BRANCH/$FN"
|
|
||||||
volumes:
|
volumes:
|
||||||
- name: ccache_win_release
|
- name: cache
|
||||||
host:
|
host:
|
||||||
path: /var/drone/ccache_win_release/
|
path: /home/wow/wowlet_wownero
|
||||||
- name: files_win_release
|
- name: files
|
||||||
host:
|
host:
|
||||||
path: /build/feather_files/files/windows-release/
|
path: /home/wow/wowlet_windows
|
||||||
- name: monero
|
|
||||||
host:
|
|
||||||
path: /var/drone/monero
|
|
||||||
|
|
||||||
---
|
|
||||||
kind: pipeline
|
|
||||||
type: docker
|
|
||||||
name: mac-release
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: build
|
|
||||||
image: feather:mac
|
|
||||||
volumes:
|
|
||||||
- name: files_mac_release
|
|
||||||
path: /files
|
|
||||||
commands:
|
|
||||||
- mkdir -p build
|
|
||||||
- ssh administrator@steve.jobs.xmr.pm "chmod +x build_macos.sh && PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin ~/build_macos.sh $DRONE_COMMIT_SHA"
|
|
||||||
- scp -P22 administrator@steve.jobs.xmr.pm:feather.zip build/feather.zip
|
|
||||||
- name: deploy
|
|
||||||
image: feather:mac
|
|
||||||
volumes:
|
|
||||||
- name: files_mac_release
|
|
||||||
path: /files
|
|
||||||
commands:
|
|
||||||
- export FN="feather-`echo $DRONE_COMMIT_AFTER | cut -c 1-7`.zip"
|
|
||||||
- export TARGET_DIR="/files/$DRONE_SOURCE_BRANCH"
|
|
||||||
- mkdir -p "$TARGET_DIR"
|
|
||||||
- echo "writing to $TARGET_DIR/$FN"
|
|
||||||
- mv build/feather.zip "$TARGET_DIR/$FN"
|
|
||||||
- echo "[*] written to https://build.featherwallet.org/files/mac-release/$DRONE_SOURCE_BRANCH/$FN"
|
|
||||||
|
|
||||||
volumes:
|
|
||||||
- name: files_mac_release
|
|
||||||
host:
|
|
||||||
path: /build/feather_files/files/mac-release/
|
|
||||||
---
|
|
||||||
kind: signature
|
|
||||||
hmac: f16a0379280e2e89987930d635ec6fb938d67732fdaf4ddc488f2a9db64bda2c
|
|
||||||
|
|
||||||
...
|
...
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
[submodule "monero"]
|
|
||||||
path = monero
|
|
||||||
url = https://git.wownero.com/feather/monero.git
|
|
||||||
[submodule "contrib/tor"]
|
|
||||||
path = contrib/tor
|
|
||||||
url = https://git.torproject.org/tor.git
|
|
||||||
[submodule "contrib/KDMacTouchBar"]
|
[submodule "contrib/KDMacTouchBar"]
|
||||||
path = contrib/KDMacTouchBar
|
path = contrib/KDMacTouchBar
|
||||||
url = https://github.com/KDAB/KDMacTouchBar.git
|
url = https://github.com/KDAB/KDMacTouchBar.git
|
||||||
|
[submodule "monero"]
|
||||||
|
path = monero
|
||||||
|
url = https://git.wownero.com/wownero/wownero
|
||||||
|
branch = wowlet
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
## Buildbot builds
|
## Buildbot builds
|
||||||
|
|
||||||
The docker build bins can be found here: https://build.featherwallet.org/files/
|
The docker build bins can be found here: https://build.wownero.org/files/
|
||||||
|
|
||||||
## Docker static builds
|
## Docker static builds
|
||||||
|
|
||||||
@@ -18,8 +18,8 @@ so that the resulting Feather binary is static. For more information, check the
|
|||||||
#### 1. Clone
|
#### 1. Clone
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone --branch master --recursive https://git.wownero.com/feather/feather.git
|
git clone --branch master --recursive https://git.wownero.com/wowlet/wowlet.git
|
||||||
cd feather
|
cd wowlet
|
||||||
```
|
```
|
||||||
|
|
||||||
Replace `master` with the desired version tag (e.g. `beta-4`) to build the release binary.
|
Replace `master` with the desired version tag (e.g. `beta-4`) to build the release binary.
|
||||||
@@ -27,7 +27,7 @@ Replace `master` with the desired version tag (e.g. `beta-4`) to build the relea
|
|||||||
#### 2. Base image
|
#### 2. Base image
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker build --tag feather:linux --build-arg THREADS=4 .
|
docker build --tag wowlet:linux --build-arg THREADS=4 .
|
||||||
```
|
```
|
||||||
|
|
||||||
Building the base image takes a while. You only need to build the base image once.
|
Building the base image takes a while. You only need to build the base image once.
|
||||||
@@ -37,19 +37,19 @@ Building the base image takes a while. You only need to build the base image onc
|
|||||||
##### Standalone binary
|
##### Standalone binary
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run --rm -it -v $PWD:/feather -w /feather feather:linux sh -c 'make release-static -j4'
|
docker run --rm -it -v $PWD:/wowlet -w /wowlet wowlet:linux sh -c 'make release-static -j4'
|
||||||
```
|
```
|
||||||
|
|
||||||
If you're re-running a build make sure to `rm -rf build/` first.
|
If you're re-running a build make sure to `rm -rf build/` first.
|
||||||
|
|
||||||
The resulting binary can be found in `build/bin/feather`.
|
The resulting binary can be found in `build/bin/wowlet`.
|
||||||
|
|
||||||
##### AppImage
|
##### AppImage
|
||||||
|
|
||||||
First create the standalone binary using the Docker command in the previous step.
|
First create the standalone binary using the Docker command in the previous step.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run --rm -it -v $PWD:/feather -w /feather feather:linux contrib/build-appimage.sh
|
docker run --rm -it -v $PWD:/wowlet -w /wowlet wowlet:linux contrib/build-appimage.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
### Windows (reproducible)
|
### Windows (reproducible)
|
||||||
@@ -57,8 +57,8 @@ docker run --rm -it -v $PWD:/feather -w /feather feather:linux contrib/build-app
|
|||||||
#### 1. Clone
|
#### 1. Clone
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone --branch master --recursive https://git.wownero.com/feather/feather.git
|
git clone --branch master --recursive https://git.wownero.com/wowlet/wowlet.git
|
||||||
cd feather
|
cd wowlet
|
||||||
```
|
```
|
||||||
|
|
||||||
Replace `master` with the desired version tag (e.g. `beta-4`) to build the release binary.
|
Replace `master` with the desired version tag (e.g. `beta-4`) to build the release binary.
|
||||||
@@ -67,7 +67,7 @@ Replace `master` with the desired version tag (e.g. `beta-4`) to build the relea
|
|||||||
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker build -f Dockerfile.windows --tag feather:win --build-arg THREADS=4 .
|
docker build -f Dockerfile.windows --tag wowlet:win --build-arg THREADS=4 .
|
||||||
```
|
```
|
||||||
|
|
||||||
Building the base image takes a while. You only need to build the base image once.
|
Building the base image takes a while. You only need to build the base image once.
|
||||||
@@ -75,12 +75,12 @@ Building the base image takes a while. You only need to build the base image onc
|
|||||||
#### 3. Build
|
#### 3. Build
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker run --rm -it -v $PWD:/feather -w /feather feather:win sh -c 'make depends root=/depends target=x86_64-w64-mingw32 tag=win-x64 -j4'
|
docker run --rm -it -v $PWD:/wowlet -w /wowlet wowlet:win sh -c 'make depends root=/depends target=x86_64-w64-mingw32 tag=win-x64 -j4'
|
||||||
```
|
```
|
||||||
|
|
||||||
If you're re-running a build make sure to `rm -rf build/` first.
|
If you're re-running a build make sure to `rm -rf build/` first.
|
||||||
|
|
||||||
The resulting binary can be found in `build/x86_64-w64-mingw32/release/bin/feather.exe`.
|
The resulting binary can be found in `build/x86_64-w64-mingw32/release/bin/wowlet.exe`.
|
||||||
|
|
||||||
## macOS
|
## macOS
|
||||||
|
|
||||||
@@ -94,7 +94,7 @@ HOMEBREW_OPTFLAGS="-march=core2" HOMEBREW_OPTIMIZATION_LEVEL="O0" \
|
|||||||
Clone the repository.
|
Clone the repository.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone --recursive https://git.wownero.com/feather/feather.git
|
git clone --recursive https://git.wownero.com/wowlet/wowlet.git
|
||||||
```
|
```
|
||||||
|
|
||||||
Get the latest LTS from here: https://www.qt.io/offline-installers and install.
|
Get the latest LTS from here: https://www.qt.io/offline-installers and install.
|
||||||
@@ -105,4 +105,4 @@ Build Feather.
|
|||||||
CMAKE_PREFIX_PATH=~/Qt5.15.1/5.15.1/clang_64 make mac-release
|
CMAKE_PREFIX_PATH=~/Qt5.15.1/5.15.1/clang_64 make mac-release
|
||||||
```
|
```
|
||||||
|
|
||||||
The resulting Mac OS application can be found `build/bin/feather.app` and will **not** have Tor embedded.
|
The resulting Mac OS application can be found `build/bin/wowlet.app` and will **not** have Tor embedded.
|
||||||
|
|||||||
@@ -7,12 +7,11 @@ set(THREADS_PREFER_PTHREAD_FLAG ON)
|
|||||||
set(VERSION_MAJOR "0")
|
set(VERSION_MAJOR "0")
|
||||||
set(VERSION_MINOR "1")
|
set(VERSION_MINOR "1")
|
||||||
set(VERSION_REVISION "0")
|
set(VERSION_REVISION "0")
|
||||||
set(VERSION "beta-4")
|
set(VERSION "beta-1")
|
||||||
|
|
||||||
option(FETCH_DEPS "Download dependencies if they are not found" ON)
|
option(FETCH_DEPS "Download dependencies if they are not found" ON)
|
||||||
option(XMRIG "Include XMRig module" ON)
|
option(XMRIG "Include XMRig module" ON)
|
||||||
option(TOR_BIN "Path to Tor binary to embed inside Feather" OFF)
|
option(TOR_BIN "Path to Tor binary to embed inside Feather" OFF)
|
||||||
|
|
||||||
option(STATIC "Link libraries statically, requires static Qt")
|
option(STATIC "Link libraries statically, requires static Qt")
|
||||||
option(USE_DEVICE_TREZOR "Trezor support compilation" OFF)
|
option(USE_DEVICE_TREZOR "Trezor support compilation" OFF)
|
||||||
option(DONATE_BEG "Prompt donation window every once in a while" ON)
|
option(DONATE_BEG "Prompt donation window every once in a while" ON)
|
||||||
@@ -29,7 +28,16 @@ if(DEBUG)
|
|||||||
set(CMAKE_VERBOSE_MAKEFILE ON)
|
set(CMAKE_VERBOSE_MAKEFILE ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
set(MONERO_HEAD "aa0f58570d412cf02dd325e567bbc9fa093df16c")
|
# Update and init submodules by default
|
||||||
|
if(NOT MANUAL_SUBMODULES)
|
||||||
|
find_package(Git)
|
||||||
|
if(GIT_FOUND)
|
||||||
|
message(STATUS "Initializing submodules")
|
||||||
|
execute_process(COMMAND git "submodule" "update" "--init" "--recursive")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(WOWNERO_HEAD "f611d5c9e32bc62f1735f6571b0bdb95cc020531")
|
||||||
set(BUILD_GUI_DEPS ON)
|
set(BUILD_GUI_DEPS ON)
|
||||||
set(ARCH "x86-64")
|
set(ARCH "x86-64")
|
||||||
set(BUILD_64 ON)
|
set(BUILD_64 ON)
|
||||||
@@ -82,11 +90,11 @@ endfunction()
|
|||||||
|
|
||||||
find_package(Git)
|
find_package(Git)
|
||||||
if(GIT_FOUND)
|
if(GIT_FOUND)
|
||||||
execute_process(COMMAND git rev-parse "HEAD" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/monero OUTPUT_VARIABLE _MONERO_HEAD OUTPUT_STRIP_TRAILING_WHITESPACE)
|
execute_process(COMMAND git rev-parse "HEAD" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/monero OUTPUT_VARIABLE _WOWNERO_HEAD OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||||
if(NOT _MONERO_HEAD STREQUAL MONERO_HEAD)
|
if(NOT _WOWNERO_HEAD STREQUAL WOWNERO_HEAD)
|
||||||
message(FATAL_ERROR "[submodule] Monero HEAD was at ${_MONERO_HEAD} but should be at ${MONERO_HEAD}")
|
message(FATAL_ERROR "[submodule] Monero HEAD was at ${_WOWNERO_HEAD} but should be at ${WOWNERO_HEAD}")
|
||||||
else()
|
else()
|
||||||
message(STATUS "[submodule] Monero HEAD @ ${MONERO_HEAD}")
|
message(STATUS "[submodule] Monero HEAD @ ${WOWNERO_HEAD}")
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ CMAKEFLAGS = \
|
|||||||
-DARCH=x86_64 \
|
-DARCH=x86_64 \
|
||||||
-DBUILD_64=On \
|
-DBUILD_64=On \
|
||||||
-DBUILD_TESTS=Off \
|
-DBUILD_TESTS=Off \
|
||||||
-DXMRIG=On \
|
-DXMRIG=Off \
|
||||||
-DTOR_BIN=Off \
|
-DTOR_BIN=Off \
|
||||||
-DCMAKE_CXX_STANDARD=11 \
|
-DCMAKE_CXX_STANDARD=11 \
|
||||||
-DCMAKE_VERBOSE_MAKEFILE=On \
|
-DCMAKE_VERBOSE_MAKEFILE=On \
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ pkgrel=1
|
|||||||
pkgdesc='a free Monero desktop wallet'
|
pkgdesc='a free Monero desktop wallet'
|
||||||
license=('BSD')
|
license=('BSD')
|
||||||
arch=('x86_64')
|
arch=('x86_64')
|
||||||
url="https://featherwallet.org"
|
url="https://wownero.org"
|
||||||
depends=('boost-libs' 'libunwind' 'openssl' 'readline' 'pcsclite' 'hidapi' 'protobuf' 'miniupnpc' 'libgcrypt' 'qrencode' 'libsodium' 'libpgm' 'expat' 'qt5-base' 'qt5-websockets' 'tor')
|
depends=('boost-libs' 'libunwind' 'openssl' 'readline' 'pcsclite' 'hidapi' 'protobuf' 'miniupnpc' 'libgcrypt' 'qrencode' 'libsodium' 'libpgm' 'expat' 'qt5-base' 'qt5-websockets' 'tor')
|
||||||
makedepends=('git' 'cmake' 'boost')
|
makedepends=('git' 'cmake' 'boost')
|
||||||
|
|
||||||
|
|||||||
@@ -1,35 +1,12 @@
|
|||||||
# Feather - a free Monero desktop wallet
|
[](https://ci.wownero.com/wowlet/wowlet)
|
||||||
|
|
||||||
[](https://build.featherwallet.org/feather/feather)
|
# WOWlet- a free Wownero desktop wallet
|
||||||
|
|
||||||
Feather is a free, open-source Monero client Linux with ports for Mac OS and Windows written in C++ with the Qt framework. It is created and maintained by [dsc](dsc@xmr.pm) and [tobtoht](thotbot@protonmail.com).
|
|
||||||
|
WOWlet is a free, open-source Wownero client for Linux with ports for Mac OS and Windows.
|
||||||
|
|
||||||
## Development resources
|
## Development resources
|
||||||
* Web: [featherwallet.org](https://featherwallet.org)
|
* Git: [git.wownero.com/wowlet/wowlet](https://git.wownero.com/wowlet/wowlet)
|
||||||
* Git: [git.wownero.com/feather/feather](https://git.wownero.com/feather/feather)
|
* IRC: `#wownero` on Freenode
|
||||||
* IRC: `#feather` on OFTC
|
|
||||||
* Development builds: [build.featherwallet.org/files](https://build.featherwallet.org/files/)
|
|
||||||
|
|
||||||
Copyright (c) 2020-2021 The Monero Project.
|
Copyright (c) 2020-2021 The Monero Project.
|
||||||
|
|
||||||
## Compiling Feather from source
|
|
||||||
|
|
||||||
Feather uses Monero, as such it requires the same dependencies as outlined in [Monero's README](https://github.com/monero-project/monero#compiling-monero-from-source). Additionally, Feather uses:
|
|
||||||
|
|
||||||
- Qt 5.15.0
|
|
||||||
- libqrencode
|
|
||||||
- openpgp
|
|
||||||
|
|
||||||
See [BUILDING.md](https://git.wownero.com/feather/feather/src/branch/master/BUILDING.md) for information on how to compile a build.
|
|
||||||
|
|
||||||
## Supporting the project
|
|
||||||
|
|
||||||
Feather is a 100% community-sponsored endeavor. If you want to join our efforts, the easiest thing you can do is support the project financially.
|
|
||||||
|
|
||||||
`47ntfT2Z5384zku39pTM6hGcnLnvpRYW2Azm87GiAAH2bcTidtq278TL6HmwyL8yjMeERqGEBs3cqC8vvHPJd1cWQrGC65f`
|
|
||||||
|
|
||||||
## Developers
|
|
||||||
|
|
||||||
See [HACKING.md](https://git.wownero.com/feather/feather/src/branch/master/HACKING.md) for useful development resources.
|
|
||||||
|
|
||||||
It is HIGHLY recommended that you join the `#feather` IRC channel on OFTC if you are hacking on Feather. Due to the nature of this open source software project, joining this channel and idling is the best way to stay updated on best practices and new developments.
|
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
|
|
||||||
Please do not open an issue to report security issues.
|
Please do not open an issue to report security issues.
|
||||||
|
|
||||||
To report a vulnerability send an email to dev@featherwallet.org
|
To report a vulnerability send an email to dev@wownero.org
|
||||||
|
|
||||||
The following keys may be used to communicate sensitive information to developers:
|
The following keys may be used to communicate sensitive information to developers:
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ if(APPLE OR (WIN32 AND NOT STATIC))
|
|||||||
find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${_qt_bin_dir}")
|
find_program(MACDEPLOYQT_EXECUTABLE macdeployqt HINTS "${_qt_bin_dir}")
|
||||||
add_custom_command(TARGET deploy
|
add_custom_command(TARGET deploy
|
||||||
POST_BUILD
|
POST_BUILD
|
||||||
COMMAND "${MACDEPLOYQT_EXECUTABLE}" "$<TARGET_FILE_DIR:feather>/../.." -always-overwrite
|
COMMAND "${MACDEPLOYQT_EXECUTABLE}" "$<TARGET_FILE_DIR:wowlet>/../.." -always-overwrite
|
||||||
COMMENT "Running macdeployqt..."
|
COMMENT "Running macdeployqt..."
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -16,11 +16,11 @@ if(APPLE OR (WIN32 AND NOT STATIC))
|
|||||||
if(_qt_svg_dylib)
|
if(_qt_svg_dylib)
|
||||||
add_custom_command(TARGET deploy
|
add_custom_command(TARGET deploy
|
||||||
POST_BUILD
|
POST_BUILD
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${_qt_svg_dylib} $<TARGET_FILE_DIR:feather>/../PlugIns/imageformats/
|
COMMAND ${CMAKE_COMMAND} -E copy ${_qt_svg_dylib} $<TARGET_FILE_DIR:wowlet>/../PlugIns/imageformats/
|
||||||
COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change "${CMAKE_PREFIX_PATH}/lib/QtGui.framework/Versions/5/QtGui" "@executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui" $<TARGET_FILE_DIR:feather>/../PlugIns/imageformats/libqsvg.dylib
|
COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change "${CMAKE_PREFIX_PATH}/lib/QtGui.framework/Versions/5/QtGui" "@executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui" $<TARGET_FILE_DIR:wowlet>/../PlugIns/imageformats/libqsvg.dylib
|
||||||
COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change "${CMAKE_PREFIX_PATH}/lib/QtWidgets.framework/Versions/5/QtWidgets" "@executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui" $<TARGET_FILE_DIR:feather>/../PlugIns/imageformats/libqsvg.dylib
|
COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change "${CMAKE_PREFIX_PATH}/lib/QtWidgets.framework/Versions/5/QtWidgets" "@executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui" $<TARGET_FILE_DIR:wowlet>/../PlugIns/imageformats/libqsvg.dylib
|
||||||
COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change "${CMAKE_PREFIX_PATH}/lib/QtSvg.framework/Versions/5/QtSvg" "@executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui" $<TARGET_FILE_DIR:feather>/../PlugIns/imageformats/libqsvg.dylib
|
COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change "${CMAKE_PREFIX_PATH}/lib/QtSvg.framework/Versions/5/QtSvg" "@executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui" $<TARGET_FILE_DIR:wowlet>/../PlugIns/imageformats/libqsvg.dylib
|
||||||
COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change "${CMAKE_PREFIX_PATH}/lib/QtCore.framework/Versions/5/QtCore" "@executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui" $<TARGET_FILE_DIR:feather>/../PlugIns/imageformats/libqsvg.dylib
|
COMMAND ${CMAKE_INSTALL_NAME_TOOL} -change "${CMAKE_PREFIX_PATH}/lib/QtCore.framework/Versions/5/QtCore" "@executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui" $<TARGET_FILE_DIR:wowlet>/../PlugIns/imageformats/libqsvg.dylib
|
||||||
COMMENT "Copying libqsvg.dylib, running install_name_tool"
|
COMMENT "Copying libqsvg.dylib, running install_name_tool"
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|||||||
@@ -3,18 +3,19 @@
|
|||||||
set -e
|
set -e
|
||||||
unset SOURCE_DATE_EPOCH
|
unset SOURCE_DATE_EPOCH
|
||||||
|
|
||||||
APPDIR="$PWD/feather.AppDir"
|
APPDIR="$PWD/wowlet.AppDir"
|
||||||
|
|
||||||
mkdir -p "$APPDIR"
|
mkdir -p "$APPDIR"
|
||||||
mkdir -p "$APPDIR/usr/share/applications/"
|
mkdir -p "$APPDIR/usr/share/applications/"
|
||||||
mkdir -p "$APPDIR/usr/bin"
|
mkdir -p "$APPDIR/usr/bin"
|
||||||
|
|
||||||
cp "$PWD/src/assets/feather.desktop" "$APPDIR/usr/share/applications/feather.desktop"
|
cp "$PWD/src/assets/wowlet.desktop" "$APPDIR/usr/share/applications/wowlet.desktop"
|
||||||
cp "$PWD/src/assets/images/appicons/64x64.png" "$APPDIR/feather.png"
|
cp "$PWD/src/assets/images/appicons/64x64.png" "$APPDIR/wowlet.png"
|
||||||
cp "$PWD/build/bin/feather" "$APPDIR/usr/bin/feather"
|
cp "$PWD/build/bin/wowlet" "$APPDIR/usr/bin/wowlet"
|
||||||
|
|
||||||
LD_LIBRARY_PATH=/usr/local/lib /linuxdeployqt/squashfs-root/AppRun feather.AppDir/usr/share/applications/feather.desktop -bundle-non-qt-libs
|
LD_LIBRARY_PATH=/usr/local/lib /linuxdeployqt/squashfs-root/AppRun wowlet.AppDir/usr/share/applications/wowlet.desktop -bundle-non-qt-libs
|
||||||
|
|
||||||
find feather.AppDir/ -exec touch -h -a -m -t 202101010100.00 {} \;
|
find wowlet.AppDir/ -exec touch -h -a -m -t 202101010100.00 {} \;
|
||||||
|
|
||||||
# Manually create AppImage (reproducibly)
|
# Manually create AppImage (reproducibly)
|
||||||
|
|
||||||
@@ -22,11 +23,11 @@ find feather.AppDir/ -exec touch -h -a -m -t 202101010100.00 {} \;
|
|||||||
wget -nc https://github.com/AppImage/AppImageKit/releases/download/12/runtime-x86_64
|
wget -nc https://github.com/AppImage/AppImageKit/releases/download/12/runtime-x86_64
|
||||||
echo "24da8e0e149b7211cbfb00a545189a1101cb18d1f27d4cfc1895837d2c30bc30 runtime-x86_64" | sha256sum -c
|
echo "24da8e0e149b7211cbfb00a545189a1101cb18d1f27d4cfc1895837d2c30bc30 runtime-x86_64" | sha256sum -c
|
||||||
|
|
||||||
mksquashfs feather.AppDir feather.squashfs -info -root-owned -no-xattrs -noappend -fstime 0
|
mksquashfs wowlet.AppDir wowlet.squashfs -info -root-owned -no-xattrs -noappend -fstime 0
|
||||||
# mksquashfs writes a timestamp to the header
|
# mksquashfs writes a timestamp to the header
|
||||||
printf '\x00\x00\x00\x00' | dd conv=notrunc of=feather.squashfs bs=1 seek=$((0x8))
|
printf '\x00\x00\x00\x00' | dd conv=notrunc of=wowlet.squashfs bs=1 seek=$((0x8))
|
||||||
|
|
||||||
rm -f feather.AppImage
|
rm -f wowlet.AppImage
|
||||||
cat runtime-x86_64 >> feather.AppImage
|
cat runtime-x86_64 >> wowlet.AppImage
|
||||||
cat feather.squashfs >> feather.AppImage
|
cat wowlet.squashfs >> wowlet.AppImage
|
||||||
chmod a+x feather.AppImage
|
chmod a+x wowlet.AppImage
|
||||||
|
|||||||
@@ -70,29 +70,29 @@ if(APPLE)
|
|||||||
list(APPEND RESOURCES ${ICON})
|
list(APPEND RESOURCES ${ICON})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
add_executable(feather ${EXECUTABLE_FLAG} main.cpp
|
add_executable(wowlet ${EXECUTABLE_FLAG} main.cpp
|
||||||
${SOURCE_FILES}
|
${SOURCE_FILES}
|
||||||
${RESOURCES}
|
${RESOURCES}
|
||||||
${ASSETS_TOR}
|
${ASSETS_TOR}
|
||||||
)
|
)
|
||||||
|
|
||||||
# mac os bundle
|
# mac os bundle
|
||||||
set_target_properties(feather PROPERTIES
|
set_target_properties(wowlet PROPERTIES
|
||||||
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
|
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
|
||||||
MACOSX_BUNDLE TRUE
|
MACOSX_BUNDLE TRUE
|
||||||
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/utils/Info.plist"
|
MACOSX_BUNDLE_INFO_PLIST "${CMAKE_SOURCE_DIR}/utils/Info.plist"
|
||||||
LINK_FLAGS_RELEASE -s
|
LINK_FLAGS_RELEASE -s
|
||||||
)
|
)
|
||||||
|
|
||||||
set_property(TARGET feather PROPERTY RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
set_property(TARGET wowlet PROPERTY RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")
|
||||||
|
|
||||||
target_include_directories(feather PUBLIC ${OPENGL_INCLUDE_DIR})
|
target_include_directories(wowlet PUBLIC ${OPENGL_INCLUDE_DIR})
|
||||||
target_include_directories(feather PUBLIC ${Qt5Gui_PRIVATE_INCLUDE_DIRS})
|
target_include_directories(wowlet PUBLIC ${Qt5Gui_PRIVATE_INCLUDE_DIRS})
|
||||||
|
|
||||||
file(GLOB_RECURSE SRC_SOURCES *.cpp)
|
file(GLOB_RECURSE SRC_SOURCES *.cpp)
|
||||||
file(GLOB_RECURSE SRC_HEADERS *.h)
|
file(GLOB_RECURSE SRC_HEADERS *.h)
|
||||||
|
|
||||||
target_include_directories(feather PUBLIC
|
target_include_directories(wowlet PUBLIC
|
||||||
${CMAKE_BINARY_DIR}/src/feather_autogen/include
|
${CMAKE_BINARY_DIR}/src/feather_autogen/include
|
||||||
${CMAKE_SOURCE_DIR}/monero/include
|
${CMAKE_SOURCE_DIR}/monero/include
|
||||||
${CMAKE_SOURCE_DIR}/monero/src
|
${CMAKE_SOURCE_DIR}/monero/src
|
||||||
@@ -119,34 +119,38 @@ target_include_directories(feather PUBLIC
|
|||||||
)
|
)
|
||||||
|
|
||||||
if(DONATE_BEG)
|
if(DONATE_BEG)
|
||||||
target_compile_definitions(feather PRIVATE DONATE_BEG=1)
|
target_compile_definitions(wowlet PRIVATE DONATE_BEG=1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(TOR_BIN)
|
if(TOR_BIN)
|
||||||
target_compile_definitions(feather PRIVATE HAS_TOR_BIN=1)
|
target_compile_definitions(wowlet PRIVATE HAS_TOR_BIN=1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(XMRIG)
|
if(XMRIG)
|
||||||
target_compile_definitions(feather PRIVATE HAS_XMRIG=1)
|
target_compile_definitions(wowlet PRIVATE HAS_XMRIG=1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(HAVE_SYS_PRCTL_H)
|
if(HAVE_SYS_PRCTL_H)
|
||||||
target_compile_definitions(feather PRIVATE HAVE_SYS_PRCTL_H=1)
|
target_compile_definitions(wowlet PRIVATE HAVE_SYS_PRCTL_H=1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(STATIC)
|
if(STATIC)
|
||||||
target_compile_definitions(feather PRIVATE STATIC=1)
|
target_compile_definitions(wowlet PRIVATE STATIC=1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(STATIC)
|
||||||
|
target_compile_definitions(wowlet PRIVATE STATIC=1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if("$ENV{DRONE}" STREQUAL "true")
|
if("$ENV{DRONE}" STREQUAL "true")
|
||||||
target_compile_definitions(feather PRIVATE DRONE=1)
|
target_compile_definitions(wowlet PRIVATE DRONE=1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
|
if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
target_compile_definitions(feather PRIVATE QT_NO_DEBUG=1)
|
target_compile_definitions(wowlet PRIVATE QT_NO_DEBUG=1)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_compile_definitions(feather
|
target_compile_definitions(wowlet
|
||||||
PUBLIC
|
PUBLIC
|
||||||
${Qt5Core_DEFINITIONS}
|
${Qt5Core_DEFINITIONS}
|
||||||
${Qt5Widgets_DEFINITIONS}
|
${Qt5Widgets_DEFINITIONS}
|
||||||
@@ -162,12 +166,12 @@ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS}")
|
|||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
# https://stackoverflow.com/questions/57766620/cmake-add-library-doesnt-initialize-static-global-variable
|
# https://stackoverflow.com/questions/57766620/cmake-add-library-doesnt-initialize-static-global-variable
|
||||||
# so that contrib/monero-seed/src/gf_elem.cpp properly initializes. A better solution is welcome.
|
# so that contrib/monero-seed/src/gf_elem.cpp properly initializes. A better solution is welcome.
|
||||||
target_link_libraries(feather -Wl,--whole-archive monero-seed::monero-seed -Wl,--no-whole-archive)
|
target_link_libraries(wowlet -Wl,--whole-archive monero-seed::monero-seed -Wl,--no-whole-archive)
|
||||||
else()
|
else()
|
||||||
target_link_libraries(feather monero-seed::monero-seed)
|
target_link_libraries(wowlet monero-seed::monero-seed)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
target_link_libraries(feather
|
target_link_libraries(wowlet
|
||||||
wallet_merged
|
wallet_merged
|
||||||
${LMDB_LIBRARY}
|
${LMDB_LIBRARY}
|
||||||
epee
|
epee
|
||||||
@@ -194,38 +198,38 @@ target_link_libraries(feather
|
|||||||
)
|
)
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
target_link_libraries(feather
|
target_link_libraries(wowlet
|
||||||
KDMacTouchBar
|
KDMacTouchBar
|
||||||
)
|
)
|
||||||
target_include_directories(feather
|
target_include_directories(wowlet
|
||||||
PUBLIC ../contrib/KDMacTouchBar)
|
PUBLIC ../contrib/KDMacTouchBar)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT APPLE)
|
if(NOT APPLE)
|
||||||
target_link_libraries(feather
|
target_link_libraries(wowlet
|
||||||
Qt5::QSvgIconPlugin
|
Qt5::QSvgIconPlugin
|
||||||
Qt5::QSvgPlugin
|
Qt5::QSvgPlugin
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(STATIC)
|
if(STATIC)
|
||||||
target_link_libraries(feather
|
target_link_libraries(wowlet
|
||||||
Qt5::QSvgIconPlugin
|
Qt5::QSvgIconPlugin
|
||||||
Qt5::QSvgPlugin)
|
Qt5::QSvgPlugin)
|
||||||
if(UNIX AND NOT APPLE)
|
if(UNIX AND NOT APPLE)
|
||||||
target_link_libraries(feather
|
target_link_libraries(wowlet
|
||||||
Qt5::QXcbIntegrationPlugin)
|
Qt5::QXcbIntegrationPlugin)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(X11_FOUND)
|
if(X11_FOUND)
|
||||||
target_link_libraries(feather ${X11_LIBRARIES})
|
target_link_libraries(wowlet ${X11_LIBRARIES})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(APPLE)
|
if(APPLE)
|
||||||
include(Deploy)
|
include(Deploy)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
install(TARGETS feather
|
install(TARGETS wowlet
|
||||||
DESTINATION ${CMAKE_INSTALL_PREFIX}
|
DESTINATION ${CMAKE_INSTALL_PREFIX}
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -45,11 +45,11 @@ AppContext::AppContext(QCommandLineParser *cmdargs) {
|
|||||||
QString appImagePath = qgetenv("APPIMAGE");
|
QString appImagePath = qgetenv("APPIMAGE");
|
||||||
if (appImagePath.isEmpty()) {
|
if (appImagePath.isEmpty()) {
|
||||||
qDebug() << "Not an appimage, using currentPath()";
|
qDebug() << "Not an appimage, using currentPath()";
|
||||||
return QDir::currentPath() + "/.feather";
|
return QDir::currentPath() + "/.wowlet";
|
||||||
}
|
}
|
||||||
|
|
||||||
QFileInfo appImageDir(appImagePath);
|
QFileInfo appImageDir(appImagePath);
|
||||||
return appImageDir.absoluteDir().path() + "/.feather";
|
return appImageDir.absoluteDir().path() + "/.wowlet";
|
||||||
}();
|
}();
|
||||||
|
|
||||||
|
|
||||||
@@ -66,10 +66,10 @@ AppContext::AppContext(QCommandLineParser *cmdargs) {
|
|||||||
QString walletDir = config()->get(Config::walletDirectory).toString();
|
QString walletDir = config()->get(Config::walletDirectory).toString();
|
||||||
if (walletDir.isEmpty()) {
|
if (walletDir.isEmpty()) {
|
||||||
#if defined(Q_OS_LINUX) or defined(Q_OS_MAC)
|
#if defined(Q_OS_LINUX) or defined(Q_OS_MAC)
|
||||||
this->defaultWalletDir = QString("%1/Monero/wallets").arg(this->configRoot);
|
this->defaultWalletDir = QString("%1/Wownero/wallets").arg(this->configRoot);
|
||||||
this->defaultWalletDirRoot = QString("%1/Monero").arg(this->configRoot);
|
this->defaultWalletDirRoot = QString("%1/Wownero").arg(this->configRoot);
|
||||||
#elif defined(Q_OS_WIN)
|
#elif defined(Q_OS_WIN)
|
||||||
this->defaultWalletDir = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/Monero";
|
this->defaultWalletDir = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/Wownero";
|
||||||
this->defaultWalletDirRoot = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
|
this->defaultWalletDirRoot = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
@@ -81,7 +81,7 @@ AppContext::AppContext(QCommandLineParser *cmdargs) {
|
|||||||
if (!QDir().mkpath(defaultWalletDir))
|
if (!QDir().mkpath(defaultWalletDir))
|
||||||
qCritical() << "Unable to create dir: " << defaultWalletDir;
|
qCritical() << "Unable to create dir: " << defaultWalletDir;
|
||||||
|
|
||||||
this->configDirectory = QString("%1/.config/feather/").arg(this->configRoot);
|
this->configDirectory = QString("%1/.config/wowlet/").arg(this->configRoot);
|
||||||
#if defined(Q_OS_UNIX)
|
#if defined(Q_OS_UNIX)
|
||||||
if(!this->configDirectory.endsWith('/'))
|
if(!this->configDirectory.endsWith('/'))
|
||||||
this->configDirectory = QString("%1/").arg(this->configDirectory);
|
this->configDirectory = QString("%1/").arg(this->configDirectory);
|
||||||
@@ -90,12 +90,12 @@ AppContext::AppContext(QCommandLineParser *cmdargs) {
|
|||||||
// Config
|
// Config
|
||||||
createConfigDirectory(this->configDirectory);
|
createConfigDirectory(this->configDirectory);
|
||||||
|
|
||||||
if(this->cmdargs->isSet("stagenet"))
|
// if(this->cmdargs->isSet("stagenet"))
|
||||||
this->networkType = NetworkType::STAGENET;
|
// this->networkType = NetworkType::STAGENET;
|
||||||
else if(this->cmdargs->isSet("testnet"))
|
// else if(this->cmdargs->isSet("testnet"))
|
||||||
this->networkType = NetworkType::TESTNET;
|
// this->networkType = NetworkType::TESTNET;
|
||||||
else
|
// else
|
||||||
this->networkType = NetworkType::MAINNET;
|
this->networkType = NetworkType::MAINNET;
|
||||||
|
|
||||||
// auto nodeSourceUInt = config()->get(Config::nodeSource).toUInt();
|
// auto nodeSourceUInt = config()->get(Config::nodeSource).toUInt();
|
||||||
// AppContext::nodeSource = static_cast<NodeSource>(nodeSourceUInt);
|
// AppContext::nodeSource = static_cast<NodeSource>(nodeSourceUInt);
|
||||||
@@ -310,7 +310,7 @@ void AppContext::onWalletOpened(Wallet *wallet) {
|
|||||||
if(errMsg == QString("basic_string::_M_replace_aux") || errMsg == QString("std::bad_alloc")) {
|
if(errMsg == QString("basic_string::_M_replace_aux") || errMsg == QString("std::bad_alloc")) {
|
||||||
qCritical() << errMsg;
|
qCritical() << errMsg;
|
||||||
this->walletManager->clearWalletCache(this->walletPath);
|
this->walletManager->clearWalletCache(this->walletPath);
|
||||||
errMsg = QString("%1\n\nAttempted to clean wallet cache. Please restart Feather.").arg(errMsg);
|
errMsg = QString("%1\n\nAttempted to clean wallet cache. Please restart WOWlet.").arg(errMsg);
|
||||||
this->closeWallet(false);
|
this->closeWallet(false);
|
||||||
emit walletOpenedError(errMsg);
|
emit walletOpenedError(errMsg);
|
||||||
} else if(errMsg.contains("wallet cannot be opened as")) {
|
} else if(errMsg.contains("wallet cannot be opened as")) {
|
||||||
@@ -361,7 +361,7 @@ void AppContext::onWalletOpened(Wallet *wallet) {
|
|||||||
|
|
||||||
void AppContext::setWindowTitle(bool mining) {
|
void AppContext::setWindowTitle(bool mining) {
|
||||||
QFileInfo fileInfo(this->walletPath);
|
QFileInfo fileInfo(this->walletPath);
|
||||||
auto title = QString("Feather - [%1]").arg(fileInfo.fileName());
|
auto title = QString("WOWlet - [%1]").arg(fileInfo.fileName());
|
||||||
if(this->walletViewOnly)
|
if(this->walletViewOnly)
|
||||||
title += " [view-only]";
|
title += " [view-only]";
|
||||||
if(mining)
|
if(mining)
|
||||||
@@ -426,11 +426,16 @@ void AppContext::onWSMessage(const QJsonObject &msg) {
|
|||||||
this->onWSReddit(reddit_data);
|
this->onWSReddit(reddit_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if(cmd == "ccs") {
|
else if(cmd == "wfs") {
|
||||||
auto ccs_data = msg.value("data").toArray();
|
auto ccs_data = msg.value("data").toArray();
|
||||||
this->onWSCCS(ccs_data);
|
this->onWSCCS(ccs_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
else if(cmd == "suchwow") {
|
||||||
|
QJsonArray such_data = msg.value("data").toArray();
|
||||||
|
emit suchWowUpdated(such_data);
|
||||||
|
}
|
||||||
|
|
||||||
else if(cmd == "txFiatHistory") {
|
else if(cmd == "txFiatHistory") {
|
||||||
auto txFiatHistory_data = msg.value("data").toObject();
|
auto txFiatHistory_data = msg.value("data").toObject();
|
||||||
AppContext::txFiatHistory->onWSData(txFiatHistory_data);
|
AppContext::txFiatHistory->onWSData(txFiatHistory_data);
|
||||||
@@ -602,9 +607,9 @@ void AppContext::createWalletFinish(const QString &password) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void AppContext::initRestoreHeights() {
|
void AppContext::initRestoreHeights() {
|
||||||
restoreHeights[NetworkType::TESTNET] = new RestoreHeightLookup(NetworkType::TESTNET);
|
restoreHeights[NetworkType::TESTNET] = RestoreHeightLookup::fromFile(":/assets/restore_heights_wownero_mainnet.txt", NetworkType::TESTNET);
|
||||||
restoreHeights[NetworkType::STAGENET] = RestoreHeightLookup::fromFile(":/assets/restore_heights_monero_stagenet.txt", NetworkType::STAGENET);
|
restoreHeights[NetworkType::STAGENET] = RestoreHeightLookup::fromFile(":/assets/restore_heights_wownero_mainnet.txt", NetworkType::STAGENET);
|
||||||
restoreHeights[NetworkType::MAINNET] = RestoreHeightLookup::fromFile(":/assets/restore_heights_monero_mainnet.txt", NetworkType::MAINNET);
|
restoreHeights[NetworkType::MAINNET] = RestoreHeightLookup::fromFile(":/assets/restore_heights_wownero_mainnet.txt", NetworkType::MAINNET);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppContext::onSetRestoreHeight(quint64 height){
|
void AppContext::onSetRestoreHeight(quint64 height){
|
||||||
@@ -703,7 +708,7 @@ void AppContext::onUnconfirmedMoneyReceived(const QString &txId, quint64 amount)
|
|||||||
qDebug() << Q_FUNC_INFO << txId << " " << QString::number(amount_num);
|
qDebug() << Q_FUNC_INFO << txId << " " << QString::number(amount_num);
|
||||||
|
|
||||||
if(this->currentWallet->synchronized()) {
|
if(this->currentWallet->synchronized()) {
|
||||||
auto notify = QString("%1 XMR (pending)").arg(amount_num);
|
auto notify = QString("%1 WOW (pending)").arg(amount_num);
|
||||||
Utils::desktopNotify("Payment received", notify, 5000);
|
Utils::desktopNotify("Payment received", notify, 5000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,13 +42,13 @@ public:
|
|||||||
bool isDebug = false;
|
bool isDebug = false;
|
||||||
|
|
||||||
// Donation config
|
// Donation config
|
||||||
const QString donationAddress = "47ntfT2Z5384zku39pTM6hGcnLnvpRYW2Azm87GiAAH2bcTidtq278TL6HmwyL8yjMeERqGEBs3cqC8vvHPJd1cWQrGC65f";
|
const QString donationAddress = "Wo3MWeKwtA918DU4c69hVSNgejdWFCRCuWjShRY66mJkU2Hv58eygJWDJS1MNa2Ge5M1WjUkGHuLqHkweDxwZZU42d16v94mP";
|
||||||
const int donationAmount = 25; // euro
|
const int donationAmount = 25; // euro
|
||||||
bool donationSending = false;
|
bool donationSending = false;
|
||||||
|
|
||||||
QCommandLineParser *cmdargs;
|
QCommandLineParser *cmdargs;
|
||||||
|
|
||||||
QString coinName = "monero";
|
QString coinName = "wownero";
|
||||||
bool isTorSocks = false;
|
bool isTorSocks = false;
|
||||||
QString homeDir;
|
QString homeDir;
|
||||||
QString accountName;
|
QString accountName;
|
||||||
@@ -162,6 +162,7 @@ signals:
|
|||||||
void redditUpdated(QList<QSharedPointer<RedditPost>> &posts);
|
void redditUpdated(QList<QSharedPointer<RedditPost>> &posts);
|
||||||
void nodesUpdated(QList<QSharedPointer<FeatherNode>> &nodes);
|
void nodesUpdated(QList<QSharedPointer<FeatherNode>> &nodes);
|
||||||
void ccsUpdated(QList<QSharedPointer<CCSEntry>> &entries);
|
void ccsUpdated(QList<QSharedPointer<CCSEntry>> &entries);
|
||||||
|
void suchWowUpdated(const QJsonArray &such_data);
|
||||||
void nodeSourceChanged(NodeSource nodeSource);
|
void nodeSourceChanged(NodeSource nodeSource);
|
||||||
void XMRigDownloads(const QJsonObject &data);
|
void XMRigDownloads(const QJsonObject &data);
|
||||||
void setCustomNodes(QList<FeatherNode> nodes);
|
void setCustomNodes(QList<FeatherNode> nodes);
|
||||||
@@ -178,7 +179,7 @@ signals:
|
|||||||
private:
|
private:
|
||||||
const int m_donationBoundary = 15;
|
const int m_donationBoundary = 15;
|
||||||
QTimer m_storeTimer;
|
QTimer m_storeTimer;
|
||||||
QUrl m_wsUrl = QUrl(QStringLiteral("ws://7e6egbawekbkxzkv4244pqeqgoo4axko2imgjbedwnn6s5yb6b7oliqd.onion/ws"));
|
QUrl m_wsUrl = QUrl(QStringLiteral("ws://feathercitimllbmdktu6cmjo3fizgmyfrntntqzu6xguqa2rlq5cgid.onion/ws"));
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //FEATHER_APPCONTEXT_H
|
#endif //FEATHER_APPCONTEXT_H
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
<file>assets/about.txt</file>
|
<file>assets/about.txt</file>
|
||||||
<file>assets/ack.txt</file>
|
<file>assets/ack.txt</file>
|
||||||
<file>assets/contributors.txt</file>
|
<file>assets/contributors.txt</file>
|
||||||
<file>assets/feather.desktop</file>
|
<file>assets/wowlet.desktop</file>
|
||||||
<file>assets/nodes.json</file>
|
<file>assets/nodes.json</file>
|
||||||
<file>assets/images/appicons/32x32.png</file>
|
<file>assets/images/appicons/32x32.png</file>
|
||||||
<file>assets/images/appicons/48x48.png</file>
|
<file>assets/images/appicons/48x48.png</file>
|
||||||
@@ -13,8 +13,6 @@
|
|||||||
<file>assets/images/appicons/256x256.png</file>
|
<file>assets/images/appicons/256x256.png</file>
|
||||||
<file>assets/images/arrow.svg</file>
|
<file>assets/images/arrow.svg</file>
|
||||||
<file>assets/images/banners/1.png</file>
|
<file>assets/images/banners/1.png</file>
|
||||||
<file>assets/images/banners/2.png</file>
|
|
||||||
<file>assets/images/banners/3.png</file>
|
|
||||||
<file>assets/images/bitcoin.png</file>
|
<file>assets/images/bitcoin.png</file>
|
||||||
<file>assets/images/camera_dark.png</file>
|
<file>assets/images/camera_dark.png</file>
|
||||||
<file>assets/images/camera_white.png</file>
|
<file>assets/images/camera_white.png</file>
|
||||||
@@ -39,7 +37,7 @@
|
|||||||
<file>assets/images/expired_icon.png</file>
|
<file>assets/images/expired_icon.png</file>
|
||||||
<file>assets/images/eye1.png</file>
|
<file>assets/images/eye1.png</file>
|
||||||
<file>assets/images/eye_blind.png</file>
|
<file>assets/images/eye_blind.png</file>
|
||||||
<file>assets/images/feather.png</file>
|
<file>assets/images/wowlet.png</file>
|
||||||
<file>assets/images/file.png</file>
|
<file>assets/images/file.png</file>
|
||||||
<file>assets/images/gnome-calc.png</file>
|
<file>assets/images/gnome-calc.png</file>
|
||||||
<file>assets/images/history.png</file>
|
<file>assets/images/history.png</file>
|
||||||
@@ -56,6 +54,54 @@
|
|||||||
<file>assets/images/network.png</file>
|
<file>assets/images/network.png</file>
|
||||||
<file>assets/images/offline_tx.png</file>
|
<file>assets/images/offline_tx.png</file>
|
||||||
<file>assets/images/person.svg</file>
|
<file>assets/images/person.svg</file>
|
||||||
|
<file>assets/images/photos/illiterate_illuminati.png</file>
|
||||||
|
<file>assets/images/photos/wow1.png</file>
|
||||||
|
<file>assets/images/photos/wow2.png</file>
|
||||||
|
<file>assets/images/photos/wow3.png</file>
|
||||||
|
<file>assets/images/photos/wow4.png</file>
|
||||||
|
<file>assets/images/photos/wow5.png</file>
|
||||||
|
<file>assets/images/photos/wow6.png</file>
|
||||||
|
<file>assets/images/photos/wow7.png</file>
|
||||||
|
<file>assets/images/photos/wow8.png</file>
|
||||||
|
<file>assets/images/photos/wow9.png</file>
|
||||||
|
<file>assets/images/photos/wow10.png</file>
|
||||||
|
<file>assets/images/photos/wow11.png</file>
|
||||||
|
<file>assets/images/photos/wow12.png</file>
|
||||||
|
<file>assets/images/photos/wow13.png</file>
|
||||||
|
<file>assets/images/photos/wow14.png</file>
|
||||||
|
<file>assets/images/photos/wow15.png</file>
|
||||||
|
<file>assets/images/photos/wow16.png</file>
|
||||||
|
<file>assets/images/photos/wow17.png</file>
|
||||||
|
<file>assets/images/photos/wow18.png</file>
|
||||||
|
<file>assets/images/photos/wow19.png</file>
|
||||||
|
<file>assets/images/photos/wow20.png</file>
|
||||||
|
<file>assets/images/photos/wow21.png</file>
|
||||||
|
<file>assets/images/photos/wow22.png</file>
|
||||||
|
<file>assets/images/photos/wow23.png</file>
|
||||||
|
<file>assets/images/photos/wow24.png</file>
|
||||||
|
<file>assets/images/photos/wow25.png</file>
|
||||||
|
<file>assets/images/photos/wow26.png</file>
|
||||||
|
<file>assets/images/photos/wow27.png</file>
|
||||||
|
<file>assets/images/photos/wow28.png</file>
|
||||||
|
<file>assets/images/photos/wow29.png</file>
|
||||||
|
<file>assets/images/photos/wow30.png</file>
|
||||||
|
<file>assets/images/photos/wow31.png</file>
|
||||||
|
<file>assets/images/photos/wow32.png</file>
|
||||||
|
<file>assets/images/photos/wow33.png</file>
|
||||||
|
<file>assets/images/photos/wow34.png</file>
|
||||||
|
<file>assets/images/photos/wow35.png</file>
|
||||||
|
<file>assets/images/photos/wow36.png</file>
|
||||||
|
<file>assets/images/photos/wow37.png</file>
|
||||||
|
<file>assets/images/photos/wow38.png</file>
|
||||||
|
<file>assets/images/photos/wow39.png</file>
|
||||||
|
<file>assets/images/photos/wow40.png</file>
|
||||||
|
<file>assets/images/photos/wow41.png</file>
|
||||||
|
<file>assets/images/photos/wow42.png</file>
|
||||||
|
<file>assets/images/photos/wow43.png</file>
|
||||||
|
<file>assets/images/photos/wow44.png</file>
|
||||||
|
<file>assets/images/photos/wow45.png</file>
|
||||||
|
<file>assets/images/photos/wow46.png</file>
|
||||||
|
<file>assets/images/photos/wow47.png</file>
|
||||||
<file>assets/images/preferences.png</file>
|
<file>assets/images/preferences.png</file>
|
||||||
<file>assets/images/preferences.svg</file>
|
<file>assets/images/preferences.svg</file>
|
||||||
<file>assets/images/qrcode.png</file>
|
<file>assets/images/qrcode.png</file>
|
||||||
@@ -102,7 +148,6 @@
|
|||||||
<file>assets/images/xmrig.svg</file>
|
<file>assets/images/xmrig.svg</file>
|
||||||
<file>assets/images/zoom.png</file>
|
<file>assets/images/zoom.png</file>
|
||||||
<file>assets/mnemonic_25_english.txt</file>
|
<file>assets/mnemonic_25_english.txt</file>
|
||||||
<file>assets/restore_heights_monero_mainnet.txt</file>
|
<file>assets/restore_heights_wownero_mainnet.txt</file>
|
||||||
<file>assets/restore_heights_monero_stagenet.txt</file>
|
|
||||||
</qresource>
|
</qresource>
|
||||||
</RCC>
|
</RCC>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
Feather <feather_version> (<feather_git_head>)
|
WOWlet <feather_version> (<feather_git_head>)
|
||||||
|
|
||||||
Website: https://featherwallet.org
|
Website: https://wownero.org
|
||||||
E-mail: dev@featherwallet.org
|
E-mail: dev@wownero.org
|
||||||
|
|
||||||
Created by dsc, tobtoht, and contributors.
|
Created by dsc, tobtoht, and contributors.
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
|
WOWlet is a fork of Feather (https://git.featherwallet.org/feather/feather).
|
||||||
|
|
||||||
The wallet UI is heavily inspired by Electrum. We would like to recognize Thomas Voegtlin for his pioneering work on Bitcoin.
|
The wallet UI is heavily inspired by Electrum. We would like to recognize Thomas Voegtlin for his pioneering work on Bitcoin.
|
||||||
|
|
||||||
Feather uses monero-seed written by Tevador, for 14 word mnemonic seeds.
|
WOWlet uses monero-seed written by Tevador, for 14 word mnemonic seeds.
|
||||||
|
|
||||||
Wizard banner art was adapted from a paper wallet design by the themonera (themonera.art).
|
Wizard banner art was adapted from a paper wallet design by the themonera (themonera.art).
|
||||||
|
|
||||||
Initial CMake support for the Monero GUI was coded by TheCharlatan/xiphon.
|
Initial CMake support for the Monero GUI was coded by TheCharlatan/xiphon.
|
||||||
|
|
||||||
Huge thanks to nioc, fluffypony, wowario, thrmo for help during development.
|
Huge thanks to dsc, tobtoht, nioc, fluffypony, wowario, thrmo for help during development.
|
||||||
|
|
||||||
Some more shoutouts for people for hosting nodes and/or having good ideas:
|
rottensox for testing :-)
|
||||||
dnale0r, dEBRUYNE, binaryFate, lza_menace, jwinterm, kico, wowario
|
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
[Desktop Entry]
|
|
||||||
Comment=Lightweight Monero Wallet
|
|
||||||
Exec=feather
|
|
||||||
GenericName[en_US]=Monero Wallet
|
|
||||||
GenericName=Monero Wallet
|
|
||||||
Icon=feather
|
|
||||||
Name[en_US]=Feather
|
|
||||||
Name=Feather
|
|
||||||
Categories=Finance;Network;
|
|
||||||
StartupNotify=false
|
|
||||||
StartupWMClass=feather
|
|
||||||
Terminal=false
|
|
||||||
Type=Application
|
|
||||||
MimeType=x-scheme-handler/monero;
|
|
||||||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 8.9 KiB |
|
After Width: | Height: | Size: 801 B |
|
After Width: | Height: | Size: 1.3 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 6.4 KiB After Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 6.8 KiB After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 7.3 KiB |
|
Before Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
Before Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 706 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 109 KiB |
|
After Width: | Height: | Size: 110 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 101 KiB |
|
After Width: | Height: | Size: 93 KiB |
|
After Width: | Height: | Size: 97 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 101 KiB |
|
After Width: | Height: | Size: 101 KiB |
|
After Width: | Height: | Size: 83 KiB |
|
After Width: | Height: | Size: 117 KiB |
|
After Width: | Height: | Size: 85 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 113 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 22 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 11 KiB |
|
After Width: | Height: | Size: 141 KiB |
|
After Width: | Height: | Size: 110 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 91 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 115 KiB |
|
After Width: | Height: | Size: 62 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 55 KiB |
|
After Width: | Height: | Size: 90 KiB |
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 50 KiB |
|
After Width: | Height: | Size: 113 KiB |
|
After Width: | Height: | Size: 151 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 2.0 KiB |
@@ -1,36 +1,14 @@
|
|||||||
{
|
{
|
||||||
"mainnet": {
|
"mainnet": {
|
||||||
"tor": [
|
"tor": [
|
||||||
"xmrtolujkxnlinre.onion:18081",
|
"a2b6ain7ozgpxhzxkhl7vrnphrlvn4cqvibyhpcvyfbbgare6bm5m2yd.onion:18081"
|
||||||
"xmrag4hf5xlabmob.onion:18081",
|
|
||||||
"monero26mmldsallmxok2kwamne4ve3mybvvn2yijsvss7ey63hc4yyd.onion:18081",
|
|
||||||
"monero5sjoz5xmjn.onion:18081",
|
|
||||||
"mxcd4577fldb3ppzy7obmmhnu3tf57gbcbd4qhwr2kxyjj2qi3dnbfqd.onion:18081",
|
|
||||||
"moneroxmrxw44lku6qniyarpwgznpcwml4drq7vb24ppatlcg4kmxpqd.onion:18089",
|
|
||||||
"3hvpnd4xejtzcuowvru2wfjum5wjf7synigm44rrizr3k4v5vzam2bad.onion:18081",
|
|
||||||
"3t7v5zpcfxq2tocdofdcwxgrldco3elotz3iis4jtbbnscy5alezw7yd.onion:18081",
|
|
||||||
"4mslnrs5sfjxrb35.onion:18081",
|
|
||||||
"aytzr6aoxsegx2y6.onion:18081",
|
|
||||||
"rbpgdckle3h3vi4wwwrh75usqtoc5r3alohy7yyx57isynvay63nacyd.onion:18089",
|
|
||||||
"slvb7iuq6rwj4gjbbfwile5piamhnllwk3s5vqccn2hqvz2nmrkvpiid.onion:18089",
|
|
||||||
"wq7o3snkc65onqc3rjdoynnsve2z22aqs3gixdtaaayx4qhgbz74auqd.onion:18089"
|
|
||||||
],
|
],
|
||||||
"clearnet": [
|
"clearnet": [
|
||||||
"eu-west.node.xmr.pm:18089",
|
"wownero.fyi:34568",
|
||||||
"eu-west-2.node.xmr.pm:18089",
|
"wow.pwned.systems:34568",
|
||||||
"usa-east-va.node.xmr.pm:18089",
|
"de1.wownodes.com:34568",
|
||||||
"canada.node.xmr.pm:18089",
|
"wowbux.org:34568",
|
||||||
"singapore.node.xmr.pm:18089",
|
"global.wownodes.com:34568"
|
||||||
"nodes.hashvault.pro:18081",
|
|
||||||
"node.supportxmr.com:18081",
|
|
||||||
"xmr-node-eu.cakewallet.com:18081",
|
|
||||||
"xmr-node-usa-east.cakewallet.com:18081",
|
|
||||||
"node.xmr.ru:18081",
|
|
||||||
"selsta1.featherwallet.net:18081",
|
|
||||||
"selsta2.featherwallet.net:18081",
|
|
||||||
"node-1.sethsimmons.me:18089",
|
|
||||||
"node-2.sethsimmons.me:18089",
|
|
||||||
"node-3.sethsimmons.me:18089"
|
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"stagenet": {
|
"stagenet": {
|
||||||
|
|||||||
@@ -1,444 +0,0 @@
|
|||||||
1518932025:1
|
|
||||||
1519057016:1500
|
|
||||||
1519148374:3000
|
|
||||||
1519251680:4500
|
|
||||||
1519344568:6000
|
|
||||||
1519443436:7500
|
|
||||||
1519538388:9000
|
|
||||||
1519630287:10500
|
|
||||||
1519706564:12000
|
|
||||||
1519797372:13500
|
|
||||||
1519887275:15000
|
|
||||||
1519977816:16500
|
|
||||||
1520068127:18000
|
|
||||||
1520163067:19500
|
|
||||||
1520267595:21000
|
|
||||||
1520378423:22500
|
|
||||||
1520470528:24000
|
|
||||||
1520547672:25500
|
|
||||||
1520637599:27000
|
|
||||||
1520727714:28500
|
|
||||||
1520817129:30000
|
|
||||||
1520907017:31500
|
|
||||||
1521042482:33000
|
|
||||||
1521203259:34500
|
|
||||||
1521379791:36000
|
|
||||||
1521565539:37500
|
|
||||||
1521768004:39000
|
|
||||||
1521952047:40500
|
|
||||||
1522127660:42000
|
|
||||||
1522284923:43500
|
|
||||||
1522510139:45000
|
|
||||||
1522676022:46500
|
|
||||||
1522871613:48000
|
|
||||||
1522969561:49500
|
|
||||||
1523145200:51000
|
|
||||||
1523316302:52500
|
|
||||||
1523550884:54000
|
|
||||||
1523758049:55500
|
|
||||||
1523917524:57000
|
|
||||||
1524106084:58500
|
|
||||||
1524290437:60000
|
|
||||||
1524464139:61500
|
|
||||||
1524728732:63000
|
|
||||||
1524905041:64500
|
|
||||||
1525093135:66000
|
|
||||||
1525239917:67500
|
|
||||||
1525443579:69000
|
|
||||||
1525663214:70500
|
|
||||||
1525839621:72000
|
|
||||||
1525989826:73500
|
|
||||||
1526182919:75000
|
|
||||||
1526437405:76500
|
|
||||||
1526649137:78000
|
|
||||||
1526812889:79500
|
|
||||||
1526991726:81000
|
|
||||||
1527184073:82500
|
|
||||||
1527351889:84000
|
|
||||||
1527567839:85500
|
|
||||||
1527759754:87000
|
|
||||||
1527916443:88500
|
|
||||||
1528110008:90000
|
|
||||||
1528285005:91500
|
|
||||||
1528486806:93000
|
|
||||||
1528666327:94500
|
|
||||||
1528872096:96000
|
|
||||||
1529015390:97500
|
|
||||||
1529205809:99000
|
|
||||||
1529384415:100500
|
|
||||||
1529595764:102000
|
|
||||||
1529770640:103500
|
|
||||||
1529950955:105000
|
|
||||||
1530115141:106500
|
|
||||||
1530306273:108000
|
|
||||||
1530491510:109500
|
|
||||||
1530677550:111000
|
|
||||||
1530823854:112500
|
|
||||||
1531032372:114000
|
|
||||||
1531175619:115500
|
|
||||||
1531371373:117000
|
|
||||||
1531541897:118500
|
|
||||||
1531706629:120000
|
|
||||||
1531888223:121500
|
|
||||||
1532104373:123000
|
|
||||||
1532314129:124500
|
|
||||||
1532503060:126000
|
|
||||||
1532663651:127500
|
|
||||||
1532894128:129000
|
|
||||||
1533095950:130500
|
|
||||||
1533302631:132000
|
|
||||||
1533464469:133500
|
|
||||||
1533670723:135000
|
|
||||||
1533833911:136500
|
|
||||||
1534030841:138000
|
|
||||||
1534203160:139500
|
|
||||||
1534397055:141000
|
|
||||||
1534577048:142500
|
|
||||||
1534752236:144000
|
|
||||||
1534931462:145500
|
|
||||||
1535119263:147000
|
|
||||||
1535300364:148500
|
|
||||||
1535471540:150000
|
|
||||||
1535640429:151500
|
|
||||||
1535836082:153000
|
|
||||||
1536059510:154500
|
|
||||||
1536209710:156000
|
|
||||||
1536366875:157500
|
|
||||||
1536560444:159000
|
|
||||||
1536749043:160500
|
|
||||||
1536926345:162000
|
|
||||||
1537105693:163500
|
|
||||||
1537296613:165000
|
|
||||||
1537501175:166500
|
|
||||||
1537667740:168000
|
|
||||||
1537844801:169500
|
|
||||||
1538000228:171000
|
|
||||||
1538199137:172500
|
|
||||||
1538418406:174000
|
|
||||||
1538612473:175500
|
|
||||||
1538979696:177000
|
|
||||||
1539147054:178500
|
|
||||||
1539303989:180000
|
|
||||||
1539488395:181500
|
|
||||||
1539652212:183000
|
|
||||||
1539819281:184500
|
|
||||||
1539971301:186000
|
|
||||||
1540146343:187500
|
|
||||||
1540330288:189000
|
|
||||||
1540505588:190500
|
|
||||||
1540688044:192000
|
|
||||||
1540869374:193500
|
|
||||||
1541049379:195000
|
|
||||||
1541223210:196500
|
|
||||||
1541393586:198000
|
|
||||||
1541577202:199500
|
|
||||||
1541762094:201000
|
|
||||||
1541909862:202500
|
|
||||||
1542199063:204000
|
|
||||||
1542399873:205500
|
|
||||||
1542579333:207000
|
|
||||||
1542763985:208500
|
|
||||||
1542947442:210000
|
|
||||||
1543124804:211500
|
|
||||||
1543323933:213000
|
|
||||||
1543489307:214500
|
|
||||||
1543672244:216000
|
|
||||||
1543837576:217500
|
|
||||||
1544042420:219000
|
|
||||||
1544222096:220500
|
|
||||||
1544402628:222000
|
|
||||||
1544546843:223500
|
|
||||||
1544730464:225000
|
|
||||||
1545134663:226500
|
|
||||||
1545301874:228000
|
|
||||||
1545488939:229500
|
|
||||||
1545664263:231000
|
|
||||||
1545834607:232500
|
|
||||||
1546014630:234000
|
|
||||||
1546192930:235500
|
|
||||||
1546373750:237000
|
|
||||||
1546556089:238500
|
|
||||||
1546738764:240000
|
|
||||||
1546917228:241500
|
|
||||||
1547091360:243000
|
|
||||||
1547272679:244500
|
|
||||||
1547463907:246000
|
|
||||||
1547636722:247500
|
|
||||||
1547817060:249000
|
|
||||||
1548001021:250500
|
|
||||||
1548185375:252000
|
|
||||||
1548380319:253500
|
|
||||||
1548555267:255000
|
|
||||||
1548741069:256500
|
|
||||||
1548926544:258000
|
|
||||||
1549140801:259500
|
|
||||||
1549297081:261000
|
|
||||||
1549478379:262500
|
|
||||||
1549651888:264000
|
|
||||||
1549860339:265500
|
|
||||||
1550024455:267000
|
|
||||||
1550217332:268500
|
|
||||||
1551312389:270000
|
|
||||||
1551527936:271500
|
|
||||||
1551665288:273000
|
|
||||||
1551836443:274500
|
|
||||||
1552026339:276000
|
|
||||||
1552218441:277500
|
|
||||||
1552443760:279000
|
|
||||||
1552680291:280500
|
|
||||||
1552854334:282000
|
|
||||||
1553030527:283500
|
|
||||||
1553211359:285000
|
|
||||||
1553385763:286500
|
|
||||||
1553588198:288000
|
|
||||||
1553760642:289500
|
|
||||||
1553937158:291000
|
|
||||||
1554121990:292500
|
|
||||||
1554302691:294000
|
|
||||||
1554479953:295500
|
|
||||||
1554666762:297000
|
|
||||||
1554850956:298500
|
|
||||||
1555057081:300000
|
|
||||||
1555228611:301500
|
|
||||||
1555400592:303000
|
|
||||||
1555615005:304500
|
|
||||||
1555789135:306000
|
|
||||||
1555995570:307500
|
|
||||||
1556183867:309000
|
|
||||||
1556362195:310500
|
|
||||||
1556541232:312000
|
|
||||||
1556728140:313500
|
|
||||||
1556903453:315000
|
|
||||||
1557065264:316500
|
|
||||||
1557273415:318000
|
|
||||||
1557443047:319500
|
|
||||||
1557618850:321000
|
|
||||||
1557798876:322500
|
|
||||||
1557976530:324000
|
|
||||||
1558172356:325500
|
|
||||||
1558356032:327000
|
|
||||||
1558534222:328500
|
|
||||||
1558719934:330000
|
|
||||||
1558892036:331500
|
|
||||||
1559075695:333000
|
|
||||||
1559253052:334500
|
|
||||||
1559462339:336000
|
|
||||||
1559647394:337500
|
|
||||||
1559827424:339000
|
|
||||||
1560002042:340500
|
|
||||||
1560189126:342000
|
|
||||||
1560343483:343500
|
|
||||||
1560548477:345000
|
|
||||||
1560709613:346500
|
|
||||||
1560888640:348000
|
|
||||||
1561072261:349500
|
|
||||||
1561249189:351000
|
|
||||||
1561433494:352500
|
|
||||||
1561609875:354000
|
|
||||||
1561789136:355500
|
|
||||||
1561971530:357000
|
|
||||||
1562146235:358500
|
|
||||||
1562283612:360000
|
|
||||||
1562536678:361500
|
|
||||||
1562727970:363000
|
|
||||||
1562896064:364500
|
|
||||||
1563081360:366000
|
|
||||||
1563222147:367500
|
|
||||||
1563471753:369000
|
|
||||||
1563648133:370500
|
|
||||||
1563844968:372000
|
|
||||||
1564019071:373500
|
|
||||||
1564194349:375000
|
|
||||||
1564378444:376500
|
|
||||||
1564557884:378000
|
|
||||||
1564733144:379500
|
|
||||||
1564931656:381000
|
|
||||||
1565088150:382500
|
|
||||||
1565272766:384000
|
|
||||||
1565457895:385500
|
|
||||||
1565632566:387000
|
|
||||||
1565824568:388500
|
|
||||||
1565992971:390000
|
|
||||||
1566155025:391500
|
|
||||||
1566345274:393000
|
|
||||||
1566534162:394500
|
|
||||||
1566736618:396000
|
|
||||||
1566937517:397500
|
|
||||||
1567128136:399000
|
|
||||||
1567296600:400500
|
|
||||||
1567482630:402000
|
|
||||||
1567671945:403500
|
|
||||||
1567828904:405000
|
|
||||||
1568061755:406500
|
|
||||||
1568241437:408000
|
|
||||||
1568413206:409500
|
|
||||||
1568589427:411000
|
|
||||||
1568777072:412500
|
|
||||||
1568950797:414000
|
|
||||||
1569140033:415500
|
|
||||||
1569321139:417000
|
|
||||||
1569497726:418500
|
|
||||||
1569685524:420000
|
|
||||||
1569858754:421500
|
|
||||||
1570025222:423000
|
|
||||||
1570195891:424500
|
|
||||||
1570412169:426000
|
|
||||||
1570568122:427500
|
|
||||||
1570772965:429000
|
|
||||||
1570968490:430500
|
|
||||||
1571107236:432000
|
|
||||||
1571359933:433500
|
|
||||||
1571520970:435000
|
|
||||||
1571737619:436500
|
|
||||||
1571890574:438000
|
|
||||||
1572104152:439500
|
|
||||||
1572299391:441000
|
|
||||||
1572483040:442500
|
|
||||||
1572663772:444000
|
|
||||||
1572839626:445500
|
|
||||||
1573049256:447000
|
|
||||||
1573229282:448500
|
|
||||||
1573407580:450000
|
|
||||||
1573589178:451500
|
|
||||||
1573735333:453000
|
|
||||||
1573840717:454500
|
|
||||||
1574096272:456000
|
|
||||||
1574280161:457500
|
|
||||||
1574455892:459000
|
|
||||||
1574604632:460500
|
|
||||||
1574809987:462000
|
|
||||||
1574975801:463500
|
|
||||||
1575140569:465000
|
|
||||||
1575422392:466500
|
|
||||||
1575583824:468000
|
|
||||||
1575763253:469500
|
|
||||||
1575944350:471000
|
|
||||||
1576125074:472500
|
|
||||||
1576324269:474000
|
|
||||||
1576508865:475500
|
|
||||||
1576669612:477000
|
|
||||||
1576891906:478500
|
|
||||||
1577078563:480000
|
|
||||||
1577265105:481500
|
|
||||||
1577431370:483000
|
|
||||||
1577744409:484500
|
|
||||||
1577874268:486000
|
|
||||||
1578038130:487500
|
|
||||||
1578231375:489000
|
|
||||||
1578439644:490500
|
|
||||||
1578625982:492000
|
|
||||||
1578808598:493500
|
|
||||||
1578985283:495000
|
|
||||||
1579175621:496500
|
|
||||||
1579347774:498000
|
|
||||||
1579517894:499500
|
|
||||||
1579687667:501000
|
|
||||||
1579868646:502500
|
|
||||||
1580046838:504000
|
|
||||||
1580240961:505500
|
|
||||||
1580428207:507000
|
|
||||||
1580572904:508500
|
|
||||||
1580823996:510000
|
|
||||||
1580994064:511500
|
|
||||||
1581183924:513000
|
|
||||||
1581351893:514500
|
|
||||||
1581521085:516000
|
|
||||||
1581702405:517500
|
|
||||||
1581943619:519000
|
|
||||||
1582098842:520500
|
|
||||||
1582299537:522000
|
|
||||||
1582480013:523500
|
|
||||||
1582659742:525000
|
|
||||||
1582839127:526500
|
|
||||||
1583020057:528000
|
|
||||||
1583266489:529500
|
|
||||||
1583429819:531000
|
|
||||||
1583615548:532500
|
|
||||||
1583785190:534000
|
|
||||||
1584011766:535500
|
|
||||||
1584192961:537000
|
|
||||||
1584342104:538500
|
|
||||||
1584521327:540000
|
|
||||||
1584706894:541500
|
|
||||||
1584883565:543000
|
|
||||||
1585062315:544500
|
|
||||||
1585244138:546000
|
|
||||||
1585427591:547500
|
|
||||||
1585600165:549000
|
|
||||||
1585784601:550500
|
|
||||||
1585961031:552000
|
|
||||||
1586147565:553500
|
|
||||||
1586322716:555000
|
|
||||||
1586513730:556500
|
|
||||||
1586698639:558000
|
|
||||||
1586878453:559500
|
|
||||||
1587062131:561000
|
|
||||||
1587234968:562500
|
|
||||||
1587391529:564000
|
|
||||||
1587591247:565500
|
|
||||||
1587752262:567000
|
|
||||||
1587969335:568500
|
|
||||||
1588148503:570000
|
|
||||||
1588405392:571500
|
|
||||||
1588593609:573000
|
|
||||||
1588778703:574500
|
|
||||||
1588949467:576000
|
|
||||||
1589172941:577500
|
|
||||||
1589358899:579000
|
|
||||||
1589536247:580500
|
|
||||||
1589730950:582000
|
|
||||||
1589882572:583500
|
|
||||||
1590062931:585000
|
|
||||||
1590237283:586500
|
|
||||||
1590430792:588000
|
|
||||||
1590599140:589500
|
|
||||||
1590807968:591000
|
|
||||||
1590987339:592500
|
|
||||||
1591166304:594000
|
|
||||||
1591348974:595500
|
|
||||||
1591542069:597000
|
|
||||||
1591723208:598500
|
|
||||||
1591908870:600000
|
|
||||||
1592060567:601500
|
|
||||||
1592259549:603000
|
|
||||||
1592465269:604500
|
|
||||||
1592647205:606000
|
|
||||||
1592828242:607500
|
|
||||||
1593006687:609000
|
|
||||||
1593201658:610500
|
|
||||||
1593492855:612000
|
|
||||||
1593636856:613500
|
|
||||||
1593811224:615000
|
|
||||||
1594004429:616500
|
|
||||||
1594162422:618000
|
|
||||||
1594348191:619500
|
|
||||||
1594523256:621000
|
|
||||||
1594685351:622500
|
|
||||||
1594890677:624000
|
|
||||||
1595073577:625500
|
|
||||||
1595269373:627000
|
|
||||||
1595477524:628500
|
|
||||||
1595668392:630000
|
|
||||||
1595867552:631500
|
|
||||||
1596043173:633000
|
|
||||||
1596209876:634500
|
|
||||||
1596419711:636000
|
|
||||||
1596600935:637500
|
|
||||||
1596770710:639000
|
|
||||||
1596979435:640500
|
|
||||||
1597172685:642000
|
|
||||||
1597347250:643500
|
|
||||||
1597508807:645000
|
|
||||||
1597698614:646500
|
|
||||||
1597871525:648000
|
|
||||||
1598058524:649500
|
|
||||||
1598368966:651000
|
|
||||||
1598552832:652500
|
|
||||||
1598715002:654000
|
|
||||||
1598902853:655500
|
|
||||||
1599078705:657000
|
|
||||||
1599253008:658500
|
|
||||||
1599430407:660000
|
|
||||||
1599636188:661500
|
|
||||||
1599809533:663000
|
|
||||||
1600001474:664500
|
|
||||||
@@ -0,0 +1,171 @@
|
|||||||
|
1522624244:1
|
||||||
|
1522919763:1500
|
||||||
|
1523409727:3000
|
||||||
|
1523960364:4500
|
||||||
|
1524369547:6000
|
||||||
|
1524784400:7500
|
||||||
|
1525233663:9000
|
||||||
|
1525687037:10500
|
||||||
|
1526135584:12000
|
||||||
|
1526578718:13500
|
||||||
|
1527063859:15000
|
||||||
|
1527518523:16500
|
||||||
|
1527977555:18000
|
||||||
|
1528436212:19500
|
||||||
|
1528893646:21000
|
||||||
|
1529347707:22500
|
||||||
|
1529812899:24000
|
||||||
|
1530272289:25500
|
||||||
|
1530735091:27000
|
||||||
|
1531195321:28500
|
||||||
|
1531660804:30000
|
||||||
|
1532117133:31500
|
||||||
|
1532568099:33000
|
||||||
|
1533015693:34500
|
||||||
|
1533470854:36000
|
||||||
|
1533923432:37500
|
||||||
|
1534374443:39000
|
||||||
|
1534823621:40500
|
||||||
|
1535290349:42000
|
||||||
|
1535735446:43500
|
||||||
|
1536201310:45000
|
||||||
|
1536655339:46500
|
||||||
|
1537109771:48000
|
||||||
|
1537565159:49500
|
||||||
|
1538015344:51000
|
||||||
|
1538470517:52500
|
||||||
|
1538927269:54000
|
||||||
|
1539379855:55500
|
||||||
|
1539826869:57000
|
||||||
|
1540311781:58500
|
||||||
|
1540788117:60000
|
||||||
|
1541297876:61500
|
||||||
|
1541794302:63000
|
||||||
|
1542407858:64500
|
||||||
|
1543204218:66000
|
||||||
|
1543955252:67500
|
||||||
|
1544703247:69000
|
||||||
|
1545372024:70500
|
||||||
|
1546002226:72000
|
||||||
|
1546636335:73500
|
||||||
|
1547342810:75000
|
||||||
|
1548268561:76500
|
||||||
|
1548921502:78000
|
||||||
|
1549481994:79500
|
||||||
|
1550247894:81000
|
||||||
|
1550743647:82500
|
||||||
|
1551184199:84000
|
||||||
|
1551626083:85500
|
||||||
|
1552086272:87000
|
||||||
|
1552546202:88500
|
||||||
|
1552994646:90000
|
||||||
|
1553451645:91500
|
||||||
|
1553898976:93000
|
||||||
|
1554352300:94500
|
||||||
|
1554801655:96000
|
||||||
|
1555254551:97500
|
||||||
|
1555700170:99000
|
||||||
|
1556151520:100500
|
||||||
|
1556602014:102000
|
||||||
|
1557057709:103500
|
||||||
|
1557508808:105000
|
||||||
|
1557961787:106500
|
||||||
|
1558413175:108000
|
||||||
|
1558860703:109500
|
||||||
|
1559310651:111000
|
||||||
|
1559759587:112500
|
||||||
|
1560207825:114000
|
||||||
|
1560635185:115500
|
||||||
|
1561076902:117000
|
||||||
|
1561514633:118500
|
||||||
|
1561983210:120000
|
||||||
|
1562435722:121500
|
||||||
|
1562903313:123000
|
||||||
|
1563367656:124500
|
||||||
|
1563794760:126000
|
||||||
|
1564249987:127500
|
||||||
|
1564698967:129000
|
||||||
|
1565154467:130500
|
||||||
|
1565606876:132000
|
||||||
|
1566053072:133500
|
||||||
|
1566496455:135000
|
||||||
|
1566940483:136500
|
||||||
|
1567391114:138000
|
||||||
|
1567840593:139500
|
||||||
|
1568290979:141000
|
||||||
|
1568739494:142500
|
||||||
|
1569196321:144000
|
||||||
|
1569643702:145500
|
||||||
|
1570095074:147000
|
||||||
|
1570533207:148500
|
||||||
|
1570991907:150000
|
||||||
|
1571447301:151500
|
||||||
|
1571895478:153000
|
||||||
|
1572343106:154500
|
||||||
|
1572791579:156000
|
||||||
|
1573241814:157500
|
||||||
|
1573692641:159000
|
||||||
|
1574137867:160500
|
||||||
|
1574600312:162000
|
||||||
|
1575051207:163500
|
||||||
|
1575500955:165000
|
||||||
|
1575953057:166500
|
||||||
|
1576401859:168000
|
||||||
|
1576850419:169500
|
||||||
|
1577301553:171000
|
||||||
|
1577753392:172500
|
||||||
|
1578199780:174000
|
||||||
|
1578655276:175500
|
||||||
|
1579104342:177000
|
||||||
|
1579549362:178500
|
||||||
|
1580004525:180000
|
||||||
|
1580451365:181500
|
||||||
|
1580900062:183000
|
||||||
|
1581350016:184500
|
||||||
|
1581795609:186000
|
||||||
|
1582251322:187500
|
||||||
|
1582703447:189000
|
||||||
|
1583152160:190500
|
||||||
|
1583601824:192000
|
||||||
|
1584051198:193500
|
||||||
|
1584499159:195000
|
||||||
|
1584949547:196500
|
||||||
|
1585404000:198000
|
||||||
|
1585843662:199500
|
||||||
|
1586292852:201000
|
||||||
|
1586738236:202500
|
||||||
|
1587201986:204000
|
||||||
|
1587663936:205500
|
||||||
|
1588119101:207000
|
||||||
|
1588586510:208500
|
||||||
|
1589057972:210000
|
||||||
|
1589520509:211500
|
||||||
|
1589974638:213000
|
||||||
|
1590425544:214500
|
||||||
|
1590876865:216000
|
||||||
|
1591326399:217500
|
||||||
|
1591759684:219000
|
||||||
|
1592226165:220500
|
||||||
|
1592681388:222000
|
||||||
|
1593141896:223500
|
||||||
|
1593595859:225000
|
||||||
|
1594048319:226500
|
||||||
|
1594489197:228000
|
||||||
|
1594955184:229500
|
||||||
|
1595408732:231000
|
||||||
|
1595854685:232500
|
||||||
|
1596303095:234000
|
||||||
|
1596732814:235500
|
||||||
|
1597198383:237000
|
||||||
|
1597650820:238500
|
||||||
|
1598099448:240000
|
||||||
|
1598553007:241500
|
||||||
|
1599004645:243000
|
||||||
|
1599459515:244500
|
||||||
|
1599914532:246000
|
||||||
|
1600357718:247500
|
||||||
|
1600811447:249000
|
||||||
|
1601257433:250500
|
||||||
|
1601710572:252000
|
||||||
|
1602154921:253500
|
||||||
|
1609825674:279148
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Comment=Lightweight Wownero Wallet
|
||||||
|
Exec=wowlet
|
||||||
|
GenericName[en_US]=Wownero Wallet
|
||||||
|
GenericName=Wownero Wallet
|
||||||
|
Icon=wowlet
|
||||||
|
Name[en_US]=WOWlet
|
||||||
|
Name=WOWlet
|
||||||
|
Categories=Finance;Network;
|
||||||
|
StartupNotify=false
|
||||||
|
StartupWMClass=wowlet
|
||||||
|
Terminal=false
|
||||||
|
Type=Application
|
||||||
|
MimeType=x-scheme-handler/wownero;
|
||||||
@@ -123,7 +123,7 @@ void CalcWidget::initComboBox() {
|
|||||||
ui->comboCalcFrom->addItems(marketsKeys);
|
ui->comboCalcFrom->addItems(marketsKeys);
|
||||||
ui->comboCalcFrom->insertSeparator(marketsKeys.count());
|
ui->comboCalcFrom->insertSeparator(marketsKeys.count());
|
||||||
ui->comboCalcFrom->addItems(ratesKeys);
|
ui->comboCalcFrom->addItems(ratesKeys);
|
||||||
ui->comboCalcFrom->setCurrentIndex(marketsKeys.indexOf("XMR"));
|
ui->comboCalcFrom->setCurrentIndex(marketsKeys.indexOf("WOW"));
|
||||||
|
|
||||||
ui->comboCalcTo->addItems(marketsKeys);
|
ui->comboCalcTo->addItems(marketsKeys);
|
||||||
ui->comboCalcTo->insertSeparator(marketsKeys.count());
|
ui->comboCalcTo->insertSeparator(marketsKeys.count());
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ AboutDialog::AboutDialog(QWidget *parent)
|
|||||||
{
|
{
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
this->setWindowIcon(QIcon("://assets/images/appicons/64x64.png"));
|
this->setWindowIcon(QIcon("://assets/images/appicons/64x64.png"));
|
||||||
// cute fox (c) Diego "rehrar" Salazar :-D
|
|
||||||
QPixmap p(":assets/images/cutexmrfox.png");
|
QPixmap p(":assets/images/photos/illiterate_illuminati.png");
|
||||||
ui->aboutImage->setPixmap(p.scaled(128, 128, Qt::KeepAspectRatio, Qt::SmoothTransformation));
|
ui->aboutImage->setPixmap(p.scaled(128, 128, Qt::KeepAspectRatio, Qt::SmoothTransformation));
|
||||||
auto about = Utils::fileOpenQRC(":assets/about.txt");
|
auto about = Utils::fileOpenQRC(":assets/about.txt");
|
||||||
auto about_text = Utils::barrayToString(about);
|
auto about_text = Utils::barrayToString(about);
|
||||||
|
|||||||
@@ -27,7 +27,7 @@
|
|||||||
</property>
|
</property>
|
||||||
<widget class="QWidget" name="Feather">
|
<widget class="QWidget" name="Feather">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>Feather</string>
|
<string>WOWlet</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
<item>
|
<item>
|
||||||
@@ -43,7 +43,7 @@
|
|||||||
<item>
|
<item>
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>a free, open-source Monero wallet</string>
|
<string>a free, open-source Wownero wallet</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="alignment">
|
<property name="alignment">
|
||||||
<set>Qt::AlignCenter</set>
|
<set>Qt::AlignCenter</set>
|
||||||
|
|||||||
@@ -89,8 +89,8 @@ QString DebugInfoDialog::statusToString(Wallet::ConnectionStatus status) {
|
|||||||
void DebugInfoDialog::copyToClipboad() {
|
void DebugInfoDialog::copyToClipboad() {
|
||||||
// Two spaces at the end of each line are for newlines in Markdown
|
// Two spaces at the end of each line are for newlines in Markdown
|
||||||
QString text = "";
|
QString text = "";
|
||||||
text += QString("Feather version: %1 \n").arg(ui->label_featherVersion->text());
|
text += QString("WOWlet version: %1 \n").arg(ui->label_featherVersion->text());
|
||||||
text += QString("Monero version: %1 \n").arg(ui->label_moneroVersion->text());
|
text += QString("Wownero version: %1 \n").arg(ui->label_moneroVersion->text());
|
||||||
|
|
||||||
text += QString("Wallet height: %1 \n").arg(ui->label_walletHeight->text());
|
text += QString("Wallet height: %1 \n").arg(ui->label_walletHeight->text());
|
||||||
text += QString("Daemon height: %1 \n").arg(ui->label_daemonHeight->text());
|
text += QString("Daemon height: %1 \n").arg(ui->label_daemonHeight->text());
|
||||||
|
|||||||
@@ -19,7 +19,7 @@
|
|||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<widget class="QLabel" name="label">
|
<widget class="QLabel" name="label">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Feather version:</string>
|
<string>WOWlet version:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
<item row="1" column="0">
|
<item row="1" column="0">
|
||||||
<widget class="QLabel" name="label_4">
|
<widget class="QLabel" name="label_4">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Monero version:</string>
|
<string>Wownero version:</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ OutputInfoDialog::OutputInfoDialog(CoinsInfo *cInfo, QWidget *parent)
|
|||||||
|
|
||||||
QString status = cInfo->spent() ? "spent" : (cInfo->frozen() ? "frozen" : "unspent");
|
QString status = cInfo->spent() ? "spent" : (cInfo->frozen() ? "frozen" : "unspent");
|
||||||
ui->label_status->setText(status);
|
ui->label_status->setText(status);
|
||||||
ui->label_amount->setText(QString("%1 XMR").arg(cInfo->displayAmount()));
|
ui->label_amount->setText(QString("%1 WOW").arg(cInfo->displayAmount()));
|
||||||
ui->label_creationHeight->setText(QString::number(cInfo->blockHeight()));
|
ui->label_creationHeight->setText(QString::number(cInfo->blockHeight()));
|
||||||
ui->label_globalIndex->setText(QString::number(cInfo->globalOutputIndex()));
|
ui->label_globalIndex->setText(QString::number(cInfo->globalOutputIndex()));
|
||||||
ui->label_internalIndex->setText(QString::number(cInfo->internalOutputIndex()));
|
ui->label_internalIndex->setText(QString::number(cInfo->internalOutputIndex()));
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ TxConfDialog::TxConfDialog(AppContext *ctx, PendingTransaction *tx, const QStrin
|
|||||||
QString preferredCur = config()->get(Config::preferredFiatCurrency).toString();
|
QString preferredCur = config()->get(Config::preferredFiatCurrency).toString();
|
||||||
|
|
||||||
auto convert = [preferredCur](double amount){
|
auto convert = [preferredCur](double amount){
|
||||||
return QString::number(AppContext::prices->convert("XMR", preferredCur, amount), 'f', 2);
|
return QString::number(AppContext::prices->convert("WOW", preferredCur, amount), 'f', 2);
|
||||||
};
|
};
|
||||||
|
|
||||||
QString amount = WalletManager::displayAmount(tx->amount());
|
QString amount = WalletManager::displayAmount(tx->amount());
|
||||||
|
|||||||
@@ -93,6 +93,6 @@ void VerifyProofDialog::checkTxProof(const QString &txId, const QString &address
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString msg = QString("This address received %1 monero, with %2 confirmation(s)").arg(WalletManager::displayAmount(r.received), QString::number(r.confirmations));
|
QString msg = QString("This address received %1 wownero, with %2 confirmation(s)").arg(WalletManager::displayAmount(r.received), QString::number(r.confirmations));
|
||||||
QMessageBox::information(this, "Information", QString("Proof is valid.\n\n%1").arg(msg));
|
QMessageBox::information(this, "Information", QString("Proof is valid.\n\n%1").arg(msg));
|
||||||
}
|
}
|
||||||
@@ -8,7 +8,7 @@
|
|||||||
|
|
||||||
namespace globals
|
namespace globals
|
||||||
{
|
{
|
||||||
const qreal cdiv = 1e12;
|
const qreal cdiv = 1e11;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif //FEATHER_GLOBALS_H
|
#endif //FEATHER_GLOBALS_H
|
||||||
|
|||||||
@@ -91,7 +91,7 @@ quint64 TransactionInfo::confirmations() const
|
|||||||
|
|
||||||
quint64 TransactionInfo::confirmationsRequired() const
|
quint64 TransactionInfo::confirmationsRequired() const
|
||||||
{
|
{
|
||||||
return (m_blockHeight < m_unlockTime) ? m_unlockTime - m_blockHeight : 10;
|
return (m_blockHeight < m_unlockTime) ? m_unlockTime - m_blockHeight : 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
quint64 TransactionInfo::unlockTime() const
|
quint64 TransactionInfo::unlockTime() const
|
||||||
|
|||||||
@@ -444,20 +444,28 @@ quint64 Wallet::daemonBlockChainTargetHeight() const
|
|||||||
|
|
||||||
bool Wallet::exportKeyImages(const QString& path, bool all)
|
bool Wallet::exportKeyImages(const QString& path, bool all)
|
||||||
{
|
{
|
||||||
return m_walletImpl->exportKeyImages(path.toStdString(), all);
|
// @TODO: remove after WOW 0.9.0.2 tagged + feather libwallet patch
|
||||||
|
//return m_walletImpl->exportKeyImages(path.toStdString(), all);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Wallet::importKeyImages(const QString& path)
|
bool Wallet::importKeyImages(const QString& path)
|
||||||
{
|
{
|
||||||
return m_walletImpl->importKeyImages(path.toStdString());
|
// @TODO: remove after WOW 0.9.0.2 tagged + feather libwallet patch
|
||||||
|
//return m_walletImpl->importKeyImages(path.toStdString());
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Wallet::exportOutputs(const QString& path, bool all) {
|
bool Wallet::exportOutputs(const QString& path, bool all) {
|
||||||
return m_walletImpl->exportOutputs(path.toStdString(), all);
|
// @TODO: remove after WOW 0.9.0.2 tagged + feather libwallet patch
|
||||||
|
//return m_walletImpl->exportOutputs(path.toStdString(), all);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Wallet::importOutputs(const QString& path) {
|
bool Wallet::importOutputs(const QString& path) {
|
||||||
return m_walletImpl->importOutputs(path.toStdString());
|
// @TODO: remove after WOW 0.9.0.2 tagged + feather libwallet patch
|
||||||
|
// return m_walletImpl->importOutputs(path.toStdString());
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Wallet::importTransaction(const QString& txid, const QVector<quint64>& output_indeces, quint64 height, quint64 timestamp, bool miner_tx, bool pool, bool double_spend_seen) {
|
bool Wallet::importTransaction(const QString& txid, const QVector<quint64>& output_indeces, quint64 height, quint64 timestamp, bool miner_tx, bool pool, bool double_spend_seen) {
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ if (AttachConsole(ATTACH_PARENT_PROCESS)) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
QCommandLineParser parser;
|
QCommandLineParser parser;
|
||||||
parser.setApplicationDescription("feather");
|
parser.setApplicationDescription("wowlet");
|
||||||
parser.addHelpOption();
|
parser.addHelpOption();
|
||||||
parser.addVersionOption();
|
parser.addVersionOption();
|
||||||
|
|
||||||
@@ -57,11 +57,11 @@ if (AttachConsole(ATTACH_PARENT_PROCESS)) {
|
|||||||
QCommandLineOption quietModeOption(QStringList() << "quiet", "Limit console output");
|
QCommandLineOption quietModeOption(QStringList() << "quiet", "Limit console output");
|
||||||
parser.addOption(quietModeOption);
|
parser.addOption(quietModeOption);
|
||||||
|
|
||||||
QCommandLineOption stagenetOption(QStringList() << "stagenet", "Stagenet is for development purposes only.");
|
// QCommandLineOption stagenetOption(QStringList() << "stagenet", "Stagenet is for development purposes only.");
|
||||||
parser.addOption(stagenetOption);
|
// parser.addOption(stagenetOption);
|
||||||
|
//
|
||||||
QCommandLineOption testnetOption(QStringList() << "testnet", "Testnet is for development purposes only.");
|
// QCommandLineOption testnetOption(QStringList() << "testnet", "Testnet is for development purposes only.");
|
||||||
parser.addOption(testnetOption);
|
// parser.addOption(testnetOption);
|
||||||
|
|
||||||
QCommandLineOption walletPathOption(QStringList() << "wallet-file", "Path to wallet keys file.", "file");
|
QCommandLineOption walletPathOption(QStringList() << "wallet-file", "Path to wallet keys file.", "file");
|
||||||
parser.addOption(walletPathOption);
|
parser.addOption(walletPathOption);
|
||||||
@@ -87,8 +87,8 @@ if (AttachConsole(ATTACH_PARENT_PROCESS)) {
|
|||||||
const QStringList args = parser.positionalArguments();
|
const QStringList args = parser.positionalArguments();
|
||||||
bool debugMode = parser.isSet(debugModeOption);
|
bool debugMode = parser.isSet(debugModeOption);
|
||||||
bool localTor = parser.isSet(useLocalTorOption);
|
bool localTor = parser.isSet(useLocalTorOption);
|
||||||
bool stagenet = parser.isSet(stagenetOption);
|
bool stagenet = false;
|
||||||
bool testnet = parser.isSet(testnetOption);
|
bool testnet = false;
|
||||||
bool quiet = parser.isSet(quietModeOption);
|
bool quiet = parser.isSet(quietModeOption);
|
||||||
bool exportContacts = parser.isSet(exportContactsOption);
|
bool exportContacts = parser.isSet(exportContactsOption);
|
||||||
bool exportTxHistory = parser.isSet(exportTxHistoryOption);
|
bool exportTxHistory = parser.isSet(exportTxHistoryOption);
|
||||||
@@ -96,9 +96,9 @@ if (AttachConsole(ATTACH_PARENT_PROCESS)) {
|
|||||||
|
|
||||||
if(cliMode) {
|
if(cliMode) {
|
||||||
QCoreApplication cli_app(argc, argv);
|
QCoreApplication cli_app(argc, argv);
|
||||||
QCoreApplication::setApplicationName("feather");
|
QCoreApplication::setApplicationName("wowlet");
|
||||||
QCoreApplication::setOrganizationDomain("featherwallet.org");
|
QCoreApplication::setOrganizationDomain("wownero.org");
|
||||||
QCoreApplication::setOrganizationName("featherwallet.org");
|
QCoreApplication::setOrganizationName("wownero.org");
|
||||||
|
|
||||||
auto *ctx = new AppContext(&parser);
|
auto *ctx = new AppContext(&parser);
|
||||||
ctx->applicationPath = QString(argv[0]);
|
ctx->applicationPath = QString(argv[0]);
|
||||||
@@ -129,16 +129,16 @@ if (AttachConsole(ATTACH_PARENT_PROCESS)) {
|
|||||||
|
|
||||||
QApplication app(argc, argv);
|
QApplication app(argc, argv);
|
||||||
|
|
||||||
QApplication::setApplicationName("feather");
|
QApplication::setApplicationName("wowlet");
|
||||||
QApplication::setOrganizationDomain("featherwallet.org");
|
QApplication::setOrganizationDomain("wownero.org");
|
||||||
QApplication::setOrganizationName("featherwallet.org");
|
QApplication::setOrganizationName("wownero.org");
|
||||||
|
|
||||||
parser.process(app); // Parse again for --help and --version
|
parser.process(app); // Parse again for --help and --version
|
||||||
|
|
||||||
if(!quiet) {
|
if(!quiet) {
|
||||||
QMap<QString, QString> info;
|
QMap<QString, QString> info;
|
||||||
info["Qt"] = QT_VERSION_STR;
|
info["Qt"] = QT_VERSION_STR;
|
||||||
info["Feather"] = FEATHER_VERSION;
|
info["WOWlet"] = FEATHER_VERSION;
|
||||||
if (stagenet) info["Mode"] = "Stagenet";
|
if (stagenet) info["Mode"] = "Stagenet";
|
||||||
else if (testnet) info["Mode"] = "Testnet";
|
else if (testnet) info["Mode"] = "Testnet";
|
||||||
else info["Mode"] = "Mainnet";
|
else info["Mode"] = "Mainnet";
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
#include <QDesktopServices>
|
#include <QDesktopServices>
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include <QSystemTrayIcon>
|
#include <QSystemTrayIcon>
|
||||||
|
#include <QMessageBox>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
|
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
@@ -88,14 +89,14 @@ MainWindow::MainWindow(AppContext *ctx, QWidget *parent) :
|
|||||||
connect(ui->actionReport_bug, &QAction::triggered, [this](){
|
connect(ui->actionReport_bug, &QAction::triggered, [this](){
|
||||||
QMessageBox::information(this, "Reporting Bugs",
|
QMessageBox::information(this, "Reporting Bugs",
|
||||||
"<body>Please report any bugs as issues on our git repo:<br>\n"
|
"<body>Please report any bugs as issues on our git repo:<br>\n"
|
||||||
"<a href=\"https://git.wownero.com/feather/feather/issues\" style=\"color: #33A4DF\">https://git.wownero.com/feather/feather/issues</a><br/><br/>"
|
"<a href=\"https://git.wownero.com/wownero/wowlet/issues\" style=\"color: #33A4DF\">https://git.wownero.com/wownero/wowlet/issues</a><br/><br/>"
|
||||||
"\n"
|
"\n"
|
||||||
"Before reporting a bug, upgrade to the most recent version of Feather "
|
"Before reporting a bug, upgrade to the most recent version of WOWlet "
|
||||||
"(latest release or git HEAD), and include the version number in your report. "
|
"(latest release or git HEAD), and include the version number in your report. "
|
||||||
"Try to explain not only what the bug is, but how it occurs.</body>");
|
"Try to explain not only what the bug is, but how it occurs.</body>");
|
||||||
});
|
});
|
||||||
connect(ui->actionShow_debug_info, &QAction::triggered, this, &MainWindow::showDebugInfo);
|
connect(ui->actionShow_debug_info, &QAction::triggered, this, &MainWindow::showDebugInfo);
|
||||||
connect(ui->actionOfficialWebsite, &QAction::triggered, [=] { Utils::externalLinkWarning(this, "https://featherwallet.org"); });
|
connect(ui->actionOfficialWebsite, &QAction::triggered, [=] { Utils::externalLinkWarning(this, "https://wownero.org"); });
|
||||||
|
|
||||||
#if defined(Q_OS_LINUX)
|
#if defined(Q_OS_LINUX)
|
||||||
// system tray
|
// system tray
|
||||||
@@ -106,7 +107,7 @@ MainWindow::MainWindow(AppContext *ctx, QWidget *parent) :
|
|||||||
m_trayActionCalc->setStatusTip("Calculator");
|
m_trayActionCalc->setStatusTip("Calculator");
|
||||||
|
|
||||||
m_trayActionSend = new QAction("Send", this);
|
m_trayActionSend = new QAction("Send", this);
|
||||||
m_trayActionSend->setStatusTip("Send XMR payment");
|
m_trayActionSend->setStatusTip("Send WOW payment");
|
||||||
|
|
||||||
m_trayActionHistory = new QAction("History", this);
|
m_trayActionHistory = new QAction("History", this);
|
||||||
m_trayActionHistory->setStatusTip("View incoming transfers");
|
m_trayActionHistory->setStatusTip("View incoming transfers");
|
||||||
@@ -128,13 +129,13 @@ MainWindow::MainWindow(AppContext *ctx, QWidget *parent) :
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// ticker widgets
|
// ticker widgets
|
||||||
m_tickerWidgets.append(new TickerWidget(this, "XMR"));
|
m_tickerWidgets.append(new TickerWidget(this, "WOW"));
|
||||||
m_tickerWidgets.append(new TickerWidget(this, "BTC"));
|
m_tickerWidgets.append(new TickerWidget(this, "BTC"));
|
||||||
for(auto tickerWidget: m_tickerWidgets) {
|
for(auto tickerWidget: m_tickerWidgets) {
|
||||||
ui->tickerLayout->addWidget(tickerWidget);
|
ui->tickerLayout->addWidget(tickerWidget);
|
||||||
}
|
}
|
||||||
|
|
||||||
m_balanceWidget = new TickerWidget(this, "XMR", "Balance", true, true);
|
m_balanceWidget = new TickerWidget(this, "WOW", "Balance", true, true);
|
||||||
ui->fiatTickerLayout->addWidget(m_balanceWidget);
|
ui->fiatTickerLayout->addWidget(m_balanceWidget);
|
||||||
|
|
||||||
// Send widget
|
// Send widget
|
||||||
@@ -166,6 +167,8 @@ MainWindow::MainWindow(AppContext *ctx, QWidget *parent) :
|
|||||||
connect(ui->ccsWidget, &CCSWidget::selected, this, &MainWindow::showSendScreen);
|
connect(ui->ccsWidget, &CCSWidget::selected, this, &MainWindow::showSendScreen);
|
||||||
connect(m_ctx, &AppContext::ccsUpdated, ui->ccsWidget->model(), &CCSModel::updateEntries);
|
connect(m_ctx, &AppContext::ccsUpdated, ui->ccsWidget->model(), &CCSModel::updateEntries);
|
||||||
connect(m_ctx, &AppContext::redditUpdated, ui->redditWidget->model(), &RedditModel::updatePosts);
|
connect(m_ctx, &AppContext::redditUpdated, ui->redditWidget->model(), &RedditModel::updatePosts);
|
||||||
|
connect(m_ctx, &AppContext::suchWowUpdated, ui->suchWowWidget, &SuchWowWidget::onWS);
|
||||||
|
connect(ui->suchWowWidget, &SuchWowWidget::donate, this, &MainWindow::suchDonate);
|
||||||
|
|
||||||
connect(ui->redditWidget, &RedditWidget::setStatusText, this, &MainWindow::setStatusText);
|
connect(ui->redditWidget, &RedditWidget::setStatusText, this, &MainWindow::setStatusText);
|
||||||
|
|
||||||
@@ -174,9 +177,9 @@ MainWindow::MainWindow(AppContext *ctx, QWidget *parent) :
|
|||||||
});
|
});
|
||||||
|
|
||||||
connect(m_ctx, &AppContext::donationNag, [=]{
|
connect(m_ctx, &AppContext::donationNag, [=]{
|
||||||
auto msg = "Feather is a 100% community-sponsored endeavor. Please consider supporting "
|
auto msg = "WOWlet is a 100% community-sponsored endeavor. Please consider supporting "
|
||||||
"the project financially. Get rid of this message by donating any amount.";
|
"the project financially. Get rid of this message by donating any amount.";
|
||||||
int ret = QMessageBox::information(this, "Donate to Feather", msg, QMessageBox::Yes, QMessageBox::No);
|
int ret = QMessageBox::information(this, "Donate to WOWlet", msg, QMessageBox::Yes, QMessageBox::No);
|
||||||
switch (ret) {
|
switch (ret) {
|
||||||
case QMessageBox::Yes:
|
case QMessageBox::Yes:
|
||||||
this->donateButtonClicked();
|
this->donateButtonClicked();
|
||||||
@@ -226,7 +229,7 @@ MainWindow::MainWindow(AppContext *ctx, QWidget *parent) :
|
|||||||
|
|
||||||
|
|
||||||
// testnet/stagenet warning
|
// testnet/stagenet warning
|
||||||
auto worthlessWarning = QString("Feather wallet is currently running in %1 mode. This is meant "
|
auto worthlessWarning = QString("WOWlet is currently running in %1 mode. This is meant "
|
||||||
"for developers only. Your coins are WORTHLESS.");
|
"for developers only. Your coins are WORTHLESS.");
|
||||||
if(m_ctx->networkType == NetworkType::STAGENET) {
|
if(m_ctx->networkType == NetworkType::STAGENET) {
|
||||||
if (config()->get(Config::warnOnStagenet).toBool()) {
|
if (config()->get(Config::warnOnStagenet).toBool()) {
|
||||||
@@ -242,8 +245,8 @@ MainWindow::MainWindow(AppContext *ctx, QWidget *parent) :
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(config()->get(Config::warnOnAlpha).toBool()) {
|
if(config()->get(Config::warnOnAlpha).toBool()) {
|
||||||
QString warning = "Feather Wallet is currently in beta.\n\nPlease report any bugs "
|
QString warning = "WOWlet is currently in beta.\n\nPlease report any bugs "
|
||||||
"you encounter on our Git repository, IRC or on /r/FeatherWallet.";
|
"you encounter on our Git repository, IRC freenode #wownero or on /r/Wowonero.";
|
||||||
QMessageBox::warning(this, "Beta Warning", warning);
|
QMessageBox::warning(this, "Beta Warning", warning);
|
||||||
config()->set(Config::warnOnAlpha, false);
|
config()->set(Config::warnOnAlpha, false);
|
||||||
}
|
}
|
||||||
@@ -324,7 +327,7 @@ MainWindow::MainWindow(AppContext *ctx, QWidget *parent) :
|
|||||||
// init touchbar
|
// init touchbar
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
m_touchbar = new KDMacTouchBar(this);
|
m_touchbar = new KDMacTouchBar(this);
|
||||||
m_touchbarActionWelcome = new QAction(QIcon(":/assets/images/feather.png"), "Welcome to Feather!");
|
m_touchbarActionWelcome = new QAction(QIcon(":/assets/images/wowlet.png"), "Welcome to WOWlet!");
|
||||||
m_touchbarWalletItems = {ui->actionSettings, ui->actionCalculator, ui->actionKeys, ui->actionDonate_to_Feather};
|
m_touchbarWalletItems = {ui->actionSettings, ui->actionCalculator, ui->actionKeys, ui->actionDonate_to_Feather};
|
||||||
m_touchbarWizardItems = {m_touchbarActionWelcome};
|
m_touchbarWizardItems = {m_touchbarActionWelcome};
|
||||||
#endif
|
#endif
|
||||||
@@ -390,9 +393,6 @@ void MainWindow::initMenu() {
|
|||||||
m_tabShowHideMapper["Calc"] = new ToggleTab(ui->tabCalc, "Calc", "Calc", ui->actionShow_calc, Config::showTabCalc);
|
m_tabShowHideMapper["Calc"] = new ToggleTab(ui->tabCalc, "Calc", "Calc", ui->actionShow_calc, Config::showTabCalc);
|
||||||
m_tabShowHideSignalMapper->setMapping(ui->actionShow_calc, "Calc");
|
m_tabShowHideSignalMapper->setMapping(ui->actionShow_calc, "Calc");
|
||||||
|
|
||||||
ui->actionShow_Exchange->setVisible(false);
|
|
||||||
ui->tabWidget->setTabVisible(Tabs::EXCHANGES, false);
|
|
||||||
|
|
||||||
#if defined(HAS_XMRIG)
|
#if defined(HAS_XMRIG)
|
||||||
connect(ui->actionShow_XMRig, &QAction::triggered, m_tabShowHideSignalMapper, QOverload<>::of(&QSignalMapper::map));
|
connect(ui->actionShow_XMRig, &QAction::triggered, m_tabShowHideSignalMapper, QOverload<>::of(&QSignalMapper::map));
|
||||||
m_tabShowHideMapper["Mining"] = new ToggleTab(ui->tabXmrRig, "Mining", "Mining", ui->actionShow_XMRig, Config::showTabXMRig);
|
m_tabShowHideMapper["Mining"] = new ToggleTab(ui->tabXmrRig, "Mining", "Mining", ui->actionShow_XMRig, Config::showTabXMRig);
|
||||||
@@ -434,7 +434,7 @@ void MainWindow::initMenu() {
|
|||||||
connect(ui->actionChange_restore_height, &QAction::triggered, this, &MainWindow::showRestoreHeightDialog);
|
connect(ui->actionChange_restore_height, &QAction::triggered, this, &MainWindow::showRestoreHeightDialog);
|
||||||
connect(m_ctx, &AppContext::customRestoreHeightSet, [=](int height){
|
connect(m_ctx, &AppContext::customRestoreHeightSet, [=](int height){
|
||||||
auto msg = QString("The restore height for this wallet has been set to %1. "
|
auto msg = QString("The restore height for this wallet has been set to %1. "
|
||||||
"Please re-open the wallet. Feather will now quit.").arg(height);
|
"Please re-open the wallet. WOWlet will now quit.").arg(height);
|
||||||
QMessageBox::information(this, "Cannot set custom restore height", msg);
|
QMessageBox::information(this, "Cannot set custom restore height", msg);
|
||||||
this->menuQuitClicked();
|
this->menuQuitClicked();
|
||||||
});
|
});
|
||||||
@@ -462,7 +462,7 @@ void MainWindow::initMenu() {
|
|||||||
if(targetDir.isEmpty()) return;
|
if(targetDir.isEmpty()) return;
|
||||||
|
|
||||||
qint64 now = QDateTime::currentDateTime().currentMSecsSinceEpoch();
|
qint64 now = QDateTime::currentDateTime().currentMSecsSinceEpoch();
|
||||||
QString fn = QString("%1/monero-contacts_%2.csv").arg(targetDir, QString::number(now / 1000));
|
QString fn = QString("%1/wownero-contacts_%2.csv").arg(targetDir, QString::number(now / 1000));
|
||||||
if(model->writeCSV(fn))
|
if(model->writeCSV(fn))
|
||||||
QMessageBox::information(this, "Address book exported", QString("Address book exported to %1").arg(fn));
|
QMessageBox::information(this, "Address book exported", QString("Address book exported to %1").arg(fn));
|
||||||
});
|
});
|
||||||
@@ -567,7 +567,7 @@ void MainWindow::onWalletOpenPasswordRequired(bool invalidPassword, const QStrin
|
|||||||
void MainWindow::onWalletOpenedError(const QString &err) {
|
void MainWindow::onWalletOpenedError(const QString &err) {
|
||||||
qDebug() << Q_FUNC_INFO << QString("Wallet open error: %1").arg(err);
|
qDebug() << Q_FUNC_INFO << QString("Wallet open error: %1").arg(err);
|
||||||
QMessageBox::warning(this, "Wallet open error", err);
|
QMessageBox::warning(this, "Wallet open error", err);
|
||||||
this->setWindowTitle("Feather");
|
this->setWindowTitle("WOWlet");
|
||||||
this->showWizard(WalletWizard::Page_OpenWallet);
|
this->showWizard(WalletWizard::Page_OpenWallet);
|
||||||
this->touchbarShowWizard();
|
this->touchbarShowWizard();
|
||||||
}
|
}
|
||||||
@@ -625,9 +625,9 @@ void MainWindow::onBalanceUpdated(quint64 balance, quint64 spendable) {
|
|||||||
qDebug() << Q_FUNC_INFO;
|
qDebug() << Q_FUNC_INFO;
|
||||||
bool hide = config()->get(Config::hideBalance).toBool();
|
bool hide = config()->get(Config::hideBalance).toBool();
|
||||||
|
|
||||||
QString label_str = QString("Balance: %1 XMR").arg(Utils::balanceFormat(spendable));
|
QString label_str = QString("Balance: %1 WOW").arg(Utils::balanceFormat(spendable));
|
||||||
if (balance > spendable)
|
if (balance > spendable)
|
||||||
label_str += QString(" (+%1 XMR unconfirmed)").arg(Utils::balanceFormat(balance - spendable));
|
label_str += QString(" (+%1 WOW unconfirmed)").arg(Utils::balanceFormat(balance - spendable));
|
||||||
|
|
||||||
if (hide)
|
if (hide)
|
||||||
label_str = "Balance: HIDDEN";
|
label_str = "Balance: HIDDEN";
|
||||||
@@ -811,7 +811,8 @@ void MainWindow::create_status_bar() {
|
|||||||
this->statusBar()->addWidget(m_statusLabelNetStats);
|
this->statusBar()->addWidget(m_statusLabelNetStats);
|
||||||
|
|
||||||
m_statusLabelBalance = new ClickableLabel(this);
|
m_statusLabelBalance = new ClickableLabel(this);
|
||||||
m_statusLabelBalance->setText("Balance: 0 XMR");
|
m_statusLabelBalance->setText("Balance: 0 WOW");
|
||||||
|
|
||||||
m_statusLabelBalance->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
m_statusLabelBalance->setTextInteractionFlags(Qt::TextSelectableByMouse);
|
||||||
this->statusBar()->addPermanentWidget(m_statusLabelBalance);
|
this->statusBar()->addPermanentWidget(m_statusLabelBalance);
|
||||||
connect(m_statusLabelBalance, &ClickableLabel::clicked, this, &MainWindow::showBalanceDialog);
|
connect(m_statusLabelBalance, &ClickableLabel::clicked, this, &MainWindow::showBalanceDialog);
|
||||||
@@ -1023,11 +1024,11 @@ void MainWindow::closeEvent(QCloseEvent *event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::donateButtonClicked() {
|
void MainWindow::donateButtonClicked() {
|
||||||
double donation = AppContext::prices->convert("EUR", "XMR", m_ctx->donationAmount);
|
double donation = AppContext::prices->convert("EUR", "WOW", m_ctx->donationAmount);
|
||||||
if (donation <= 0)
|
if (donation <= 0)
|
||||||
donation = 0.1337;
|
donation = 0.1337;
|
||||||
|
|
||||||
ui->sendWidget->fill(m_ctx->donationAddress, "Donation to the Feather development team", donation);
|
ui->sendWidget->fill(m_ctx->donationAddress, "Donation to the WOWlet development team", donation);
|
||||||
ui->tabWidget->setCurrentIndex(Tabs::SEND);
|
ui->tabWidget->setCurrentIndex(Tabs::SEND);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1059,6 +1060,12 @@ void MainWindow::showSendScreen(const CCSEntry &entry) {
|
|||||||
ui->tabWidget->setCurrentIndex(Tabs::SEND);
|
ui->tabWidget->setCurrentIndex(Tabs::SEND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::suchDonate(const QString address) {
|
||||||
|
double donation = AppContext::prices->convert("EUR", "WOW", 2);
|
||||||
|
ui->sendWidget->fill(address, "SuchWow contribution :-)", donation);
|
||||||
|
ui->tabWidget->setCurrentIndex(Tabs::SEND);
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::onViewOnBlockExplorer(const QString &txid) {
|
void MainWindow::onViewOnBlockExplorer(const QString &txid) {
|
||||||
QString blockExplorerLink = Utils::blockExplorerLink(config()->get(Config::blockExplorer).toString(), m_ctx->networkType, txid);
|
QString blockExplorerLink = Utils::blockExplorerLink(config()->get(Config::blockExplorer).toString(), m_ctx->networkType, txid);
|
||||||
Utils::externalLinkWarning(this, blockExplorerLink);
|
Utils::externalLinkWarning(this, blockExplorerLink);
|
||||||
@@ -1161,14 +1168,14 @@ void MainWindow::showWalletCacheDebugDialog() {
|
|||||||
void MainWindow::showNodeExhaustedMessage() {
|
void MainWindow::showNodeExhaustedMessage() {
|
||||||
// Spawning dialogs inside a lambda can cause system freezes on linux so we have to do it this way ¯\_(ツ)_/¯
|
// Spawning dialogs inside a lambda can cause system freezes on linux so we have to do it this way ¯\_(ツ)_/¯
|
||||||
|
|
||||||
auto msg = "Feather is in 'custom node connection mode' but could not "
|
auto msg = "WOWlet is in 'custom node connection mode' but could not "
|
||||||
"find an eligible node to connect to. Please go to Settings->Node "
|
"find an eligible node to connect to. Please go to Settings->Node "
|
||||||
"and enter a node manually.";
|
"and enter a node manually.";
|
||||||
QMessageBox::warning(this, "Could not connect to a node", msg);
|
QMessageBox::warning(this, "Could not connect to a node", msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::showWSNodeExhaustedMessage() {
|
void MainWindow::showWSNodeExhaustedMessage() {
|
||||||
auto msg = "Feather is in 'automatic node connection mode' but the "
|
auto msg = "WOWlet is in 'automatic node connection mode' but the "
|
||||||
"websocket server returned no available nodes. Please go to Settings->Node "
|
"websocket server returned no available nodes. Please go to Settings->Node "
|
||||||
"and enter a node manually.";
|
"and enter a node manually.";
|
||||||
QMessageBox::warning(this, "Could not connect to a node", msg);
|
QMessageBox::warning(this, "Could not connect to a node", msg);
|
||||||
@@ -1295,7 +1302,7 @@ void MainWindow::importTransaction() {
|
|||||||
|
|
||||||
auto result = QMessageBox::warning(this, "Warning", "Using this feature may allow a remote node to associate the transaction with your IP address.\n"
|
auto result = QMessageBox::warning(this, "Warning", "Using this feature may allow a remote node to associate the transaction with your IP address.\n"
|
||||||
"\n"
|
"\n"
|
||||||
"Connect to a trusted node or run Feather over Tor if network level metadata leakage is included in your threat model.",
|
"Connect to a trusted node or run WOWlet over Tor if network level metadata leakage is included in your threat model.",
|
||||||
QMessageBox::Ok | QMessageBox::Cancel);
|
QMessageBox::Ok | QMessageBox::Cancel);
|
||||||
if (result == QMessageBox::Ok) {
|
if (result == QMessageBox::Ok) {
|
||||||
auto *dialog = new TxImportDialog(this, m_ctx);
|
auto *dialog = new TxImportDialog(this, m_ctx);
|
||||||
|
|||||||
@@ -77,7 +77,6 @@ public:
|
|||||||
RECEIVE,
|
RECEIVE,
|
||||||
COINS,
|
COINS,
|
||||||
CALC,
|
CALC,
|
||||||
EXCHANGES,
|
|
||||||
XMRIG
|
XMRIG
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -109,6 +108,7 @@ public slots:
|
|||||||
void showSendTab();
|
void showSendTab();
|
||||||
void showHistoryTab();
|
void showHistoryTab();
|
||||||
void showSendScreen(const CCSEntry &entry);
|
void showSendScreen(const CCSEntry &entry);
|
||||||
|
void suchDonate(const QString address);
|
||||||
void skinChanged(const QString &skinName);
|
void skinChanged(const QString &skinName);
|
||||||
void menuTorClicked();
|
void menuTorClicked();
|
||||||
void onBlockchainSync(int height, int target);
|
void onBlockchainSync(int height, int target);
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
</sizepolicy>
|
</sizepolicy>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Feather</string>
|
<string>WOWlet</string>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowIcon">
|
<property name="windowIcon">
|
||||||
<iconset resource="assets.qrc">
|
<iconset resource="assets.qrc">
|
||||||
@@ -101,9 +101,38 @@
|
|||||||
<property name="documentMode">
|
<property name="documentMode">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
|
<widget class="QWidget" name="tab_3">
|
||||||
|
<attribute name="title">
|
||||||
|
<string>SuchWow</string>
|
||||||
|
</attribute>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="SuchWowWidget" name="suchWowWidget" native="true">
|
||||||
|
<property name="minimumSize">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>320</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
<widget class="QWidget" name="tab">
|
<widget class="QWidget" name="tab">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>CCS</string>
|
<string>WFS</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_6">
|
<layout class="QVBoxLayout" name="verticalLayout_6">
|
||||||
<property name="leftMargin">
|
<property name="leftMargin">
|
||||||
@@ -125,7 +154,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="tab_2">
|
<widget class="QWidget" name="tab_2">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
<string>/r/Monero</string>
|
<string>/r/Wownero</string>
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_7">
|
<layout class="QVBoxLayout" name="verticalLayout_7">
|
||||||
<property name="leftMargin">
|
<property name="leftMargin">
|
||||||
@@ -272,29 +301,6 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="tabExchange">
|
|
||||||
<attribute name="icon">
|
|
||||||
<iconset resource="assets.qrc">
|
|
||||||
<normaloff>:/assets/images/update.png</normaloff>:/assets/images/update.png</iconset>
|
|
||||||
</attribute>
|
|
||||||
<attribute name="title">
|
|
||||||
<string>Exchange</string>
|
|
||||||
</attribute>
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_8">
|
|
||||||
<property name="leftMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="topMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="rightMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
<property name="bottomMargin">
|
|
||||||
<number>0</number>
|
|
||||||
</property>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<widget class="QWidget" name="tabXmrRig">
|
<widget class="QWidget" name="tabXmrRig">
|
||||||
<attribute name="icon">
|
<attribute name="icon">
|
||||||
<iconset resource="assets.qrc">
|
<iconset resource="assets.qrc">
|
||||||
@@ -435,7 +441,6 @@
|
|||||||
<addaction name="actionShow_Home"/>
|
<addaction name="actionShow_Home"/>
|
||||||
<addaction name="actionShow_Coins"/>
|
<addaction name="actionShow_Coins"/>
|
||||||
<addaction name="actionShow_calc"/>
|
<addaction name="actionShow_calc"/>
|
||||||
<addaction name="actionShow_Exchange"/>
|
|
||||||
<addaction name="actionShow_XMRig"/>
|
<addaction name="actionShow_XMRig"/>
|
||||||
</widget>
|
</widget>
|
||||||
<addaction name="menuFile"/>
|
<addaction name="menuFile"/>
|
||||||
@@ -501,7 +506,7 @@
|
|||||||
</action>
|
</action>
|
||||||
<action name="actionDonate_to_Feather">
|
<action name="actionDonate_to_Feather">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Donate to Feather</string>
|
<string>Donate to WOWlet</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionExport_CSV">
|
<action name="actionExport_CSV">
|
||||||
@@ -674,11 +679,6 @@
|
|||||||
<string>Import transaction</string>
|
<string>Import transaction</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionShow_Exchange">
|
|
||||||
<property name="text">
|
|
||||||
<string>Show Exchange</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
<action name="actionRescan_spent">
|
<action name="actionRescan_spent">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Rescan spent</string>
|
<string>Rescan spent</string>
|
||||||
@@ -749,6 +749,12 @@
|
|||||||
<header>widgets/redditwidget.h</header>
|
<header>widgets/redditwidget.h</header>
|
||||||
<container>1</container>
|
<container>1</container>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
|
<customwidget>
|
||||||
|
<class>SuchWowWidget</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header>widgets/suchwowwidget.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources>
|
<resources>
|
||||||
<include location="assets.qrc"/>
|
<include location="assets.qrc"/>
|
||||||
|
|||||||