mirror of
https://github.com/monero-project/monero-gui.git
synced 2026-04-02 07:47:26 -04:00
Compare commits
67 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
49c3e498c7 | ||
|
|
e2a8efca86 | ||
|
|
541c895d71 | ||
|
|
4eb77491eb | ||
|
|
57f6ae2761 | ||
|
|
e4bd8c4708 | ||
|
|
eb25d4cafa | ||
|
|
edb42af463 | ||
|
|
b74815e8b3 | ||
|
|
8d68c12120 | ||
|
|
e5606fcf73 | ||
|
|
fe363d4dd8 | ||
|
|
475d4311e0 | ||
|
|
c3eb3c6f51 | ||
|
|
a255c5dc42 | ||
|
|
88c0237cad | ||
|
|
4bb527b200 | ||
|
|
bbd4a0055b | ||
|
|
dbc7c69a2d | ||
|
|
98ed779e18 | ||
|
|
d3559a40ba | ||
|
|
80e209df42 | ||
|
|
765982c7a1 | ||
|
|
172e346612 | ||
|
|
2ddb550591 | ||
|
|
7182eb6b93 | ||
|
|
077ab3d58e | ||
|
|
053a6d4388 | ||
|
|
c5e0680bdf | ||
|
|
dfe7f302d4 | ||
|
|
2f3e9abe14 | ||
|
|
e984c28faf | ||
|
|
7db5136143 | ||
|
|
8b78bb08ed | ||
|
|
9384dc9d7d | ||
|
|
36e4312a05 | ||
|
|
e50c830b10 | ||
|
|
c3b984e1c2 | ||
|
|
ef406624b9 | ||
|
|
b13e2012d8 | ||
|
|
d7a3a61bf4 | ||
|
|
c957058860 | ||
|
|
1cce66f866 | ||
|
|
b9eea25e52 | ||
|
|
39522ab549 | ||
|
|
aa5b20ef62 | ||
|
|
2ae9d3f6b6 | ||
|
|
061a256df7 | ||
|
|
7c6138eae1 | ||
|
|
e34c83d7aa | ||
|
|
c28587931f | ||
|
|
1de4a65f90 | ||
|
|
c31cdaad9e | ||
|
|
440012b454 | ||
|
|
4bd21db202 | ||
|
|
25807060a7 | ||
|
|
ff9558db09 | ||
|
|
f3f1dfc020 | ||
|
|
0764fbad33 | ||
|
|
792130a7e6 | ||
|
|
3f0edae3a7 | ||
|
|
76416d9133 | ||
|
|
5ee04841f0 | ||
|
|
1d09876323 | ||
|
|
dce481a3d9 | ||
|
|
28c698375c | ||
|
|
cabbbaf172 |
107
.github/qt_helper.py
vendored
107
.github/qt_helper.py
vendored
@@ -1,107 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
import defusedxml.ElementTree
|
||||
import hashlib
|
||||
import mmap
|
||||
import pathlib
|
||||
import subprocess
|
||||
import sys
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
import xml.etree.ElementTree as ET
|
||||
|
||||
MAX_TRIES = 32
|
||||
|
||||
def fetch_links_to_archives(os, target, major, minor, patch, toolchain):
|
||||
MAX_XML_SIZE = 1024 * 1024 * 1024
|
||||
MIRROR = 'download.qt.io'
|
||||
base_url = f'https://{MIRROR}/online/qtsdkrepository/{os}/{target}/qt{major}_{major}{minor}{patch}'
|
||||
url = f'{base_url}/Updates.xml'
|
||||
for _ in range(MAX_TRIES):
|
||||
try:
|
||||
resp = urllib.request.urlopen(url).read(MAX_XML_SIZE)
|
||||
update_xml = defusedxml.ElementTree.fromstring(resp)
|
||||
break
|
||||
except KeyboardInterrupt:
|
||||
raise
|
||||
except BaseException as e:
|
||||
print('error', e, flush=True)
|
||||
else:
|
||||
return
|
||||
for pkg in update_xml.findall('./PackageUpdate'):
|
||||
name = pkg.find('.//Name')
|
||||
if name == None:
|
||||
continue
|
||||
if name.text != f'qt.qt{major}.{major}{minor}{patch}.{toolchain}':
|
||||
continue
|
||||
version = pkg.find('.//Version')
|
||||
if version == None:
|
||||
continue
|
||||
archives = pkg.find('.//DownloadableArchives')
|
||||
if archives == None or archives.text == None:
|
||||
continue
|
||||
for archive in archives.text.split(', '):
|
||||
url = f'{base_url}/{name.text}/{version.text}{archive}'
|
||||
file_name = pathlib.Path(urllib.parse.urlparse(url).path).name
|
||||
yield {'name': file_name, 'url': url}
|
||||
|
||||
def download(links):
|
||||
metalink = ET.Element('metalink', xmlns = "urn:ietf:params:xml:ns:metalink")
|
||||
for link in links:
|
||||
file = ET.SubElement(metalink, 'file', name = link['name'])
|
||||
ET.SubElement(file, 'url').text = link['url']
|
||||
data = ET.tostring(metalink, encoding='UTF-8', xml_declaration=True)
|
||||
for _ in range(MAX_TRIES):
|
||||
with subprocess.Popen([
|
||||
'aria2c',
|
||||
'--connect-timeout=8',
|
||||
'--console-log-level=warn',
|
||||
'--continue',
|
||||
'--follow-metalink=mem',
|
||||
'--max-concurrent-downloads=100',
|
||||
'--max-connection-per-server=16',
|
||||
'--max-file-not-found=100',
|
||||
'--max-tries=100',
|
||||
'--min-split-size=1MB',
|
||||
'--retry-wait=1',
|
||||
'--split=100',
|
||||
'--summary-interval=0',
|
||||
'--timeout=8',
|
||||
'--user-agent=',
|
||||
'--metalink-file=-',
|
||||
], stdin=subprocess.PIPE) as aria:
|
||||
aria.communicate(data)
|
||||
if aria.wait() == 0:
|
||||
return True
|
||||
return False
|
||||
|
||||
def calc_hash_sum(files):
|
||||
obj = hashlib.new('sha256')
|
||||
for path in files:
|
||||
with open(path, 'rb') as f:
|
||||
with mmap.mmap(f.fileno(), 0, mmap.MAP_SHARED, mmap.PROT_READ) as m:
|
||||
file_hash = hashlib.new('sha256', m).digest()
|
||||
obj.update(file_hash)
|
||||
return obj.digest().hex()
|
||||
|
||||
def extract_archives(files, out='.', targets=[]):
|
||||
for path in files:
|
||||
if subprocess.Popen(['7z', 'x', '-bd', '-y', '-aoa', f'-o{out}', path] + targets,
|
||||
stdout=subprocess.DEVNULL,
|
||||
).wait() != 0:
|
||||
return False
|
||||
return True
|
||||
|
||||
def main():
|
||||
os, target, version, toolchain, expect = sys.argv[1:]
|
||||
major, minor, patch = version.split('.')
|
||||
links = [*fetch_links_to_archives(os, target, major, minor, patch, toolchain)]
|
||||
print(*[l['url'].encode() for l in links], sep='\n', flush=True)
|
||||
assert download(links)
|
||||
result = calc_hash_sum([l['name'] for l in links])
|
||||
print('result', result, 'expect', expect, flush=True)
|
||||
assert result == expect
|
||||
assert extract_archives([l['name'] for l in links], '.', ['{}.{}.{}'.format(major, minor, patch)])
|
||||
[pathlib.Path(l['name']).unlink() for l in links]
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
61
.github/workflows/build.yml
vendored
61
.github/workflows/build.yml
vendored
@@ -5,6 +5,8 @@ on: [push, pull_request]
|
||||
env:
|
||||
FREE_DISKSPACE: |
|
||||
sudo rm -rf /usr/local/.ghcup /usr/share/dotnet /usr/share/swift /usr/share/miniconda
|
||||
QT_TAG: v5.15.17-lts-lgpl
|
||||
QT_PREFIX: ${{ github.workspace }}/qt-install
|
||||
|
||||
jobs:
|
||||
build-macos:
|
||||
@@ -57,6 +59,10 @@ jobs:
|
||||
with:
|
||||
update: true
|
||||
install: mingw-w64-x86_64-toolchain make mingw-w64-x86_64-pcre mingw-w64-x86_64-cmake mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-zeromq mingw-w64-x86_64-libsodium mingw-w64-x86_64-hidapi mingw-w64-x86_64-protobuf-c mingw-w64-x86_64-libusb mingw-w64-x86_64-unbound git mingw-w64-x86_64-qt5 mingw-w64-x86_64-libgcrypt mingw-w64-x86_64-angleproject
|
||||
- name: add qmake.exe and windeployqt.exe
|
||||
run: |
|
||||
cp -f "$MSYSTEM_PREFIX/bin/qmake-qt5.exe" "$MSYSTEM_PREFIX/bin/qmake.exe"
|
||||
cp -f "$MSYSTEM_PREFIX/bin/windeployqt-qt5.exe" "$MSYSTEM_PREFIX/bin/windeployqt.exe"
|
||||
- name: build
|
||||
run: DEV_MODE=ON make release-win64 -j2
|
||||
- name: deploy
|
||||
@@ -66,25 +72,35 @@ jobs:
|
||||
run: build/release/bin/monero-wallet-gui --test-qml
|
||||
|
||||
macos-bundle:
|
||||
runs-on: macos-13
|
||||
runs-on: macos-15
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
with:
|
||||
submodules: recursive
|
||||
- name: install dependencies
|
||||
run: HOMEBREW_NO_AUTO_UPDATE=1 brew install boost hidapi openssl zmq libpgm miniupnpc expat libunwind-headers protobuf pkg-config pyenv p7zip aria2
|
||||
- name: install dependencies
|
||||
run: HOMEBREW_NO_AUTO_UPDATE=1 brew install boost hidapi openssl zmq libpgm miniupnpc expat libunwind-headers protobuf pkg-config
|
||||
- name: clone qt repo
|
||||
run: git clone -b "${QT_TAG}" --recursive --depth 1 --shallow-submodules https://github.com/qt/qt5
|
||||
- name: build qt from source
|
||||
run: |
|
||||
pyenv install 3.12.0
|
||||
pip install defusedxml
|
||||
- name: download qt
|
||||
run: python monero-gui/.github/qt_helper.py mac_x64 desktop 5.15.2 clang_64 c384008156fe63cc183bade0316828c598ff3e5074397c0c9ccc588d6cdc5aca
|
||||
working-directory: ../
|
||||
- name: build
|
||||
cd qt5
|
||||
mkdir build && cd build
|
||||
../configure -prefix "${QT_PREFIX}" -opensource -confirm-license -release -nomake examples -nomake tests -no-rpath -skip qtwebengine -skip qt3d -skip qtandroidextras -skip qtcanvas3d -skip qtcharts -skip qtconnectivity -skip qtdatavis3d -skip qtdoc -skip qtgamepad -skip qtlocation -skip qtnetworkauth -skip qtpurchasing -skip qtscript -skip qtscxml -skip qtsensors -skip qtserialbus -skip qtserialport -skip qtspeech -skip qttools -skip qtvirtualkeyboard -skip qtwayland -skip qtwebchannel -skip qtwebsockets -skip qtwebview -skip qtwinextras -skip qtx11extras -skip gamepad -skip serialbus -skip location -skip webengine
|
||||
make -j"$(sysctl -n hw.ncpu)"
|
||||
make install
|
||||
cd ../qttools/src/linguist/lrelease
|
||||
../../../../build/qtbase/bin/qmake
|
||||
make -j"$(sysctl -n hw.ncpu)"
|
||||
make install
|
||||
cd ../../../../qttools/src/macdeployqt/macdeployqt/
|
||||
../../../../build/qtbase/bin/qmake
|
||||
make -j"$(sysctl -n hw.ncpu)"
|
||||
make install
|
||||
- name: build monero-gui
|
||||
run: |
|
||||
mkdir build && cd build
|
||||
cmake -D CMAKE_BUILD_TYPE=Release -D ARCH=default -D CMAKE_PREFIX_PATH=/Users/runner/work/monero-gui/5.15.2/clang_64 ..
|
||||
make
|
||||
cmake -D CMAKE_BUILD_TYPE=Release -D ARCH=default -D CMAKE_PREFIX_PATH="${QT_PREFIX}" ..
|
||||
make -j"$(sysctl -n hw.ncpu)"
|
||||
- name: deploy
|
||||
run: make deploy
|
||||
working-directory: build
|
||||
@@ -104,13 +120,6 @@ jobs:
|
||||
- uses: actions/checkout@v1
|
||||
with:
|
||||
submodules: recursive
|
||||
- uses: satackey/action-docker-layer-caching@v0.0.11
|
||||
if: "!startsWith(github.ref, 'refs/tags/v')"
|
||||
continue-on-error: true
|
||||
with:
|
||||
key: docker-linux-static-{hash}
|
||||
restore-keys: |
|
||||
docker-linux-static-
|
||||
- name: install dependencies
|
||||
run: sudo apt -y install xvfb libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xkb1 libxcb-shape0 libxkbcommon-x11-0
|
||||
- name: free up diskspace
|
||||
@@ -136,13 +145,6 @@ jobs:
|
||||
- uses: actions/checkout@v1
|
||||
with:
|
||||
submodules: recursive
|
||||
- uses: satackey/action-docker-layer-caching@v0.0.11
|
||||
if: "!startsWith(github.ref, 'refs/tags/v')"
|
||||
continue-on-error: true
|
||||
with:
|
||||
key: docker-windows-static-{hash}
|
||||
restore-keys: |
|
||||
docker-windows-static-
|
||||
- name: free up diskspace
|
||||
run: ${{env.FREE_DISKSPACE}}
|
||||
- name: prepare build environment
|
||||
@@ -164,21 +166,12 @@ jobs:
|
||||
- uses: actions/checkout@v1
|
||||
with:
|
||||
submodules: recursive
|
||||
- uses: satackey/action-docker-layer-caching@v0.0.11
|
||||
if: "!startsWith(github.ref, 'refs/tags/v')"
|
||||
continue-on-error: true
|
||||
with:
|
||||
key: docker-android-static-{hash}
|
||||
restore-keys: |
|
||||
docker-android-static-
|
||||
- name: free up diskspace
|
||||
run: ${{env.FREE_DISKSPACE}}
|
||||
- name: prepare build environment
|
||||
run: docker build --tag monero:build-env-android --build-arg THREADS=3 --file Dockerfile.android .
|
||||
- name: build
|
||||
run: docker run --rm -v /home/runner/work/monero-gui/monero-gui:/monero-gui -e THREADS=3 monero:build-env-android
|
||||
- name: Remove obsolete docker layers
|
||||
run: docker images -a | grep none | awk '{ print $3; }' | xargs docker rmi || true
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
|
||||
@@ -5,7 +5,7 @@ message(STATUS "Initiating compile using CMake ${CMAKE_VERSION}")
|
||||
|
||||
set(VERSION_MAJOR "18")
|
||||
set(VERSION_MINOR "4")
|
||||
set(VERSION_REVISION "2")
|
||||
set(VERSION_REVISION "7")
|
||||
set(VERSION "0.${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}")
|
||||
|
||||
option(STATIC "Link libraries statically, requires static Qt")
|
||||
@@ -150,6 +150,8 @@ if(UNIX)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
set(QT_MIN_VERSION "5.12")
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
|
||||
# TODO: drop this once we switch to Qt 5.14+
|
||||
@@ -158,14 +160,13 @@ if(Qt5QmlModels_PKG_CONFIG_FOUND)
|
||||
list(APPEND QT5_LIBRARIES Qt5QmlModels)
|
||||
endif()
|
||||
|
||||
# TODO: drop this once we switch to Qt 5.12+
|
||||
find_package(Qt5XmlPatterns QUIET)
|
||||
if(Qt5XmlPatterns_FOUND)
|
||||
list(APPEND QT5_LIBRARIES Qt5XmlPatterns)
|
||||
endif()
|
||||
|
||||
foreach(QT5_MODULE ${QT5_LIBRARIES})
|
||||
find_package(${QT5_MODULE} REQUIRED)
|
||||
find_package(${QT5_MODULE} ${QT_MIN_VERSION} REQUIRED)
|
||||
include_directories(${${QT5_MODULE}_INCLUDE_DIRS})
|
||||
endforeach()
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ ARG ANDROID_NDK_REVISION=23c
|
||||
ARG ANDROID_NDK_HASH=e5053c126a47e84726d9f7173a04686a71f9a67a
|
||||
ARG ANDROID_SDK_REVISION=7302050_latest
|
||||
ARG ANDROID_SDK_HASH=7a00faadc0864f78edd8f4908a629a46d622375cbe2e5814e82934aebecdb622
|
||||
ARG QT_VERSION=v5.15.16-lts-lgpl
|
||||
ARG QT_VERSION=v5.15.18-lts-lgpl
|
||||
|
||||
WORKDIR /opt/android
|
||||
ENV WORKDIR=/opt/android
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
FROM ubuntu:18.04
|
||||
|
||||
ARG THREADS=1
|
||||
ARG QT_VERSION=v5.15.16-lts-lgpl
|
||||
ARG QT_VERSION=v5.15.18-lts-lgpl
|
||||
|
||||
ENV CFLAGS="-fPIC"
|
||||
ENV CPPFLAGS="-fPIC"
|
||||
@@ -233,9 +233,9 @@ RUN git clone -b v1.0.26 --depth 1 https://github.com/libusb/libusb && \
|
||||
make -j$THREADS install && \
|
||||
rm -rf $(pwd)
|
||||
|
||||
RUN git clone -b hidapi-0.13.1 --depth 1 https://github.com/libusb/hidapi && \
|
||||
RUN git clone -b hidapi-0.15.0 --depth 1 https://github.com/libusb/hidapi && \
|
||||
cd hidapi && \
|
||||
git reset --hard 4ebce6b5059b086d05ca7e091ce04a5fd08ac3ac && \
|
||||
git reset --hard d6b2a974608dec3b76fb1e36c189f22b9cf3650c && \
|
||||
./bootstrap && \
|
||||
./configure --disable-shared --enable-static && \
|
||||
make -j$THREADS && \
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
FROM ubuntu:20.04
|
||||
|
||||
ARG THREADS=1
|
||||
ARG QT_VERSION=v5.15.16-lts-lgpl
|
||||
ARG QT_VERSION=v5.15.18-lts-lgpl
|
||||
ENV SOURCE_DATE_EPOCH=1397818193
|
||||
|
||||
RUN apt update && \
|
||||
@@ -12,9 +12,9 @@ RUN apt update && \
|
||||
RUN update-alternatives --set x86_64-w64-mingw32-g++ $(which x86_64-w64-mingw32-g++-posix) && \
|
||||
update-alternatives --set x86_64-w64-mingw32-gcc $(which x86_64-w64-mingw32-gcc-posix)
|
||||
|
||||
RUN git clone -b v0.18.4.2 --depth 1 https://github.com/monero-project/monero && \
|
||||
RUN git clone -b v0.18.4.6 --depth 1 https://github.com/monero-project/monero && \
|
||||
cd monero && \
|
||||
git reset --hard d87edf57fcc4bc2279ad9d8a1db093805e6becd7 && \
|
||||
git reset --hard dbcc7d212c094bd1a45f7291dbb99a4b4627a96d && \
|
||||
cp -a contrib/depends / && \
|
||||
cd .. && \
|
||||
rm -rf monero
|
||||
|
||||
@@ -94,7 +94,7 @@ Packaging for your favorite distribution would be a welcome contribution!
|
||||
|
||||
## Compiling the Monero GUI from source
|
||||
|
||||
*Note*: Qt 5.9.7 is the minimum version required to build the GUI.
|
||||
*Note*: Qt 5.12 is the minimum version required to build the GUI.
|
||||
|
||||
*Note*: Official GUI releases use monero-wallet-gui from this process alongside the supporting binaries (monerod, etc) from the [CLI deterministic builds](https://github.com/monero-project/monero/blob/release-v0.18/contrib/gitian/README.md).
|
||||
|
||||
@@ -105,7 +105,7 @@ Packaging for your favorite distribution would be a welcome contribution!
|
||||
```
|
||||
git clone --branch master --recursive https://github.com/monero-project/monero-gui.git
|
||||
```
|
||||
\* `master` - replace with the desired version tag (e.g. `v0.18.4.2`) to build the release binaries.
|
||||
\* `master` - replace with the desired version tag (e.g. `v0.18.4.7`) to build the release binaries.
|
||||
3. Prepare build environment
|
||||
```
|
||||
cd monero-gui
|
||||
@@ -128,7 +128,7 @@ Packaging for your favorite distribution would be a welcome contribution!
|
||||
```
|
||||
git clone --branch master --recursive https://github.com/monero-project/monero-gui.git
|
||||
```
|
||||
\* `master` - replace with the desired version tag (e.g. `v0.18.4.2`) to build the release binaries.
|
||||
\* `master` - replace with the desired version tag (e.g. `v0.18.4.7`) to build the release binaries.
|
||||
3. Prepare build environment
|
||||
```
|
||||
cd monero-gui
|
||||
|
||||
@@ -26,16 +26,19 @@ if(APPLE OR (WIN32 AND NOT STATIC))
|
||||
)
|
||||
endif()
|
||||
|
||||
# libbost_filesyste-mt.dylib has a dependency on libboost_atomic-mt.dylib, maydeployqt does not copy it by itself
|
||||
find_package(Boost COMPONENTS atomic)
|
||||
get_target_property(BOOST_ATOMIC_LIB_PATH Boost::atomic LOCATION)
|
||||
if(EXISTS ${BOOST_ATOMIC_LIB_PATH})
|
||||
add_custom_command(TARGET deploy
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy "${BOOST_ATOMIC_LIB_PATH}" "$<TARGET_FILE_DIR:monero-wallet-gui>/../Frameworks/"
|
||||
COMMENT "Copying libboost_atomic-mt.dylib"
|
||||
)
|
||||
endif()
|
||||
# Copy Boost dylibs that macdeployqt doesn't pick up
|
||||
find_package(Boost QUIET COMPONENTS atomic container date_time)
|
||||
set(_boost_extras Boost::atomic Boost::container Boost::date_time)
|
||||
foreach(_tgt IN LISTS _boost_extras)
|
||||
if(TARGET ${_tgt})
|
||||
add_custom_command(TARGET deploy POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy
|
||||
"$<TARGET_FILE:${_tgt}>"
|
||||
"$<TARGET_FILE_DIR:monero-wallet-gui>/../Frameworks/"
|
||||
COMMENT "Copying $<TARGET_FILE_NAME:${_tgt}>"
|
||||
)
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
# Apple Silicon requires all binaries to be codesigned
|
||||
find_program(CODESIGN_EXECUTABLE NAMES codesign)
|
||||
@@ -48,8 +51,12 @@ if(APPLE OR (WIN32 AND NOT STATIC))
|
||||
endif()
|
||||
|
||||
elseif(WIN32)
|
||||
find_program(QMAKE_EXECUTABLE qmake HINTS "${_qt_bin_dir}")
|
||||
find_program(WINDEPLOYQT_EXECUTABLE windeployqt HINTS "${_qt_bin_dir}")
|
||||
add_custom_command(TARGET monero-wallet-gui POST_BUILD
|
||||
if(NOT QMAKE_EXECUTABLE OR NOT WINDEPLOYQT_EXECUTABLE)
|
||||
message(WARNING "Deploy requires qmake.exe and windeployqt.exe (no -qt5 suffix) in ${_qt_bin_dir}")
|
||||
endif()
|
||||
add_custom_command(TARGET deploy POST_BUILD
|
||||
COMMAND "${CMAKE_COMMAND}" -E env PATH="${_qt_bin_dir}" "${WINDEPLOYQT_EXECUTABLE}" "$<TARGET_FILE:monero-wallet-gui>" -no-translations -qmldir="${CMAKE_SOURCE_DIR}"
|
||||
COMMENT "Running windeployqt..."
|
||||
)
|
||||
@@ -96,11 +103,11 @@ if(APPLE OR (WIN32 AND NOT STATIC))
|
||||
libssl-3-x64.dll
|
||||
libcrypto-3-x64.dll
|
||||
#icu
|
||||
libicudt77.dll
|
||||
libicuin77.dll
|
||||
libicuio77.dll
|
||||
libicutu77.dll
|
||||
libicuuc77.dll
|
||||
libicudt78.dll
|
||||
libicuin78.dll
|
||||
libicuio78.dll
|
||||
libicutu78.dll
|
||||
libicuuc78.dll
|
||||
)
|
||||
|
||||
# Boost Regex is header-only since 1.77
|
||||
|
||||
@@ -38,7 +38,7 @@ import "." as MoneroComponents
|
||||
import "effects/" as MoneroEffects
|
||||
import "../js/Utils.js" as Utils
|
||||
|
||||
Item {
|
||||
FocusScope {
|
||||
id: root
|
||||
visible: false
|
||||
|
||||
@@ -65,8 +65,6 @@ Item {
|
||||
capsLockTextLabel.visible = oshelper.isCapsLock();
|
||||
passwordInput1.reset();
|
||||
passwordInput2.reset();
|
||||
if(!appWindow.currentWallet || appWindow.active)
|
||||
passwordInput1.input.forceActiveFocus();
|
||||
root.walletName = walletName ? walletName : ""
|
||||
errorTextLabel.text = errorText ? errorText : "";
|
||||
leftPanel.enabled = false
|
||||
@@ -76,6 +74,7 @@ Item {
|
||||
root.visible = true;
|
||||
appWindow.hideBalanceForced = true;
|
||||
appWindow.updateBalance();
|
||||
Qt.callLater(() => passwordInput1.input.forceActiveFocus())
|
||||
}
|
||||
|
||||
function open(walletName, errorText, okButtonText, okButtonIcon, backgroundSyncOn) {
|
||||
@@ -214,6 +213,7 @@ Item {
|
||||
MoneroComponents.LineEdit {
|
||||
id: passwordInput1
|
||||
password: true
|
||||
input.focus: root.visible && (appWindow.active || Qt.application.state === Qt.ApplicationActive)
|
||||
Layout.topMargin: 6
|
||||
Layout.fillWidth: true
|
||||
KeyNavigation.tab: {
|
||||
|
||||
BIN
images/ledgerFlex.png
Normal file
BIN
images/ledgerFlex.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 56 KiB |
BIN
images/ledgerNanoGen5.png
Normal file
BIN
images/ledgerNanoGen5.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 418 KiB |
@@ -56,7 +56,6 @@ Name: "en"; MessagesFile: "compiler:Default.isl"
|
||||
|
||||
[Dirs]
|
||||
Name: "{app}";
|
||||
Name: "{app}\p2pool"; Permissions: users-full
|
||||
|
||||
[Files]
|
||||
; The use of the flag "ignoreversion" for the following entries leads to the following behaviour:
|
||||
@@ -138,6 +137,7 @@ Type: filesandordirs; Name: "{app}\QtQuick.2"
|
||||
Type: filesandordirs; Name: "{app}\Material"
|
||||
Type: filesandordirs; Name: "{app}\Universal"
|
||||
Type: filesandordirs; Name: "{app}\scenegraph"
|
||||
Type: filesandordirs; Name: "{localappdata}\monero-core\p2pool"
|
||||
Type: filesandordirs; Name: "{app}\p2pool"
|
||||
Type: files; Name: "{app}\D3Dcompiler_47.dll"
|
||||
Type: files; Name: "{app}\libbz2-1.dll"
|
||||
@@ -173,6 +173,8 @@ Type: files; Name: "{app}\ssleay32.dll"
|
||||
Type: files; Name: "{app}\start-high-dpi.bat"
|
||||
Type: files; Name: "{group}\Utilities\x (Check Blockchain Folder).lnk"
|
||||
|
||||
[UninstallDelete]
|
||||
Type: filesandordirs; Name: "{localappdata}\monero-core\p2pool"
|
||||
|
||||
[Tasks]
|
||||
Name: desktopicon; Description: "Create a &desktop icon"; GroupDescription: "Additional icons:";
|
||||
|
||||
@@ -53,7 +53,7 @@ function ago(epoch) {
|
||||
// Returns '<delta> [seconds|minutes|hours|days] ago' string given an epoch
|
||||
|
||||
var now = new Date().getTime() / 1000;
|
||||
var delta = now - epoch;
|
||||
var delta = Math.max(now - epoch, 0);
|
||||
|
||||
if(delta < 60)
|
||||
return qsTr("%n second(s) ago", "0", Math.floor(delta))
|
||||
|
||||
14
main.qml
14
main.qml
@@ -94,12 +94,13 @@ ApplicationWindow {
|
||||
readonly property string localDaemonAddress : "localhost:" + getDefaultDaemonRpcPort(persistentSettings.nettype)
|
||||
property string currentDaemonAddress;
|
||||
property int disconnectedEpoch: 0
|
||||
property int estimatedBlockchainSize: persistentSettings.pruneBlockchain ? 100 : 225 // GB
|
||||
property int estimatedBlockchainSize: persistentSettings.pruneBlockchain ? 110 : 270 // GB
|
||||
property alias viewState: rootItem.state
|
||||
property string prevSplashText;
|
||||
property bool splashDisplayedBeforeButtonRequest;
|
||||
property bool themeTransition: false
|
||||
property int backgroundSyncType: Wallet.BackgroundSync_Off;
|
||||
property bool isQuitting: false
|
||||
|
||||
// fiat price conversion
|
||||
property real fiatPrice: 0
|
||||
@@ -282,6 +283,15 @@ ApplicationWindow {
|
||||
persistentSettings.kdfRounds);
|
||||
}
|
||||
|
||||
function gracefulQuit() {
|
||||
if (isQuitting)
|
||||
return;
|
||||
isQuitting = true;
|
||||
closeWallet(function() {
|
||||
Qt.quit();
|
||||
})
|
||||
}
|
||||
|
||||
function closeWallet(callback) {
|
||||
|
||||
// Disconnect all listeners
|
||||
@@ -1737,7 +1747,7 @@ ApplicationWindow {
|
||||
onRejected: console.log("data dir selection canceled")
|
||||
onAccepted: {
|
||||
var dataDir = walletManager.urlToLocalPath(blockchainFileDialog.fileUrl)
|
||||
var validator = daemonManager.validateDataDir(dataDir);
|
||||
var validator = daemonManager.validateDataDir(dataDir, estimatedBlockchainSize);
|
||||
if(validator.valid) {
|
||||
persistentSettings.blockchainDataDir = dataDir;
|
||||
} else {
|
||||
|
||||
2
monero
2
monero
Submodule monero updated: d87edf57fc...dbcc7d212c
2
qml.qrc
2
qml.qrc
@@ -281,7 +281,9 @@
|
||||
<file>images/ledgerNanoS.png</file>
|
||||
<file>images/ledgerNanoSPlus.png</file>
|
||||
<file>images/ledgerNanoX.png</file>
|
||||
<file>images/ledgerNanoGen5.png</file>
|
||||
<file>images/ledgerStax.png</file>
|
||||
<file>images/ledgerFlex.png</file>
|
||||
<file>images/trezor3.png</file>
|
||||
<file>images/trezor5.png</file>
|
||||
<file>images/trezorT.png</file>
|
||||
|
||||
@@ -38,9 +38,6 @@
|
||||
<key>NSSupportsAutomaticGraphicsSwitching</key>
|
||||
<true/>
|
||||
|
||||
<key>NSRequiresAquaSystemAppearance</key>
|
||||
<string>True</string>
|
||||
|
||||
<key>CFBundleURLTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
|
||||
@@ -297,7 +297,7 @@ void DaemonManager::exit()
|
||||
m_app_exit = true;
|
||||
}
|
||||
|
||||
QVariantMap DaemonManager::validateDataDir(const QString &dataDir) const
|
||||
QVariantMap DaemonManager::validateDataDir(const QString &dataDir, const int estimatedBlockchainSize) const
|
||||
{
|
||||
QVariantMap result;
|
||||
bool valid = true;
|
||||
@@ -312,9 +312,8 @@ QVariantMap DaemonManager::validateDataDir(const QString &dataDir) const
|
||||
valid = false;
|
||||
}
|
||||
|
||||
// Make sure there is 75GB storage available
|
||||
storageAvailable = storage.bytesAvailable()/1000/1000/1000;
|
||||
if (storageAvailable < 75) {
|
||||
if (storageAvailable < estimatedBlockchainSize) {
|
||||
valid = false;
|
||||
}
|
||||
} else {
|
||||
@@ -339,7 +338,7 @@ bool DaemonManager::checkLmdbExists(QString datadir) {
|
||||
if (datadir.isEmpty() || datadir.isNull()) {
|
||||
datadir = QString::fromStdString(tools::get_default_data_dir());
|
||||
}
|
||||
return validateDataDir(datadir).value("lmdbExists").value<bool>();
|
||||
return QDir(datadir + "/lmdb").exists();
|
||||
}
|
||||
|
||||
QString DaemonManager::getArgs(const QString &dataDir) {
|
||||
|
||||
@@ -56,7 +56,7 @@ public:
|
||||
// Send daemon command from qml and prints output in console window.
|
||||
Q_INVOKABLE void sendCommandAsync(const QStringList &cmd, NetworkType::Type nettype, const QString &dataDir, const QJSValue& callback) const;
|
||||
Q_INVOKABLE void exit();
|
||||
Q_INVOKABLE QVariantMap validateDataDir(const QString &dataDir) const;
|
||||
Q_INVOKABLE QVariantMap validateDataDir(const QString &dataDir, const int estimatedBlockchainSizeGb) const;
|
||||
Q_INVOKABLE bool checkLmdbExists(QString datadir);
|
||||
Q_INVOKABLE QString getArgs(const QString &dataDir);
|
||||
|
||||
|
||||
@@ -38,6 +38,11 @@ filter::filter(QObject *parent) :
|
||||
}
|
||||
|
||||
bool filter::eventFilter(QObject *obj, QEvent *ev) {
|
||||
if (ev->type() == QEvent::Quit) {
|
||||
emit quitRequested();
|
||||
return true;
|
||||
}
|
||||
|
||||
// macOS sends fileopen signal for incoming uri handlers
|
||||
if (ev->type() == QEvent::FileOpen) {
|
||||
QFileOpenEvent *openEvent = static_cast<QFileOpenEvent *>(ev);
|
||||
|
||||
@@ -44,6 +44,7 @@ protected:
|
||||
bool eventFilter(QObject *obj, QEvent *ev);
|
||||
|
||||
signals:
|
||||
void quitRequested();
|
||||
void sequencePressed(const QVariant &o, const QVariant &seq);
|
||||
void sequenceReleased(const QVariant &o, const QVariant &seq);
|
||||
void mousePressed(const QVariant &o, const QVariant &x, const QVariant &y);
|
||||
|
||||
@@ -562,6 +562,7 @@ Verify update binary using 'shasum'-compatible (SHA256 algo) output signed by tw
|
||||
qCritical() << "QrCodeScanner : something went wrong !";
|
||||
#endif
|
||||
|
||||
QObject::connect(eventFilter, &filter::quitRequested, rootObject, [rootObject]{ QMetaObject::invokeMethod(rootObject, "gracefulQuit", Qt::QueuedConnection); });
|
||||
QObject::connect(eventFilter, SIGNAL(sequencePressed(QVariant,QVariant)), rootObject, SLOT(sequencePressed(QVariant,QVariant)));
|
||||
QObject::connect(eventFilter, SIGNAL(sequenceReleased(QVariant,QVariant)), rootObject, SLOT(sequenceReleased(QVariant,QVariant)));
|
||||
QObject::connect(eventFilter, SIGNAL(mousePressed(QVariant,QVariant,QVariant)), rootObject, SLOT(mousePressed(QVariant,QVariant,QVariant)));
|
||||
|
||||
@@ -43,6 +43,8 @@
|
||||
#include <QFileInfo>
|
||||
#include <QString>
|
||||
#include <QUrl>
|
||||
#include <QByteArray>
|
||||
#include <QRandomGenerator>
|
||||
#ifdef Q_OS_MAC
|
||||
#include "qt/macoshelper.h"
|
||||
#endif
|
||||
@@ -246,6 +248,18 @@ QString OSHelper::temporaryPath() const
|
||||
return QDir::tempPath();
|
||||
}
|
||||
|
||||
QString OSHelper::randomPassword(int numBytes) const
|
||||
{
|
||||
numBytes = qBound(16, numBytes, 128);
|
||||
|
||||
QByteArray buf(numBytes, Qt::Uninitialized);
|
||||
auto *rng = QRandomGenerator::system();
|
||||
for (int i = 0; i < numBytes; ++i)
|
||||
buf[i] = char(rng->generate() & 0xFF);
|
||||
|
||||
return QString::fromLatin1(buf.toBase64(QByteArray::Base64UrlEncoding | QByteArray::OmitTrailingEquals));
|
||||
}
|
||||
|
||||
bool OSHelper::installed() const
|
||||
{
|
||||
#ifdef Q_OS_WIN
|
||||
|
||||
@@ -51,14 +51,15 @@ public:
|
||||
Q_INVOKABLE QString openSaveFileDialog(const QString &title, const QString &folder, const QString &filename) const;
|
||||
Q_INVOKABLE QString temporaryFilename() const;
|
||||
Q_INVOKABLE QString temporaryPath() const;
|
||||
Q_INVOKABLE QString randomPassword(int numBytes = 32) const;
|
||||
Q_INVOKABLE bool removeTemporaryWallet(const QString &walletName) const;
|
||||
Q_INVOKABLE bool isCapsLock() const;
|
||||
Q_INVOKABLE quint8 getNetworkTypeFromFile(const QString &keysPath) const;
|
||||
Q_INVOKABLE void openSeedTemplate() const;
|
||||
bool installed() const;
|
||||
|
||||
static std::pair<quint8, QString> getNetworkTypeAndAddressFromFile(const QString &wallet);
|
||||
private:
|
||||
bool installed() const;
|
||||
|
||||
signals:
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include "P2PoolManager.h"
|
||||
#include "net/http_client.h"
|
||||
#include "common/util.h"
|
||||
#include "main/oshelper.h"
|
||||
#include "qt/utils.h"
|
||||
#include <QElapsedTimer>
|
||||
#include <QFile>
|
||||
@@ -41,6 +42,7 @@
|
||||
#include <QApplication>
|
||||
#include <QProcess>
|
||||
#include <QMap>
|
||||
#include <QStandardPaths>
|
||||
#include <QCryptographicHash>
|
||||
|
||||
#if defined(Q_OS_MACOS) && defined(__aarch64__) && !defined(Q_OS_MACOS_AARCH64)
|
||||
@@ -53,21 +55,21 @@ void P2PoolManager::download() {
|
||||
QString fileName;
|
||||
QString validHash;
|
||||
#ifdef Q_OS_WIN
|
||||
url = "https://github.com/SChernykh/p2pool/releases/download/v4.9.1/p2pool-v4.9.1-windows-x64.zip";
|
||||
fileName = m_p2poolPath + "/p2pool-v4.9.1-windows-x64.zip";
|
||||
validHash = "97a388ffb445f943db1130169f803cc1f8a4bcc29d35c2843d3dd82ae274faf6";
|
||||
url = "https://github.com/SChernykh/p2pool/releases/download/v4.14/p2pool-v4.14-windows-x64.zip";
|
||||
fileName = m_p2poolPath + "/p2pool-v4.14-windows-x64.zip";
|
||||
validHash = "9c7f0476c441fc0c021fae7d01264b4ec61dc3301ed73b65931555550becf396";
|
||||
#elif defined(Q_OS_LINUX)
|
||||
url = "https://github.com/SChernykh/p2pool/releases/download/v4.9.1/p2pool-v4.9.1-linux-x64.tar.gz";
|
||||
fileName = m_p2poolPath + "/p2pool-v4.9.1-linux-x64.tar.gz";
|
||||
validHash = "4a5369b9e15504d9f4d8d1f8be834fd4cc590cbcea4a3bb9db2703f728f8b8cb";
|
||||
url = "https://github.com/SChernykh/p2pool/releases/download/v4.14/p2pool-v4.14-linux-x64.tar.gz";
|
||||
fileName = m_p2poolPath + "/p2pool-v4.14-linux-x64.tar.gz";
|
||||
validHash = "e64f6f774dc35352b8ae4397ccdb92ce0cc935cdfb100eac58d44e49f8796a01";
|
||||
#elif defined(Q_OS_MACOS_AARCH64)
|
||||
url = "https://github.com/SChernykh/p2pool/releases/download/v4.9.1/p2pool-v4.9.1-macos-aarch64.tar.gz";
|
||||
fileName = m_p2poolPath + "/p2pool-v4.9.1-macos-aarch64.tar.gz";
|
||||
validHash = "20054d77a3e193035e84a011e3c6e864d2e7631a5e3c9e23e73cfe906bb01794";
|
||||
url = "https://github.com/SChernykh/p2pool/releases/download/v4.14/p2pool-v4.14-macos-aarch64.tar.gz";
|
||||
fileName = m_p2poolPath + "/p2pool-v4.14-macos-aarch64.tar.gz";
|
||||
validHash = "7cc780af6115ef8d9d6b7f3c1336f57dab25745b6208b6e97dca8729782e155b";
|
||||
#elif defined(Q_OS_MACOS)
|
||||
url = "https://github.com/SChernykh/p2pool/releases/download/v4.9.1/p2pool-v4.9.1-macos-x64.tar.gz";
|
||||
fileName = m_p2poolPath + "/p2pool-v4.9.1-macos-x64.tar.gz";
|
||||
validHash = "769989d0d299ae6dac513e14eda3269f88ad66e1f73e781a3ad0b2299863db4f";
|
||||
url = "https://github.com/SChernykh/p2pool/releases/download/v4.14/p2pool-v4.14-macos-x64.tar.gz";
|
||||
fileName = m_p2poolPath + "/p2pool-v4.14-macos-x64.tar.gz";
|
||||
validHash = "7df3be2ae15eda4260d2665e4a2c3c7dc2f1dba26a2a643e46a2b1283097a60a";
|
||||
#endif
|
||||
QFile file(fileName);
|
||||
epee::net_utils::http::http_simple_client http_client;
|
||||
@@ -241,9 +243,14 @@ P2PoolManager::P2PoolManager(QObject *parent)
|
||||
started = false;
|
||||
// Platform dependent path to p2pool
|
||||
#ifdef Q_OS_WIN
|
||||
m_p2poolPath = QApplication::applicationDirPath() + "/p2pool";
|
||||
if (OSHelper().installed()) {
|
||||
m_p2poolPath = QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + "/p2pool";
|
||||
} else {
|
||||
m_p2poolPath = QApplication::applicationDirPath() + "/p2pool";
|
||||
}
|
||||
|
||||
if (!QDir(m_p2poolPath).exists()) {
|
||||
QDir().mkdir(m_p2poolPath);
|
||||
QDir().mkpath(m_p2poolPath);
|
||||
}
|
||||
m_p2pool = m_p2poolPath + "/p2pool.exe";
|
||||
#elif defined(Q_OS_UNIX)
|
||||
|
||||
162
src/qt/utils.cpp
162
src/qt/utils.cpp
@@ -29,6 +29,8 @@
|
||||
#include <QtCore>
|
||||
#include <QCoreApplication>
|
||||
#include <QtGlobal>
|
||||
#include <QRandomGenerator>
|
||||
#include <QStringList>
|
||||
|
||||
#include "TailsOS.h"
|
||||
#include "utils.h"
|
||||
@@ -134,83 +136,87 @@ void registerXdgMime(){
|
||||
}
|
||||
#endif
|
||||
|
||||
QString randomUserAgent(){
|
||||
QStringList urand;
|
||||
urand << "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0"
|
||||
<< "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0"
|
||||
<< "Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0"
|
||||
<< "Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20120101 Firefox/29.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/29.0"
|
||||
<< "Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0"
|
||||
<< "Mozilla/5.0 (X11; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:27.3) Gecko/20130101 Firefox/27.3"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:27.0) Gecko/20121011 Firefox/27.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0"
|
||||
<< "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko/20100101 Firefox/25.0"
|
||||
<< "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0"
|
||||
<< "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/23.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/22.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:22.0) Gecko/20130328 Firefox/22.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20130405 Firefox/22.0"
|
||||
<< "Mozilla/5.0 (Microsoft Windows NT 6.2.9200.0); rv:22.0) Gecko/20130405 Firefox/22.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:21.0.0) Gecko/20121011 Firefox/21.0.0"
|
||||
<< "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20130331 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (X11; Linux i686; rv:21.0) Gecko/20100101 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20130514 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; rv:21.0) Gecko/20130326 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130401 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130331 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130330 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130401 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130328 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130401 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130331 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20100101 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 5.0; rv:21.0) Gecko/20100101 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; Win64; x64;) Gecko/20100101 Firefox/20.0"
|
||||
<< "Mozilla/5.0 (Windows x86; rv:19.0) Gecko/20100101 Firefox/19.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/19.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/18.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0"
|
||||
<< "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0.6"
|
||||
<< "Mozilla/5.0 (X11; Ubuntu; Linux armv7l; rv:17.0) Gecko/20100101 Firefox/17.0"
|
||||
<< "Mozilla/6.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1"
|
||||
<< "Mozilla/5.0 (X11; NetBSD amd64; rv:16.0) Gecko/20121102 Firefox/16.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2"
|
||||
<< "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.16) Gecko/20120427 Firefox/15.0a1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120427 Firefox/15.0a1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:15.0) Gecko/20120910144328 Firefox/15.0.2"
|
||||
<< "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1"
|
||||
<< "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:15.0) Gecko/20121011 Firefox/15.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:14.0) Gecko/20120405 Firefox/14.0a1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20120405 Firefox/14.0a1"
|
||||
<< "Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20120405 Firefox/14.0a1"
|
||||
<< "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1"
|
||||
<< "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1"
|
||||
<< "Mozilla/5.0 (Windows; U; Windows NT 6.1; WOW64; en-US; rv:2.0.4) Gecko/20120718 AskTbAVR-IDW/3.12.5.17700 Firefox/14.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120403211507 Firefox/14.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/ 20120405 Firefox/14.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.0; rv:14.0) Gecko/20100101 Firefox/14.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/13.0.1"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120403211507 Firefox/12.0"
|
||||
<< "Mozilla/5.0 (Windows NT 6.1; de;rv:12.0) Gecko/20120403211507 Firefox/12.0";
|
||||
QString randomUserAgent()
|
||||
{
|
||||
const QStringList userAgents = {
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:40.0) Gecko/20100101 Firefox/40.1",
|
||||
"Mozilla/5.0 (Windows NT 6.3; rv:36.0) Gecko/20100101 Firefox/36.0",
|
||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10; rv:33.0) Gecko/20100101 Firefox/33.0",
|
||||
"Mozilla/5.0 (X11; Linux i586; rv:31.0) Gecko/20100101 Firefox/31.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:31.0) Gecko/20130401 Firefox/31.0",
|
||||
"Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20120101 Firefox/29.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/29.0",
|
||||
"Mozilla/5.0 (X11; OpenBSD amd64; rv:28.0) Gecko/20100101 Firefox/28.0",
|
||||
"Mozilla/5.0 (X11; Linux x86_64; rv:28.0) Gecko/20100101 Firefox/28.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:27.3) Gecko/20130101 Firefox/27.3",
|
||||
"Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:27.0) Gecko/20121011 Firefox/27.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0",
|
||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:25.0) Gecko/20100101 Firefox/25.0",
|
||||
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0",
|
||||
"Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0",
|
||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:24.0) Gecko/20100101 Firefox/24.0",
|
||||
"Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/23.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:23.0) Gecko/20130406 Firefox/23.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:23.0) Gecko/20131011 Firefox/23.0",
|
||||
"Mozilla/5.0 (Windows NT 6.2; rv:22.0) Gecko/20130405 Firefox/22.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:22.0) Gecko/20130328 Firefox/22.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:22.0) Gecko/20130405 Firefox/22.0",
|
||||
"Mozilla/5.0 (Microsoft Windows NT 6.2.9200.0); rv:22.0) Gecko/20130405 Firefox/22.0",
|
||||
"Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1",
|
||||
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/21.0.1",
|
||||
"Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:21.0.0) Gecko/20121011 Firefox/21.0.0",
|
||||
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20130331 Firefox/21.0",
|
||||
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:21.0) Gecko/20100101 Firefox/21.0",
|
||||
"Mozilla/5.0 (X11; Linux i686; rv:21.0) Gecko/20100101 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 6.2; WOW64; rv:21.0) Gecko/20130514 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 6.2; rv:21.0) Gecko/20130326 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130401 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130331 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20130330 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:21.0) Gecko/20100101 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130401 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20130328 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:21.0) Gecko/20100101 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130401 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20130331 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 5.1; rv:21.0) Gecko/20100101 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 5.0; rv:21.0) Gecko/20100101 Firefox/21.0",
|
||||
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:21.0) Gecko/20100101 Firefox/21.0",
|
||||
"Mozilla/5.0 (Windows NT 6.2; Win64; x64;) Gecko/20100101 Firefox/20.0",
|
||||
"Mozilla/5.0 (Windows x86; rv:19.0) Gecko/20100101 Firefox/19.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:6.0) Gecko/20100101 Firefox/19.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/18.0.1",
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:18.0) Gecko/20100101 Firefox/18.0",
|
||||
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:17.0) Gecko/20100101 Firefox/17.0.6",
|
||||
"Mozilla/5.0 (X11; Ubuntu; Linux armv7l; rv:17.0) Gecko/20100101 Firefox/17.0",
|
||||
"Mozilla/6.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1",
|
||||
"Mozilla/5.0 (Windows NT 6.2; WOW64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1",
|
||||
"Mozilla/5.0 (Windows NT 6.2; Win64; x64; rv:16.0.1) Gecko/20121011 Firefox/16.0.1",
|
||||
"Mozilla/5.0 (X11; NetBSD amd64; rv:16.0) Gecko/20121102 Firefox/16.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:15.0) Gecko/20120716 Firefox/15.0a2",
|
||||
"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.16) Gecko/20120427 Firefox/15.0a1",
|
||||
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:15.0) Gecko/20120427 Firefox/15.0a1",
|
||||
"Mozilla/5.0 (Windows NT 6.2; WOW64; rv:15.0) Gecko/20120910144328 Firefox/15.0.2",
|
||||
"Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:15.0) Gecko/20100101 Firefox/15.0.1",
|
||||
"Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:15.0) Gecko/20121011 Firefox/15.0.1",
|
||||
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:14.0) Gecko/20120405 Firefox/14.0a1",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20120405 Firefox/14.0a1",
|
||||
"Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20120405 Firefox/14.0a1",
|
||||
"Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:14.0) Gecko/20100101 Firefox/14.0.1",
|
||||
"Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:14.0) Gecko/20100101 Firefox/14.0.1",
|
||||
"Mozilla/5.0 (Windows; U; Windows NT 6.1; WOW64; en-US; rv:2.0.4) Gecko/20120718 AskTbAVR-IDW/3.12.5.17700 Firefox/14.0.1",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120403211507 Firefox/14.0.1",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/ 20120405 Firefox/14.0.1",
|
||||
"Mozilla/5.0 (Windows NT 6.0; rv:14.0) Gecko/20100101 Firefox/14.0.1",
|
||||
"Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/13.0.1",
|
||||
"Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120403211507 Firefox/12.0",
|
||||
"Mozilla/5.0 (Windows NT 6.1; de;rv:12.0) Gecko/20120403211507 Firefox/12.0"
|
||||
};
|
||||
|
||||
// @TODO: Qt 5.10 - QRandomGenerator
|
||||
int irand = rand() % urand.length();
|
||||
return urand.at(irand);
|
||||
if (userAgents.isEmpty())
|
||||
return {};
|
||||
|
||||
const int idx = QRandomGenerator::global()->bounded(userAgents.size());
|
||||
return userAgents.at(idx);
|
||||
}
|
||||
|
||||
@@ -345,7 +345,7 @@ Rectangle {
|
||||
console.log("Creating temporary wallet", tmp_wallet_filename)
|
||||
var nettype = appWindow.persistentSettings.nettype;
|
||||
var kdfRounds = appWindow.persistentSettings.kdfRounds;
|
||||
var wallet = walletManager.createWallet(tmp_wallet_filename, "", persistentSettings.language_wallet, nettype, kdfRounds)
|
||||
var wallet = walletManager.createWallet(tmp_wallet_filename, oshelper.randomPassword(), persistentSettings.language_wallet, nettype, kdfRounds)
|
||||
|
||||
wizardController.walletOptionsSeed = wallet.seed
|
||||
|
||||
@@ -378,9 +378,6 @@ Rectangle {
|
||||
console.log("Removing temporary wallet: " + wizardController.tmpWalletFilename)
|
||||
oshelper.removeTemporaryWallet(wizardController.tmpWalletFilename)
|
||||
|
||||
// protecting wallet with password
|
||||
wizardController.m_wallet.setPassword(wizardController.walletOptionsPassword);
|
||||
|
||||
// save to persistent settings
|
||||
persistentSettings.account_name = wizardController.walletOptionsName
|
||||
persistentSettings.wallet_path = wizardController.m_wallet.path;
|
||||
@@ -399,6 +396,7 @@ Rectangle {
|
||||
new_wallet_filename = appWindow.accountsDir + new_wallet_filename;
|
||||
}
|
||||
console.log("saving new wallet to", new_wallet_filename);
|
||||
wizardController.m_wallet.setPassword(wizardController.walletOptionsPassword);
|
||||
wizardController.m_wallet.storeAsync(handler, new_wallet_filename);
|
||||
}
|
||||
|
||||
@@ -479,7 +477,7 @@ Rectangle {
|
||||
var deviceName = wizardController.walletOptionsDeviceName;
|
||||
|
||||
connect();
|
||||
walletManager.createWalletFromDeviceAsync(tmpWalletFilename, "", nettype, deviceName, restoreHeight, subaddressLookahead, kdfRounds);
|
||||
walletManager.createWalletFromDeviceAsync(tmpWalletFilename, oshelper.randomPassword(), nettype, deviceName, restoreHeight, subaddressLookahead, kdfRounds);
|
||||
creatingWalletDeviceSplash();
|
||||
}
|
||||
|
||||
|
||||
@@ -55,7 +55,9 @@ Rectangle {
|
||||
ListElement { column1: "Ledger Nano S"; column2: "Ledger";}
|
||||
ListElement { column1: "Ledger Nano S Plus"; column2: "Ledger";}
|
||||
ListElement { column1: "Ledger Nano X"; column2: "Ledger";}
|
||||
ListElement { column1: "Ledger Nano Gen5"; column2: "Ledger";}
|
||||
ListElement { column1: "Ledger Stax"; column2: "Ledger";}
|
||||
ListElement { column1: "Ledger Flex"; column2: "Ledger";}
|
||||
ListElement { column1: "Trezor Model T"; column2: "Trezor";}
|
||||
ListElement { column1: "Trezor Safe 3"; column2: "Trezor";}
|
||||
ListElement { column1: "Trezor Safe 5"; column2: "Trezor";}
|
||||
@@ -180,8 +182,12 @@ Rectangle {
|
||||
return "qrc:///images/ledgerNanoSPlus.png";
|
||||
} else if (ledgerType == "Ledger Nano X") {
|
||||
return "qrc:///images/ledgerNanoX.png";
|
||||
} else if (ledgerType == "Ledger Nano Gen5") {
|
||||
return "qrc:///images/ledgerNanoGen5.png";
|
||||
} else if (ledgerType == "Ledger Stax") {
|
||||
return "qrc:///images/ledgerStax.png";
|
||||
} else if (ledgerType == "Ledger Flex") {
|
||||
return "qrc:///images/ledgerFlex.png";
|
||||
}
|
||||
}
|
||||
return "";
|
||||
|
||||
Reference in New Issue
Block a user