mirror of
https://github.com/Such-Software/hash-wallet.git
synced 2026-10-26 06:08:40 +01:00
Merge branch 'cake-tech:dev' into dev
This commit is contained in:
@@ -115,6 +115,7 @@ jobs:
|
||||
run: |
|
||||
pushd scripts/android
|
||||
source ./app_env.sh cakewallet
|
||||
export GITHUB_HUH=yeah
|
||||
./app_config.sh
|
||||
popd
|
||||
|
||||
|
||||
@@ -17,6 +17,19 @@ import 'package:monero/src/generated_bindings_monero.g.dart' as monero_gen;
|
||||
import 'package:mutex/mutex.dart';
|
||||
|
||||
|
||||
String _formatTransactionError(String error) {
|
||||
final message = error.replaceAll(
|
||||
RegExp(
|
||||
r'(?:[A-Za-z]:)?[\\/][^\s:]*\.(?:c|cc|cpp|cxx|h|hpp|hxx):\d+:(?:[A-Za-z0-9_]+:)?\s*',
|
||||
),
|
||||
'',
|
||||
);
|
||||
if (message.contains("RPC error")) {
|
||||
return "Invalid node response, please try again or switch node\n\ntrace: $message";
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
||||
Map<int, Map<String, String>> txKeys = {};
|
||||
String getTxKey(String txId) {
|
||||
txKeys[currentWallet!.ffiAddress()] ??= {};
|
||||
@@ -184,11 +197,7 @@ Future<PendingTransactionDescription> createTransactionSync(
|
||||
})();
|
||||
|
||||
if (error != null) {
|
||||
String message = error;
|
||||
if (message.contains("RPC error")) {
|
||||
message = "Invalid node response, please try again or switch node\n\ntrace: $message";
|
||||
}
|
||||
throw CreationTransactionException(message: message);
|
||||
throw CreationTransactionException(message: _formatTransactionError(error));
|
||||
}
|
||||
|
||||
final rAmt = pendingTx.amount();
|
||||
@@ -237,7 +246,7 @@ Future<PendingTransactionDescription> createTransactionMultDest(
|
||||
final Wallet2PendingTransaction tx = MoneroPendingTransaction(txptr);
|
||||
|
||||
if (tx.status() != 0) {
|
||||
throw CreationTransactionException(message: tx.errorString());
|
||||
throw CreationTransactionException(message: _formatTransactionError(tx.errorString()));
|
||||
}
|
||||
|
||||
return PendingTransactionDescription(
|
||||
@@ -282,7 +291,7 @@ Future<String?> commitTransaction({required Wallet2PendingTransaction tx, requir
|
||||
|
||||
}
|
||||
if (error != null && error != "no tx keys found for this txid") {
|
||||
throw CreationTransactionException(message: error);
|
||||
throw CreationTransactionException(message: _formatTransactionError(error));
|
||||
}
|
||||
unawaited(() async {
|
||||
storeSync(force: true);
|
||||
|
||||
@@ -12,6 +12,9 @@ ANDROID_ICON_DEST_PATH=$ANDROID_ICON_DIR/ic_launcher.png
|
||||
ANDROID_ICON_SET=""
|
||||
ANDROID_ICON_SET_DEST_PATH=`pwd`/../../android/app/src/main/res
|
||||
|
||||
CAKE_ROOT=`pwd`/../../
|
||||
BRANCH_NAME=${BRANCH_NAME:-$(git rev-parse --abbrev-ref HEAD)}
|
||||
|
||||
case $APP_ANDROID_TYPE in
|
||||
"monero.com")
|
||||
APP_LOGO=$ASSETS_DIR/images/monero.com_logo.png
|
||||
@@ -27,6 +30,19 @@ esac
|
||||
|
||||
rm $APP_LOGO_DEST_PATH
|
||||
rm $ANDROID_ICON_DEST_PATH
|
||||
ln -s $APP_LOGO $APP_LOGO_DEST_PATH
|
||||
ln -s $ANDROID_ICON $ANDROID_ICON_DEST_PATH
|
||||
cp -a $APP_LOGO $APP_LOGO_DEST_PATH
|
||||
cp -a $ANDROID_ICON $ANDROID_ICON_DEST_PATH
|
||||
cp -a $ANDROID_ICON_SET/. $ANDROID_ICON_SET_DEST_PATH/
|
||||
|
||||
set -x
|
||||
if [[ $GITHUB_HUH == "yeah" ]]; then
|
||||
pwd
|
||||
for file in $(find $CAKE_ROOT/android/app/src/main/res -name "*.png") $APP_LOGO $CAKEWALLET_PATH $ASSETS_DIR/images/cakewallet_logo.png $ASSETS_DIR/images/cakewallet_icon_*.png $(find $CAKEWALLET_ICON_SET_PATH -name "*.png"); do
|
||||
git checkout HEAD -- $file &> /dev/null
|
||||
bash $CAKE_ROOT/scripts/branch_icon.sh ${BRANCH_NAME}-asd $file &> /dev/null
|
||||
done
|
||||
fi
|
||||
set +x
|
||||
|
||||
|
||||
|
||||
|
||||
Executable
+88
@@ -0,0 +1,88 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
INPUT_STRING="${1:?Usage: $0 <seed_string> <result.png>}"
|
||||
OUTPUT="${2:?Usage: $0 <seed_string> <result.png>}"
|
||||
|
||||
if [[ ! -f "$OUTPUT" ]]; then
|
||||
echo "Error: '$OUTPUT' not found." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
read -r IMG_W IMG_H < <(
|
||||
ffprobe -v error \
|
||||
-select_streams v:0 \
|
||||
-show_entries stream=width,height \
|
||||
-of csv=p=0 \
|
||||
"$OUTPUT" | tr ',' ' '
|
||||
)
|
||||
|
||||
if [[ -z "$IMG_W" || -z "$IMG_H" ]]; then
|
||||
echo "Error: could not read dimensions from '$OUTPUT'." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
HASH=$(printf '%s' "$INPUT_STRING" | sha256sum | awk '{print $1}')
|
||||
|
||||
chunk1=$(( 16#${HASH:0:8} ))
|
||||
chunk2=$(( 16#${HASH:8:8} ))
|
||||
chunk3=$(( 16#${HASH:16:8} ))
|
||||
chunk4=$(( 16#${HASH:24:8} ))
|
||||
|
||||
R=$(( chunk1 % 256 ))
|
||||
G=$(( chunk2 % 256 ))
|
||||
B=$(( chunk3 % 256 ))
|
||||
|
||||
ROTATION=$(( chunk4 % 360 ))
|
||||
|
||||
R2=$(( (chunk1 / 256) % 256 ))
|
||||
G2=$(( (chunk2 / 256) % 256 ))
|
||||
B2=$(( (chunk3 / 256) % 256 ))
|
||||
|
||||
STRLEN=${#INPUT_STRING}
|
||||
TILE_SIZE=$(( 64 + (STRLEN % 192) ))
|
||||
|
||||
GEQ_R="between(mod((X+Y),${TILE_SIZE}),0,$(( TILE_SIZE / 2 )))*${R} + between(mod((X+Y),${TILE_SIZE}),$(( TILE_SIZE / 2 + 1 )),${TILE_SIZE})*${R2}"
|
||||
GEQ_G="between(mod((X+Y),${TILE_SIZE}),0,$(( TILE_SIZE / 2 )))*${G} + between(mod((X+Y),${TILE_SIZE}),$(( TILE_SIZE / 2 + 1 )),${TILE_SIZE})*${G2}"
|
||||
GEQ_B="between(mod((X+Y),${TILE_SIZE}),0,$(( TILE_SIZE / 2 )))*${B} + between(mod((X+Y),${TILE_SIZE}),$(( TILE_SIZE / 2 + 1 )),${TILE_SIZE})*${B2}"
|
||||
|
||||
ROTATION_RAD=$(awk "BEGIN { printf \"%.6f\", ${ROTATION} * 3.14159265358979 / 180 }")
|
||||
|
||||
TMPFILE=$(mktemp "${OUTPUT}.tmp.XXXXXX.png")
|
||||
trap 'rm -f "$TMPFILE"' EXIT
|
||||
|
||||
ffmpeg -y \
|
||||
-f lavfi -i "nullsrc=size=${IMG_W}x${IMG_H}:rate=1" \
|
||||
-i "$OUTPUT" \
|
||||
-filter_complex "
|
||||
[0:v]geq=
|
||||
r='${GEQ_R}':
|
||||
g='${GEQ_G}':
|
||||
b='${GEQ_B}':
|
||||
a=255,
|
||||
format=rgba[bg];
|
||||
|
||||
[1:v]format=rgba,
|
||||
geq=
|
||||
r='r(X,Y)':
|
||||
g='g(X,Y)':
|
||||
b='b(X,Y)':
|
||||
a='if(gte(r(X,Y)+g(X,Y)+b(X,Y),720),0,if(lte(r(X,Y)+g(X,Y)+b(X,Y),15)*gte(alpha(X,Y),250),0,alpha(X,Y)))',
|
||||
rotate=
|
||||
angle=${ROTATION_RAD}:
|
||||
fillcolor=none:
|
||||
ow=rotw(${ROTATION_RAD}):
|
||||
oh=roth(${ROTATION_RAD})[ovr];
|
||||
|
||||
[bg][ovr]overlay=
|
||||
x=(W-w)/2:
|
||||
y=(H-h)/2:
|
||||
format=auto[out]
|
||||
" \
|
||||
-map "[out]" \
|
||||
-frames:v 1 \
|
||||
-update 1 \
|
||||
"$TMPFILE"
|
||||
|
||||
mv "$TMPFILE" "$OUTPUT"
|
||||
Reference in New Issue
Block a user