/**
* Sample Skeleton for 'receiver_money_request.fxml' Controller Class
*/
package wallettemplate;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.effect.DropShadow;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.HBox;
import net.glxn.qrgen.QRCode;
import net.glxn.qrgen.image.ImageType;
import network.thunder.core.communication.objects.subobjects.PaymentSecret;
import network.thunder.core.etc.Tools;
import java.awt.*;
import java.awt.datatransfer.Clipboard;
import java.awt.datatransfer.StringSelection;
import java.io.ByteArrayInputStream;
import java.nio.ByteBuffer;
import java.util.ResourceBundle;
public class ReceiveMoneyRequestController {
public Main.OverlayUI overlayUI;
@FXML
private ResourceBundle resources;
@FXML
private HBox topHBox;
@FXML
private TextField amount;
@FXML
private TextField FieldHash;
@FXML
private TextArea FieldAddress;
@FXML
private TextField FieldRequest;
@FXML
private ImageView ImageQR;
@FXML
private Button cancelBtn;
@FXML
void cancel (ActionEvent event) {
overlayUI.done();
}
PaymentSecret secret = null;
@FXML
void initialize () {
assert topHBox != null : "fx:id=\"topHBox\" was not injected: check your FXML file 'receive_money_request.fxml'.";
assert amount != null : "fx:id=\"amount\" was not injected: check your FXML file 'receive_money_request.fxml'.";
assert FieldHash != null : "fx:id=\"FieldHash\" was not injected: check your FXML file 'receive_money_request.fxml'.";
assert FieldAddress != null : "fx:id=\"FieldAddress\" was not injected: check your FXML file 'receive_money_request.fxml'.";
assert FieldRequest != null : "fx:id=\"FieldRequest\" was not injected: check your FXML file 'receive_money_request.fxml'.";
assert ImageQR != null : "fx:id=\"ImageQR\" was not injected: check your FXML file 'receive_money_request.fxml'.";
assert cancelBtn != null : "fx:id=\"cancelBtn\" was not injected: check your FXML file 'receive_money_request.fxml'.";
amount.textProperty().addListener((observable, oldValue, newValue) -> {
update();
});
update();
}
public void update () {
System.out.println(Tools.bytesToHex(Main.node.pubKeyServer.getPubKey()));
if (secret == null) {
secret = new PaymentSecret(Tools.getRandomByte(20));
Main.dbHandler.addPaymentSecret(secret);
System.out.println("HASH: "+Tools.bytesToHex(secret.hash));
}
try {
byte[] payload = getPayload();
FieldAddress.setText(Tools.bytesToHex(payload));
FieldHash.setText(Tools.bytesToHex(secret.hash));
System.out.println(Tools.bytesToHex(payload));
final byte[] imageBytes = QRCode
.from(Tools.bytesToHex(payload))
.withSize(250, 250)
.to(ImageType.PNG)
.stream()
.toByteArray();
Image qrImage = new Image(new ByteArrayInputStream(imageBytes));
ImageQR.setImage(qrImage);
ImageQR.setEffect(new DropShadow());
StringSelection stringSelection = new StringSelection(Tools.bytesToHex(payload));
Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard();
clpbrd.setContents(stringSelection, null);
} catch (Exception e) {
e.printStackTrace();
}
}
public byte[] getPayload () {
ByteBuffer buffer = ByteBuffer.allocate(33 + 8 + 20);
buffer.putLong(getAmount());
buffer.put(secret.hash);
buffer.put(Main.node.pubKeyServer.getPubKey());
return buffer.array();
}
private long getAmount () {
return Long.parseLong(amount.getText());
}
}