Compare commits
196 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 | ||
|
|
c89f8eca91 | ||
|
|
16da754c79 | ||
|
|
346d962837 | ||
|
|
9e37b219b9 | ||
|
|
b8b556f289 | ||
|
|
881206db99 | ||
|
|
f8ad672c44 | ||
|
|
8a85221f95 | ||
|
|
5332495c24 | ||
|
|
614b81fd23 | ||
|
|
10a184db8b | ||
|
|
7c4ddf7bc4 | ||
|
|
0149f946b9 | ||
|
|
e3620f39dc | ||
|
|
5592ff5f28 | ||
|
|
fcec4187b6 | ||
|
|
fdfb9634d3 | ||
|
|
1afc8e69c6 | ||
|
|
fb3b4e44da | ||
|
|
5a61c7c941 | ||
|
|
4e9b0ae000 | ||
|
|
a56d4d0f4b | ||
|
|
2b0e7d0dee | ||
|
|
e17e238ee9 | ||
|
|
0fd48a1e56 | ||
|
|
d4eafa1d95 | ||
|
|
675f68ca17 | ||
|
|
30ee14fca1 | ||
|
|
c4ae40223c | ||
|
|
0e9069af80 | ||
|
|
1db66c9698 | ||
|
|
b409e9fc7d | ||
|
|
ecb76b8414 | ||
|
|
24b4e0209f | ||
|
|
35bc27a3a8 | ||
|
|
f903e0e447 | ||
|
|
b4b2ed3976 | ||
|
|
4195735cd3 | ||
|
|
3ae3261315 | ||
|
|
47f0047c9f | ||
|
|
33f08aee3e | ||
|
|
da71a00be2 | ||
|
|
a064b42917 | ||
|
|
62496a2c99 | ||
|
|
1669a64025 | ||
|
|
413c0db7c0 | ||
|
|
521fee91cd | ||
|
|
3021970193 | ||
|
|
82714e6d26 | ||
|
|
351f4aba1c | ||
|
|
daf3a1c5b8 | ||
|
|
2d2c7476db | ||
|
|
aec2f94d4b | ||
|
|
45fe6e6991 | ||
|
|
e496b03c63 | ||
|
|
39606d2eb1 | ||
|
|
970c33332b | ||
|
|
fa02fa8ac5 | ||
|
|
9015dd5367 | ||
|
|
e1a3dbd738 | ||
|
|
8cabe04d0f | ||
|
|
0aaa963b5a | ||
|
|
7e7215c71e | ||
|
|
04637127ee | ||
|
|
8512de2bdd | ||
|
|
b0ecc8cf33 | ||
|
|
ea39b20d64 | ||
|
|
cdf8a1a854 | ||
|
|
0a9d61986c | ||
|
|
8af3cd09ca | ||
|
|
b521e83829 | ||
|
|
8f17b89979 | ||
|
|
7c41202b98 | ||
|
|
e18c2cfdfc | ||
|
|
08e2eafb7c | ||
|
|
c27bb53d7c | ||
|
|
6f9769607a | ||
|
|
551ab27b09 | ||
|
|
c57bdfaeaf | ||
|
|
af92ca67d7 | ||
|
|
6889ab5ac1 | ||
|
|
eddafbbdcc | ||
|
|
8d110ec790 | ||
|
|
a49cd13a83 | ||
|
|
50d479f7a6 | ||
|
|
94477c5480 | ||
|
|
ff1e50745d | ||
|
|
8118355f39 | ||
|
|
1d686adcb9 | ||
|
|
f8aa11bc41 | ||
|
|
923f77a2db | ||
|
|
45a2b1d2a7 | ||
|
|
7a3ea3a93c | ||
|
|
1878338a44 | ||
|
|
a64ae977cc | ||
|
|
f0b1b8cd08 | ||
|
|
674f69f131 | ||
|
|
5d5ac6a371 | ||
|
|
0c3e2301ed | ||
|
|
ca3dafc5f0 | ||
|
|
29e831ccec | ||
|
|
df291702df | ||
|
|
ef555a3d72 | ||
|
|
51a43341c5 | ||
|
|
ecec7bc4b6 | ||
|
|
d809370d8a | ||
|
|
cb3d693a26 | ||
|
|
e956b4ff15 | ||
|
|
ca6b38d25a | ||
|
|
8851e71a8b | ||
|
|
dc3441f258 | ||
|
|
7791cb08a9 | ||
|
|
6ed6d6a85e | ||
|
|
df4f68fbf2 | ||
|
|
1cc631d265 | ||
|
|
1fe6765efa | ||
|
|
f284677c17 | ||
|
|
84ea1776ae | ||
|
|
bd6e5b13cc | ||
|
|
de9c53bd8d | ||
|
|
981600c935 | ||
|
|
c692fd1605 | ||
|
|
819c2f57be | ||
|
|
06ed059cba | ||
|
|
e41f3cfd13 | ||
|
|
e9cd4588ae | ||
|
|
fdd406ac95 | ||
|
|
4a7e26b812 | ||
|
|
99d2884802 | ||
|
|
7a754a4dfc | ||
|
|
70a8086366 | ||
|
|
4d39449979 | ||
|
|
a3e05195c0 | ||
|
|
5954d6ba9a | ||
|
|
420d2baec2 | ||
|
|
664d578f30 | ||
|
|
33e3f599e9 |
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()
|
||||
93
.github/workflows/build.yml
vendored
@@ -2,9 +2,15 @@ name: ci/gh-actions/gui
|
||||
|
||||
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:
|
||||
runs-on: macOS-latest
|
||||
runs-on: macos-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
with:
|
||||
@@ -52,7 +58,11 @@ jobs:
|
||||
- uses: eine/setup-msys2@v2
|
||||
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
|
||||
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
|
||||
@@ -62,23 +72,35 @@ jobs:
|
||||
run: build/release/bin/monero-wallet-gui --test-qml
|
||||
|
||||
macos-bundle:
|
||||
runs-on: macOS-latest
|
||||
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 python3 p7zip aria2
|
||||
- name: install dependencies
|
||||
run: pip3 install defusedxml
|
||||
- name: download qt
|
||||
run: python3 monero-gui/.github/qt_helper.py mac_x64 desktop 5.15.2 clang_64 c384008156fe63cc183bade0316828c598ff3e5074397c0c9ccc588d6cdc5aca
|
||||
working-directory: ../
|
||||
- name: build
|
||||
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: |
|
||||
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
|
||||
@@ -87,26 +109,21 @@ jobs:
|
||||
- name: create .tar
|
||||
run: tar -cf monero-wallet-gui.tar monero-wallet-gui.app
|
||||
working-directory: build/bin
|
||||
- uses: actions/upload-artifact@v2
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: build/bin/monero-wallet-gui.tar
|
||||
|
||||
docker-linux-static:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- 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
|
||||
run: ${{env.FREE_DISKSPACE}}
|
||||
- name: prepare build environment
|
||||
run: docker build --tag monero:build-env-linux --build-arg THREADS=3 --file Dockerfile.linux .
|
||||
- name: build
|
||||
@@ -115,7 +132,7 @@ jobs:
|
||||
run: shasum -a256 /home/runner/work/monero-gui/monero-gui/build/release/bin/monero-wallet-gui
|
||||
- name: test qml
|
||||
run: xvfb-run -a /home/runner/work/monero-gui/monero-gui/build/release/bin/monero-wallet-gui --test-qml
|
||||
- uses: actions/upload-artifact@v2
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
@@ -123,25 +140,20 @@ jobs:
|
||||
/home/runner/work/monero-gui/monero-gui/build/release/bin/monerod
|
||||
|
||||
docker-windows-static:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- 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
|
||||
run: docker build --tag monero:build-env-windows --build-arg THREADS=3 --file Dockerfile.windows .
|
||||
- name: build
|
||||
run: docker run --rm -v /home/runner/work/monero-gui/monero-gui:/monero-gui -w /monero-gui monero:build-env-windows sh -c 'make depends root=/depends target=x86_64-w64-mingw32 tag=win-x64 -j3'
|
||||
- name: sha256sum
|
||||
run: shasum -a256 /home/runner/work/monero-gui/monero-gui/build/x86_64-w64-mingw32/release/bin/monero-wallet-gui.exe
|
||||
- uses: actions/upload-artifact@v2
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: |
|
||||
@@ -149,31 +161,24 @@ jobs:
|
||||
/home/runner/work/monero-gui/monero-gui/build/x86_64-w64-mingw32/release/bin/monerod.exe
|
||||
|
||||
docker-android:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- 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@v2
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ github.job }}
|
||||
path: /home/runner/work/monero-gui/monero-gui/build/Android/release/android-build/monero-gui.apk
|
||||
|
||||
source-archive:
|
||||
runs-on: ubuntu-20.04
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- uses: actions/checkout@v1
|
||||
with:
|
||||
@@ -185,7 +190,7 @@ jobs:
|
||||
export OUTPUT="$VERSION.tar"
|
||||
echo "OUTPUT=$OUTPUT" >> $GITHUB_ENV
|
||||
/home/runner/.local/bin/git-archive-all --prefix "$VERSION/" --force-submodules "$OUTPUT"
|
||||
- uses: actions/upload-artifact@v2
|
||||
- uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ env.OUTPUT }}
|
||||
path: /home/runner/work/monero-gui/monero-gui/${{ env.OUTPUT }}
|
||||
|
||||
4
.github/workflows/flatpak.yml
vendored
@@ -72,7 +72,7 @@ jobs:
|
||||
platforms: arm64
|
||||
|
||||
- name: Restore flatpak-builder
|
||||
uses: actions/download-artifact@v3
|
||||
uses: actions/download-artifact@v4.1.7
|
||||
with:
|
||||
name: flatpak-builder-${{ matrix.arch }}
|
||||
|
||||
@@ -129,7 +129,7 @@ jobs:
|
||||
platforms: arm64
|
||||
|
||||
- name: Restore flatpak-builder
|
||||
uses: actions/download-artifact@v3
|
||||
uses: actions/download-artifact@v4.1.7
|
||||
with:
|
||||
name: flatpak-builder-${{ matrix.arch }}
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@ project(monero-gui)
|
||||
message(STATUS "Initiating compile using CMake ${CMAKE_VERSION}")
|
||||
|
||||
set(VERSION_MAJOR "18")
|
||||
set(VERSION_MINOR "3")
|
||||
set(VERSION_REVISION "1")
|
||||
set(VERSION_MINOR "4")
|
||||
set(VERSION_REVISION "6")
|
||||
set(VERSION "0.${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_REVISION}")
|
||||
|
||||
option(STATIC "Link libraries statically, requires static Qt")
|
||||
@@ -16,6 +16,14 @@ option(WITH_DESKTOP_ENTRY "Ask to install desktop entry on first startup" ON)
|
||||
option(WITH_UPDATER "Regularly check for new updates" ON)
|
||||
option(DEV_MODE "Checkout latest monero master on build" OFF)
|
||||
|
||||
if(DEV_MODE)
|
||||
# DEV_MODE checks out the monero submodule to master, which requires C++17.
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
else()
|
||||
set(CMAKE_CXX_STANDARD 14)
|
||||
endif()
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
list(INSERT CMAKE_MODULE_PATH 0 "${CMAKE_SOURCE_DIR}/cmake")
|
||||
include(CheckCCompilerFlag)
|
||||
include(CheckCXXCompilerFlag)
|
||||
@@ -60,6 +68,7 @@ set(CMAKE_AUTORCC ON)
|
||||
set(CMAKE_AUTOUIC ON)
|
||||
|
||||
get_directory_property(ARCH_WIDTH DIRECTORY "monero" DEFINITION ARCH_WIDTH)
|
||||
get_directory_property(Boost_VERSION_STRING DIRECTORY "monero" DEFINITION Boost_VERSION_STRING)
|
||||
|
||||
if (NOT CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
add_definitions(-DQT_NO_DEBUG)
|
||||
@@ -141,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+
|
||||
@@ -149,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()
|
||||
|
||||
@@ -356,7 +366,7 @@ if(APPLE)
|
||||
endif()
|
||||
|
||||
if (APPLE AND NOT IOS)
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=default -std=c++11")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=default")
|
||||
endif()
|
||||
|
||||
if(APPLE)
|
||||
@@ -442,7 +452,7 @@ message(STATUS "Using C++ security hardening flags: ${CXX_SECURITY_FLAGS}")
|
||||
message(STATUS "Using linker security hardening flags: ${LD_SECURITY_FLAGS}")
|
||||
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c11 ${C_SECURITY_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 ${CXX_SECURITY_FLAGS}")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CXX_SECURITY_FLAGS}")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${LD_SECURITY_FLAGS} ${STATIC_FLAGS}")
|
||||
|
||||
add_subdirectory(translations)
|
||||
|
||||
38
DEPLOY.md
@@ -2,7 +2,7 @@
|
||||
|
||||
Use macOS 10.12 - 10.13 for better backwards compability.
|
||||
|
||||
1. `HOMEBREW_OPTFLAGS="-march=core2" HOMEBREW_OPTIMIZATION_LEVEL="O0" brew install boost zmq libpgm miniupnpc libsodium expat libunwind-headers protobuf libgcrypt hidapi`
|
||||
1. `HOMEBREW_OPTFLAGS="-march=core2" HOMEBREW_OPTIMIZATION_LEVEL="O0" brew install boost zmq libpgm miniupnpc libsodium expat libunwind-headers protobuf@21 libgcrypt hidapi libusb cmake pkg-config && brew link protobuf@21`
|
||||
|
||||
2. Get the latest LTS from here: https://www.qt.io/offline-installers and install
|
||||
|
||||
@@ -10,9 +10,9 @@ Use macOS 10.12 - 10.13 for better backwards compability.
|
||||
|
||||
4. Compile `monero-wallet-gui.app`
|
||||
|
||||
```
|
||||
```bash
|
||||
mkdir build && cd build
|
||||
cmake -D CMAKE_BUILD_TYPE=Release -D ARCH=default -D CMAKE_PREFIX_PATH=~/Qt5.12.8/5.12.8/clang_64 ..
|
||||
cmake -D CMAKE_BUILD_TYPE=Release -D ARCH=default -D CMAKE_PREFIX_PATH=/path/to/Qt5.12.8/5.12.8/clang_64 ..
|
||||
make
|
||||
make deploy
|
||||
```
|
||||
@@ -40,8 +40,36 @@ You can check if this step worked by using `codesign -dvvv monero-wallet-gui.app
|
||||
|
||||
3. `hdiutil create -fs HFS+ -srcfolder monero-gui-v0.X.Y.Z -volname monero-wallet-gui monero-gui-mac-x64-v0.X.Y.Z.dmg`
|
||||
|
||||
4. `xcrun altool -t osx --file monero-gui-mac-x64-v0.X.Y.Z.dmg --primary-bundle-id org.monero-project.monero-wallet-gui.dmg --notarize-app --username email@address.org`
|
||||
4. `xcrun notarytool submit monero-gui-mac-x64-v0.X.Y.Z.dmg --apple-id email@address.org --team-id XXXXXXXXXX`
|
||||
|
||||
5. `xcrun altool --notarization-info aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeee -u email@address.org`
|
||||
5. `xcrun notarytool info aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeee --apple-id email@address.org --team-id XXXXXXXXXX`
|
||||
|
||||
6. `xcrun stapler staple -v monero-gui-mac-x64-v0.X.Y.Z.dmg`
|
||||
|
||||
## Compile Qt for Apple Silicon
|
||||
|
||||
Qt does not offer pre-built binaries for Apple Silicon, they have to be manually compiled.
|
||||
|
||||
```bash
|
||||
git clone https://github.com/qt/qt5.git
|
||||
cd qt5
|
||||
git checkout v5.15.9-lts-lgpl
|
||||
./init-repository
|
||||
mkdir build
|
||||
cd build
|
||||
../configure -prefix /path/to/qt-build-dir/ -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
|
||||
make install
|
||||
cd ../qttools/src/linguist/lrelease
|
||||
../../../../build/qtbase/bin/qmake
|
||||
make
|
||||
make install
|
||||
cd ../../../../qttools/src/macdeployqt/macdeployqt/
|
||||
../../../../build/qtbase/bin/qmake
|
||||
make
|
||||
make install
|
||||
```
|
||||
|
||||
For compilation with Xcode 15 the following patch has to be applied: https://raw.githubusercontent.com/Homebrew/formula-patches/086e8cf/qt5/qt5-qmake-xcode15.patch
|
||||
|
||||
The `CMAKE_PREFIX_PATH` has to be set to `/path/to/qt-build-dir/` during monero-gui compilation.
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
FROM debian:buster
|
||||
FROM ubuntu:20.04
|
||||
|
||||
ARG THREADS=1
|
||||
ARG ANDROID_NDK_REVISION=21e
|
||||
ARG ANDROID_NDK_HASH=c3ebc83c96a4d7f539bd72c241b2be9dcd29bda9
|
||||
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.7-lts-lgpl
|
||||
ARG QT_VERSION=v5.15.18-lts-lgpl
|
||||
|
||||
WORKDIR /opt/android
|
||||
ENV WORKDIR=/opt/android
|
||||
|
||||
ENV ANDROID_NATIVE_API_LEVEL=30
|
||||
ENV ANDROID_NATIVE_API_LEVEL=31
|
||||
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++
|
||||
@@ -20,6 +20,7 @@ ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
|
||||
ENV PATH=${JAVA_HOME}/bin:${PATH}
|
||||
ENV PREFIX=${WORKDIR}/prefix
|
||||
ENV TOOLCHAIN_DIR=${ANDROID_NDK_ROOT}/toolchains/llvm/prebuilt/linux-x86_64
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
RUN apt-get update \
|
||||
&& apt-get install -y ant automake build-essential ca-certificates-java file gettext git libc6 libncurses5 \
|
||||
@@ -32,7 +33,7 @@ RUN PACKAGE_NAME=commandlinetools-linux-${ANDROID_SDK_REVISION}.zip \
|
||||
&& unzip -q ${PACKAGE_NAME} \
|
||||
&& rm -f ${PACKAGE_NAME}
|
||||
|
||||
RUN PACKAGE_NAME=android-ndk-r${ANDROID_NDK_REVISION}-linux-x86_64.zip \
|
||||
RUN PACKAGE_NAME=android-ndk-r${ANDROID_NDK_REVISION}-linux.zip \
|
||||
&& wget -q https://dl.google.com/android/repository/${PACKAGE_NAME} \
|
||||
&& echo "${ANDROID_NDK_HASH} ${PACKAGE_NAME}" | sha1sum -c \
|
||||
&& unzip -q ${PACKAGE_NAME} \
|
||||
@@ -43,9 +44,9 @@ RUN echo y | ${ANDROID_SDK_ROOT}/bin/sdkmanager --sdk_root=${ANDROID_SDK_ROOT} "
|
||||
ENV HOST_PATH=${PATH}
|
||||
ENV PATH=${TOOLCHAIN_DIR}/aarch64-linux-android/bin:${TOOLCHAIN_DIR}/bin:${PATH}
|
||||
|
||||
ARG ZLIB_VERSION=1.3
|
||||
ARG ZLIB_HASH=ff0ba4c292013dbc27530b3a81e1f9a813cd39de01ca5e0f8bf355702efa593e
|
||||
RUN wget -q https://zlib.net/zlib-${ZLIB_VERSION}.tar.gz \
|
||||
ARG ZLIB_VERSION=1.3.1
|
||||
ARG ZLIB_HASH=9a93b2b7dfdac77ceba5a558a580e74667dd6fede4585b91eefb60f03b72df23
|
||||
RUN wget -q https://github.com/madler/zlib/releases/download/v${ZLIB_VERSION}/zlib-${ZLIB_VERSION}.tar.gz \
|
||||
&& echo "${ZLIB_HASH} zlib-${ZLIB_VERSION}.tar.gz" | sha256sum -c \
|
||||
&& tar -xzf zlib-${ZLIB_VERSION}.tar.gz \
|
||||
&& rm zlib-${ZLIB_VERSION}.tar.gz \
|
||||
@@ -98,34 +99,32 @@ RUN wget -q http://ftp.gnu.org/pub/gnu/libiconv/libiconv-${ICONV_VERSION}.tar.gz
|
||||
&& 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://boostorg.jfrog.io/artifactory/main/release/${BOOST_VERSION_DOT}/source/boost_${BOOST_VERSION}.tar.bz2 \
|
||||
ARG BOOST_VERSION=1_85_0
|
||||
ARG BOOST_VERSION_DOT=1.85.0
|
||||
ARG BOOST_HASH=7009fe1faa1697476bdc7027703a2badb84e849b7b0baad5086b087b971f8617
|
||||
RUN wget -q https://archives.boost.io/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} \
|
||||
&& printf "using clang : arm : ${ANDROID_CLANGPP} :\n<cxxflags>\"-fPIC\"\n<cflags>\"-fPIC\" ;" > user.jam \
|
||||
&& 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++' \
|
||||
--with-system --with-thread --with-locale --build-dir=android --stagedir=android toolset=clang-arm threading=multi \
|
||||
threadapi=pthread target-os=android -sICONV_PATH=${PREFIX} --user-config=user.jam architecture=arm address-model=64 \
|
||||
install -j${THREADS} \
|
||||
&& rm -rf $(pwd)
|
||||
|
||||
ARG OPENSSL_VERSION=1.1.1u
|
||||
ARG OPENSSL_HASH=e2f8d84b523eecd06c7be7626830370300fbcc15386bf5142d72758f6963ebc6
|
||||
ARG OPENSSL_VERSION=1.1.1w
|
||||
ARG OPENSSL_HASH=cf3098950cb4d853ad95c0841f1f9c6d3dc102dccfcacd521d93925208b76ac8
|
||||
RUN wget -q https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz \
|
||||
&& echo "${OPENSSL_HASH} openssl-${OPENSSL_VERSION}.tar.gz" | sha256sum -c \
|
||||
&& 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 \
|
||||
android-arm64 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 \
|
||||
@@ -133,9 +132,9 @@ RUN wget -q https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz \
|
||||
&& make -j${THREADS} install \
|
||||
&& rm -rf $(pwd)
|
||||
|
||||
ARG EXPAT_VERSION=2.4.1
|
||||
ARG EXPAT_HASH=2f9b6a580b94577b150a7d5617ad4643a4301a6616ff459307df3e225bcfbf40
|
||||
RUN wget https://github.com/libexpat/libexpat/releases/download/R_2_4_1/expat-${EXPAT_VERSION}.tar.bz2 && \
|
||||
ARG EXPAT_VERSION=2.6.4
|
||||
ARG EXPAT_HASH=8dc480b796163d4436e6f1352e71800a774f73dbae213f1860b60607d2a83ada
|
||||
RUN wget https://github.com/libexpat/libexpat/releases/download/R_2_6_4/expat-${EXPAT_VERSION}.tar.bz2 && \
|
||||
echo "${EXPAT_HASH} expat-${EXPAT_VERSION}.tar.bz2" | sha256sum -c && \
|
||||
tar -xf expat-${EXPAT_VERSION}.tar.bz2 && \
|
||||
rm expat-${EXPAT_VERSION}.tar.bz2 && \
|
||||
@@ -145,8 +144,8 @@ RUN wget https://github.com/libexpat/libexpat/releases/download/R_2_4_1/expat-${
|
||||
make -j$THREADS install && \
|
||||
rm -rf $(pwd)
|
||||
|
||||
ARG UNBOUND_VERSION=1.16.2
|
||||
ARG UNBOUND_HASH=2e32f283820c24c51ca1dd8afecfdb747c7385a137abe865c99db4b257403581
|
||||
ARG UNBOUND_VERSION=1.22.0
|
||||
ARG UNBOUND_HASH=c5dd1bdef5d5685b2cedb749158dd152c52d44f65529a34ac15cd88d4b1b3d43
|
||||
RUN wget https://www.nlnetlabs.nl/downloads/unbound/unbound-${UNBOUND_VERSION}.tar.gz && \
|
||||
echo "${UNBOUND_HASH} unbound-${UNBOUND_VERSION}.tar.gz" | sha256sum -c && \
|
||||
tar -xzf unbound-${UNBOUND_VERSION}.tar.gz && \
|
||||
@@ -157,8 +156,8 @@ RUN wget https://www.nlnetlabs.nl/downloads/unbound/unbound-${UNBOUND_VERSION}.t
|
||||
make -j$THREADS install && \
|
||||
rm -rf $(pwd)
|
||||
|
||||
ARG ZMQ_VERSION=v4.3.4
|
||||
ARG ZMQ_HASH=4097855ddaaa65ed7b5e8cb86d143842a594eebd
|
||||
ARG ZMQ_VERSION=v4.3.5
|
||||
ARG ZMQ_HASH=622fc6dde99ee172ebaa9c8628d85a7a1995a21d
|
||||
RUN git clone https://github.com/zeromq/libzmq.git -b ${ZMQ_VERSION} --depth 1 \
|
||||
&& cd libzmq \
|
||||
&& git checkout ${ZMQ_HASH} \
|
||||
@@ -169,8 +168,8 @@ RUN git clone https://github.com/zeromq/libzmq.git -b ${ZMQ_VERSION} --depth 1 \
|
||||
&& make -j${THREADS} install \
|
||||
&& rm -rf $(pwd)
|
||||
|
||||
ARG SODIUM_VERSION=1.0.18
|
||||
ARG SODIUM_HASH=4f5e89fa84ce1d178a6765b8b46f2b6f91216677
|
||||
ARG SODIUM_VERSION=1.0.20-RELEASE
|
||||
ARG SODIUM_HASH=9511c982fb1d046470a8b42aa36556cdb7da15de
|
||||
RUN set -ex \
|
||||
&& git clone https://github.com/jedisct1/libsodium.git -b ${SODIUM_VERSION} --depth 1 \
|
||||
&& cd libsodium \
|
||||
@@ -198,23 +197,20 @@ RUN git clone -b libgcrypt-1.10.1 --depth 1 git://git.gnupg.org/libgcrypt.git \
|
||||
&& make -j${THREADS} install \
|
||||
&& rm -rf $(pwd)
|
||||
|
||||
RUN git clone -b v3.24.2 --depth 1 https://github.com/Kitware/CMake \
|
||||
RUN git clone -b v3.31.4 --depth 1 https://github.com/Kitware/CMake \
|
||||
&& cd CMake \
|
||||
&& git reset --hard 31f835410efeea50acd43512eb9e5646a26ea177 \
|
||||
&& git reset --hard 569b821a138a4d3f7f4cc42c0cf5ae5e68d56f96 \
|
||||
&& PATH=${HOST_PATH} ./bootstrap \
|
||||
&& PATH=${HOST_PATH} make -j${THREADS} \
|
||||
&& PATH=${HOST_PATH} make -j${THREADS} install \
|
||||
&& rm -rf $(pwd)
|
||||
|
||||
RUN GRADLE_VERSION=5.6.4 \
|
||||
&& GRADLE_HASH=1f3067073041bc44554d0efe5d402a33bc3d3c93cc39ab684f308586d732a80d \
|
||||
&& wget -q https\://services.gradle.org/distributions/gradle-${GRADLE_VERSION}-bin.zip \
|
||||
&& echo "${GRADLE_HASH} gradle-${GRADLE_VERSION}-bin.zip" | sha256sum -c \
|
||||
&& GRADLE_LOCAL_PATH=gradle/wrapper/dists/gradle-${GRADLE_VERSION}-bin/bxirm19lnfz6nurbatndyydux \
|
||||
&& mkdir -p ${GRADLE_LOCAL_PATH} \
|
||||
&& mv gradle-${GRADLE_VERSION}-bin.zip ${GRADLE_LOCAL_PATH}
|
||||
|
||||
ENV GRADLE_USER_HOME=${WORKDIR}/gradle
|
||||
# Workaround
|
||||
ENV NEW_SDK_ROOT=${WORKDIR}/sdk
|
||||
RUN mkdir ${NEW_SDK_ROOT} \
|
||||
&& cp -r ${ANDROID_SDK_ROOT}/licenses ${NEW_SDK_ROOT} \
|
||||
&& cp -r ${ANDROID_SDK_ROOT}/platforms ${NEW_SDK_ROOT} \
|
||||
&& cp -r ${ANDROID_SDK_ROOT}/build-tools ${NEW_SDK_ROOT}
|
||||
|
||||
CMD set -ex \
|
||||
&& cd /monero-gui \
|
||||
@@ -232,10 +228,12 @@ CMD set -ex \
|
||||
-DBoost_USE_STATIC_RUNTIME=ON \
|
||||
-DLRELEASE_PATH="${PREFIX}/bin" \
|
||||
-DQT_ANDROID_APPLICATION_BINARY="monero-wallet-gui" \
|
||||
-DANDROID_SDK="${ANDROID_SDK_ROOT}" \
|
||||
-DANDROID_SDK="${NEW_SDK_ROOT}" \
|
||||
-DWITH_SCANNER=ON \
|
||||
-DWITH_DESKTOP_ENTRY=OFF \
|
||||
../../.. \
|
||||
&& PATH=${HOST_PATH} make generate_translations_header \
|
||||
&& sed -i -e "s#../monero/external/randomx/librandomx.a##" src/CMakeFiles/monero-wallet-gui.dir/link.txt \
|
||||
&& sed -i -e "s#-lm#-lm ../monero/external/randomx/librandomx.a#" src/CMakeFiles/monero-wallet-gui.dir/link.txt \
|
||||
&& make -j${THREADS} -C src \
|
||||
&& make -j${THREADS} apk
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
FROM ubuntu:16.04
|
||||
FROM ubuntu:18.04
|
||||
|
||||
ARG THREADS=1
|
||||
ARG QT_VERSION=v5.15.10-lts-lgpl
|
||||
ARG QT_VERSION=v5.15.18-lts-lgpl
|
||||
|
||||
ENV CFLAGS="-fPIC"
|
||||
ENV CPPFLAGS="-fPIC"
|
||||
@@ -10,7 +10,7 @@ ENV SOURCE_DATE_EPOCH=1397818193
|
||||
|
||||
RUN apt update && \
|
||||
apt install -y automake autopoint bison gettext git gperf libgl1-mesa-dev libglib2.0-dev \
|
||||
libpng12-dev libpthread-stubs0-dev libsodium-dev libtool-bin libudev-dev libusb-1.0-0-dev mesa-common-dev \
|
||||
libpng-dev libpthread-stubs0-dev libsodium-dev libtool-bin libudev-dev libusb-1.0-0-dev mesa-common-dev \
|
||||
pkg-config python wget xutils-dev
|
||||
|
||||
RUN git clone -b xorgproto-2020.1 --depth 1 https://gitlab.freedesktop.org/xorg/proto/xorgproto && \
|
||||
@@ -121,8 +121,8 @@ RUN git clone -b v1.3 --depth 1 https://github.com/madler/zlib && \
|
||||
make -j$THREADS install && \
|
||||
rm -rf $(pwd)
|
||||
|
||||
RUN git clone -b VER-2-10-2 --depth 1 https://git.savannah.gnu.org/git/freetype/freetype2.git && \
|
||||
cd freetype2 && \
|
||||
RUN git clone -b VER-2-10-2 --depth 1 https://gitlab.freedesktop.org/freetype/freetype.git && \
|
||||
cd freetype && \
|
||||
git reset --hard 132f19b779828b194b3fede187cee719785db4d8 && \
|
||||
./autogen.sh && \
|
||||
./configure --disable-shared --enable-static --with-zlib=no && \
|
||||
@@ -156,7 +156,7 @@ RUN git clone -b release-64-2 --depth 1 https://github.com/unicode-org/icu && \
|
||||
make -j$THREADS install && \
|
||||
rm -rf $(pwd)
|
||||
|
||||
RUN wget https://boostorg.jfrog.io/artifactory/main/release/1.80.0/source/boost_1_80_0.tar.gz && \
|
||||
RUN wget https://archives.boost.io/release/1.80.0/source/boost_1_80_0.tar.gz && \
|
||||
echo "4b2136f98bdd1f5857f1c3dea9ac2018effe65286cf251534b6ae20cc45e1847 boost_1_80_0.tar.gz" | sha256sum -c && \
|
||||
tar -xzf boost_1_80_0.tar.gz && \
|
||||
rm boost_1_80_0.tar.gz && \
|
||||
@@ -170,7 +170,7 @@ RUN wget https://www.openssl.org/source/openssl-1.1.1u.tar.gz && \
|
||||
tar -xzf openssl-1.1.1u.tar.gz && \
|
||||
rm openssl-1.1.1u.tar.gz && \
|
||||
cd openssl-1.1.1u && \
|
||||
./config no-asm no-shared no-zlib-dynamic --prefix=/usr --openssldir=/usr && \
|
||||
./config no-shared no-zlib-dynamic --prefix=/usr --openssldir=/usr && \
|
||||
make -j$THREADS && \
|
||||
make -j$THREADS install && \
|
||||
rm -rf $(pwd)
|
||||
@@ -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.10-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.2.0 --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 99be9a044f3854f339548e2d99c539c18d7b1b01 && \
|
||||
git reset --hard dbcc7d212c094bd1a45f7291dbb99a4b4627a96d && \
|
||||
cp -a contrib/depends / && \
|
||||
cd .. && \
|
||||
rm -rf monero
|
||||
|
||||
2
LICENSE
@@ -1,4 +1,4 @@
|
||||
Copyright (c) 2014-2018, The Monero Project
|
||||
Copyright (c) 2014-2024, The Monero Project
|
||||
|
||||
All rights reserved.
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2019, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
21
README.md
@@ -1,6 +1,6 @@
|
||||
# Monero GUI
|
||||
|
||||
Copyright (c) 2014-2022, The Monero Project
|
||||
Copyright (c) 2014-2024, The Monero Project
|
||||
|
||||
## Table of Contents
|
||||
* [Development resources](#development-resources)
|
||||
@@ -60,9 +60,7 @@ The Bitcoin donation address is: `1KTexdemPdxSBcG55heUuTjDRYqbC5ZL8H`
|
||||
GUI development funding and/or some supporting services are also graciously provided by [sponsors](https://www.getmonero.org/community/sponsorships/):
|
||||
|
||||
[<img width="150" src="https://www.getmonero.org/img/sponsors/tarilabs.png"/>](https://tarilabs.com/)
|
||||
[<img width="150" src="https://www.getmonero.org/img/sponsors/globee.png"/>](https://globee.com/)
|
||||
[<img width="150" src="https://www.getmonero.org/img/sponsors/symas.png"/>](https://symas.com/)
|
||||
[<img width="150" src="https://www.getmonero.org/img/sponsors/forked_logo.png"/>](http://www.forked.net/)
|
||||
[<img width="150" src="https://www.getmonero.org/img/sponsors/macstadium.png"/>](https://www.macstadium.com/)
|
||||
|
||||
There are also several mining pools that kindly donate a portion of their fees, [a list of them can be found on our Bitcointalk post](https://bitcointalk.org/index.php?topic=583449.0).
|
||||
@@ -87,7 +85,7 @@ Status of the translations:
|
||||
|
||||
Packages are available for
|
||||
* Arch Linux: [monero-gui](https://archlinux.org/packages/extra/x86_64/monero-gui/)
|
||||
* Void Linux: `xbps-install -S monero-gui`
|
||||
* NixOS: `nix-shell -p monero-gui`
|
||||
* Flatpak: [Monero GUI](https://flathub.org/apps/details/org.getmonero.Monero)
|
||||
* GuixSD: `guix package -i monero-gui`
|
||||
* macOS (homebrew): `brew install --cask monero-wallet`
|
||||
@@ -96,9 +94,9 @@ 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/master/contrib/gitian/README.md).
|
||||
*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).
|
||||
|
||||
### Building Reproducible Windows static binaries with Docker (any OS)
|
||||
|
||||
@@ -107,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.3.1`) to build the release binaries.
|
||||
\* `master` - replace with the desired version tag (e.g. `v0.18.4.6`) to build the release binaries.
|
||||
3. Prepare build environment
|
||||
```
|
||||
cd monero-gui
|
||||
@@ -130,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.3.1`) to build the release binaries.
|
||||
\* `master` - replace with the desired version tag (e.g. `v0.18.4.6`) to build the release binaries.
|
||||
3. Prepare build environment
|
||||
```
|
||||
cd monero-gui
|
||||
@@ -144,8 +142,9 @@ Packaging for your favorite distribution would be a welcome contribution!
|
||||
```
|
||||
\* `<MONERO_GUI_DIR_FULL_PATH>` - absolute path to `monero-gui` directory
|
||||
\* `4` - number of CPU threads to use
|
||||
5. Monero GUI Linux static binaries will be placed in `monero-gui/build/release/bin` directory
|
||||
6. (*Optional*) Compare `monero-wallet-gui` SHA-256 hash to the one obtained from a trusted source
|
||||
5. Monero GUI Linux static binary will be placed in `monero-gui/build/release/bin` directory
|
||||
6. (*Note*) This process is only for building `monero-wallet-gui`, `monerod` has to be built separately according to the instructions in the `monero` repository.
|
||||
7. (*Optional*) Compare `monero-wallet-gui` SHA-256 hash to the one obtained from a trusted source
|
||||
```
|
||||
docker run --rm -it -v <MONERO_GUI_DIR_FULL_PATH>:/monero-gui -w /monero-gui monero:build-env-linux sh -c 'shasum -a 256 /monero-gui/build/release/bin/monero-wallet-gui'
|
||||
```
|
||||
@@ -310,7 +309,7 @@ The Monero GUI on Windows is 64 bits only; 32-bit Windows GUI builds are not off
|
||||
3. Install MSYS2 packages for Monero dependencies; the needed 64-bit packages have `x86_64` in their names
|
||||
|
||||
```
|
||||
pacman -S mingw-w64-x86_64-toolchain make 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-libgcrypt mingw-w64-x86_64-unbound mingw-w64-x86_64-pcre
|
||||
pacman -S mingw-w64-x86_64-toolchain make 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-libgcrypt mingw-w64-x86_64-unbound mingw-w64-x86_64-pcre mingw-w64-x86_64-angleproject
|
||||
```
|
||||
|
||||
You find more details about those dependencies in the [Monero documentation](https://github.com/monero-project/monero). Note that that there is no more need to compile Boost from source; like everything else, you can install it now with a MSYS2 package.
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2014-2019, The Monero Project
|
||||
# Copyright (c) 2014-2024, The Monero Project
|
||||
#
|
||||
# All rights reserved.
|
||||
#
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2014-2019, The Monero Project
|
||||
# Copyright (c) 2014-2024, The Monero Project
|
||||
#
|
||||
# All rights reserved.
|
||||
#
|
||||
|
||||
@@ -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..."
|
||||
)
|
||||
@@ -58,7 +65,6 @@ if(APPLE OR (WIN32 AND NOT STATIC))
|
||||
libboost_filesystem-mt.dll
|
||||
libboost_locale-mt.dll
|
||||
libboost_program_options-mt.dll
|
||||
libboost_regex-mt.dll
|
||||
libboost_serialization-mt.dll
|
||||
libboost_thread-mt.dll
|
||||
libprotobuf.dll
|
||||
@@ -89,31 +95,26 @@ if(APPLE OR (WIN32 AND NOT STATIC))
|
||||
libdouble-conversion.dll
|
||||
libgcrypt-20.dll
|
||||
libgpg-error-0.dll
|
||||
libsodium-23.dll
|
||||
libsodium-26.dll
|
||||
libzmq.dll
|
||||
#platform files
|
||||
libgcc_s_seh-1.dll
|
||||
#openssl files
|
||||
libssl-3-x64.dll
|
||||
libcrypto-3-x64.dll
|
||||
#icu
|
||||
libicudt78.dll
|
||||
libicuin78.dll
|
||||
libicuio78.dll
|
||||
libicutu78.dll
|
||||
libicuuc78.dll
|
||||
)
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
list(APPEND WIN_DEPLOY_DLLS
|
||||
libicudtd73.dll
|
||||
libicuind73.dll
|
||||
libicuiod73.dll
|
||||
libicutud73.dll
|
||||
libicuucd73.dll
|
||||
)
|
||||
else() # assume release
|
||||
list(APPEND WIN_DEPLOY_DLLS
|
||||
libicudt73.dll
|
||||
libicuin73.dll
|
||||
libicuio73.dll
|
||||
libicutu73.dll
|
||||
libicuuc73.dll
|
||||
)
|
||||
|
||||
# Boost Regex is header-only since 1.77
|
||||
if (Boost_VERSION_STRING VERSION_LESS 1.77.0)
|
||||
list(APPEND WIN_DEPLOY_DLLS libboost_regex-mt.dll)
|
||||
endif()
|
||||
|
||||
list(TRANSFORM WIN_DEPLOY_DLLS PREPEND "$ENV{MSYSTEM_PREFIX}/bin/")
|
||||
add_custom_command(TARGET deploy
|
||||
POST_BUILD
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2014-2019, The Monero Project
|
||||
# Copyright (c) 2014-2024, The Monero Project
|
||||
#
|
||||
# All rights reserved.
|
||||
#
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2015, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2020, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2021, The Monero Project
|
||||
// Copyright (c) 2021-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2019, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2015, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2015, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2015, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2020, The Monero Project
|
||||
// Copyright (c) 2020-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2020, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2019, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2019, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2021, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2021, The Monero Project
|
||||
// Copyright (c) 2021-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2019, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
@@ -38,7 +38,7 @@ import "." as MoneroComponents
|
||||
import "effects/" as MoneroEffects
|
||||
import "../js/Utils.js" as Utils
|
||||
|
||||
Item {
|
||||
FocusScope {
|
||||
id: root
|
||||
visible: false
|
||||
|
||||
@@ -50,6 +50,7 @@ Item {
|
||||
property bool passwordDialogMode
|
||||
property bool passphraseDialogMode
|
||||
property bool newPasswordDialogMode
|
||||
property bool backgroundSyncing
|
||||
|
||||
// same signals as Dialog has
|
||||
signal accepted()
|
||||
@@ -64,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
|
||||
@@ -75,12 +74,14 @@ Item {
|
||||
root.visible = true;
|
||||
appWindow.hideBalanceForced = true;
|
||||
appWindow.updateBalance();
|
||||
Qt.callLater(() => passwordInput1.input.forceActiveFocus())
|
||||
}
|
||||
|
||||
function open(walletName, errorText, okButtonText, okButtonIcon) {
|
||||
function open(walletName, errorText, okButtonText, okButtonIcon, backgroundSyncOn) {
|
||||
passwordDialogMode = true;
|
||||
passphraseDialogMode = false;
|
||||
newPasswordDialogMode = false;
|
||||
backgroundSyncing = backgroundSyncOn || false;
|
||||
root.okButtonText = okButtonText;
|
||||
root.okButtonIcon = okButtonIcon ? okButtonIcon : "";
|
||||
_openInit(walletName, errorText);
|
||||
@@ -90,6 +91,7 @@ Item {
|
||||
passwordDialogMode = false;
|
||||
passphraseDialogMode = true;
|
||||
newPasswordDialogMode = false;
|
||||
backgroundSyncing = false;
|
||||
_openInit("", "");
|
||||
}
|
||||
|
||||
@@ -97,6 +99,7 @@ Item {
|
||||
passwordDialogMode = false;
|
||||
passphraseDialogMode = false;
|
||||
newPasswordDialogMode = true;
|
||||
backgroundSyncing = false;
|
||||
_openInit("", "");
|
||||
}
|
||||
|
||||
@@ -204,12 +207,13 @@ Item {
|
||||
font.family: MoneroComponents.Style.fontLight.name
|
||||
Layout.fillWidth: true
|
||||
wrapMode: Text.Wrap
|
||||
text: qsTr("CAPSLOCKS IS ON.") + translationManager.emptyString;
|
||||
text: qsTr("CAPS LOCK IS ON.") + translationManager.emptyString;
|
||||
}
|
||||
|
||||
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: {
|
||||
@@ -300,6 +304,18 @@ Item {
|
||||
onClicked: onOk()
|
||||
}
|
||||
}
|
||||
|
||||
Label {
|
||||
visible: backgroundSyncing
|
||||
text: qsTr("Syncing in the background...") + translationManager.emptyString;
|
||||
Layout.fillWidth: true
|
||||
|
||||
font.pixelSize: 14
|
||||
font.family: MoneroComponents.Style.fontLight.name
|
||||
font.italic: true
|
||||
|
||||
color: MoneroComponents.Style.defaultFontColor
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2020, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2021, The Monero Project
|
||||
// Copyright (c) 2021-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2021, The Monero Project
|
||||
// Copyright (c) 2021-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2020, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2021, The Monero Project
|
||||
// Copyright (c) 2021-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2020, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2020, The Monero Project
|
||||
// Copyright (c) 2020-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2019, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2019, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2019, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
BIN
images/ledgerFlex.png
Normal file
|
After Width: | Height: | Size: 56 KiB |
BIN
images/ledgerNanoGen5.png
Normal file
|
After Width: | Height: | Size: 418 KiB |
BIN
images/trezor3.png
Normal file
|
After Width: | Height: | Size: 64 KiB |
BIN
images/trezor5.png
Normal file
|
After Width: | Height: | Size: 305 KiB |
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 72 KiB |
|
Before Width: | Height: | Size: 301 KiB After Width: | Height: | Size: 301 KiB |
@@ -23,7 +23,7 @@ You would think timestamp preservation is no problem when unpacking the zip arch
|
||||
|
||||
In any case, after unpacking, check the file dates in the `bin` directory where the installer script looks for them with the dates of the files in the zip file: They must be identical.
|
||||
|
||||
Note that the the following line in `Monero.iss` is also important regarding file timestamps:
|
||||
Note that the following line in `Monero.iss` is also important regarding file timestamps:
|
||||
|
||||
TimeStampsInUTC=yes
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
Copyright (c) 2014-2020, The Monero Project
|
||||
Copyright (c) 2014-2024, The Monero Project
|
||||
|
||||
All rights reserved.
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
; Monero Fluorine Fermi GUI Wallet Installer for Windows
|
||||
; Copyright (c) 2017-2020, The Monero Project
|
||||
; Copyright (c) 2017-2024, The Monero Project
|
||||
; See LICENSE
|
||||
#define GuiVersion GetFileVersion("bin\monero-wallet-gui.exe")
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# Monero GUI Wallet Windows Installer #
|
||||
|
||||
Copyright (c) 2017-2020, The Monero Project
|
||||
Copyright (c) 2017-2024, The Monero Project
|
||||
|
||||
## Introduction ##
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<body style="font-family: Arial, Helvetica, sans-serif">
|
||||
<h1>Monero Fluorine Fermi GUI Wallet</h1>
|
||||
|
||||
<p>Copyright (c) 2014-2020, The Monero Project</p>
|
||||
<p>Copyright (c) 2014-2024, The Monero Project</p>
|
||||
|
||||
<h2>Preface</h2>
|
||||
|
||||
|
||||
@@ -21,7 +21,6 @@ function addressTruncatePretty(address, blocks){
|
||||
if(typeof(address) === "undefined") return "";
|
||||
if(typeof(blocks) === "undefined") blocks = 2;
|
||||
blocks = blocks <= 1 ? 1 : blocks >= 23 ? 23 : blocks;
|
||||
var ret = "";
|
||||
return address.substring(0, 4 * blocks).match(/.{1,4}/g).join(' ') + " .. " + address.substring(address.length - 4 * blocks).match(/.{1,4}/g).join(' ');
|
||||
}
|
||||
|
||||
@@ -70,11 +69,14 @@ function checkSignature(signature) {
|
||||
}
|
||||
|
||||
function isValidOpenAliasAddress(address) {
|
||||
address = address.trim()
|
||||
// we can get an awful lot of valid domains, including non ASCII chars... accept anything
|
||||
// there should be something after the .
|
||||
// make sure it is not some kind of floating number
|
||||
return address.length > 2 && isNaN(parseFloat(address)) && address.indexOf('.') >= 0
|
||||
var regex = /^[A-Za-z0-9-@]+(\.[A-Za-z0-9-]+)+$/; // Basic domain structure, allow email-like address
|
||||
|
||||
if (!regex.test(address)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
const lastPart = address.substring(address.lastIndexOf('.') + 1);
|
||||
return isNaN(parseInt(lastPart)) || lastPart !== parseInt(lastPart).toString();
|
||||
}
|
||||
|
||||
function handleOpenAliasResolution(address, descriptionText) {
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -166,7 +166,7 @@ function getApproximateBlockchainHeight(_date, _nettype){
|
||||
|
||||
if(_nettype == "Testnet" || _nettype == "Stagenet"){
|
||||
// testnet got some huge rollbacks, so the estimation is way off
|
||||
var approximateTestnetRolledBackBlocks = _nettype == "Testnet" ? 342100 : 30000;
|
||||
var approximateTestnetRolledBackBlocks = _nettype == "Testnet" ? 342100 : _nettype == "Stagenet" ? 60000 : 30000;
|
||||
if(approxBlockchainHeight > approximateTestnetRolledBackBlocks)
|
||||
approxBlockchainHeight -= approximateTestnetRolledBackBlocks
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
@@ -22,7 +22,7 @@ Lojban
|
||||
<!-- <language display_name="English (ZA)" locale="en_SA" wallet_language="English" flag="/lang/flags/za.png" qs="none"/> -->
|
||||
<!-- <language display_name="العربية (PS)" locale="ar_PS" wallet_language="English" flag="/lang/flags/ps.png" qs="none"/> -->
|
||||
<language display_name="Deutsch" locale="de_DE" wallet_language="Deutsch" flag="/lang/flags/de.png" qs="none"/>
|
||||
<language display_name="Esperanto" locale="eo" wallet_language="Esperanto" flag="/lang/flags/esperanto.png" qs="none"/>
|
||||
<language display_name="Esperanto" locale="eo_EO" wallet_language="Esperanto" flag="/lang/flags/eo.png" qs="none"/>
|
||||
<language display_name="Español" locale="es_ES" wallet_language="Español" flag="/lang/flags/es.png" qs="none"/>
|
||||
<language display_name="Français" locale="fr_FR" wallet_language="Français" flag="/lang/flags/fr.png" qs="none"/>
|
||||
<language display_name="Svenska" locale="sv_SE" wallet_language="English" flag="/lang/flags/se.png" qs="none"/>
|
||||
|
||||
127
main.qml
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2019, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
@@ -94,11 +94,13 @@ ApplicationWindow {
|
||||
readonly property string localDaemonAddress : "localhost:" + getDefaultDaemonRpcPort(persistentSettings.nettype)
|
||||
property string currentDaemonAddress;
|
||||
property int disconnectedEpoch: 0
|
||||
property int estimatedBlockchainSize: persistentSettings.pruneBlockchain ? 55 : 150 // 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
|
||||
@@ -133,6 +135,12 @@ ApplicationWindow {
|
||||
}
|
||||
|
||||
function lock() {
|
||||
if (currentWallet && currentWallet.getBackgroundSyncType() != Wallet.BackgroundSync_Off) {
|
||||
appWindow.showProcessingSplash(qsTr("Locking..."));
|
||||
currentWallet.startBackgroundSync()
|
||||
return;
|
||||
}
|
||||
|
||||
passwordDialog.onRejectedCallback = function() { appWindow.showWizard(); }
|
||||
passwordDialog.onAcceptedCallback = function() {
|
||||
if(walletPassword === passwordDialog.password)
|
||||
@@ -275,6 +283,15 @@ ApplicationWindow {
|
||||
persistentSettings.kdfRounds);
|
||||
}
|
||||
|
||||
function gracefulQuit() {
|
||||
if (isQuitting)
|
||||
return;
|
||||
isQuitting = true;
|
||||
closeWallet(function() {
|
||||
Qt.quit();
|
||||
})
|
||||
}
|
||||
|
||||
function closeWallet(callback) {
|
||||
|
||||
// Disconnect all listeners
|
||||
@@ -288,6 +305,9 @@ ApplicationWindow {
|
||||
currentWallet.heightRefreshed.disconnect(onHeightRefreshed);
|
||||
currentWallet.refreshed.disconnect(onWalletRefresh)
|
||||
currentWallet.updated.disconnect(onWalletUpdate)
|
||||
currentWallet.backgroundSyncSetup.disconnect(onBackgroundSyncSetup)
|
||||
currentWallet.backgroundSyncStarted.disconnect(onBackgroundSyncStarted)
|
||||
currentWallet.backgroundSyncStopped.disconnect(onBackgroundSyncStopped)
|
||||
currentWallet.newBlock.disconnect(onWalletNewBlock)
|
||||
currentWallet.moneySpent.disconnect(onWalletMoneySent)
|
||||
currentWallet.moneyReceived.disconnect(onWalletMoneyReceived)
|
||||
@@ -324,6 +344,7 @@ ApplicationWindow {
|
||||
walletName = usefulName(wallet.path)
|
||||
|
||||
viewOnly = currentWallet.viewOnly;
|
||||
backgroundSyncType = currentWallet.getBackgroundSyncType();
|
||||
|
||||
// New wallets saves the testnet flag in keys file.
|
||||
if(persistentSettings.nettype != currentWallet.nettype) {
|
||||
@@ -335,6 +356,9 @@ ApplicationWindow {
|
||||
currentWallet.heightRefreshed.connect(onHeightRefreshed);
|
||||
currentWallet.refreshed.connect(onWalletRefresh)
|
||||
currentWallet.updated.connect(onWalletUpdate)
|
||||
currentWallet.backgroundSyncSetup.connect(onBackgroundSyncSetup)
|
||||
currentWallet.backgroundSyncStarted.connect(onBackgroundSyncStarted)
|
||||
currentWallet.backgroundSyncStopped.connect(onBackgroundSyncStopped)
|
||||
currentWallet.newBlock.connect(onWalletNewBlock)
|
||||
currentWallet.moneySpent.connect(onWalletMoneySent)
|
||||
currentWallet.moneyReceived.connect(onWalletMoneyReceived)
|
||||
@@ -544,6 +568,15 @@ ApplicationWindow {
|
||||
}
|
||||
}
|
||||
|
||||
// Don't allow opening background wallets in the GUI
|
||||
if (wallet.isBackgroundWallet()) {
|
||||
passwordDialog.onCancel();
|
||||
appWindow.showStatusMessage(qsTr("Can't open background wallets in the GUI"),6);
|
||||
console.log("closing background wallet");
|
||||
closeWallet();
|
||||
return;
|
||||
}
|
||||
|
||||
// wallet opened successfully, subscribing for wallet updates
|
||||
connectWallet(wallet)
|
||||
|
||||
@@ -585,13 +618,17 @@ ApplicationWindow {
|
||||
devicePassphraseDialog.open(on_device)
|
||||
}
|
||||
|
||||
function onWalletUpdate() {
|
||||
function onWalletUpdate(stoppedBackgroundSync) {
|
||||
if (!currentWallet)
|
||||
return;
|
||||
|
||||
console.log(">>> wallet updated")
|
||||
updateBalance();
|
||||
// Update history if new block found since last update
|
||||
if(foundNewBlock) {
|
||||
// Update history if new block found since last update or background sync was just stopped
|
||||
if(foundNewBlock || stoppedBackgroundSync) {
|
||||
if (foundNewBlock)
|
||||
console.log("New block found - updating history")
|
||||
foundNewBlock = false;
|
||||
console.log("New block found - updating history")
|
||||
currentWallet.history.refresh(currentWallet.currentSubaddressAccount)
|
||||
|
||||
if(middlePanel.state == "History")
|
||||
@@ -599,6 +636,61 @@ ApplicationWindow {
|
||||
}
|
||||
}
|
||||
|
||||
function onBackgroundSyncSetup() {
|
||||
console.log(">>> background sync setup");
|
||||
hideProcessingSplash();
|
||||
if (currentWallet.status !== Wallet.Status_Ok) {
|
||||
console.error("Error setting up background sync: ", currentWallet.errorString);
|
||||
appWindow.showStatusMessage(currentWallet.errorString, 5);
|
||||
return;
|
||||
}
|
||||
appWindow.backgroundSyncType = currentWallet.getBackgroundSyncType();
|
||||
}
|
||||
|
||||
function onBackgroundSyncStarted() {
|
||||
console.log(">>> background sync started");
|
||||
hideProcessingSplash();
|
||||
var started = currentWallet.status === Wallet.Status_Ok;
|
||||
if (!started) {
|
||||
console.error("Error starting background sync: ", currentWallet.errorString);
|
||||
appWindow.showStatusMessage(currentWallet.errorString, 5);
|
||||
}
|
||||
|
||||
passwordDialog.onRejectedCallback = function() { appWindow.showWizard(); }
|
||||
passwordDialog.onAcceptedCallback = function() {
|
||||
if(walletPassword === passwordDialog.password) {
|
||||
if (currentWallet && started) {
|
||||
appWindow.showProcessingSplash(qsTr("Unlocking..."));
|
||||
currentWallet.stopBackgroundSync(walletPassword);
|
||||
} else {
|
||||
passwordDialog.close();
|
||||
}
|
||||
} else {
|
||||
passwordDialog.showError(qsTr("Wrong password") + translationManager.emptyString);
|
||||
}
|
||||
}
|
||||
passwordDialog.open(usefulName(persistentSettings.wallet_path), "", "", "", started);
|
||||
}
|
||||
|
||||
function onBackgroundSyncStopped() {
|
||||
console.log(">>> background sync stopped");
|
||||
var stopped = currentWallet.status === Wallet.Status_Ok;
|
||||
if (!stopped) {
|
||||
hideProcessingSplash();
|
||||
console.error("Error stopping background sync: ", currentWallet.errorString);
|
||||
|
||||
// If there is an error stopping background sync, the spend key
|
||||
// won't be loaded and the wallet will be in a broken state. Don't
|
||||
// let the user continue normal wallet operations in this state.
|
||||
passwordDialog.showError(qsTr("Error stopping background sync: ") + currentWallet.errorString);
|
||||
return;
|
||||
}
|
||||
|
||||
onWalletUpdate(stopped);
|
||||
hideProcessingSplash();
|
||||
passwordDialog.close();
|
||||
}
|
||||
|
||||
function connectRemoteNode() {
|
||||
console.log("connecting remote node");
|
||||
|
||||
@@ -1655,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 {
|
||||
@@ -2255,6 +2347,20 @@ ApplicationWindow {
|
||||
var inactivity = Utils.epoch() - appWindow.userLastActive;
|
||||
if(inactivity < (persistentSettings.lockOnUserInActivityInterval * 60)) return;
|
||||
|
||||
if (inputDialogVisible) inputDialog.close()
|
||||
remoteNodeDialog.close();
|
||||
informationPopup.close()
|
||||
txConfirmationPopup.close()
|
||||
txConfirmationPopup.clearFields()
|
||||
txConfirmationPopup.rejected()
|
||||
successfulTxPopup.close();
|
||||
|
||||
if (currentWallet && currentWallet.getBackgroundSyncType() != Wallet.BackgroundSync_Off) {
|
||||
appWindow.showProcessingSplash(qsTr("Locking..."));
|
||||
currentWallet.startBackgroundSync()
|
||||
return;
|
||||
}
|
||||
|
||||
passwordDialog.onAcceptedCallback = function() {
|
||||
if(walletPassword === passwordDialog.password){
|
||||
passwordDialog.close();
|
||||
@@ -2267,13 +2373,6 @@ ApplicationWindow {
|
||||
}
|
||||
|
||||
passwordDialog.onRejectedCallback = function() { appWindow.showWizard(); }
|
||||
if (inputDialogVisible) inputDialog.close()
|
||||
remoteNodeDialog.close();
|
||||
informationPopup.close()
|
||||
txConfirmationPopup.close()
|
||||
txConfirmationPopup.clearFields()
|
||||
txConfirmationPopup.rejected()
|
||||
successfulTxPopup.close();
|
||||
passwordDialog.open();
|
||||
}
|
||||
|
||||
|
||||
2
monero
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2019, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2019, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2021, The Monero Project
|
||||
// Copyright (c) 2021-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2019, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
@@ -1447,7 +1447,6 @@ Rectangle {
|
||||
var txs = [];
|
||||
for (var i = 0; i < root.txData.length; i++){
|
||||
var item = root.txData[i];
|
||||
var matched = "";
|
||||
|
||||
// daterange filtering
|
||||
if(item.timestamp < fromDate || item.timestamp > toDate){
|
||||
@@ -1543,6 +1542,7 @@ Rectangle {
|
||||
function updateTransactionsFromModel() {
|
||||
// This function copies the items of `appWindow.currentWallet.historyModel` to `root.txModelData`, as a list of javascript objects
|
||||
if(currentWallet == null || typeof currentWallet.history === "undefined" ) return;
|
||||
if(currentWallet.isBackgroundSyncing()) return;
|
||||
|
||||
var _model = root.model;
|
||||
var total = 0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2019, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2019, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
@@ -384,6 +384,7 @@ Rectangle {
|
||||
|
||||
ListElement { column1: qsTr("Mini") ; column2: ""; priority: 0}
|
||||
ListElement { column1: qsTr("Main") ; column2: ""; priority: 1}
|
||||
ListElement { column1: qsTr("Nano") ; column2: ""; priority: 2}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
@@ -400,7 +401,7 @@ Rectangle {
|
||||
|
||||
MoneroComponents.Tooltip {
|
||||
id: chainsHelpTooltip
|
||||
text: qsTr("Use the mini chain if you have a low hashrate.") + translationManager.emptyString
|
||||
text: qsTr("Use the mini or nano chains if you have a low hashrate.") + translationManager.emptyString
|
||||
}
|
||||
|
||||
MouseArea {
|
||||
@@ -448,26 +449,43 @@ Rectangle {
|
||||
id: flagsHelpTooltip
|
||||
text: "
|
||||
Usage:<br>
|
||||
--wallet Wallet address to mine to. Subaddresses and integrated addresses are not supported!<br>
|
||||
--host IP address of your Monero node, default is 127.0.0.1<br>
|
||||
--rpc-port monerod RPC API port number, default is 18081<br>
|
||||
--zmq-port monerod ZMQ pub port number, default is 18083 (same port as in monerod\'s \"--zmq-pub\" command line parameter)<br>
|
||||
--stratum Comma-separated list of IP:port for stratum server to listen on<br>
|
||||
--p2p Comma-separated list of IP:port for p2p server to listen on<br>
|
||||
--addpeers Comma-separated list of IP:port of other p2pool nodes to connect to<br>
|
||||
--light-mode Don't allocate RandomX dataset, saves 2GB of RAM<br>
|
||||
--loglevel Verbosity of the log, integer number between 0 and 6<br>
|
||||
--config Name of the p2pool config file<br>
|
||||
--data-api Path to the p2pool JSON data (use it in tandem with an external web-server)<br>
|
||||
--local-api Enable /local/ path in api path for Stratum Server and built-in miner statistics<br>
|
||||
--stratum-api An alias for --local-api<br>
|
||||
--no-cache Disable p2pool.cache<br>
|
||||
--no-color Disable colors in console output<br>
|
||||
--no-randomx Disable internal RandomX hasher: p2pool will use RPC calls to monerod to check PoW hashes<br>
|
||||
--out-peers N Maximum number of outgoing connections for p2p server (any value between 10 and 1000)<br>
|
||||
--in-peers N Maximum number of incoming connections for p2p server (any value between 10 and 1000)<br>
|
||||
--start-mining N Start built-in miner using N threads (any value between 1 and 64)<br>
|
||||
--help Show this help message
|
||||
--wallet Wallet address to mine to. Subaddresses and integrated addresses are not supported!<br>
|
||||
--host IP address of your Monero node, default is 127.0.0.1<br>
|
||||
--rpc-port monerod RPC API port number, default is 18081<br>
|
||||
--zmq-port monerod ZMQ pub port number, default is 18083 (same port as in monerod\'s \"--zmq-pub\" command line parameter)<br>
|
||||
--stratum Comma-separated list of IP:port for stratum server to listen on<br>
|
||||
--p2p Comma-separated list of IP:port for p2p server to listen on<br>
|
||||
--addpeers Comma-separated list of IP:port of other p2pool nodes to connect to<br>
|
||||
--stratum-ban-time N Number of seconds to ban misbehaving stratum client, default is 600<br>
|
||||
--light-mode Don't allocate RandomX dataset, saves 2GB of RAM<br>
|
||||
--loglevel Verbosity of the log, integer number between 0 and 6<br>
|
||||
--data-dir Path to store general p2pool files (log, cache, peer data, etc.), default is current directory<br>
|
||||
--sidechain-config Name of the p2pool sidechain parameters file (only use it if you run your own sidechain)<br>
|
||||
--data-api Path to the p2pool JSON data (use it in tandem with an external web-server)<br>
|
||||
--local-api Enable /local/ path in api path for Stratum Server and built-in miner statistics<br>
|
||||
--stratum-api An alias for --local-api<br>
|
||||
--no-cache Disable p2pool.cache<br>
|
||||
--no-color Disable colors in console output<br>
|
||||
--no-randomx Disable internal RandomX hasher: p2pool will use RPC calls to monerod to check PoW hashes<br>
|
||||
--out-peers N Maximum number of outgoing connections for p2p server (any value between 10 and 1000)<br>
|
||||
--in-peers N Maximum number of incoming connections for p2p server (any value between 10 and 1000)<br>
|
||||
--start-mining N Start built-in miner using N threads (any value between 1 and 64)<br>
|
||||
--no-autodiff Disable automatic difficulty adjustment for miners connected to stratum (WARNING: incompatible with Nicehash and MRR)<br>
|
||||
--rpc-login Specify username[:password] required for Monero RPC server<br>
|
||||
--socks5 Specify IP:port of a SOCKS5 proxy to use for outgoing connections<br>
|
||||
--no-dns Disable DNS queries, use only IP addresses to connect to peers (seed node DNS will be unavailable too)<br>
|
||||
--p2p-external-port Port number that your router uses for mapping to your local p2p port. Use it if you are behind a NAT and still want to accept incoming connections<br>
|
||||
--no-upnp Disable UPnP port forwarding<br>
|
||||
--no-igd An alias for --no-upnp<br>
|
||||
--upnp-stratum Port forward Stratum port (it's not forwarded by default)<br>
|
||||
--merge-mine IP:port and wallet address for another blockchain to merge mine with<br>
|
||||
--version Print p2pool's version and build details<br>
|
||||
--tls-cert file Load TLS certificate chain from \"file\" in the PEM format<br>
|
||||
--tls-cert-key file Load TLS certificate private key from \"file\" in the PEM format<br>
|
||||
--rpc-ssl Enable SSL on RPC connections to the Monero node<br>
|
||||
--rpc-ssl-fingerprint base64-encoded fingerprint of the Monero node's certificate (optional, use it for certificate pinning)<br>
|
||||
--no-stratum-http Disable HTTP on Stratum ports<br>
|
||||
--help Show this help message
|
||||
"
|
||||
}
|
||||
|
||||
@@ -630,6 +648,9 @@ allArgs = allArgs.filter( ( el ) => !defaultArgs.includes( el.split(" ")[0] ) )
|
||||
if (chainDropdown.currentIndex === 1) {
|
||||
chain = "main"
|
||||
}
|
||||
if (chainDropdown.currentIndex === 2) {
|
||||
chain = "nano"
|
||||
}
|
||||
var p2poolArgs = persistentSettings.p2poolFlags;
|
||||
var success = p2poolManager.start(p2poolArgs, address, chain, threads);
|
||||
if (success)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2018, The Monero Project
|
||||
// Copyright (c) 2018-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2019, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2019, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
@@ -31,6 +31,8 @@ import QtQuick.Layouts 1.1
|
||||
import QtQuick.Controls 2.0
|
||||
import QtQuick.Dialogs 1.2
|
||||
|
||||
import moneroComponents.Wallet 1.0
|
||||
|
||||
import "../../js/Utils.js" as Utils
|
||||
import "../../js/Windows.js" as Windows
|
||||
import "../../components" as MoneroComponents
|
||||
@@ -155,6 +157,28 @@ Rectangle {
|
||||
onMoved: persistentSettings.lockOnUserInActivityInterval = value
|
||||
}
|
||||
|
||||
MoneroComponents.CheckBox {
|
||||
id: backgroundSyncCheckbox
|
||||
visible: !!currentWallet && !currentWallet.isHwBacked() && !appWindow.viewOnly
|
||||
checked: appWindow.backgroundSyncType != Wallet.BackgroundSync_Off
|
||||
text: qsTr("Sync in the background when locked") + translationManager.emptyString
|
||||
toggleOnClick: false
|
||||
onClicked: {
|
||||
if (currentWallet && appWindow) {
|
||||
appWindow.showProcessingSplash(qsTr("Updating settings..."))
|
||||
|
||||
// TODO: add support for custom background password option
|
||||
var newBackgroundSyncType = Wallet.BackgroundSync_Off
|
||||
if (currentWallet.getBackgroundSyncType() === Wallet.BackgroundSync_Off)
|
||||
newBackgroundSyncType = Wallet.BackgroundSync_ReusePassword
|
||||
|
||||
// TODO: don't keep the wallet password in memory on the appWindow
|
||||
// https://github.com/monero-project/monero-gui/issues/1537#issuecomment-410055329
|
||||
currentWallet.setupBackgroundSync(newBackgroundSyncType, appWindow.walletPassword)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
MoneroComponents.CheckBox {
|
||||
checked: persistentSettings.askStopLocalNode
|
||||
onClicked: persistentSettings.askStopLocalNode = !persistentSettings.askStopLocalNode
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2019, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2018, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
10
qml.qrc
@@ -64,7 +64,7 @@
|
||||
<file>lang/flags/cz.png</file>
|
||||
<file>lang/flags/dk.png</file>
|
||||
<file>lang/flags/eg.png</file>
|
||||
<file>lang/flags/esperanto.png</file>
|
||||
<file>lang/flags/eo.png</file>
|
||||
<file>lang/flags/fi.png</file>
|
||||
<file>lang/flags/fr.png</file>
|
||||
<file>lang/flags/de.png</file>
|
||||
@@ -281,9 +281,13 @@
|
||||
<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/trezor.png</file>
|
||||
<file>images/trezor@2x.png</file>
|
||||
<file>images/ledgerFlex.png</file>
|
||||
<file>images/trezor3.png</file>
|
||||
<file>images/trezor5.png</file>
|
||||
<file>images/trezorT.png</file>
|
||||
<file>images/trezorT@2x.png</file>
|
||||
<file>qtquickcontrols2.conf</file>
|
||||
<file>images/write-down.png</file>
|
||||
<file>images/write-down-white.png</file>
|
||||
|
||||
@@ -38,9 +38,6 @@
|
||||
<key>NSSupportsAutomaticGraphicsSwitching</key>
|
||||
<true/>
|
||||
|
||||
<key>NSRequiresAquaSystemAppearance</key>
|
||||
<string>True</string>
|
||||
|
||||
<key>CFBundleURLTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2014-2019, The Monero Project
|
||||
// Copyright (c) 2014-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2020, The Monero Project
|
||||
// Copyright (c) 2020-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2020, The Monero Project
|
||||
// Copyright (c) 2020-2024, The Monero Project
|
||||
//
|
||||
// All rights reserved.
|
||||
//
|
||||
|
||||