Compare commits

..
73 Commits
Author SHA1 Message Date
dsc c97c0d597b beta-4 (bulletproof+, solo-mining) 2021-07-04 15:39:17 +02:00
dsc ee3713b16b Merge pull request 'Bump version to v2.1.0 and fix compile' (#75) from dsc/wowlet:bump-version3 into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/75
2021-05-16 00:02:19 +00:00
dsc ae39e71061 Bump version to v2.1.0 and fix compile 2021-05-16 01:05:05 +02:00
dsc 7e5cac9fa3 Merge pull request 'Improve QR code detection for VR' (#73) from dsc/wowlet:improve-qr-code-detection into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/73
2021-05-15 15:23:57 +00:00
dsc b61b2b1630 Improve QR code detection 2021-05-14 22:46:06 +02:00
wowario 1b1d1db14d Merge pull request 'Failsafe kill feature' (#72) from dsc/wowlet:killme into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/72
2021-05-14 20:21:07 +00:00
dsc 81ec0183ea Failsafe kill feature; to be used in case of an exploit against wowlet and/or a bug that results in loss of funds 2021-05-14 22:16:18 +02:00
wowario f5046cea54 Merge pull request 'Custom SuchWow donation tip amount' (#71) from dsc/wowlet:suchwow-custom-donation-amount into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/71
2021-05-14 20:02:01 +00:00
dsc 624f13b2d9 Custom SuchWow donation tip amount 2021-05-14 22:01:22 +02:00
wowario 0d502f0e45 Merge pull request 'Warn when there is a new version available' (#70) from dsc/wowlet:warn-on-outdated-version into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/70
2021-05-14 19:55:05 +00:00
dsc 6549ca4e1d Warn when there is a new version available 2021-05-14 21:52:13 +02:00
dsc 37578dde7b Merge pull request 'add imgs to assets list' (#65) from wowario/wowlet:banner1 into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/65
2021-05-14 01:38:43 +00:00
wowario 225ae1233e add imgs to assets list 2021-05-11 09:03:04 +03:00
wowario d8cb29c4d4 Merge pull request 'Forum post widget showing latest from forum.wownero.com' (#64) from dsc/wowlet:forum-posts-homewidget into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/64
2021-05-11 05:49:58 +00:00
wowario 502785f233 Merge pull request 'New header image for about dialog' (#63) from dsc/wowlet:image-about-page into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/63
2021-05-11 05:49:45 +00:00
wowario e3cf87906b Merge pull request 'Fix config option reddit' (#62) from dsc/wowlet:fix-settings-reddit into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/62
2021-05-11 05:48:56 +00:00
wowario 5c3821007d Merge pull request 'Optionally (only) hide fiat balance' (#61) from dsc/wowlet:hide-fiat-balance into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/61
2021-05-11 05:48:44 +00:00
dsc c02e084dcf Forum post widget showing latest from forum.wownero.com 2021-05-11 01:56:04 +02:00
dsc 85d4e0ac6d New header image for about dialog 2021-05-10 23:46:49 +02:00
dsc fbca9c9340 Fix config option reddit 2021-05-10 22:57:28 +02:00
dsc d9d0ac1830 Optionally (only) hide fiat balance 2021-05-10 22:14:28 +02:00
wowario 3adb2a6fe7 Merge pull request 'Show random banner on each Wizard window spawn' (#58) from dsc/wowlet:random-banner into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/58
2021-05-10 19:56:29 +00:00
wowario 742ad82b88 Merge pull request 'Redesigned icon by cisme' (#59) from dsc/wowlet:redesigned-icon into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/59
2021-05-10 19:56:09 +00:00
dsc a1ce8f866a Merge pull request 'mo imgs' (#60) from wowario/wowlet:banners into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/60
2021-05-10 19:55:22 +00:00
wowario 24e8942ac5 mo imgs 2021-05-10 22:41:45 +03:00
dsc 3163d68e9e Show random banner on each Wizard window spawn 2021-05-10 19:52:50 +02:00
dsc a6e1a6877f Redesigned icon by cisme 2021-05-10 19:39:32 +02:00
wowario ac1ed1873a Merge pull request 'Include Satoshi ticker, include Monero ticker, and introduce 24h pct change for WOW' (#57) from dsc/wowlet:refactor-tickers into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/57
2021-05-10 17:00:02 +00:00
dsc 2ccefe0883 Include Satoshi ticker, include Monero ticker, and introduce 24h pct change for WOW 2021-05-10 18:56:57 +02:00
wowario 06f09e1f2e Merge pull request 'Fixes connect bug (via context menu) for custom nodes' (#56) from dsc/wowlet:connect-bug into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/56
2021-05-03 07:09:14 +00:00
dsc c3e9fbb25a Fixes connect bug (via context menu) for custom nodes 2021-05-03 01:03:21 +02:00
wowario 096b28318c Merge pull request 'SuchWow improvements' (#55) from dsc/wowlet:suchwow-improvements into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/55
2021-05-02 22:51:03 +00:00
wowario 562d071c62 Merge pull request 'Detect wakeup from hibernate, re-establish websocket connection' (#54) from dsc/wowlet:hibernate-timer into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/54
2021-05-02 22:50:49 +00:00
dsc 474d4b1994 - only download thumbnails for the overview. Download the large format images later - when requesting to view the image. This saves bandwidth.
- Images are properly sorted by date now
2021-05-03 00:46:59 +02:00
dsc 49b55768f7 Detect wakeup from hibernate, re-establish websocket connection 2021-04-30 22:33:15 +02:00
dsc 640a4d72e0 Merge pull request 'Update .deb builder and include XMRig functionality by default on Linux' (#53) from dsc/wowlet:update-deb-and-xmrig into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/53
2021-04-30 20:19:39 +00:00
dsc 0e37f97aa2 Update .deb builder and including XMRig functionality by default for Linux 2021-04-30 20:51:07 +02:00
dsc 499ad4a3aa Merge pull request 'Android app proof-of-concept' (#48) from dsc/wowlet:android into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/48
2021-04-23 08:20:50 +00:00
dsc 8b5bdc4c6a Initial Android app proof-of-concept 2021-04-20 00:06:37 +02:00
dsc cfee938516 Prepare Wowlet codebase for an Android app 2021-04-20 00:02:37 +02:00
dsc c024323eab Prepare CMake for Android deployment and development 2021-04-20 00:00:31 +02:00
dsc a2ad4692a3 Dockerfile for Android compiles. Most of this work is done by xiphon of the Monero GUI team. 2021-04-19 23:04:11 +02:00
dsc c50a341527 Merge pull request 'Bump version' (#47) from dsc/wowlet:bump-version2 into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/47
2021-04-14 20:32:37 +00:00
dsc a68ebf3564 Bump version 2021-04-14 22:31:46 +02:00
dsc 98b1982157 Merge pull request 'shuffle welcome banner' (#46) from dsc/wowlet:welcome into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/46
2021-04-14 20:22:28 +00:00
wowarioanddsc c86228a404 remove unused imgs 2021-04-14 22:21:38 +02:00
wowarioanddsc a389589fbb add more welcome imgs 2021-04-14 22:21:38 +02:00
wowarioanddsc 392e9b99cf rename banner folder 2021-04-14 22:21:38 +02:00
wowarioanddsc 51c7422f6e shuffle welcome banner 2021-04-14 22:21:38 +02:00
dsc 7c8d070ab5 Merge pull request 'move package stuff to contrib folder' (#42) from wowario/wowlet:contrib into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/42
2021-04-14 20:06:00 +00:00
dsc aa89690788 Merge pull request 'move docs to docs folder' (#41) from wowario/wowlet:docs into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/41
2021-04-14 20:05:31 +00:00
dsc c82cad87fa Merge pull request 'OpenVR support plus some fixes' (#45) from dsc/wowlet:openvr-qml-windows into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/45
2021-04-14 20:04:50 +00:00
dsc a5f3b915e5 get rekt 2021-04-14 22:00:25 +02:00
dsc 395cbcd9db Fixes builds for Linux 2021-04-14 22:00:25 +02:00
dsc ee247cba8a Disable saving of QR code for now 2021-04-14 22:00:25 +02:00
dsc bcc0aeeaa9 Change websocket server 2021-04-14 22:00:25 +02:00
dsc de5bea9cdf Fix balance display in streamer mode 2021-04-14 22:00:25 +02:00
dsc d846790905 Fixes linking against libz 2021-04-14 22:00:25 +02:00
dsc 13331ee5e7 QR code feature beta and streamer mode 2021-04-14 22:00:25 +02:00
dsc 5bb95053fb Fixes DPI scaling and added quirc submodule 2021-04-14 22:00:25 +02:00
dsc bd38e5e1d8 Refactor numpad code, transfer screen 2021-04-14 22:00:25 +02:00
dsc 8b1250030b Ready for beta 2021-04-14 22:00:25 +02:00
dsc c0cb90bf79 Development 2021-04-14 22:00:25 +02:00
dsc c3723ac58a Initial QML interface code 2021-04-14 22:00:25 +02:00
dsc aad58b1c83 Vendoring OpenVR 2021-04-14 22:00:25 +02:00
dsc 96034902d1 Initial code for supporting an alternative QtQuick based UI for OpenVR 2021-04-14 22:00:25 +02:00
dsc e918955210 Prepare build system for OpenVR and QtQuick (QML) 2021-04-14 22:00:25 +02:00
wowario 5f746999c2 Merge pull request 'rename to wow' (#40) from wowario/wowlet:rename1 into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/40
2021-04-06 14:45:45 +00:00
wowario 1c51407109 move package stuff to contrib folder 2021-04-06 13:30:41 +03:00
wowario 5f402464ad move docs to docs folder 2021-04-06 13:19:40 +03:00
wowario 7a14d53ba0 rename to wow 2021-04-06 13:11:53 +03:00
wowario ca72462125 Merge pull request 'defeather files' (#38) from wowario/wowlet:feather1 into master
Reviewed-on: https://git.wownero.com/wowlet/wowlet/pulls/38
2021-04-04 11:11:06 +00:00
wowario 11048f96fa defeather files 2021-04-04 14:05:20 +03:00
200 changed files with 1968 additions and 357 deletions
+3 -4
View File
@@ -1,10 +1,9 @@
[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
[submodule "contrib/quirc"] [submodule "contrib/quirc"]
path = contrib/quirc path = contrib/quirc
url = https://github.com/dlbeer/quirc.git url = https://github.com/dlbeer/quirc.git
[submodule "wownero"]
path = wownero
url = https://git.wownero.com/wownero/wownero.git
+39 -36
View File
@@ -4,18 +4,20 @@ project(wowlet)
message(STATUS "Initiating compile using CMake ${CMAKE_VERSION}") message(STATUS "Initiating compile using CMake ${CMAKE_VERSION}")
set(THREADS_PREFER_PTHREAD_FLAG ON) set(THREADS_PREFER_PTHREAD_FLAG ON)
set(VERSION_MAJOR "0") set(VERSION_MAJOR "3")
set(VERSION_MINOR "1") set(VERSION_MINOR "0")
set(VERSION_REVISION "0") set(VERSION_REVISION "0")
set(VERSION "beta-1") set(VERSION "beta-4")
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")
option(OPENVR "Include OpenVR support" OFF) option(OPENVR "Include OpenVR support")
option(QML "Include QtQuick (QML)" OFF) option(QML "Include QtQuick (QML)")
option(TOR_BIN "Path to Tor binary to embed inside WOWlet" OFF) option(ANDROID "Android deployment")
option(ANDROID_DEBUG "View the Android app on desktop")
option(TOR_BIN "Path to Tor binary to embed inside WOWlet")
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")
option(DONATE_BEG "Prompt donation window every once in a while" ON) option(DONATE_BEG "Prompt donation window every once in a while" ON)
list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_SOURCE_DIR}/cmake") list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_SOURCE_DIR}/cmake")
include(CheckCCompilerFlag) include(CheckCCompilerFlag)
@@ -28,11 +30,10 @@ include(CheckSymbolExists)
set(WOWNERO_HEAD "f611d5c9e32bc62f1735f6571b0bdb95cc020531") set(WOWNERO_HEAD "f611d5c9e32bc62f1735f6571b0bdb95cc020531")
set(BUILD_GUI_DEPS ON) set(BUILD_GUI_DEPS ON)
set(ARCH "x86-64") set(BUILD_64 ON CACHE BOOL "Build 64-bit binaries")
set(BUILD_64 ON)
set(INSTALL_VENDORED_LIBUNBOUND ${STATIC}) set(INSTALL_VENDORED_LIBUNBOUND ${STATIC})
set(USE_SINGLE_BUILDDIR ON) set(USE_SINGLE_BUILDDIR ON)
if(OPENVR) if(OPENVR OR ANDROID_DEBUG)
set(QML ON) set(QML ON)
endif() endif()
@@ -41,10 +42,7 @@ set(_CMAKE_BUILD_TYPE "")
string(TOUPPER "${CMAKE_BUILD_TYPE}" _CMAKE_BUILD_TYPE) string(TOUPPER "${CMAKE_BUILD_TYPE}" _CMAKE_BUILD_TYPE)
if("${_CMAKE_BUILD_TYPE}" STREQUAL "DEBUG") if("${_CMAKE_BUILD_TYPE}" STREQUAL "DEBUG")
set(DEBUG ON) set(DEBUG ON)
set(CMAKE_VERBOSE_MAKEFILE ON) set(CMAKE_VERBOSE_MAKEFILE ON)
message(STATUS "OPENVR: ${OPENVR}")
message(STATUS "QML: ${QML}")
endif() endif()
check_include_file(sys/prctl.h HAVE_SYS_PRCTL_H) check_include_file(sys/prctl.h HAVE_SYS_PRCTL_H)
@@ -59,7 +57,7 @@ if(STATIC)
# manually set the unbound submodule the right commit that has the fix. # manually set the unbound submodule the right commit that has the fix.
# This only works with -DMANUAL_SUBMODULES=1 # This only works with -DMANUAL_SUBMODULES=1
message(STATUS "applying unbound static build fix contrib/unbound_static.patch") message(STATUS "applying unbound static build fix contrib/unbound_static.patch")
execute_process(COMMAND bash -c "git -C ${CMAKE_SOURCE_DIR}/monero/external/unbound apply ${CMAKE_SOURCE_DIR}/contrib/unbound_static.patch") execute_process(COMMAND bash -c "git -C ${CMAKE_SOURCE_DIR}/wownero/external/unbound apply ${CMAKE_SOURCE_DIR}/contrib/unbound_static.patch")
set(Boost_USE_STATIC_LIBS ON) set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_STATIC_RUNTIME ON) set(Boost_USE_STATIC_RUNTIME ON)
@@ -92,21 +90,19 @@ function (add_linker_flag_if_supported flag var)
endfunction() endfunction()
find_package(Git) find_package(Git)
if(GIT_FOUND) #if(GIT_FOUND)
message(STATUS "Initializing submodules") # message(STATUS "Initializing submodules")
execute_process(COMMAND git "submodule" "update" "--init" "--recursive") # execute_process(COMMAND git "submodule" "update" "--init" "--recursive")
execute_process(COMMAND git rev-parse "HEAD" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/monero OUTPUT_VARIABLE _WOWNERO_HEAD OUTPUT_STRIP_TRAILING_WHITESPACE) # execute_process(COMMAND git rev-parse "HEAD" WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/wownero OUTPUT_VARIABLE _WOWNERO_HEAD OUTPUT_STRIP_TRAILING_WHITESPACE)
if(NOT _WOWNERO_HEAD STREQUAL WOWNERO_HEAD) # if(NOT _WOWNERO_HEAD STREQUAL WOWNERO_HEAD)
message(FATAL_ERROR "[submodule] Monero HEAD was at ${_WOWNERO_HEAD} but should be at ${WOWNERO_HEAD}") # message(FATAL_ERROR "[submodule] Wownero HEAD was at ${_WOWNERO_HEAD} but should be at ${WOWNERO_HEAD}")
else() # else()
message(STATUS "[submodule] Wownero HEAD @ ${WOWNERO_HEAD}") # message(STATUS "[submodule] Wownero HEAD @ ${WOWNERO_HEAD}")
endif() # endif()
endif() #endif()
add_subdirectory(monero) add_subdirectory(wownero)
set_property(TARGET wallet_merged PROPERTY FOLDER "monero") get_directory_property(ARCH_WIDTH DIRECTORY "wownero" DEFINITION ARCH_WIDTH)
get_directory_property(ARCH_WIDTH DIRECTORY "monero" DEFINITION ARCH_WIDTH)
get_directory_property(UNBOUND_LIBRARY DIRECTORY "monero" DEFINITION UNBOUND_LIBRARY)
include(CMakePackageConfigHelpers) include(CMakePackageConfigHelpers)
include(VersionMonero) include(VersionMonero)
@@ -173,7 +169,7 @@ find_package(Boost 1.58 REQUIRED COMPONENTS
program_options program_options
locale) locale)
if(UNIX AND NOT APPLE) if(UNIX AND NOT APPLE AND NOT ANDROID)
if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug") if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
# https://github.com/monero-project/monero-gui/issues/3142#issuecomment-705940446 # https://github.com/monero-project/monero-gui/issues/3142#issuecomment-705940446
set(CMAKE_SKIP_RPATH ON) set(CMAKE_SKIP_RPATH ON)
@@ -195,6 +191,17 @@ if("$ENV{DRONE}" STREQUAL "true")
message(STATUS "We are inside a static compile with Drone CI") message(STATUS "We are inside a static compile with Drone CI")
endif() endif()
if(UNIX)
if(NOT CMAKE_PREFIX_PATH AND DEFINED ENV{CMAKE_PREFIX_PATH})
message(STATUS "Using CMAKE_PREFIX_PATH environment variable: '$ENV{CMAKE_PREFIX_PATH}'")
set(CMAKE_PREFIX_PATH $ENV{CMAKE_PREFIX_PATH})
endif()
if(APPLE AND NOT CMAKE_PREFIX_PATH)
execute_process(COMMAND brew --prefix qt5 OUTPUT_VARIABLE QT5_DIR OUTPUT_STRIP_TRAILING_WHITESPACE)
list(APPEND CMAKE_PREFIX_PATH ${QT5_DIR})
endif()
endif()
# To build WOWlet with embedded (and static) Tor, pass CMake -DTOR_BIN=/path/to/tor # To build WOWlet with embedded (and static) Tor, pass CMake -DTOR_BIN=/path/to/tor
if(TOR_BIN) if(TOR_BIN)
if(APPLE) if(APPLE)
@@ -249,7 +256,7 @@ if(MINGW)
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wa,-mbig-obj") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wa,-mbig-obj")
set(EXTRA_LIBRARIES mswsock;ws2_32;iphlpapi;crypt32;bcrypt) set(EXTRA_LIBRARIES mswsock;ws2_32;iphlpapi;crypt32;bcrypt)
if(DEPENDS) if(DEPENDS)
set(ICU_LIBRARIES iconv) set(ICU_LIBRARIES iconv)
else() else()
set(ICU_LIBRARIES icuio icuin icuuc icudt icutu iconv) set(ICU_LIBRARIES icuio icuin icuuc icudt icutu iconv)
endif() endif()
@@ -264,7 +271,7 @@ elseif(DRAGONFLY)
set(EXTRA_LIBRARIES execinfo ${COMPAT}) set(EXTRA_LIBRARIES execinfo ${COMPAT})
elseif(CMAKE_SYSTEM_NAME MATCHES "(SunOS|Solaris)") elseif(CMAKE_SYSTEM_NAME MATCHES "(SunOS|Solaris)")
set(EXTRA_LIBRARIES socket nsl resolv) set(EXTRA_LIBRARIES socket nsl resolv)
elseif(NOT MSVC AND NOT DEPENDS) elseif(NOT MSVC AND NOT DEPENDS AND NOT ANDROID)
find_library(RT rt) find_library(RT rt)
set(EXTRA_LIBRARIES ${RT}) set(EXTRA_LIBRARIES ${RT})
endif() endif()
@@ -384,10 +391,6 @@ if(OPENVR)
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/contrib/openvr") add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/contrib/openvr")
endif() endif()
if(APPLE)
add_subdirectory("${CMAKE_CURRENT_SOURCE_DIR}/contrib/KDMacTouchBar")
endif()
if(WITH_SCANNER) if(WITH_SCANNER)
add_library(quirc STATIC add_library(quirc STATIC
contrib/quirc/lib/decode.c contrib/quirc/lib/decode.c
+245
View File
@@ -0,0 +1,245 @@
FROM debian:stretch
ARG THREADS=1
ARG ANDROID_NDK_REVISION=21d
ARG ANDROID_NDK_HASH=bcf4023eb8cb6976a4c7cff0a8a8f145f162bf4d
ARG ANDROID_SDK_REVISION=4333796
ARG ANDROID_SDK_HASH=92ffee5a1d98d856634e8b71132e8a95d96c83a63fde1099be3d86df3106def9
ARG QT_VERSION=5.15.2
WORKDIR /opt/android
ENV WORKDIR=/opt/android
ENV ANDROID_NATIVE_API_LEVEL=28
ENV ANDROID_API=android-${ANDROID_NATIVE_API_LEVEL}
ENV ANDROID_CLANG=aarch64-linux-android${ANDROID_NATIVE_API_LEVEL}-clang
ENV ANDROID_CLANGPP=aarch64-linux-android${ANDROID_NATIVE_API_LEVEL}-clang++
ENV ANDROID_NDK_ROOT=${WORKDIR}/android-ndk-r${ANDROID_NDK_REVISION}
ENV ANDROID_SDK_ROOT=${WORKDIR}/tools
ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
ENV PATH=${JAVA_HOME}/bin:${PATH}
ENV PREFIX=${WORKDIR}/prefix
ENV TOOLCHAIN_DIR=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64
RUN apt-get update \
&& apt-get install -y ant automake build-essential ca-certificates-java file gettext git libc6 libncurses5 \
libssl-dev libstdc++6 libtinfo5 libtool libz1 openjdk-8-jdk-headless openjdk-8-jre-headless pkg-config python3 \
unzip wget
RUN wget -q https://dl.google.com/android/repository/sdk-tools-linux-${ANDROID_SDK_REVISION}.zip \
&& unzip -q sdk-tools-linux-${ANDROID_SDK_REVISION}.zip \
&& rm -f sdk-tools-linux-${ANDROID_SDK_REVISION}.zip
RUN wget -q https://dl.google.com/android/repository/android-ndk-r${ANDROID_NDK_REVISION}-linux-x86_64.zip \
&& unzip -q android-ndk-r${ANDROID_NDK_REVISION}-linux-x86_64.zip \
&& rm -f android-ndk-r${ANDROID_NDK_REVISION}-linux-x86_64.zip
RUN cd ${ANDROID_SDK_ROOT} && echo y | ./bin/sdkmanager "platform-tools" "platforms;${ANDROID_API}" "tools" > /dev/null
RUN cp -r ${WORKDIR}/platforms ${WORKDIR}/platform-tools ${ANDROID_SDK_ROOT}
ENV HOST_PATH=${PATH}
ENV PATH=${TOOLCHAIN_DIR}/aarch64-linux-android/bin:${TOOLCHAIN_DIR}/bin:${PATH}
ARG ZLIB_VERSION=1.2.11
ARG ZLIB_HASH=c3e5e9fdd5004dcb542feda5ee4f0ff0744628baf8ed2dd5d66f8ca1197cb1a1
RUN wget -q https://zlib.net/zlib-${ZLIB_VERSION}.tar.gz \
&& tar -xzf zlib-${ZLIB_VERSION}.tar.gz \
&& rm zlib-${ZLIB_VERSION}.tar.gz \
&& cd zlib-${ZLIB_VERSION} \
&& CC=${ANDROID_CLANG} CXX=${ANDROID_CLANGPP} ./configure --prefix=${PREFIX} --static \
&& make -j${THREADS} \
&& make -j${THREADS} install \
&& rm -rf $(pwd)
RUN git clone git://code.qt.io/qt/qt5.git -b ${QT_VERSION} --depth 1 \
&& cd qt5 \
&& perl init-repository --module-subset=default,-qtwebengine \
&& PATH=${HOST_PATH} ./configure -v -developer-build -release \
-xplatform android-clang \
-android-ndk-platform ${ANDROID_API} \
-android-ndk ${ANDROID_NDK_ROOT} \
-android-sdk ${ANDROID_SDK_ROOT} \
-android-ndk-host linux-x86_64 \
-no-dbus \
-opengl es2 \
-no-use-gold-linker \
-no-sql-mysql \
-opensource -confirm-license \
-android-arch arm64-v8a \
-prefix ${PREFIX} \
-nomake tools -nomake tests -nomake examples \
-skip qtwebengine \
-skip qtserialport \
-skip qtconnectivity \
-skip qttranslations \
-skip qtpurchasing \
-skip qtgamepad -skip qtscript -skip qtdoc \
-no-warnings-are-errors \
&& sed -i '213,215d' qtbase/src/3rdparty/pcre2/src/sljit/sljitConfigInternal.h \
&& PATH=${HOST_PATH} make -j${THREADS} \
&& PATH=${HOST_PATH} make -j${THREADS} install \
&& cd qttools/src/linguist/lrelease \
&& ../../../../qtbase/bin/qmake \
&& PATH=${HOST_PATH} make -j${THREADS} install \
&& cd ../../../.. \
&& rm -rf $(pwd)
ARG ICONV_VERSION=1.16
ARG ICONV_HASH=e6a1b1b589654277ee790cce3734f07876ac4ccfaecbee8afa0b649cf529cc04
RUN wget -q http://ftp.gnu.org/pub/gnu/libiconv/libiconv-${ICONV_VERSION}.tar.gz \
&& echo "${ICONV_HASH} libiconv-${ICONV_VERSION}.tar.gz" | sha256sum -c \
&& tar -xzf libiconv-${ICONV_VERSION}.tar.gz \
&& rm -f libiconv-${ICONV_VERSION}.tar.gz \
&& cd libiconv-${ICONV_VERSION} \
&& CC=${ANDROID_CLANG} CXX=${ANDROID_CLANGPP} ./configure --build=x86_64-linux-gnu --host=aarch64 --prefix=${PREFIX} --disable-rpath \
&& make -j${THREADS} \
&& make -j${THREADS} install
ARG BOOST_VERSION=1_74_0
ARG BOOST_VERSION_DOT=1.74.0
ARG BOOST_HASH=83bfc1507731a0906e387fc28b7ef5417d591429e51e788417fe9ff025e116b1
RUN wget -q https://dl.bintray.com/boostorg/release/${BOOST_VERSION_DOT}/source/boost_${BOOST_VERSION}.tar.bz2 \
&& echo "${BOOST_HASH} boost_${BOOST_VERSION}.tar.bz2" | sha256sum -c \
&& tar -xf boost_${BOOST_VERSION}.tar.bz2 \
&& rm -f boost_${BOOST_VERSION}.tar.bz2 \
&& cd boost_${BOOST_VERSION} \
&& PATH=${HOST_PATH} ./bootstrap.sh --prefix=${PREFIX} \
&& PATH=${TOOLCHAIN_DIR}/bin:${HOST_PATH} ./b2 --build-type=minimal link=static runtime-link=static \
--with-chrono --with-date_time --with-filesystem --with-program_options --with-regex --with-serialization \
--with-system --with-thread --with-locale --build-dir=android --stagedir=android toolset=clang threading=multi \
threadapi=pthread target-os=android -sICONV_PATH=${PREFIX} \
cflags='--target=aarch64-linux-android' \
cxxflags='--target=aarch64-linux-android' \
linkflags='--target=aarch64-linux-android --sysroot=${ANDROID_NDK_ROOT}/platforms/${ANDROID_API}/arch-arm64 ${ANDROID_NDK_ROOT}/sources/cxx-stl/llvm-libc++/libs/arm64-v8a/libc++_shared.so -nostdlib++' \
install -j${THREADS} \
&& rm -rf $(pwd)
ARG OPENSSL_VERSION=1.1.1g
ARG OPENSSL_HASH=ddb04774f1e32f0c49751e21b67216ac87852ceb056b75209af2443400636d46
RUN wget -q https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz \
&& tar -xzf openssl-${OPENSSL_VERSION}.tar.gz \
&& rm openssl-${OPENSSL_VERSION}.tar.gz \
&& cd openssl-${OPENSSL_VERSION} \
&& ANDROID_NDK_HOME=${ANDROID_NDK_ROOT} ./Configure CC=${ANDROID_CLANG} CXX=${ANDROID_CLANGPP} \
android-arm64 no-asm no-shared --static \
--with-zlib-include=${PREFIX}/include --with-zlib-lib=${PREFIX}/lib \
--prefix=${PREFIX} --openssldir=${PREFIX} \
&& sed -i 's/CNF_EX_LIBS=-ldl -pthread//g;s/BIN_CFLAGS=-pie $(CNF_CFLAGS) $(CFLAGS)//g' Makefile \
&& ANDROID_NDK_HOME=${ANDROID_NDK_ROOT} make -j${THREADS} \
&& make -j${THREADS} install \
&& rm -rf $(pwd)
ARG ZMQ_VERSION=v4.3.3
ARG ZMQ_HASH=04f5bbedee58c538934374dc45182d8fc5926fa3
RUN git clone https://github.com/zeromq/libzmq.git -b ${ZMQ_VERSION} --depth 1 \
&& cd libzmq \
&& git checkout ${ZMQ_HASH} \
&& ./autogen.sh \
&& CC=${ANDROID_CLANG} CXX=${ANDROID_CLANGPP} ./configure --prefix=${PREFIX} --host=aarch64-linux-android \
--enable-static --disable-shared \
&& make -j${THREADS} \
&& make -j${THREADS} install \
&& rm -rf $(pwd)
ARG SODIUM_VERSION=1.0.18
ARG SODIUM_HASH=4f5e89fa84ce1d178a6765b8b46f2b6f91216677
RUN set -ex \
&& git clone https://github.com/jedisct1/libsodium.git -b ${SODIUM_VERSION} --depth 1 \
&& cd libsodium \
&& test `git rev-parse HEAD` = ${SODIUM_HASH} || exit 1 \
&& ./autogen.sh \
&& CC=${ANDROID_CLANG} CXX=${ANDROID_CLANGPP} ./configure --prefix=${PREFIX} --host=aarch64-linux-android --enable-static --disable-shared \
&& make -j${THREADS} install \
&& rm -rf $(pwd)
RUN git clone -b libgpg-error-1.38 --depth 1 git://git.gnupg.org/libgpg-error.git \
&& cd libgpg-error \
&& git reset --hard 71d278824c5fe61865f7927a2ed1aa3115f9e439 \
&& ./autogen.sh \
&& CC=${ANDROID_CLANG} CXX=${ANDROID_CLANGPP} ./configure --host=aarch64-linux-android --prefix=${PREFIX} --disable-rpath --disable-shared --enable-static --disable-doc --disable-tests \
&& PATH=${TOOLCHAIN_DIR}/bin:${HOST_PATH} make -j${THREADS} \
&& make -j${THREADS} install \
&& rm -rf $(pwd)
RUN git clone -b libgcrypt-1.8.5 --depth 1 git://git.gnupg.org/libgcrypt.git \
&& cd libgcrypt \
&& git reset --hard 56606331bc2a80536db9fc11ad53695126007298 \
&& ./autogen.sh \
&& CC=${ANDROID_CLANG} CXX=${ANDROID_CLANGPP} ./configure --host=aarch64-linux-android --prefix=${PREFIX} --with-gpg-error-prefix=${PREFIX} --disable-shared --enable-static --disable-doc --disable-tests \
&& PATH=${TOOLCHAIN_DIR}/bin:${HOST_PATH} make -j${THREADS} \
&& make -j${THREADS} install \
&& rm -rf $(pwd)
RUN cd tools \
&& wget -q http://dl-ssl.google.com/android/repository/tools_r25.2.5-linux.zip \
&& unzip -q tools_r25.2.5-linux.zip \
&& rm -f tools_r25.2.5-linux.zip \
&& echo y | ${ANDROID_SDK_ROOT}/tools/android update sdk --no-ui --all --filter build-tools-28.0.3
RUN git clone -b v3.19.7 --depth 1 https://github.com/Kitware/CMake \
&& cd CMake \
&& git reset --hard 22612dd53a46c7f9b4c3f4b7dbe5c78f9afd9581 \
&& PATH=${HOST_PATH} ./bootstrap \
&& PATH=${HOST_PATH} make -j${THREADS} \
&& PATH=${HOST_PATH} make -j${THREADS} install \
&& rm -rf $(pwd)
RUN git clone -b v1.6.35 --depth 1 https://github.com/glennrp/libpng.git && \
cd libpng && \
git reset --hard c17d164b4467f099b4484dfd4a279da0bc1dbd4a \
&& CC=${ANDROID_CLANG} CXX=${ANDROID_CLANGPP} ./configure --with-zlib-prefix="${PREFIX}" --host=aarch64-linux-android --prefix=${PREFIX} --disable-shared --enable-static \
&& PATH=${TOOLCHAIN_DIR}/bin:${HOST_PATH} make -j${THREADS} \
&& make -j${THREADS} install \
&& rm -rf $(pwd)
# @TODO: don't hardcode ANDROID_PLATFORM
RUN git clone -b v4.0.2 --depth 1 https://github.com/fukuchi/libqrencode.git && \
cd libqrencode && \
git reset --hard 59ee597f913fcfda7a010a6e106fbee2595f68e4 && \
CC=${ANDROID_CLANG} CXX=${ANDROID_CLANGPP} cmake \
-DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake" \
-DANDROID_PLATFORM="28" \
-DBUILD_SHARED_LIBS=OFF \
-DARCH="armv8-a" \
-DANDROID_ABI="arm64-v8a" \
-DANDROID_TOOLCHAIN=clang \
-DCMAKE_PREFIX_PATH="${PREFIX}" \
-DPNG_PNG_INCLUDE_DIR="${PREFIX}/include/libpng16/" \
-DPNG_LIBRARY="${PREFIX}/lib/libqtlibpng_arm64-v8a.a" \
-DICONV_LIBRARY=/opt/android/prefix/lib/libiconv.a \
-DICONV_INCLUDE_DIR=/opt/android/prefix/include/ \
-DCMAKE_INSTALL_PREFIX="${PREFIX}" && \
make -j$THREADS && \
make -j$THREADS install && \
rm -rf $(pwd)
RUN ls -al && uname -a
# @TODO: switch to Release
CMD set -ex \
&& cd /wowlet \
&& mkdir -p build/Android/release \
&& cd build/Android/release \
&& E=1 cmake \
-DCMAKE_TOOLCHAIN_FILE="${ANDROID_NDK_ROOT}/build/cmake/android.toolchain.cmake" \
-DCMAKE_PREFIX_PATH="${PREFIX}" \
-DCMAKE_FIND_ROOT_PATH="${PREFIX}" \
-DCMAKE_BUILD_TYPE=Release \
-DARCH="armv8-a" \
-DANDROID_NATIVE_API_LEVEL=${ANDROID_NATIVE_API_LEVEL} \
-DANDROID_ABI="arm64-v8a" \
-DANDROID_TOOLCHAIN=clang \
-DBoost_USE_STATIC_RUNTIME=ON \
-DLRELEASE_PATH="${PREFIX}/bin" \
-DQT_ANDROID_APPLICATION_BINARY="wowlet" \
-DWITH_SCANNER=ON \
-DUSE_DEVICE_TREZOR=OFF \
-DUSE_SINGLE_BUILDDIR=ON \
-DMANUAL_SUBMODULES=1 \
-DUSE_SINGLE_BUILDDIR=ON \
-DQML=ON \
-DANDROID=ON \
../../.. \
&& PATH=${HOST_PATH} make generate_translations_header \
&& make -j${THREADS} -C src \
&& make -j${THREADS} apk
+1 -1
View File
@@ -27,7 +27,6 @@
# THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY # THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
CMAKEFLAGS = \ CMAKEFLAGS = \
-DARCH=x86_64 \
-DBUILD_64=On \ -DBUILD_64=On \
-DBUILD_TESTS=Off \ -DBUILD_TESTS=Off \
-DOPENVR=Off \ -DOPENVR=Off \
@@ -43,6 +42,7 @@ CMAKEFLAGS = \
$(CMAKEFLAGS_EXTRA) $(CMAKEFLAGS_EXTRA)
release-static: CMAKEFLAGS += -DBUILD_TAG="linux-x64" release-static: CMAKEFLAGS += -DBUILD_TAG="linux-x64"
release-static: CMAKEFLAGS += -DXMRIG=OFF
release-static: CMAKEFLAGS += -DTOR_BIN=$(or ${TOR_BIN},OFF) release-static: CMAKEFLAGS += -DTOR_BIN=$(or ${TOR_BIN},OFF)
release-static: CMAKEFLAGS += -DCMAKE_BUILD_TYPE=Release release-static: CMAKEFLAGS += -DCMAKE_BUILD_TYPE=Release
release-static: CMAKEFLAGS += -DREPRODUCIBLE=$(or ${SOURCE_DATE_EPOCH},OFF) release-static: CMAKEFLAGS += -DREPRODUCIBLE=$(or ${SOURCE_DATE_EPOCH},OFF)
+2 -2
View File
@@ -35,7 +35,7 @@ if(RET)
message(WARNING "Cannot determine current commit. Make sure that you are building either from a Git working tree or from a source archive.") message(WARNING "Cannot determine current commit. Make sure that you are building either from a Git working tree or from a source archive.")
set(VERSIONTAG "unknown") set(VERSIONTAG "unknown")
set(VERSION_IS_RELEASE "false") set(VERSION_IS_RELEASE "false")
configure_file("monero/src/version.cpp.in" "${TO}") configure_file("wownero/src/version.cpp.in" "${TO}")
else() else()
string(SUBSTRING ${COMMIT} 0 9 COMMIT) string(SUBSTRING ${COMMIT} 0 9 COMMIT)
message(STATUS "You are currently on commit ${COMMIT}") message(STATUS "You are currently on commit ${COMMIT}")
@@ -61,5 +61,5 @@ else()
set(VERSION_IS_RELEASE "false") set(VERSION_IS_RELEASE "false")
endif() endif()
endif() endif()
configure_file("monero/src/version.cpp.in" "${TO}") configure_file("wownero/src/version.cpp.in" "${TO}")
endif() endif()
+2 -2
View File
@@ -4,7 +4,7 @@
find_package(Git QUIET) find_package(Git QUIET)
# Check what commit we're on # Check what commit we're on
execute_process(COMMAND "${GIT_EXECUTABLE}" rev-parse --short=9 HEAD RESULT_VARIABLE RET OUTPUT_VARIABLE COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE execute_process(COMMAND "${GIT_EXECUTABLE}" rev-parse --short=9 HEAD RESULT_VARIABLE RET OUTPUT_VARIABLE COMMIT OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/monero) WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/wownero)
if(RET) if(RET)
# Something went wrong, set the version tag to -unknown # Something went wrong, set the version tag to -unknown
@@ -37,7 +37,7 @@ endif()
# Check latest tagged release # Check latest tagged release
execute_process(COMMAND "${GIT_EXECUTABLE}" describe --abbrev=0 RESULT_VARIABLE RET OUTPUT_VARIABLE TAG OUTPUT_STRIP_TRAILING_WHITESPACE execute_process(COMMAND "${GIT_EXECUTABLE}" describe --abbrev=0 RESULT_VARIABLE RET OUTPUT_VARIABLE TAG OUTPUT_STRIP_TRAILING_WHITESPACE
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/monero) WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/wownero)
if(RET) if(RET)
message(WARNING "Cannot determine most recent tag. Make sure that you are building either from a Git working tree or from a source archive.") message(WARNING "Cannot determine most recent tag. Make sure that you are building either from a Git working tree or from a source archive.")
+1
View File
@@ -3,6 +3,7 @@
#define WOWLET_VERSION "@VERSION@" #define WOWLET_VERSION "@VERSION@"
#define WOWLET_BRANCH "@WOWLET_BRANCH@" #define WOWLET_BRANCH "@WOWLET_BRANCH@"
#define WOWLET_VERSION_SEMVER "@VERSION_MAJOR@.@VERSION_MINOR@.@VERSION_REVISION@"
#define MONERO_VERSION "@MONERO_VERSION@" #define MONERO_VERSION "@MONERO_VERSION@"
#define MONERO_BRANCH "@MONERO_BRANCH@" #define MONERO_BRANCH "@MONERO_BRANCH@"
View File
@@ -22,13 +22,13 @@ mkdir -p "$DEBDIR/usr/share/icons/hicolor/256x256/apps/"
# Copy over assets # Copy over assets
cp "$PWD/src/assets/control" "$DEBDIR/DEBIAN/control" cp "$PWD/contrib/debian/control" "$DEBDIR/DEBIAN/control"
cp "$PWD/src/assets/copyright" "$DEBDIR/debian/copyright" cp "$PWD/contrib/debian/copyright" "$DEBDIR/debian/copyright"
cp "$PWD/src/assets/copyright" "$DEBDIR/usr/share/doc/wowlet/copyright" cp "$PWD/contrib/debian/copyright" "$DEBDIR/usr/share/doc/wowlet/copyright"
cp "$PWD/src/assets/changelog.gz" "$DEBDIR/usr/share/doc/wowlet/changelog.gz" cp "$PWD/contrib/debian/changelog.gz" "$DEBDIR/usr/share/doc/wowlet/changelog.gz"
cp "$PWD/src/assets/org.wowlet.wowlet.metainfo.xml" "$DEBDIR/usr/share/metainfo/org.wowlet.wowlet.metainfo.xml" cp "$PWD/src/assets/org.wowlet.wowlet.metainfo.xml" "$DEBDIR/usr/share/metainfo/org.wowlet.wowlet.metainfo.xml"
cp "$PWD/README.md" "$DEBDIR/usr/share/doc/wowlet/README" cp "$PWD/README.md" "$DEBDIR/usr/share/doc/wowlet/README"
cp "$PWD/SECURITY.md" "$DEBDIR/usr/share/doc/wowlet/SECURITY" cp "$PWD/docs/SECURITY.md" "$DEBDIR/usr/share/doc/wowlet/SECURITY"
cp "$PWD/build/bin/wowlet" "$DEBDIR/usr/bin/wowlet" cp "$PWD/build/bin/wowlet" "$DEBDIR/usr/bin/wowlet"
cp "$PWD/src/assets/org.wowlet.wowlet.desktop" "$DEBDIR/usr/share/applications/org.wowlet.wowlet.desktop" cp "$PWD/src/assets/org.wowlet.wowlet.desktop" "$DEBDIR/usr/share/applications/org.wowlet.wowlet.desktop"
cp "$PWD/src/assets/wowlet.1.gz" "$DEBDIR/usr/share/man/man1/wowlet.1.gz" cp "$PWD/src/assets/wowlet.1.gz" "$DEBDIR/usr/share/man/man1/wowlet.1.gz"
@@ -43,4 +43,4 @@ cp "$PWD/src/assets/images/appicons/256x256.png" "$DEBDIR/usr/share/icons/hicolo
# Build deb package # Build deb package
dpkg-deb --build $DEBDIR dpkg-deb --build $DEBDIR
mv wowlet.DebDir.deb wowlet_1.0_amd64.deb mv wowlet.DebDir.deb wowlet_2.1_amd64.deb
Binary file not shown.
@@ -1,5 +1,5 @@
Package: wowlet Package: wowlet
Version: 1.0 Version: 2.1
Section: net Section: net
Priority: optional Priority: optional
Architecture: amd64 Architecture: amd64
+4 -4
View File
@@ -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 wowlet:linux --build-arg THREADS=4 . docker build --tag wowlet:linux --build-arg THREADS=6 .
``` ```
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,7 +37,7 @@ 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:/wowlet -w /wowlet wowlet:linux sh -c 'make release-static -j4' docker run --rm -it -v $PWD:/wowlet -w /wowlet wowlet:linux sh -c 'make release-static -j6'
``` ```
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.
@@ -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 wowlet:win --build-arg THREADS=4 . docker build -f Dockerfile.windows --tag wowlet:win --build-arg THREADS=6 .
``` ```
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,7 +75,7 @@ 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:/wowlet -w /wowlet wowlet: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 windows root=/depends target=x86_64-w64-mingw32 tag=win-x64 -j6'
``` ```
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.
+1 -3
View File
@@ -28,7 +28,7 @@ by running this command: `pandoc wowlet.1.md -s -t man -o wowlet.1 && gzip wowle
apt install -y git cmake libqrencode-dev build-essential cmake libboost-all-dev \ apt install -y git cmake libqrencode-dev build-essential cmake libboost-all-dev \
miniupnpc libunbound-dev graphviz doxygen libunwind8-dev pkg-config libssl-dev \ miniupnpc libunbound-dev graphviz doxygen libunwind8-dev pkg-config libssl-dev \
libzmq3-dev libsodium-dev libhidapi-dev libnorm-dev libusb-1.0-0-dev libpgm-dev \ libzmq3-dev libsodium-dev libhidapi-dev libnorm-dev libusb-1.0-0-dev libpgm-dev \
libprotobuf-dev protobuf-compiler libgcrypt20-dev libprotobuf-dev protobuf-compiler libgcrypt20-dev libpng-dev
``` ```
## Mac OS ## Mac OS
@@ -107,6 +107,4 @@ To skip the wizards and open a wallet directly use `--wallet-file`:
./wowlet --use-local-tor --wallet-file /home/user/Wownero/wallets/bla.keys ./wowlet --use-local-tor --wallet-file /home/user/Wownero/wallets/bla.keys
``` ```
It is recommended that you use `--stagenet` for development. Testnet is also possible,
but you'll have to provide Wownero a testnet node of your own.
View File
Submodule monero deleted from f611d5c9e3
+83 -16
View File
@@ -57,6 +57,15 @@ if(OPENVR)
list(APPEND SOURCE_FILES ${SOURCE_FILES_QML}) list(APPEND SOURCE_FILES ${SOURCE_FILES_QML})
endif() endif()
if(ANDROID OR ANDROID_DEBUG)
qt5_add_resources(RESOURCES mobile/qml.qrc)
file(GLOB SOURCE_FILES_QML
"mobile/*.h"
"mobile/*.cpp"
)
list(APPEND SOURCE_FILES ${SOURCE_FILES_QML})
endif()
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wno-deprecated-declarations") # @TODO: removeme set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Wno-deprecated-declarations") # @TODO: removeme
add_subdirectory(libwalletqt) add_subdirectory(libwalletqt)
@@ -98,11 +107,16 @@ if(APPLE)
list(APPEND RESOURCES ${ICON}) list(APPEND RESOURCES ${ICON})
endif() endif()
add_executable(wowlet ${EXECUTABLE_FLAG} main.cpp if(NOT ANDROID)
${SOURCE_FILES} add_executable(wowlet ${EXECUTABLE_FLAG} main.cpp
${RESOURCES} ${SOURCE_FILES}
${ASSETS_TOR} ${RESOURCES}
) ${ASSETS_TOR}
)
else()
add_library(wowlet SHARED ${SOURCE_FILES} ${RESOURCES})
set_target_properties(wowlet PROPERTIES COMPILE_DEFINITIONS "ANDROID")
endif()
# mac os bundle # mac os bundle
set_target_properties(wowlet PROPERTIES set_target_properties(wowlet PROPERTIES
@@ -122,10 +136,10 @@ file(GLOB_RECURSE SRC_HEADERS *.h)
target_include_directories(wowlet PUBLIC target_include_directories(wowlet PUBLIC
${CMAKE_BINARY_DIR}/src/wowlet_autogen/include ${CMAKE_BINARY_DIR}/src/wowlet_autogen/include
${CMAKE_SOURCE_DIR}/monero/include ${CMAKE_SOURCE_DIR}/wownero/include
${CMAKE_SOURCE_DIR}/monero/src ${CMAKE_SOURCE_DIR}/wownero/src
${CMAKE_SOURCE_DIR}/monero/external/easylogging++ ${CMAKE_SOURCE_DIR}/wownero/external/easylogging++
${CMAKE_SOURCE_DIR}/monero/contrib/epee/include ${CMAKE_SOURCE_DIR}/wownero/contrib/epee/include
${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/src
${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/daemon ${CMAKE_CURRENT_SOURCE_DIR}/daemon
@@ -162,6 +176,14 @@ if(XMRIG)
target_compile_definitions(wowlet PRIVATE HAS_XMRIG=1) target_compile_definitions(wowlet PRIVATE HAS_XMRIG=1)
endif() endif()
if(ANDROID)
target_compile_definitions(wowlet PRIVATE HAS_ANDROID=1)
endif()
if(ANDROID_DEBUG)
target_compile_definitions(wowlet PRIVATE HAS_ANDROID_DEBUG=1)
endif()
if(OPENVR) if(OPENVR)
target_compile_definitions(wowlet PRIVATE HAS_OPENVR=1) target_compile_definitions(wowlet PRIVATE HAS_OPENVR=1)
target_compile_definitions(wowlet PUBLIC VR_API_PUBLIC) target_compile_definitions(wowlet PUBLIC VR_API_PUBLIC)
@@ -220,16 +242,18 @@ else()
target_link_libraries(wowlet PUBLIC monero-seed::monero-seed) target_link_libraries(wowlet PUBLIC monero-seed::monero-seed)
endif() endif()
if(ANDROID)
# yolo some hardcoded paths
target_include_directories(wowlet PUBLIC
/opt/android/prefix/include/QtAndroidExtras/
)
endif()
# Link Wownero core libraries # Link Wownero core libraries
target_link_libraries(wowlet PUBLIC target_link_libraries(wowlet PUBLIC
wallet_merged
${LMDB_LIBRARY}
epee epee
${UNBOUND_LIBRARY} wallet_api
${SODIUM_LIBRARY}
easylogging easylogging
blockchain_db
hardforks
${Boost_LIBRARIES} ${Boost_LIBRARIES}
${OPENSSL_LIBRARIES} ${OPENSSL_LIBRARIES}
${CMAKE_DL_LIBS} ${CMAKE_DL_LIBS}
@@ -261,6 +285,33 @@ else()
Qt5::WebSockets) Qt5::WebSockets)
endif() endif()
if(ANDROID)
# yolo some hardcoded paths
target_link_libraries(wowlet PUBLIC
/opt/android/prefix/lib/libQt5QuickTemplates2_arm64-v8a.so
/opt/android/prefix/lib/libQt5Quick_arm64-v8a.so
/opt/android/prefix/lib/libQt5QmlModels_arm64-v8a.so
/opt/android/prefix/lib/libQt5Qml_arm64-v8a.so
/opt/android/prefix/lib/libQt5Svg_arm64-v8a.so
/opt/android/prefix/lib/libQt5Widgets_arm64-v8a.so
/opt/android/prefix/lib/libQt5Gui_arm64-v8a.so
/opt/android/prefix/lib/libQt5Xml_arm64-v8a.so
/opt/android/prefix/lib/libQt5XmlPatterns_arm64-v8a.so
/opt/android/prefix/lib/libQt5Network_arm64-v8a.so
/opt/android/prefix/lib/libQt5Core_arm64-v8a.so
/opt/android/prefix/lib/libQt5VirtualKeyboard_arm64-v8a.so
/opt/android/prefix/lib/libQt5AndroidExtras_arm64-v8a.so
/opt/android/prefix/plugins/bearer/libplugins_bearer_qandroidbearer_arm64-v8a.so
GLESv2
log
z
jnigraphics
android
EGL
c++_shared
)
endif()
# Link random other stuff # Link random other stuff
target_link_libraries(wowlet PUBLIC target_link_libraries(wowlet PUBLIC
${ICU_LIBRARIES} ${ICU_LIBRARIES}
@@ -294,7 +345,7 @@ if(OPENVR)
endif() endif()
if(APPLE) if(APPLE)
target_link_libraries(wowlet target_link_libraries(wowlet PUBLIC
KDMacTouchBar KDMacTouchBar
) )
target_include_directories(wowlet target_include_directories(wowlet
@@ -329,3 +380,19 @@ endif()
install(TARGETS wowlet install(TARGETS wowlet
DESTINATION ${CMAKE_INSTALL_PREFIX} DESTINATION ${CMAKE_INSTALL_PREFIX}
) )
message(STATUS "=============================================")
message(STATUS "VERSION_MAJOR: ${VERSION_MAJOR}")
message(STATUS "VERSION_MINOR: ${VERSION_MINOR}")
message(STATUS "VERSION_REVISION: ${VERSION_REVISION}")
message(STATUS "STATIC: ${STATIC}")
message(STATUS "Include QtQuick (QML): ${QML}")
message(STATUS "VERSION: ${VERSION}")
message(STATUS "Include the XMRIG tab: ${XMRIG}")
message(STATUS "Include Valve's OpenVR library: ${OPENVR}")
message(STATUS "This build is for Android: ${ANDROID}")
message(STATUS "This build is for testing the Android app on desktop: ${ANDROID_DEBUG}")
message(STATUS "TOR_BIN: ${TOR_BIN}")
message(STATUS "DONATE_BEG: ${DONATE_BEG}")
message(STATUS "=============================================")
+128 -50
View File
@@ -6,6 +6,7 @@
#include "appcontext.h" #include "appcontext.h"
#include "globals.h" #include "globals.h"
#include "config-wowlet.h"
// libwalletqt // libwalletqt
#include "libwalletqt/TransactionHistory.h" #include "libwalletqt/TransactionHistory.h"
@@ -30,77 +31,69 @@ AppContext::AppContext(QCommandLineParser *cmdargs) {
this->cmdargs = cmdargs; this->cmdargs = cmdargs;
AppContext::isQML = false; AppContext::isQML = false;
// OS & env
#if defined(Q_OS_MAC) #if defined(Q_OS_MAC)
this->isMac = true;
this->isTorSocks = qgetenv("DYLD_INSERT_LIBRARIES").indexOf("libtorsocks") >= 0; this->isTorSocks = qgetenv("DYLD_INSERT_LIBRARIES").indexOf("libtorsocks") >= 0;
#elif __ANDROID__
this->isAndroid = true;
#elif defined(Q_OS_LINUX) #elif defined(Q_OS_LINUX)
this->isLinux = true;
this->isTorSocks = qgetenv("LD_PRELOAD").indexOf("libtorsocks") >= 0; this->isTorSocks = qgetenv("LD_PRELOAD").indexOf("libtorsocks") >= 0;
#elif defined(Q_OS_WIN)
this->isTorSocks = false;
#endif
this->isTails = TailsOS::detect(); this->isTails = TailsOS::detect();
this->isWhonix = WhonixOS::detect(); this->isWhonix = WhonixOS::detect();
#elif defined(Q_OS_WIN)
this->isWindows = true;
this->isTorSocks = false;
#endif
this->androidDebug = cmdargs->isSet("android-debug");
//Paths // Paths
this->pathGenericData = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
this->configRoot = QDir::homePath(); this->configRoot = QDir::homePath();
if (isTails) { // #if defined(PORTABLE)
QString portablePath = []{
QString appImagePath = qgetenv("APPIMAGE");
if (appImagePath.isEmpty()) {
qDebug() << "Not an appimage, using currentPath()";
return QDir::currentPath() + "/.wowlet";
}
QFileInfo appImageDir(appImagePath);
return appImageDir.absoluteDir().path() + "/.wowlet";
}();
if (QDir().mkpath(portablePath)) {
this->configRoot = portablePath;
} else {
qCritical() << "Unable to create portable directory: " << portablePath;
}
}
this->accountName = Utils::getUnixAccountName(); this->accountName = Utils::getUnixAccountName();
this->homeDir = QDir::homePath(); this->homeDir = QDir::homePath();
this->configDirectory = QString("%1/.config/wowlet/").arg(this->configRoot);
this->configDirectoryVR = QString("%1%2").arg(this->configDirectory, "vr");
if (isTails) this->setupPathsTails();
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 (isAndroid && !androidDebug) setupPathsAndroid();
this->defaultWalletDir = QString("%1/Wownero/wallets").arg(this->configRoot); else if (isWindows) setupPathsWindows();
this->defaultWalletDirRoot = QString("%1/Wownero").arg(this->configRoot); else if (isLinux || isMac) setupPathsUnix();
#elif defined(Q_OS_WIN)
this->defaultWalletDir = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/Wownero";
this->defaultWalletDirRoot = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
#endif
} else { } else {
this->defaultWalletDir = walletDir; this->defaultWalletDir = walletDir;
this->defaultWalletDirRoot = walletDir; this->defaultWalletDirRoot = walletDir;
} }
#ifdef __ANDROID__
// can haz disk I/O?
QVector<QString> perms = {
"android.permission.WRITE_EXTERNAL_STORAGE",
"android.permission.READ_EXTERNAL_STORAGE"
};
Utils::androidAskPermissions(perms);
#endif
// Create wallet dirs // Create wallet dirs
qDebug() << "creating " << defaultWalletDir;
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/wowlet/").arg(this->configRoot);
#if defined(Q_OS_UNIX)
if(!this->configDirectory.endsWith('/'))
this->configDirectory = QString("%1/").arg(this->configDirectory);
#endif
this->configDirectoryVR = QString("%1%2").arg(this->configDirectory, "vr");
// Create some directories // Create some directories
createConfigDirectory(this->configDirectory); createConfigDirectory(this->configDirectory);
// if(this->cmdargs->isSet("stagenet"))
// this->networkType = NetworkType::STAGENET;
// else if(this->cmdargs->isSet("testnet"))
// this->networkType = NetworkType::TESTNET;
// else
this->networkType = NetworkType::MAINNET; this->networkType = NetworkType::MAINNET;
qDebug() << "configRoot: " << this->configRoot;
qDebug() << "homeDir: " << this->homeDir;
qDebug() << "customWalletDir: " << walletDir;
qDebug() << "defaultWalletDir: " << this->defaultWalletDir;
qDebug() << "defaultWalletDirRoot: " << this->defaultWalletDirRoot;
qDebug() << "configDirectory: " << this->configDirectory;
// 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);
this->nodes = new Nodes(this, this->networkClearnet); this->nodes = new Nodes(this, this->networkClearnet);
@@ -119,6 +112,24 @@ AppContext::AppContext(QCommandLineParser *cmdargs) {
this->storeWallet(); this->storeWallet();
}); });
// If system clock skewed for >= 300 seconds, assume a wake-up from hibernate and reload the websocket connection
if(!this->isAndroid)
m_hibernateTimer.start(3 * 1000);
m_hibernatePreviousTime = std::chrono::steady_clock::now();
connect(&m_hibernateTimer, &QTimer::timeout, [this]() {
const auto now = std::chrono::steady_clock::now();
const auto elapsed = now - m_hibernatePreviousTime;
if(elapsed >= m_hibernateDetectInterval) {
qCritical() << "Clock skew detected, resetting websocket connection";
this->ws->webSocket.abort();
this->ws->start();
}
m_hibernatePreviousTime = now;
});
// restore height lookup // restore height lookup
this->initRestoreHeights(); this->initRestoreHeights();
@@ -423,7 +434,6 @@ void AppContext::onWSMessage(const QJsonObject &msg) {
QJsonArray crypto_rates = msg.value("data").toArray(); QJsonArray crypto_rates = msg.value("data").toArray();
AppContext::prices->cryptoPricesReceived(crypto_rates); AppContext::prices->cryptoPricesReceived(crypto_rates);
} }
else if(cmd == "fiat_rates") { else if(cmd == "fiat_rates") {
QJsonObject fiat_rates = msg.value("data").toObject(); QJsonObject fiat_rates = msg.value("data").toObject();
AppContext::prices->fiatPricesReceived(fiat_rates); AppContext::prices->fiatPricesReceived(fiat_rates);
@@ -432,21 +442,35 @@ void AppContext::onWSMessage(const QJsonObject &msg) {
QJsonArray reddit_data = msg.value("data").toArray(); QJsonArray reddit_data = msg.value("data").toArray();
this->onWSReddit(reddit_data); this->onWSReddit(reddit_data);
} }
else if(cmd == "forum") {
QJsonArray forum_data = msg.value("data").toArray();
this->onWSForum(forum_data);
}
else if(cmd == "funding_proposals") { else if(cmd == "funding_proposals") {
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") { else if(cmd == "suchwow") {
QJsonArray such_data = msg.value("data").toArray(); QJsonArray such_data = msg.value("data").toArray();
emit suchWowUpdated(such_data); 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);
} }
else if(cmd == "wowlet_releases") {
versionPending = msg.value("data").toObject();
auto version_str = versionPending.value("version").toString();
if(Utils::versionOutdated(WOWLET_VERSION_SEMVER, version_str))
emit versionOutdated(version_str, versionPending);
}
else if(cmd == "kill") {
// used *only* in dire emergencies
auto killme = msg.value("data").toBool();
if(killme)
QCoreApplication::quit();
}
#if defined(HAS_OPENVR) #if defined(HAS_OPENVR)
else if(cmd == "requestPIN") { else if(cmd == "requestPIN") {
auto pin = msg.value("data").toString(); auto pin = msg.value("data").toString();
@@ -497,6 +521,23 @@ void AppContext::onWSNodes(const QJsonArray &nodes) {
this->nodes->onWSNodesReceived(l); this->nodes->onWSNodesReceived(l);
} }
void AppContext::onWSForum(const QJsonArray& forum_data) {
QList<QSharedPointer<ForumPost>> l;
for (auto &&entry: forum_data) {
auto obj = entry.toObject();
auto forumPost = new ForumPost(
obj.value("title").toString(),
obj.value("author").toString(),
obj.value("permalink").toString(),
obj.value("comments").toInt());
QSharedPointer<ForumPost> r = QSharedPointer<ForumPost>(forumPost);
l.append(r);
}
emit forumUpdated(l);
}
void AppContext::onWSReddit(const QJsonArray& reddit_data) { void AppContext::onWSReddit(const QJsonArray& reddit_data) {
QList<QSharedPointer<RedditPost>> l; QList<QSharedPointer<RedditPost>> l;
@@ -558,12 +599,14 @@ void AppContext::createConfigDirectory(const QString &dir) {
} }
} }
#ifdef HAS_OPENVR
auto config_dir_vr = QString("%1%2").arg(dir, "vr"); auto config_dir_vr = QString("%1%2").arg(dir, "vr");
if(!Utils::dirExists(config_dir_vr)) { if(!Utils::dirExists(config_dir_vr)) {
qDebug() << QString("Creating directory: %1").arg(config_dir_vr); qDebug() << QString("Creating directory: %1").arg(config_dir_vr);
if (!QDir().mkpath(config_dir_vr)) if (!QDir().mkpath(config_dir_vr))
throw std::runtime_error("Could not create directory " + config_dir_vr.toStdString()); throw std::runtime_error("Could not create directory " + config_dir_vr.toStdString());
} }
#endif
} }
void AppContext::createWalletWithoutSpecifyingSeed(const QString &name, const QString &password) { void AppContext::createWalletWithoutSpecifyingSeed(const QString &name, const QString &password) {
@@ -949,3 +992,38 @@ void AppContext::refreshModels() {
this->currentWallet->coins()->refresh(this->currentWallet->currentSubaddressAccount()); this->currentWallet->coins()->refresh(this->currentWallet->currentSubaddressAccount());
// Todo: set timer for refreshes // Todo: set timer for refreshes
} }
void AppContext::setupPathsUnix() {
this->defaultWalletDir = QString("%1/Wownero/wallets").arg(this->configRoot);
this->defaultWalletDirRoot = QString("%1/Wownero").arg(this->configRoot);
}
void AppContext::setupPathsWindows() {
this->defaultWalletDir = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation) + "/Wownero";
this->defaultWalletDirRoot = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
}
void AppContext::setupPathsAndroid() {
this->defaultWalletDir = QString("%1/Wownero/wallets").arg(this->pathGenericData);
this->defaultWalletDirRoot = QString("%1/Wownero").arg(this->pathGenericData);
}
void AppContext::setupPathsTails() {
QString portablePath = []{
QString appImagePath = qgetenv("APPIMAGE");
if (appImagePath.isEmpty()) {
qDebug() << "Not an appimage, using currentPath()";
return QDir::currentPath() + "/.wowlet";
}
QFileInfo appImageDir(appImagePath);
return appImageDir.absoluteDir().path() + "/.wowlet";
}();
if (QDir().mkpath(portablePath)) {
this->configRoot = portablePath;
} else {
qCritical() << "Unable to create portable directory: " << portablePath;
}
}
+20 -1
View File
@@ -19,6 +19,7 @@
#include "utils/txfiathistory.h" #include "utils/txfiathistory.h"
#include "utils/WowletSeed.h" #include "utils/WowletSeed.h"
#include "widgets/RedditPost.h" #include "widgets/RedditPost.h"
#include "widgets/ForumPost.h"
#include "widgets/CCSEntry.h" #include "widgets/CCSEntry.h"
#include "utils/RestoreHeightLookup.h" #include "utils/RestoreHeightLookup.h"
#include "utils/nodes.h" #include "utils/nodes.h"
@@ -39,7 +40,13 @@ public:
~AppContext() override; ~AppContext() override;
bool isTails = false; bool isTails = false;
bool isWhonix = false; bool isWhonix = false;
bool isAndroid = false;
bool isLinux = false;
bool isMac = false;
bool isWindows = false;
bool isDebug = false; bool isDebug = false;
static bool isQML;
bool androidDebug = false;
// Donation config // Donation config
const QString donationAddress = "Wo3MWeKwtA918DU4c69hVSNgejdWFCRCuWjShRY66mJkU2Hv58eygJWDJS1MNa2Ge5M1WjUkGHuLqHkweDxwZZU42d16v94mP"; const QString donationAddress = "Wo3MWeKwtA918DU4c69hVSNgejdWFCRCuWjShRY66mJkU2Hv58eygJWDJS1MNa2Ge5M1WjUkGHuLqHkweDxwZZU42d16v94mP";
@@ -50,6 +57,7 @@ public:
QString coinName = "wownero"; QString coinName = "wownero";
bool isTorSocks = false; bool isTorSocks = false;
QString pathGenericData;
QString homeDir; QString homeDir;
QString accountName; QString accountName;
QString configRoot; QString configRoot;
@@ -98,7 +106,7 @@ public:
static QMap<QString, QString> txDescriptionCache; static QMap<QString, QString> txDescriptionCache;
static QMap<QString, QString> txCache; static QMap<QString, QString> txCache;
static TxFiatHistory *txFiatHistory; static TxFiatHistory *txFiatHistory;
static bool isQML; QJsonObject versionPending;
// libwalletqt // libwalletqt
bool refreshed = false; bool refreshed = false;
@@ -154,6 +162,7 @@ private slots:
void onWSMessage(const QJsonObject& msg); void onWSMessage(const QJsonObject& msg);
void onWSCCS(const QJsonArray &ccs_data); void onWSCCS(const QJsonArray &ccs_data);
void onWSReddit(const QJsonArray& reddit_data); void onWSReddit(const QJsonArray& reddit_data);
void onWSForum(const QJsonArray& forum_data);
void onMoneySpent(const QString &txId, quint64 amount); void onMoneySpent(const QString &txId, quint64 amount);
void onMoneyReceived(const QString &txId, quint64 amount); void onMoneyReceived(const QString &txId, quint64 amount);
@@ -192,6 +201,7 @@ signals:
void wsConnected(); void wsConnected();
void wsDisconnected(); void wsDisconnected();
void redditUpdated(QList<QSharedPointer<RedditPost>> &posts); void redditUpdated(QList<QSharedPointer<RedditPost>> &posts);
void forumUpdated(QList<QSharedPointer<ForumPost>> &posts);
void nodesUpdated(QList<QSharedPointer<WowletNode>> &nodes); void nodesUpdated(QList<QSharedPointer<WowletNode>> &nodes);
void ccsUpdated(QList<QSharedPointer<CCSEntry>> &entries); void ccsUpdated(QList<QSharedPointer<CCSEntry>> &entries);
void suchWowUpdated(const QJsonArray &such_data); void suchWowUpdated(const QJsonArray &such_data);
@@ -210,11 +220,20 @@ signals:
void initiateTransaction(); void initiateTransaction();
void endTransaction(); void endTransaction();
void setTitle(const QString &title); // set window title void setTitle(const QString &title); // set window title
void versionOutdated(QString version_string, QJsonObject data);
private: private:
WalletKeysFilesModel *m_walletKeysFilesModel; WalletKeysFilesModel *m_walletKeysFilesModel;
const int m_donationBoundary = 15; const int m_donationBoundary = 15;
QTimer m_storeTimer; QTimer m_storeTimer;
QTimer m_hibernateTimer;
std::chrono::seconds m_hibernateDetectInterval{300};
std::chrono::time_point<std::chrono::steady_clock> m_hibernatePreviousTime;
void setupPathsUnix();
void setupPathsWindows();
void setupPathsAndroid();
void setupPathsTails();
}; };
#endif //WOWLET_APPCONTEXT_H #endif //WOWLET_APPCONTEXT_H
+126 -50
View File
@@ -12,7 +12,6 @@
<file>assets/images/appicons/128x128.png</file> <file>assets/images/appicons/128x128.png</file>
<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/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>
@@ -29,7 +28,6 @@
<file>assets/images/confirmed.svg</file> <file>assets/images/confirmed.svg</file>
<file>assets/images/connect.svg</file> <file>assets/images/connect.svg</file>
<file>assets/images/copy.png</file> <file>assets/images/copy.png</file>
<file>assets/images/cutexmrfox.png</file>
<file>assets/images/edit.png</file> <file>assets/images/edit.png</file>
<file>assets/images/exchange.png</file> <file>assets/images/exchange.png</file>
<file>assets/images/exchange_white.png</file> <file>assets/images/exchange_white.png</file>
@@ -54,56 +52,133 @@
<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/illiterate_illuminati.png</file>
<file>assets/images/photos/wow1.png</file> <file>assets/images/welcome/wow1.png</file>
<file>assets/images/photos/wow2.png</file> <file>assets/images/welcome/wow2.png</file>
<file>assets/images/photos/wow3.png</file> <file>assets/images/welcome/wow3.png</file>
<file>assets/images/photos/wow4.png</file> <file>assets/images/welcome/wow4.png</file>
<file>assets/images/photos/wow5.png</file> <file>assets/images/welcome/wow5.png</file>
<file>assets/images/photos/wow6.png</file> <file>assets/images/welcome/wow6.png</file>
<file>assets/images/photos/wow7.png</file> <file>assets/images/welcome/wow7.png</file>
<file>assets/images/photos/wow8.png</file> <file>assets/images/welcome/wow8.png</file>
<file>assets/images/photos/wow9.png</file> <file>assets/images/welcome/wow9.png</file>
<file>assets/images/photos/wow10.png</file> <file>assets/images/welcome/wow10.png</file>
<file>assets/images/photos/wow11.png</file> <file>assets/images/welcome/wow11.png</file>
<file>assets/images/photos/wow12.png</file> <file>assets/images/welcome/wow12.png</file>
<file>assets/images/photos/wow13.png</file> <file>assets/images/welcome/wow13.png</file>
<file>assets/images/photos/wow14.png</file> <file>assets/images/welcome/wow14.png</file>
<file>assets/images/photos/wow15.png</file> <file>assets/images/welcome/wow15.png</file>
<file>assets/images/photos/wow16.png</file> <file>assets/images/welcome/wow16.png</file>
<file>assets/images/photos/wow17.png</file> <file>assets/images/welcome/wow17.png</file>
<file>assets/images/photos/wow18.png</file> <file>assets/images/welcome/wow18.png</file>
<file>assets/images/photos/wow19.png</file> <file>assets/images/welcome/wow19.png</file>
<file>assets/images/photos/wow20.png</file> <file>assets/images/welcome/wow20.png</file>
<file>assets/images/photos/wow21.png</file> <file>assets/images/welcome/wow21.png</file>
<file>assets/images/photos/wow22.png</file> <file>assets/images/welcome/wow22.png</file>
<file>assets/images/photos/wow23.png</file> <file>assets/images/welcome/wow23.png</file>
<file>assets/images/photos/wow24.png</file> <file>assets/images/welcome/wow24.png</file>
<file>assets/images/photos/wow25.png</file> <file>assets/images/welcome/wow25.png</file>
<file>assets/images/photos/wow26.png</file> <file>assets/images/welcome/wow26.png</file>
<file>assets/images/photos/wow27.png</file> <file>assets/images/welcome/wow27.png</file>
<file>assets/images/photos/wow28.png</file> <file>assets/images/welcome/wow28.png</file>
<file>assets/images/photos/wow29.png</file> <file>assets/images/welcome/wow29.png</file>
<file>assets/images/photos/wow30.png</file> <file>assets/images/welcome/wow30.png</file>
<file>assets/images/photos/wow31.png</file> <file>assets/images/welcome/wow31.png</file>
<file>assets/images/photos/wow32.png</file> <file>assets/images/welcome/wow32.png</file>
<file>assets/images/photos/wow33.png</file> <file>assets/images/welcome/wow33.png</file>
<file>assets/images/photos/wow34.png</file> <file>assets/images/welcome/wow34.png</file>
<file>assets/images/photos/wow35.png</file> <file>assets/images/welcome/wow35.png</file>
<file>assets/images/photos/wow36.png</file> <file>assets/images/welcome/wow36.png</file>
<file>assets/images/photos/wow37.png</file> <file>assets/images/welcome/wow37.png</file>
<file>assets/images/photos/wow38.png</file> <file>assets/images/welcome/wow38.png</file>
<file>assets/images/photos/wow39.png</file> <file>assets/images/welcome/wow39.png</file>
<file>assets/images/photos/wow40.png</file> <file>assets/images/welcome/wow40.png</file>
<file>assets/images/photos/wow41.png</file> <file>assets/images/welcome/wow41.png</file>
<file>assets/images/photos/wow42.png</file> <file>assets/images/welcome/wow42.png</file>
<file>assets/images/photos/wow43.png</file> <file>assets/images/welcome/wow43.png</file>
<file>assets/images/photos/wow44.png</file> <file>assets/images/welcome/wow44.png</file>
<file>assets/images/photos/wow45.png</file> <file>assets/images/welcome/wow45.png</file>
<file>assets/images/photos/wow46.png</file> <file>assets/images/welcome/wow46.png</file>
<file>assets/images/photos/wow47.png</file> <file>assets/images/welcome/wow47.png</file>
<file>assets/images/welcome/wow48.png</file>
<file>assets/images/welcome/wow49.png</file>
<file>assets/images/welcome/wow50.png</file>
<file>assets/images/welcome/wow51.png</file>
<file>assets/images/welcome/wow52.png</file>
<file>assets/images/welcome/wow53.png</file>
<file>assets/images/welcome/wow54.png</file>
<file>assets/images/welcome/wow55.png</file>
<file>assets/images/welcome/wow56.png</file>
<file>assets/images/welcome/wow57.png</file>
<file>assets/images/welcome/wow58.png</file>
<file>assets/images/welcome/wow59.png</file>
<file>assets/images/welcome/wow60.png</file>
<file>assets/images/welcome/wow61.png</file>
<file>assets/images/welcome/wow62.png</file>
<file>assets/images/welcome/wow63.png</file>
<file>assets/images/welcome/wow64.png</file>
<file>assets/images/welcome/wow65.png</file>
<file>assets/images/welcome/wow66.png</file>
<file>assets/images/welcome/wow67.png</file>
<file>assets/images/welcome/wow68.png</file>
<file>assets/images/welcome/wow69.png</file>
<file>assets/images/welcome/wow70.png</file>
<file>assets/images/welcome/wow71.png</file>
<file>assets/images/welcome/wow72.png</file>
<file>assets/images/welcome/wow73.png</file>
<file>assets/images/welcome/wow74.png</file>
<file>assets/images/welcome/wow75.png</file>
<file>assets/images/welcome/wow76.png</file>
<file>assets/images/welcome/wow77.png</file>
<file>assets/images/welcome/wow78.png</file>
<file>assets/images/welcome/wow79.png</file>
<file>assets/images/welcome/wow80.png</file>
<file>assets/images/welcome/wow81.png</file>
<file>assets/images/welcome/wow82.png</file>
<file>assets/images/welcome/wow83.png</file>
<file>assets/images/welcome/wow84.png</file>
<file>assets/images/welcome/wow85.png</file>
<file>assets/images/welcome/wow86.png</file>
<file>assets/images/welcome/wow87.png</file>
<file>assets/images/welcome/wow88.png</file>
<file>assets/images/welcome/wow89.png</file>
<file>assets/images/welcome/wow90.png</file>
<file>assets/images/welcome/wow91.png</file>
<file>assets/images/welcome/wow92.png</file>
<file>assets/images/welcome/wow93.png</file>
<file>assets/images/welcome/wow94.png</file>
<file>assets/images/welcome/wow95.png</file>
<file>assets/images/welcome/wow96.png</file>
<file>assets/images/welcome/wow97.png</file>
<file>assets/images/welcome/wow98.png</file>
<file>assets/images/welcome/wow99.png</file>
<file>assets/images/welcome/wow100.png</file>
<file>assets/images/welcome/wow101.png</file>
<file>assets/images/welcome/wow102.png</file>
<file>assets/images/welcome/wow103.png</file>
<file>assets/images/welcome/wow104.png</file>
<file>assets/images/welcome/wow105.png</file>
<file>assets/images/welcome/wow106.png</file>
<file>assets/images/welcome/wow107.png</file>
<file>assets/images/welcome/wow108.png</file>
<file>assets/images/welcome/wow109.png</file>
<file>assets/images/welcome/wow110.png</file>
<file>assets/images/welcome/wow111.png</file>
<file>assets/images/welcome/wow112.png</file>
<file>assets/images/welcome/wow113.png</file>
<file>assets/images/welcome/wow114.png</file>
<file>assets/images/welcome/wow115.png</file>
<file>assets/images/welcome/wow116.png</file>
<file>assets/images/welcome/wow117.png</file>
<file>assets/images/welcome/wow118.png</file>
<file>assets/images/welcome/wow119.png</file>
<file>assets/images/welcome/wow120.png</file>
<file>assets/images/welcome/wow121.png</file>
<file>assets/images/welcome/wow122.png</file>
<file>assets/images/welcome/wow123.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/credits.jpg</file>
<file>assets/images/qrcode.png</file> <file>assets/images/qrcode.png</file>
<file>assets/images/qrcode_white.png</file> <file>assets/images/qrcode_white.png</file>
<file>assets/images/revealer_c.png</file> <file>assets/images/revealer_c.png</file>
@@ -111,6 +186,7 @@
<file>assets/images/seal.png</file> <file>assets/images/seal.png</file>
<file>assets/images/seed.png</file> <file>assets/images/seed.png</file>
<file>assets/images/speaker.png</file> <file>assets/images/speaker.png</file>
<file>assets/images/pls_update.jpg</file>
<file>assets/images/status_connected_fork.png</file> <file>assets/images/status_connected_fork.png</file>
<file>assets/images/status_connected.png</file> <file>assets/images/status_connected.png</file>
<file>assets/images/status_connected_proxy_fork.png</file> <file>assets/images/status_connected_proxy_fork.png</file>
Binary file not shown.
Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Before

Width:  |  Height:  |  Size: 706 KiB

After

Width:  |  Height:  |  Size: 706 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 40 KiB

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 87 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 70 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 66 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Before

Width:  |  Height:  |  Size: 109 KiB

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 112 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 114 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Before

Width:  |  Height:  |  Size: 110 KiB

After

Width:  |  Height:  |  Size: 110 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 102 KiB

Before

Width:  |  Height:  |  Size: 96 KiB

After

Width:  |  Height:  |  Size: 96 KiB

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Before

Width:  |  Height:  |  Size: 93 KiB

After

Width:  |  Height:  |  Size: 93 KiB

Before

Width:  |  Height:  |  Size: 97 KiB

After

Width:  |  Height:  |  Size: 97 KiB

Before

Width:  |  Height:  |  Size: 63 KiB

After

Width:  |  Height:  |  Size: 63 KiB

Before

Width:  |  Height:  |  Size: 38 KiB

After

Width:  |  Height:  |  Size: 38 KiB

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 53 KiB

Before

Width:  |  Height:  |  Size: 116 KiB

After

Width:  |  Height:  |  Size: 116 KiB

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Before

Width:  |  Height:  |  Size: 83 KiB

After

Width:  |  Height:  |  Size: 83 KiB

Before

Width:  |  Height:  |  Size: 117 KiB

After

Width:  |  Height:  |  Size: 117 KiB

Before

Width:  |  Height:  |  Size: 85 KiB

After

Width:  |  Height:  |  Size: 85 KiB

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 70 KiB

Before

Width:  |  Height:  |  Size: 98 KiB

After

Width:  |  Height:  |  Size: 98 KiB

Before

Width:  |  Height:  |  Size: 113 KiB

After

Width:  |  Height:  |  Size: 113 KiB

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Before

Width:  |  Height:  |  Size: 141 KiB

After

Width:  |  Height:  |  Size: 141 KiB

Before

Width:  |  Height:  |  Size: 110 KiB

After

Width:  |  Height:  |  Size: 110 KiB

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Before

Width:  |  Height:  |  Size: 2.4 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Before

Width:  |  Height:  |  Size: 91 KiB

After

Width:  |  Height:  |  Size: 91 KiB

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 69 KiB

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Before

Width:  |  Height:  |  Size: 49 KiB

After

Width:  |  Height:  |  Size: 49 KiB

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 115 KiB

Before

Width:  |  Height:  |  Size: 62 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Before

Width:  |  Height:  |  Size: 102 KiB

After

Width:  |  Height:  |  Size: 102 KiB

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 90 KiB

Before

Width:  |  Height:  |  Size: 54 KiB

After

Width:  |  Height:  |  Size: 54 KiB

Before

Width:  |  Height:  |  Size: 121 KiB

After

Width:  |  Height:  |  Size: 121 KiB

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Some files were not shown because too many files have changed in this diff Show More