Merge branch 'master' into mk_master

This commit is contained in:
Manfred Karrer 2018-05-15 23:17:34 +02:00
commit fc81c92f20
No known key found for this signature in database
GPG key ID: 401250966A6B2C46
39 changed files with 516 additions and 192 deletions

2
.gitignore vendored
View file

@ -26,3 +26,5 @@ build
desktop.ini
*/target/*
*.class
deploy
releases/*

View file

@ -18,7 +18,7 @@ Status
------
Bisq has released the beta version on the 27th of April 2016. It is operational since that time without any major incident.
Please follow the current development state at our [road map]( https://bisq.network/roadmap).
For the latest version checkout our [releases page](https://github.com/bisq-network/exchange/releases) at Github.
For the latest version checkout our [releases page](https://github.com/bisq-network/exchange/releases) at GitHub.
Building from source
--------------------

View file

@ -3,7 +3,7 @@ buildscript {
jcenter()
}
dependencies {
classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.2'
classpath 'com.github.jengelman.gradle.plugins:shadow:2.0.4'
classpath files('gradle/witness/gradle-witness.jar')
}
}
@ -12,14 +12,21 @@ apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'maven'
apply plugin: 'witness'
apply plugin: 'com.github.johnrengelman.shadow'
group = 'network.bisq'
version = '-SNAPSHOT'
version = '0.7.0-SNAPSHOT'
sourceCompatibility = 1.8
mainClassName = 'bisq.desktop.app.BisqAppMain'
jar {
manifest.attributes(
'Class-Path': 'bcpg-jdk15on-1.56.jar bcprov-jdk15on-1.56.jar'
)
}
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}

View file

@ -1,4 +1,4 @@
Contributing to bisq
Contributing to Bisq
============================
Pull requests

View file

@ -1,5 +1,5 @@
#!/bin/sh
# Restart bisq seed node daemons whose resident memory (RSS)
# Restart Bisq seed node daemons whose resident memory (RSS)
# is over MAX_RSS_MiB.
#
# Scripts in the INITDIR must contain a ``SN_ADDRESS=<host:port>``
@ -13,7 +13,7 @@ MAX_RSS_MiB=400
PIDDIR=/var/run/bisq-sn
INITDIR=/etc/init.d
# Restart de daemon with the given address.
# Restart the daemon with the given address.
restart() {
rcscript=$(grep -El "^SN_ADDRESS=['\"]?$1['\"]?" $INITDIR/*)
if [ "$rcscript" ]; then

View file

@ -2,7 +2,7 @@
# Here are the typical locations for the data directory:
# Mac OSX: /Users/username/Library/Application Support/bisq/
# macOS: /Users/username/Library/Application Support/bisq/
# Linux: /home/username/.bisq/
# Windows XP: C:\Documents and Settings\username\Application Data\bisq\
# Windows Vista or 7: %appdata%/bisq/

View file

@ -103,7 +103,7 @@ If you want to build the binaries check out the build scripts under the package
DAO full node
-----------------
If you want to run your own BSQ transaction verification node you have to run Bitcoin Core with RPC enabled and
use dedicated program arguments for the bisq node.
use dedicated program arguments for the Bisq node.
See https://github.com/bisq-network/bisq-desktop/blob/master/doc/rpc.md for more details.

View file

@ -10,7 +10,7 @@ JAVA_HOME=/usr/lib/jvm/java-8-oracle
# and add JAVA_HOME to .bashrc
# export JAVA_HOME=/usr/lib/jvm/java-8-oracle
echo "Install bisq"
echo "Install Bisq"
cd ~/bisq
./gradlew build
cd ..

View file

@ -6,25 +6,25 @@ NOTE: this doc is out of date and should probably be deleted. Protobuffer stuff
Protobuffer is installed automatically via the Gradle build.
## Why protobuffer?
## Why Protobuffer?
There are a number of reasons why protobuffer was chosen, here are some of them:
* avoids java serialisation security issues
* smaller in size than java serialisation (less network usage)
* All P2P network messages are described in a clear protobuffer schema
* All P2P network messages are described in a clear Protobuffer schema
* allows to evolve your schema in a backward compatible way
* can generate code in many languages, making alternative bisq clients or monitoring tools easier
## Which classes are transformed to protobuffer?
## Which classes are transformed to Protobuffer?
All classes in the 'wire' module. This module contains the following classes:
* classes sent over the wire (P2P network)
* classes serialized to disk
## Where are the protobuffer related files?
## Where are the Protobuffer related files?
The protobuffer schema file(s), generated classes and domain classes are in the 'wire' module.
The Protobuffer schema file(s), generated classes and domain classes are in the 'wire' module.
Look for *.proto for the schema files.
## How is serialisation done (Java -> Protobuffer)
@ -36,7 +36,7 @@ Some interfaces have a 'toProtobuf' method to force all extending classes to imp
Some interfaces have a 'toProtobuf' method to force all extending classes to implement that method.
## If fields are not filled in, what are protobuffer's default values?
## If fields are not filled in, what are Protobuffer's default values?
Read this very carefully:
@ -82,7 +82,7 @@ https://ruedigermoeller.github.io/fast-serialization/
* Try to use value objects for data which gets serialized with PB
* Use toProto and a static fromProto in the class which gets serialized
* Use proto as name for the PB param in the fromProto method
* If a constructor is used only for PB make it private and put it to the PB section, so its clear it is used only in that context
* If a constructor is used only for PB make it private and put it to the PB section, so it's clear it is used only in that context
* Use same name for classes and fields in PB definition as in the java code base
* Use final
* Use Lombok Annotations

View file

@ -20,7 +20,7 @@ For mainnet:
--fullDaoNode=true --rpcUser=bisq --rpcPassword=bisqPW --rpcPort=8332 --rpcBlockNotificationPort=4159
If you use mainnet it is recommended to use a Bitcoin node with no funds in the wallet to avoid security risks when
enabling rpc or take sufficient precautions from your network setup.
enabling RPC or take sufficient precautions from your network setup.
In the bitcoin.conf file you need to set txindex=1.
That causes a re-index of the whole data base which takes considerable time with a
@ -31,6 +31,6 @@ If you want to dump the blockchain data to json add: --dumpBlockchainData=true (
If you use RegTest in development environment you need to create the genesis transaction.
Create one Bitcoin transaction from Bitcoin Core to one or 2 Bisq instances using the BSQ receive addresses from those apps (1 tx with 2 or more outputs to the Bisq app).
If you copy the BSQ address and use that in Bitcoin Core you need to remove the "B" at the beginning. This is only for protection to mix up BTC and BSQ addresses but without the B it is a native Bitcoin address.
Create one block with the debug commandline inside Bitcoin Core (generate 1). Look up the block height in the info screen in the debug window.
Create one block with the debug command line inside Bitcoin Core (generate 1). Look up the block height in the info screen in the debug window.
Set the block height and transaction ID at BsqBlockChain.BTC_REG_TEST_GENESIS_TX_ID and BsqBlockChain.BTC_REG_TEST_GENESIS_BLOCK_HEIGHT.
Restart the Bisq apps. After that the app will recognize the received Bitcoin as BSQ.

View file

@ -1,4 +1,4 @@
## UI Architecure pattern:
## UI Architecture pattern:
We use a variant of the **Presentation Model** pattern which has some similarities with the **Model View ViewModel**
(MVVM used in Silverlight and WPF) as we use data bindings, though there are differences in the way the view and
the "code behind" is organized (due to different framework features/support).
@ -25,7 +25,7 @@ For prototyping the UI we stick first with a more rapid development style approa
* View/CB is responsible for the visual representation. No logic. No state.
* Presentation model holds the view/CB state.
* Presentation model handles view specific logic.
* Presentation model does validation of user in put and formatting of domain data.
* Presentation model does validation of user input and formatting of domain data.
* Model is the domain specific representation of the view. It holds domain data and handles domain logic.

51
package/29CDFD3B.asc Normal file
View file

@ -0,0 +1,51 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
NYeOG8Xnm4CxuWqUu0FDMv6BhkMCTz2X4xcnbtI=
=9LRS
-----END PGP PUBLIC KEY BLOCK-----

50
package/5BC5ED73.asc Normal file
View file

@ -0,0 +1,50 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=AWz+
-----END PGP PUBLIC KEY BLOCK-----

156
package/F379A1C6.asc Normal file
View file

@ -0,0 +1,156 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
vUTpzlk=
=ZIr3
-----END PGP PUBLIC KEY BLOCK-----

View file

@ -6,11 +6,11 @@ mkdir -p deploy
set -e
# Edit version
version=0.6.7
version=0.7.0
dir="/media/sf_vm_shared_ubuntu14_32bit"
# Note: fakeroot needs to be installed on linux
# Note: fakeroot needs to be installed on Linux
$JAVA_HOME/bin/javapackager \
-deploy \
-Bruntime="$JAVA_HOME/jre" \
@ -26,8 +26,8 @@ $JAVA_HOME/bin/javapackager \
-vendor Bisq \
-outdir deploy \
-srcfiles "$dir/Bisq-$version.jar" \
-srcfiles "$dir/bcpg-jdk15on.jar" \
-srcfiles "$dir/bcprov-jdk15on.jar" \
-srcfiles "$dir/bcpg-jdk15on-1.56.jar" \
-srcfiles "$dir/bcprov-jdk15on-1.56.jar" \
-srcfiles package/linux/LICENSE \
-appclass bisq.desktop.app.BisqAppMain \
-BjvmOptions=-Xss1280k \
@ -44,7 +44,7 @@ $JAVA_HOME/bin/javapackager \
# sudo alien -r -c -k deploy/bundles/bisq-$version.deb
cp "deploy/bundles/bisq-$version.deb" "/home/bitsquare/Desktop/Bisq-32bit-$version.deb"
cp "deploy/bundles/bisq-$version.deb" "/home/$USER/Desktop/Bisq-32bit-$version.deb"
mv "deploy/bundles/bisq-$version.deb" "/media/sf_vm_shared_ubuntu14_32bit/Bisq-32bit-$version.deb"
# mv "bisq-$version-1.i386.rpm" "/media/sf_vm_shared_ubuntu14_32bit/Bisq-32bit-$version.rpm"

View file

@ -6,11 +6,11 @@ mkdir -p deploy
set -e
# Edit version
version=0.6.7
version=0.7.0
dir="/media/sf_vm_shared_ubuntu"
# Note: fakeroot needs to be installed on linux
# Note: fakeroot needs to be installed on Linux
$JAVA_HOME/bin/javapackager \
-deploy \
-Bruntime="$JAVA_HOME/jre" \
@ -26,8 +26,8 @@ $JAVA_HOME/bin/javapackager \
-vendor Bisq \
-outdir deploy \
-srcfiles "$dir/Bisq-$version.jar" \
-srcfiles "$dir/bcpg-jdk15on.jar" \
-srcfiles "$dir/bcprov-jdk15on.jar" \
-srcfiles "$dir/bcpg-jdk15on-1.56.jar" \
-srcfiles "$dir/bcprov-jdk15on-1.56.jar" \
-srcfiles package/linux/LICENSE \
-appclass bisq.desktop.app.BisqAppMain \
-BjvmOptions=-Xss1280k \
@ -44,7 +44,7 @@ $JAVA_HOME/bin/javapackager \
# uncomment because the build VM does not support alien
#sudo alien -r -c -k deploy/bundles/bisq-$version.deb
cp "deploy/bundles/bisq-$version.deb" "/home/mk/Desktop/Bisq-64bit-$version.deb"
cp "deploy/bundles/bisq-$version.deb" "/home/$USER/Desktop/Bisq-64bit-$version.deb"
mv "deploy/bundles/bisq-$version.deb" "/media/sf_vm_shared_ubuntu/Bisq-64bit-$version.deb"
#mv "bisq-$version-1.x86_64.rpm" "/media/sf_vm_shared_ubuntu/Bisq-64bit-$version.rpm"
rm -r deploy/

View file

@ -8,7 +8,7 @@
# pull base image
FROM openjdk:8-jdk
ENV version 0.6.7
ENV version 0.7.0
RUN apt-get update && apt-get install -y --no-install-recommends openjfx && rm -rf /var/lib/apt/lists/* &&
apt-get install -y vim fakeroot

31
package/linux/rpm.sh Normal file
View file

@ -0,0 +1,31 @@
#!/bin/bash
## From https://github.com/bisq-network/bisq-desktop/issues/401#issuecomment-372091261
version=0.7.0
alien -r -g /home/$USER/Desktop/Bisq-64bit-$version.deb
find bisq-$version -type f | while read LIB; do LDDOUT=$(ldd $LIB 2>&1); LDDRETVAL=$?;if [ \( -z "${LDDOUT%%*you do not have execution permission for*}" \) -a \( $LDDRETVAL -eq 0 \) ]; then chmod -v +x $LIB;fi;done
cat bisq-$version/bisq-$version-2.spec | while read LINE; do if echo "$LINE" | grep -q "_unpackaged_files_terminate_build" ;then break; else echo "$LINE";fi;done > bisq.spec
rm bisq-$version/bisq-$version-2.spec
echo "AutoReqProv: no" >> bisq.spec
find bisq-$version | /usr/lib/rpm/rpmdeps --requires 2>&1| while read LIB; do if [ -z "$(find bisq-$version -name ${LIB%%(*}\*)" ]; then echo "Requires: $LIB"; fi; done | egrep -v '(libavcodec|libavformat|libavutil)' >> bisq.spec
cat >> bisq.spec << "EOF"
%description
Bisq is ....
%preun
if [ "$1" = 0 ]; then
xdg-desktop-menu uninstall --novendor /opt/Bisq/Bisq.desktop
fi
%post
xdg-desktop-menu install --novendor /opt/Bisq/Bisq.desktop
%files
/opt/Bisq
EOF
pushd bisq-$version
rpmbuild --buildroot=$(pwd) -bb --target x86_64 ../bisq.spec
popd

View file

@ -22,7 +22,7 @@
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>1</string>
<!-- CFBundleSignature exists only for compatibility with Classic Mac OS apps and documents. Modern Mac OS X apps don't need to worry about assigning a Bundle Signature.-->
<!-- CFBundleSignature exists only for compatibility with Classic macOS apps and documents. Modern macOS apps don't need to worry about assigning a Bundle Signature.-->
<key>CFBundleSignature</key>
<string>????</string>
<key>LSApplicationCategoryType</key>
@ -30,7 +30,7 @@
<key>CFBundleVersion</key>
<string>1</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright (C) 2015</string>
<string>Copyright (C) 2018</string>
<key>NSHighResolutionCapable</key>
<string>true</string>
<key>JVMRuntime</key>
@ -40,7 +40,7 @@
<key>JVMAppClasspath</key>
<string></string>
<key>JVMMainJarName</key>
<string>shaded.jar</string>
<string>Bisq-0.7.0.jar</string>
<key>JVMPreferencesID</key>
<string>bisq</string>
<key>JVMOptions</key>

View file

@ -1,13 +1,16 @@
#!/bin/bash
cd ../../
cd $(dirname $0)/../../
mkdir -p deploy
set -e
version="0.6.7"
version="0.7.0"
./gradlew build
./gradlew --include-build ../common --include-build ../assets --include-build ../p2p --include-build ../core build -x test shadowJar
EXE_JAR=build/libs/bisq-desktop-0.7.0-all.jar
linux32=build/vm/vm_shared_ubuntu14_32bit
linux64=build/vm/vm_shared_ubuntu
@ -16,14 +19,44 @@ win64=build/vm/vm_shared_windows
mkdir -p $linux32 $linux64 $win32 $win64
cp build/libs/bisq-desktop.jar "deploy/Bisq-$version.jar"
cp $EXE_JAR "deploy/Bisq-$version.jar"
# copy app jar to VM shared folders
cp build/libs/bisq-desktop.jar "$linux32/Bisq-$version.jar"
cp build/libs/bisq-desktop.jar "$linux64/Bisq-$version.jar"
cp $EXE_JAR "$linux32/Bisq-$version.jar"
cp $EXE_JAR "$linux64/Bisq-$version.jar"
# At windows we don't add the version nr as it would keep multiple versions of jar files in app dir
cp build/libs/bisq-desktop.jar "$win32/Bisq.jar"
cp build/libs/bisq-desktop.jar "$win64/Bisq.jar"
cp $EXE_JAR "$win32/Bisq.jar"
cp $EXE_JAR "$win64/Bisq.jar"
# copy bouncycastle jars to VM shared folders
bc_lib1=bcpg-jdk15on-1.56.jar
cp build/app/lib/$bc_lib1 "$linux32/$bc_lib1"
cp build/app/lib/$bc_lib1 "$linux64/$bc_lib1"
cp build/app/lib/$bc_lib1 "$win32/$bc_lib1"
cp build/app/lib/$bc_lib1 "$win64/$bc_lib1"
bc_lib2=bcprov-jdk15on-1.56.jar
cp build/app/lib/$bc_lib2 "$linux32/$bc_lib2"
cp build/app/lib/$bc_lib2 "$linux64/$bc_lib2"
cp build/app/lib/$bc_lib2 "$win32/$bc_lib2"
cp build/app/lib/$bc_lib2 "$win64/$bc_lib2"
# Copy packager scripts to VM. No need to checkout the source as we only are interested in the build scripts.
rm -rf "$linux32/package"
rm -rf "$linux64/package"
rm -rf "$win32/package"
rm -rf "$win64/package"
mkdir -p "$linux32/package"
mkdir -p "$linux64/package"
mkdir -p "$win32/package"
mkdir -p "$win64/package"
cp -r package/linux "$linux32/package"
cp -r package/linux "$linux64/package"
cp -r package/windows "$win32/package"
cp -r package/windows "$win64/package"
if [ -z "$JAVA_HOME" ]; then
JAVA_HOME=$(/usr/libexec/java_home)
@ -33,7 +66,7 @@ echo "Using JAVA_HOME: $JAVA_HOME"
$JAVA_HOME/bin/javapackager \
-deploy \
-BappVersion=$version \
-Bmac.CFBundleIdentifier=bisq \
-Bmac.CFBundleIdentifier=io.bisq \
-Bmac.CFBundleName=Bisq \
-Bicon=package/osx/Bisq.icns \
-Bruntime="$JAVA_HOME/jre" \
@ -43,6 +76,8 @@ $JAVA_HOME/bin/javapackager \
-vendor Bisq \
-outdir deploy \
-srcfiles "deploy/Bisq-$version.jar" \
-srcfiles "build/app/lib//$bc_lib1" \
-srcfiles "build/app/lib//$bc_lib2" \
-appclass bisq.desktop.app.BisqAppMain \
-outfile Bisq

65
package/osx/finalize.sh Normal file → Executable file
View file

@ -1,34 +1,42 @@
#!/bin/bash
version="0.6.7"
cd ../../
target_dir="/Users/dev/Documents/__bisq/_releases/$version"
src_dir="/Users/dev/idea/exchange"
version="0.7.0"
target_dir="releases/$version"
linux32=build/vm/vm_shared_ubuntu14_32bit
linux64=build/vm/vm_shared_ubuntu
win32=build/vm/vm_shared_windows_32bit
win64=build/vm/vm_shared_windows
#macOS=build/vm/vm_shared_macosx
macOS=deploy
# Set BISQ_GPG_USER as environment var to the email address used for gpg signing. e.g. BISQ_GPG_USER=manfred@bitsquare.io
rm -r $target_dir
mkdir -p $target_dir
# new signing key
#cp "$target_dir/../7D20BB32.asc" "$target_dir/"
# sig key mkarrer
cp "$target_dir/../F379A1C6.asc" "$target_dir/"
cp "$target_dir/../../package/F379A1C6.asc" "$target_dir/"
# sig key cbeams
cp "$target_dir/../5BC5ED73.asc" "$target_dir/"
cp "$target_dir/../../package/5BC5ED73.asc" "$target_dir/"
# sig key Christoph Atteneder
cp "$target_dir/../29CDFD3B.asc" "$target_dir/"
cp "$target_dir/../../package/29CDFD3B.asc" "$target_dir/"
# signing key
cp "$target_dir/../signingkey.asc" "$target_dir/"
cp "$target_dir/../../package/signingkey.asc" "$target_dir/"
mac="Bisq-$version.dmg"
cp "$src_dir/deploy/$mac" "$target_dir/"
dmg="Bisq-$version.dmg"
cp "$macOS/$dmg" "$target_dir/"
deb32="Bisq-32bit-$version.deb"
cp "/Users/dev/vm_shared_ubuntu14_32bit/$deb32" "$target_dir/"
cp "$linux32/$deb32" "$target_dir/"
deb64="Bisq-64bit-$version.deb"
cp "/Users/dev/vm_shared_ubuntu/$deb64" "$target_dir/"
cp "$linux64/$deb64" "$target_dir/"
#rpm32="Bisq-32bit-$version.rpm"
#cp "/Users/dev/vm_shared_ubuntu14_32bit/$rpm32" "$target_dir/"
@ -38,27 +46,28 @@ cp "/Users/dev/vm_shared_ubuntu/$deb64" "$target_dir/"
exe="Bisq-$version.exe"
win32="Bisq-32bit-$version.exe"
cp "/Users/dev/vm_shared_windows_32bit/bundles/$exe" "$target_dir/$win32"
win64="Bisq-64bit-$version.exe"
cp "/Users/dev/vm_shared_windows/bundles/$exe" "$target_dir/$win64"
exe32="Bisq-32bit-$version.exe"
cp "$win32/bundles/$exe" "$target_dir/$exe32"
exe64="Bisq-64bit-$version.exe"
cp "$win64/bundles/$exe" "$target_dir/$exe64"
#cp "/Users/dev/vm_shared_windows/bundles/$exe" "/Users/dev/vm_shared_win10/$win64"
cd "$target_dir"
gpg --digest-algo SHA256 --local-user manfred@bitsquare.io --output $mac.asc --detach-sig --armor $mac
gpg --digest-algo SHA256 --local-user manfred@bitsquare.io --output $deb64.asc --detach-sig --armor $deb64
gpg --digest-algo SHA256 --local-user manfred@bitsquare.io --output $deb32.asc --detach-sig --armor $deb32
gpg --digest-algo SHA256 --local-user manfred@bitsquare.io --output $win64.asc --detach-sig --armor $win64
gpg --digest-algo SHA256 --local-user manfred@bitsquare.io --output $win32.asc --detach-sig --armor $win32
gpg --digest-algo SHA256 --local-user $BISQ_GPG_USER --output $dmg.asc --detach-sig --armor $dmg
gpg --digest-algo SHA256 --local-user $BISQ_GPG_USER --output $deb64.asc --detach-sig --armor $deb64
gpg --digest-algo SHA256 --local-user $BISQ_GPG_USER --output $deb32.asc --detach-sig --armor $deb32
gpg --digest-algo SHA256 --local-user $BISQ_GPG_USER --output $exe64.asc --detach-sig --armor $exe64
gpg --digest-algo SHA256 --local-user $BISQ_GPG_USER --output $exe32.asc --detach-sig --armor $exe32
gpg --digest-algo SHA256 --verify $mac{.asc*,}
gpg --digest-algo SHA256 --verify $dmg{.asc*,}
gpg --digest-algo SHA256 --verify $deb64{.asc*,}
gpg --digest-algo SHA256 --verify $deb32{.asc*,}
gpg --digest-algo SHA256 --verify $win64{.asc*,}
gpg --digest-algo SHA256 --verify $win32{.asc*,}
gpg --digest-algo SHA256 --verify $exe64{.asc*,}
gpg --digest-algo SHA256 --verify $exe32{.asc*,}
cp -r $target_dir /Users/dev/vm_shared_windows_32bit/
mkdir ../../build/vm/vm_shared_windows_32bit/$version
cp -r . ../../build/vm/vm_shared_windows_32bit/$version
open "$target_dir"
open "."

1
package/signingkey.asc Normal file
View file

@ -0,0 +1 @@
F379A1C6

View file

@ -1,11 +1,11 @@
:: Invoke from bisq home directory
:: Invoke from Bisq home directory
:: edit iss file -> AppVersion
:: edit -> -BappVersion and -srcfiles
:: 32 bit build
:: Needs Inno Setup 5 or later (http://www.jrsoftware.org/isdl.php)
SET version=0.6.7
SET version=0.7.0
:: Private setup
SET outdir=\\VBOXSVR\vm_shared_windows_32bit
@ -21,8 +21,8 @@ call "%JAVA_HOME%\bin\javapackager.exe" -deploy ^
-outdir %outdir% ^
-appclass bisq.desktop.app.BisqAppMain ^
-srcfiles %outdir%\Bisq.jar ^
-srcfiles %outdir%\bcpg-jdk15on.jar ^
-srcfiles %outdir%\bcprov-jdk15on.jar ^
-srcfiles %outdir%\bcpg-jdk15on-1.56.jar ^
-srcfiles %outdir%\bcprov-jdk15on-1.56.jar ^
-outfile Bisq ^
-Bruntime="%JAVA_HOME%\jre"

View file

@ -1,11 +1,11 @@
:: Invoke from bisq home directory
:: Invoke from Bisq home directory
:: edit iss file -> AppVersion
:: edit -> -BappVersion and -srcfiles
:: 64 bit build
:: Needs Inno Setup 5 or later (http://www.jrsoftware.org/isdl.php)
SET version=0.6.7
SET version=0.7.0
:: Private setup
SET outdir=\\VBOXSVR\vm_shared_windows
@ -21,8 +21,8 @@ call "%JAVA_HOME%\bin\javapackager.exe" -deploy ^
-outdir %outdir% ^
-appclass bisq.desktop.app.BisqAppMain ^
-srcfiles %outdir%\Bisq.jar ^
-srcfiles %outdir%\bcpg-jdk15on.jar ^
-srcfiles %outdir%\bcprov-jdk15on.jar ^
-srcfiles %outdir%\bcpg-jdk15on-1.56.jar ^
-srcfiles %outdir%\bcprov-jdk15on-1.56.jar ^
-outfile Bisq ^
-Bruntime="%JAVA_HOME%\jre"

View file

@ -3,7 +3,7 @@
[Setup]
AppId={{bisq}}
AppName=Bisq
AppVersion=0.6.7
AppVersion=0.7.0
AppVerName=Bisq
AppPublisher=Bisq
AppComments=Bisq

View file

@ -106,7 +106,7 @@ public class SystemTray {
BufferedImage trayIconImage = ImageIO.read(getClass().getResource(path));
TrayIcon trayIcon = new TrayIcon(trayIconImage);
// On Windows and Linux the icon needs to be scaled
// On OSX we get the correct size from the provided image
// On macOS we get the correct size from the provided image
if (!Utilities.isOSX()) {
int trayIconWidth = trayIcon.getSize().width;
trayIcon = new TrayIcon(trayIconImage.getScaledInstance(trayIconWidth, -1, Image.SCALE_SMOOTH));

View file

@ -45,7 +45,6 @@ import bisq.common.UserThread;
import bisq.common.app.DevEnv;
import bisq.common.setup.GracefulShutDownHandler;
import bisq.common.setup.UncaughtExceptionHandler;
import bisq.common.storage.Storage;
import bisq.common.util.Profiler;
import bisq.common.util.Utilities;
@ -127,8 +126,6 @@ public class BisqApp extends Application implements UncaughtExceptionHandler {
scene = createAndConfigScene(mainView, injector);
setupStage(scene);
setDatabaseCorruptionHandler(mainView);
checkForCorrectOSArchitecture();
UserThread.runPeriodically(() -> Profiler.printSystemLoad(log), LOG_MEMORY_PERIOD_MIN, TimeUnit.MINUTES);
@ -164,7 +161,7 @@ public class BisqApp extends Application implements UncaughtExceptionHandler {
public void handleUncaughtException(Throwable throwable, boolean doShutDown) {
if (!shutDownRequested) {
if (scene == null) {
log.warn("Scene not available yet, we create a new scene. The bug might be caused by an exception in a constructor or by a circular dependency in guice. throwable=" + throwable.toString());
log.warn("Scene not available yet, we create a new scene. The bug might be caused by an exception in a constructor or by a circular dependency in Guice. throwable=" + throwable.toString());
scene = new Scene(new StackPane(), 1000, 650);
scene.getStylesheets().setAll(
"/bisq/desktop/bisq.css",
@ -228,7 +225,7 @@ public class BisqApp extends Application implements UncaughtExceptionHandler {
stage.setMinWidth(1020);
stage.setMinHeight(620);
// on windows the title icon is also used as task bar icon in a larger size
// on Windows the title icon is also used as task bar icon in a larger size
// on Linux no title icon is supported but also a large task bar icon is derived from that title icon
String iconPath;
if (Utilities.isOSX())
@ -249,16 +246,6 @@ public class BisqApp extends Application implements UncaughtExceptionHandler {
return (MainView) viewLoader.load(MainView.class);
}
private void setDatabaseCorruptionHandler(MainView mainView) {
Storage.setDatabaseCorruptionHandler((String fileName) -> {
corruptedDatabaseFiles.add(fileName);
if (mainView != null)
mainView.setPersistedFilesCorrupted(corruptedDatabaseFiles);
});
mainView.setPersistedFilesCorrupted(corruptedDatabaseFiles);
}
private void addSceneKeyEventHandler(Scene scene, Injector injector) {
scene.addEventHandler(KeyEvent.KEY_RELEASED, keyEvent -> {
Utilities.isAltOrCtrlPressed(KeyCode.W, keyEvent);

View file

@ -47,7 +47,6 @@ import bisq.core.locale.Res;
import bisq.common.Timer;
import bisq.common.UserThread;
import bisq.common.app.DevEnv;
import bisq.common.app.Version;
import bisq.common.util.Tuple2;
import bisq.common.util.Utilities;
@ -83,8 +82,6 @@ import javafx.geometry.Pos;
import javafx.beans.value.ChangeListener;
import java.util.List;
import lombok.extern.slf4j.Slf4j;
import static javafx.scene.layout.AnchorPane.setBottomAnchor;
@ -105,25 +102,21 @@ public class MainView extends InitializableView<StackPane, MainViewModel> {
@SuppressWarnings("PointlessBooleanExpression")
public static void blur() {
if (!DevEnv.STRESS_TEST_MODE)
transitions.blur(MainView.rootContainer);
}
@SuppressWarnings("PointlessBooleanExpression")
public static void blurLight() {
if (!DevEnv.STRESS_TEST_MODE)
transitions.blur(MainView.rootContainer, Transitions.DEFAULT_DURATION, -0.1, false, 5);
}
@SuppressWarnings("PointlessBooleanExpression")
public static void blurUltraLight() {
if (!DevEnv.STRESS_TEST_MODE)
transitions.blur(MainView.rootContainer, Transitions.DEFAULT_DURATION, -0.1, false, 2);
}
@SuppressWarnings("PointlessBooleanExpression")
public static void darken() {
if (!DevEnv.STRESS_TEST_MODE)
transitions.darken(MainView.rootContainer, Transitions.DEFAULT_DURATION, false);
}
@ -149,7 +142,6 @@ public class MainView extends InitializableView<StackPane, MainViewModel> {
private Label splashP2PNetworkLabel;
private ProgressBar btcSyncIndicator;
private Label btcSplashInfo;
private List<String> persistedFilesCorrupted;
private Popup<?> p2PNetworkWarnMsgPopup, btcNetworkWarnMsgPopup;
@SuppressWarnings("WeakerAccess")
@ -312,21 +304,6 @@ public class MainView extends InitializableView<StackPane, MainViewModel> {
if (newValue) {
navigation.navigateToPreviousVisitedView();
if (!persistedFilesCorrupted.isEmpty()) {
if (persistedFilesCorrupted.size() > 1 || !persistedFilesCorrupted.get(0).equals("ViewPathAsString")) {
// show warning that some files has been corrupted
new Popup<>()
.warning(Res.get("popup.warning.incompatibleDB",
persistedFilesCorrupted.toString(),
model.getAppDateDir()))
.useShutDownButton()
.show();
} else {
log.debug("We detected incompatible data base file for Navigation. That is a minor issue happening with refactoring of UI classes " +
"and we don't display a warning popup to the user.");
}
}
transitions.fadeOutAndRemove(splashScreen, 1500, actionEvent -> disposeSplashScreen());
}
});
@ -464,10 +441,6 @@ public class MainView extends InitializableView<StackPane, MainViewModel> {
}
}
public void setPersistedFilesCorrupted(List<String> persistedFilesCorrupted) {
this.persistedFilesCorrupted = persistedFilesCorrupted;
}
private VBox createSplashScreen() {
VBox vBox = new VBox();
vBox.setAlignment(Pos.CENTER);

View file

@ -88,6 +88,7 @@ import bisq.common.app.Version;
import bisq.common.crypto.CryptoException;
import bisq.common.crypto.KeyRing;
import bisq.common.crypto.SealedAndSigned;
import bisq.common.storage.CorruptedDatabaseFilesHandler;
import org.bitcoinj.core.Address;
import org.bitcoinj.core.Coin;
@ -174,12 +175,13 @@ public class MainViewModel implements ViewModel {
private final ClosedTradableManager closedTradableManager;
private final AccountAgeWitnessService accountAgeWitnessService;
final TorNetworkSettingsWindow torNetworkSettingsWindow;
private final CorruptedDatabaseFilesHandler corruptedDatabaseFilesHandler;
private final BSFormatter formatter;
// BTC network
final StringProperty btcInfo = new SimpleStringProperty(Res.get("mainView.footer.btcInfo.initializing"));
@SuppressWarnings("ConstantConditions")
final DoubleProperty btcSyncProgress = new SimpleDoubleProperty(DevEnv.STRESS_TEST_MODE ? 0 : -1);
final DoubleProperty btcSyncProgress = new SimpleDoubleProperty(-1);
final StringProperty walletServiceErrorMsg = new SimpleStringProperty();
final StringProperty btcSplashSyncIconId = new SimpleStringProperty();
private final StringProperty marketPriceCurrencyCode = new SimpleStringProperty("");
@ -248,7 +250,8 @@ public class MainViewModel implements ViewModel {
DaoSetup daoSetup, EncryptionService encryptionService,
KeyRing keyRing, BisqEnvironment bisqEnvironment, FailedTradesManager failedTradesManager,
ClosedTradableManager closedTradableManager, AccountAgeWitnessService accountAgeWitnessService,
TorNetworkSettingsWindow torNetworkSettingsWindow, BSFormatter formatter) {
TorNetworkSettingsWindow torNetworkSettingsWindow,
CorruptedDatabaseFilesHandler corruptedDatabaseFilesHandler, BSFormatter formatter) {
this.walletsManager = walletsManager;
this.walletsSetup = walletsSetup;
this.btcWalletService = btcWalletService;
@ -277,6 +280,7 @@ public class MainViewModel implements ViewModel {
this.closedTradableManager = closedTradableManager;
this.accountAgeWitnessService = accountAgeWitnessService;
this.torNetworkSettingsWindow = torNetworkSettingsWindow;
this.corruptedDatabaseFilesHandler = corruptedDatabaseFilesHandler;
this.formatter = formatter;
TxIdTextField.setPreferences(preferences);
@ -707,6 +711,8 @@ public class MainViewModel implements ViewModel {
if (walletsSetup.downloadPercentageProperty().get() == 1)
checkForLockedUpFunds();
checkForCorruptedDataBaseFiles();
allBasicServicesInitialized = true;
}
@ -1262,6 +1268,26 @@ public class MainViewModel implements ViewModel {
}
}
private void checkForCorruptedDataBaseFiles() {
List<String> files = corruptedDatabaseFilesHandler.getCorruptedDatabaseFiles();
if (files.size() == 0)
return;
if (files.size() == 1 && files.get(0).equals("ViewPathAsString")) {
log.debug("We detected incompatible data base file for Navigation. " +
"That is a minor issue happening with refactoring of UI classes " +
"and we don't display a warning popup to the user.");
return;
}
// show warning that some files have been corrupted
new Popup<>()
.warning(Res.get("popup.warning.incompatibleDB", files.toString(), getAppDateDir()))
.useShutDownButton()
.show();
}
private void setupDevDummyPaymentAccounts() {
if (user.getPaymentAccounts() != null && user.getPaymentAccounts().isEmpty()) {
PerfectMoneyAccount perfectMoneyAccount = new PerfectMoneyAccount();

View file

@ -35,15 +35,18 @@ public class SpreadItem {
@Nullable
public final Price priceSpread;
public final String percentage;
public final double percentageValue;
public final Coin totalAmount;
public SpreadItem(String currencyCode, int numberOfBuyOffers, int numberOfSellOffers, int numberOfOffers, @Nullable Price priceSpread, String percentage, Coin totalAmount) {
public SpreadItem(String currencyCode, int numberOfBuyOffers, int numberOfSellOffers, int numberOfOffers,
@Nullable Price priceSpread, String percentage, double percentageValue, Coin totalAmount) {
this.currencyCode = currencyCode;
this.numberOfBuyOffers = numberOfBuyOffers;
this.numberOfSellOffers = numberOfSellOffers;
this.numberOfOffers = numberOfOffers;
this.priceSpread = priceSpread;
this.percentage = percentage;
this.percentageValue = percentageValue;
this.totalAmount = totalAmount;
}
}

View file

@ -48,6 +48,8 @@ import javafx.collections.transformation.SortedList;
import javafx.util.Callback;
import java.util.Comparator;
@FxmlView
public class SpreadView extends ActivatableViewAndModel<GridPane, SpreadViewModel> {
private final BSFormatter formatter;
@ -93,16 +95,12 @@ public class SpreadView extends ActivatableViewAndModel<GridPane, SpreadViewMode
tableView.getColumns().add(spreadColumn);
tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
currencyColumn.setComparator((o1, o2) -> CurrencyUtil.getNameByCode(o1.currencyCode).compareTo(CurrencyUtil.getNameByCode(o2.currencyCode)));
currencyColumn.setComparator(Comparator.comparing(o -> CurrencyUtil.getNameByCode(o.currencyCode)));
numberOfOffersColumn.setComparator((o1, o2) -> Integer.valueOf(o1.numberOfOffers).compareTo(o2.numberOfOffers));
numberOfBuyOffersColumn.setComparator((o1, o2) -> Integer.valueOf(o1.numberOfBuyOffers).compareTo(o2.numberOfBuyOffers));
numberOfSellOffersColumn.setComparator((o1, o2) -> Integer.valueOf(o1.numberOfSellOffers).compareTo(o2.numberOfSellOffers));
totalAmountColumn.setComparator((o1, o2) -> o1.totalAmount.compareTo(o2.totalAmount));
spreadColumn.setComparator((o1, o2) -> {
Long spreadO1 = o1.priceSpread != null ? o1.priceSpread.getValue() : 0;
Long spreadO2 = o2.priceSpread != null ? o2.priceSpread.getValue() : 0;
return spreadO1.compareTo(spreadO2);
});
totalAmountColumn.setComparator(Comparator.comparing(o -> o.totalAmount));
spreadColumn.setComparator(Comparator.comparingDouble(o -> o.percentageValue));
numberOfOffersColumn.setSortType(TableColumn.SortType.DESCENDING);
tableView.getSortOrder().add(numberOfOffersColumn);

View file

@ -154,6 +154,7 @@ class SpreadViewModel extends ActivatableViewModel {
Price spread = null;
String percentage = "";
double percentageValue = 0;
Price bestSellOfferPrice = sellOffers.isEmpty() ? null : sellOffers.get(0).getPrice();
Price bestBuyOfferPrice = buyOffers.isEmpty() ? null : buyOffers.get(0).getPrice();
if (bestBuyOfferPrice != null && bestSellOfferPrice != null) {
@ -180,11 +181,11 @@ class SpreadViewModel extends ActivatableViewModel {
BigDecimal marketPriceAsBigDecimal = BigDecimal.valueOf(marketPriceAsDouble)
.multiply(BigDecimal.valueOf(precision));
// We multiply with 10000 because we use precision of 2 at % (100.00%)
double result = BigDecimal.valueOf(spread.getValue())
percentageValue = BigDecimal.valueOf(spread.getValue())
.multiply(BigDecimal.valueOf(10000))
.divide(marketPriceAsBigDecimal, RoundingMode.HALF_UP)
.doubleValue() / 10000;
percentage = formatter.formatPercentagePrice(result);
percentage = formatter.formatPercentagePrice(percentageValue);
}
} catch (Throwable t) {
try {
@ -210,7 +211,7 @@ class SpreadViewModel extends ActivatableViewModel {
totalAmount = Coin.valueOf(offers.stream().mapToLong(offer -> offer.getAmount().getValue()).sum());
spreadItems.add(new SpreadItem(currencyCode, buyOffers.size(), sellOffers.size(),
uniqueOffers.size(), spread, percentage, totalAmount));
uniqueOffers.size(), spread, percentage, percentageValue, totalAmount));
}
maxPlacesForAmount.set(formatAmount(totalAmount, false).length());

View file

@ -21,8 +21,6 @@ import bisq.core.offer.Offer;
import bisq.core.offer.OfferBookService;
import bisq.core.trade.TradeManager;
import bisq.common.app.Log;
import javax.inject.Inject;
import javafx.collections.FXCollections;
@ -81,7 +79,6 @@ public class OfferBook {
}
offerBookListItems.add(offerBookListItem);
Log.logIfStressTests("OfferPayload added: No. of offers = " + offerBookListItems.size());
} else {
log.debug("We have the exact same offer already in our list and ignore the onAdded call. ID={}", offer.getId());
}
@ -98,10 +95,7 @@ public class OfferBook {
Optional<OfferBookListItem> candidateToRemove = offerBookListItems.stream()
.filter(item -> item.getOffer().getId().equals(offer.getId()))
.findAny();
if (candidateToRemove.isPresent()) {
offerBookListItems.remove(candidateToRemove.get());
Log.logIfStressTests("OfferPayload removed: No. of offers = " + offerBookListItems.size());
}
candidateToRemove.ifPresent(offerBookListItems::remove);
}
});
}
@ -119,8 +113,6 @@ public class OfferBook {
.map(OfferBookListItem::new)
.collect(Collectors.toList()));
Log.logIfStressTests("OfferPayload filled: No. of offers = " + offerBookListItems.size());
log.debug("offerBookListItems.size " + offerBookListItems.size());
fillOfferCountMaps();
} catch (Throwable t) {

View file

@ -64,6 +64,8 @@ import com.google.inject.name.Named;
import javax.inject.Inject;
import de.jensd.fx.glyphs.materialdesignicons.MaterialDesignIcon;
import javafx.scene.Scene;
import javafx.scene.canvas.Canvas;
import javafx.scene.control.Button;
@ -106,10 +108,6 @@ import static bisq.desktop.util.FormBuilder.addButton;
import static bisq.desktop.util.FormBuilder.addHBoxLabelComboBox;
import static bisq.desktop.util.FormBuilder.addTitledGroupBg;
import de.jensd.fx.glyphs.materialdesignicons.MaterialDesignIcon;
@FxmlView
public class OfferBookView extends ActivatableViewAndModel<GridPane, OfferBookViewModel> {
@ -471,11 +469,20 @@ public class OfferBookView extends ActivatableViewAndModel<GridPane, OfferBookVi
}
private void onTakeOffer(Offer offer) {
if (model.isBootstrapped())
if (model.isBootstrapped()) {
if (offer.getDirection() == OfferPayload.Direction.SELL &&
offer.getPaymentMethod().getId().equals(PaymentMethod.CASH_DEPOSIT.getId())) {
new Popup<>().confirmation(Res.get("popup.info.cashDepositInfo", offer.getBankId()))
.actionButtonText(Res.get("popup.info.cashDepositInfo.confirm"))
.onAction(() -> offerActionHandler.onTakeOffer(offer))
.show();
} else {
offerActionHandler.onTakeOffer(offer);
else
}
} else {
new Popup<>().information(Res.get("popup.warning.notFullyConnected")).show();
}
}
private void onRemoveOpenOffer(Offer offer) {
if (model.isBootstrapped()) {

View file

@ -228,9 +228,9 @@ public class OfferDetailsWindow extends Overlay<OfferDetailsWindow> {
addLabelTextField(gridPane, ++rowIndex, Res.get("offerDetailsWindow.myTradingAccount"), paymentAccount.getAccountName());
} else {
final String method = Res.get(paymentMethod.getId());
String paymentMethodLabel = Res.getWithCol("shared.paymentMethod");
if (isNationalBanks || isSpecificBanks || isSepa) {
String methodWithBankId = method + bankId;
String paymentMethodLabel = Res.get("shared.paymentMethod");
if (isNationalBanks || isSpecificBanks || isSepa) {
if (BankUtil.isBankIdRequired(offer.getCountryCode()))
addLabelTextField(gridPane, ++rowIndex,
paymentMethodLabel + " " + Res.get("offerDetailsWindow.offererBankId"),
@ -239,8 +239,13 @@ public class OfferDetailsWindow extends Overlay<OfferDetailsWindow> {
addLabelTextField(gridPane, ++rowIndex,
paymentMethodLabel + " " + Res.get("offerDetailsWindow.offerersBankName"),
methodWithBankId);
}
if (paymentMethod.equals(PaymentMethod.CASH_DEPOSIT)) {
addLabelTextField(gridPane, ++rowIndex,
paymentMethodLabel + " " + Res.get("offerDetailsWindow.offererBankId"),
methodWithBankId);
} else {
addLabelTextField(gridPane, ++rowIndex, paymentMethodLabel, method);
addLabelTextField(gridPane, ++rowIndex, Res.getWithCol("shared.paymentMethod"), method);
}
}
if (showAcceptedBanks) {

View file

@ -20,12 +20,9 @@ package bisq.desktop.main.portfolio.editoffer;
import bisq.desktop.Navigation;
import bisq.desktop.common.view.FxmlView;
import bisq.desktop.components.BusyAnimation;
import bisq.desktop.main.MainView;
import bisq.desktop.main.offer.EditableOfferView;
import bisq.desktop.main.overlays.popups.Popup;
import bisq.desktop.main.overlays.windows.OfferDetailsWindow;
import bisq.desktop.main.portfolio.PortfolioView;
import bisq.desktop.main.portfolio.openoffer.OpenOffersView;
import bisq.desktop.util.BSFormatter;
import bisq.desktop.util.BsqFormatter;
import bisq.desktop.util.Transitions;
@ -33,7 +30,6 @@ import bisq.desktop.util.Transitions;
import bisq.core.locale.CurrencyUtil;
import bisq.core.locale.Res;
import bisq.core.offer.OpenOffer;
import bisq.core.user.DontShowAgainLookup;
import bisq.core.user.Preferences;
import bisq.common.util.Tuple3;
@ -175,20 +171,16 @@ public class EditOpenOfferView extends EditableOfferView<EditOpenOfferViewModel>
confirmButton.setPadding(new Insets(0, 20, 0, 20));
confirmButton.setGraphicTextGap(10);
busyAnimation = editOfferTuple.second;
Label spinnerInfoLabel = editOfferTuple.third;
cancelButton = addButton(gridPane, tmpGridRow, Res.get("shared.cancel"));
cancelButton.setDefaultButton(false);
cancelButton.setId("cancel-button");
cancelButton.setOnAction(event -> close());
confirmButton.setOnAction(e -> {
if (model.isPriceInRange()) {
model.isNextButtonDisabled.setValue(true);
cancelButton.setDisable(true);
busyAnimation.play();
@ -196,16 +188,8 @@ public class EditOpenOfferView extends EditableOfferView<EditOpenOfferViewModel>
//edit offer
model.onPublishOffer(() -> {
log.debug("Edit offer was successful");
String key = "ShowOpenOffersAfterEditing";
if (DontShowAgainLookup.showAgain(key))
//noinspection unchecked
new Popup<>().feedback(Res.get("editOffer.success"))
.actionButtonTextWithGoTo("navigation.portfolio.myOpenOffers")
.onAction(() -> navigation.navigateTo(MainView.class, PortfolioView.class, OpenOffersView.class))
.dontShowAgainId(key)
.show();
new Popup<>().feedback(Res.get("editOffer.success")).show();
spinnerInfoLabel.setText("");
close();
}, (message) -> {

View file

@ -473,6 +473,7 @@ public class OpenOffersView extends ActivatableViewAndModel<VBox, OpenOffersView
if (item != null && !empty) {
if (button == null) {
button = getIconButton(MaterialDesignIcon.DELETE_FOREVER, "delete");
button.setTooltip(new Tooltip(Res.get("shared.removeOffer")));
setGraphic(button);
}
button.setOnAction(event -> onRemoveOpenOffer(item.getOpenOffer()));
@ -505,6 +506,7 @@ public class OpenOffersView extends ActivatableViewAndModel<VBox, OpenOffersView
if (item != null && !empty) {
if (button == null) {
button = getIconButton(MaterialDesignIcon.PENCIL);
button.setTooltip(new Tooltip(Res.get("shared.editOffer")));
setGraphic(button);
}
button.setOnAction(event -> onEditOpenOffer(item.getOpenOffer()));

View file

@ -17,7 +17,6 @@
package bisq.desktop.main.settings.preferences;
import bisq.desktop.app.BisqApp;
import bisq.desktop.common.model.Activatable;
import bisq.desktop.common.view.ActivatableViewAndModel;
import bisq.desktop.common.view.FxmlView;
@ -92,7 +91,7 @@ public class PreferencesView extends ActivatableViewAndModel<GridPane, Activatab
private ComboBox<String> userLanguageComboBox;
private ComboBox<Country> userCountryComboBox;
private ComboBox<TradeCurrency> preferredTradeCurrencyComboBox;
private ComboBox<BaseCurrencyNetwork> selectBaseCurrencyNetworkComboBox;
// private ComboBox<BaseCurrencyNetwork> selectBaseCurrencyNetworkComboBox;
private CheckBox useAnimationsCheckBox, autoSelectArbitratorsCheckBox, showOwnOffersInOfferBook, sortMarketCurrenciesNumericallyCheckBox, useCustomFeeCheckbox;
private int gridRow = 0;
@ -177,12 +176,12 @@ public class PreferencesView extends ActivatableViewAndModel<GridPane, Activatab
///////////////////////////////////////////////////////////////////////////////////////////
private void initializeGeneralOptions() {
TitledGroupBg titledGroupBg = addTitledGroupBg(root, gridRow, 8, Res.get("setting.preferences.general"));
TitledGroupBg titledGroupBg = addTitledGroupBg(root, gridRow, 7, Res.get("setting.preferences.general"));
GridPane.setColumnSpan(titledGroupBg, 4);
// selectBaseCurrencyNetwork
//noinspection unchecked
selectBaseCurrencyNetworkComboBox = addLabelComboBox(root, gridRow,
/* selectBaseCurrencyNetworkComboBox = addLabelComboBox(root, gridRow,
Res.getWithCol("settings.preferences.selectCurrencyNetwork"), Layout.FIRST_ROW_DISTANCE).second;
selectBaseCurrencyNetworkComboBox.setConverter(new StringConverter<BaseCurrencyNetwork>() {
@ -196,12 +195,12 @@ public class PreferencesView extends ActivatableViewAndModel<GridPane, Activatab
public BaseCurrencyNetwork fromString(String string) {
return null;
}
});
});*/
// userLanguage
//noinspection unchecked
userLanguageComboBox = addLabelComboBox(root, ++gridRow,
Res.getWithCol("shared.language")).second;
userLanguageComboBox = addLabelComboBox(root, gridRow,
Res.getWithCol("shared.language"), Layout.FIRST_ROW_DISTANCE).second;
// userCountry
//noinspection unchecked
@ -482,9 +481,9 @@ public class PreferencesView extends ActivatableViewAndModel<GridPane, Activatab
.filter(e -> !e.isDash())
.filter(BaseCurrencyNetwork::isMainnet)
.collect(Collectors.toList());
selectBaseCurrencyNetworkComboBox.setItems(FXCollections.observableArrayList(baseCurrencyNetworks));
/* selectBaseCurrencyNetworkComboBox.setItems(FXCollections.observableArrayList(baseCurrencyNetworks));
selectBaseCurrencyNetworkComboBox.setOnAction(e -> onSelectNetwork());
selectBaseCurrencyNetworkComboBox.getSelectionModel().select(BisqEnvironment.getBaseCurrencyNetwork());
selectBaseCurrencyNetworkComboBox.getSelectionModel().select(BisqEnvironment.getBaseCurrencyNetwork());*/
boolean useCustomWithdrawalTxFee = preferences.isUseCustomWithdrawalTxFee();
useCustomFeeCheckbox.setSelected(useCustomWithdrawalTxFee);
@ -646,12 +645,12 @@ public class PreferencesView extends ActivatableViewAndModel<GridPane, Activatab
autoSelectArbitratorsCheckBox.setOnAction(e -> preferences.setAutoSelectArbitrators(autoSelectArbitratorsCheckBox.isSelected()));
}
private void onSelectNetwork() {
/* private void onSelectNetwork() {
if (selectBaseCurrencyNetworkComboBox.getSelectionModel().getSelectedItem() != BisqEnvironment.getBaseCurrencyNetwork())
selectNetwork();
}
}*/
private void selectNetwork() {
/* private void selectNetwork() {
new Popup().warning(Res.get("settings.net.needRestart"))
.onAction(() -> {
bisqEnvironment.saveBaseCryptoNetwork(selectBaseCurrencyNetworkComboBox.getSelectionModel().getSelectedItem());
@ -661,14 +660,14 @@ public class PreferencesView extends ActivatableViewAndModel<GridPane, Activatab
.closeButtonText(Res.get("shared.cancel"))
.onClose(() -> selectBaseCurrencyNetworkComboBox.getSelectionModel().select(BisqEnvironment.getBaseCurrencyNetwork()))
.show();
}
}*/
///////////////////////////////////////////////////////////////////////////////////////////
// Deactivate
///////////////////////////////////////////////////////////////////////////////////////////
private void deactivateGeneralOptions() {
selectBaseCurrencyNetworkComboBox.setOnAction(null);
// selectBaseCurrencyNetworkComboBox.setOnAction(null);
userLanguageComboBox.setOnAction(null);
userCountryComboBox.setOnAction(null);
blockChainExplorerComboBox.setOnAction(null);

View file

@ -58,7 +58,7 @@ public final class BICValidator extends InputValidator {
input = input.toUpperCase(Locale.ROOT);
// ensure Bank and Contry code to be letters only
// ensure Bank and Country code to be letters only
for (int k = 0; k < 6; k++) {
if (!Character.isLetter(input.charAt(k)))
return new ValidationResult(false, Res.get("validation.bic.letters"));
@ -69,6 +69,10 @@ public final class BICValidator extends InputValidator {
if (ch == '0' || ch == '1' || input.charAt(7) == 'O')
return new ValidationResult(false, Res.get("validation.bic.invalidLocationCode"));
if (input.startsWith("REVO"))
return new ValidationResult(false, Res.get("validation.bic.sepaRevolutBic"));
// check complete for 8 char BIC
if (input.length() == 8)
return new ValidationResult(true);
@ -77,6 +81,7 @@ public final class BICValidator extends InputValidator {
if (input.charAt(8) == 'X')
if (input.charAt(9) != 'X' || input.charAt(10) != 'X')
return new ValidationResult(false, Res.get("validation.bic.invalidBranchCode"));
return new ValidationResult(true);
}