From 696352aaa8381994e6e73460688269c7948153f8 Mon Sep 17 00:00:00 2001 From: Paul Schaub Date: Sat, 3 Nov 2018 17:49:06 +0100 Subject: [PATCH] Some quick reworkings. FP selection is working! --- .../omemoqrgenerator/ListViewCell.java | 28 ++++++--------- .../omemoqrgenerator/ListViewController.java | 33 +++++++---------- .../vanitasvitae/omemoqrgenerator/Main.java | 21 ++++------- .../omemoqrgenerator/QrDisplayController.java | 33 ++++++++--------- .../omemoqrgenerator/Repository.java | 36 +++++++++++++++++++ .../vanitasvitae/omemoqrgenerator/Util.java | 8 +++++ src/main/resources/fxml/item.fxml | 32 +++++++++++++---- src/main/resources/fxml/listview.fxml | 16 ++------- src/main/resources/fxml/login.fxml | 5 +-- src/main/resources/fxml/qrdisplay.fxml | 7 ++-- 10 files changed, 122 insertions(+), 97 deletions(-) create mode 100644 src/main/java/de/vanitasvitae/omemoqrgenerator/Repository.java diff --git a/src/main/java/de/vanitasvitae/omemoqrgenerator/ListViewCell.java b/src/main/java/de/vanitasvitae/omemoqrgenerator/ListViewCell.java index 47785da..d8544bc 100644 --- a/src/main/java/de/vanitasvitae/omemoqrgenerator/ListViewCell.java +++ b/src/main/java/de/vanitasvitae/omemoqrgenerator/ListViewCell.java @@ -23,8 +23,6 @@ public class ListViewCell extends JFXListCell { @FXML private JFXToggleButton toggle; - private QrDisplayController displayController = null; - public ListViewCell() { FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/fxml/item.fxml")); fxmlLoader.setController(this); @@ -38,27 +36,21 @@ public class ListViewCell extends JFXListCell { } } - public void setDisplayController(QrDisplayController controller) { - this.displayController = controller; - } - @Override public void updateItem(OmemoIdentity identity, boolean empty) { + Repository repository = Repository.getInstance(); if (empty) { return; } - if (id != null) id.setText(Integer.toString(identity.getDevice().getDeviceId())); - if (fingerprint != null) fingerprint.setText(identity.getFingerprint().blocksOf8Chars()); - if (toggle != null) toggle.setSelected(identity.getEnabled()); - if (hBox != null) setGraphic(hBox); - if (toggle != null) { - toggle.setOnAction(actionEvent -> { - identity.setEnabled(toggle.isSelected()); - if (displayController != null) { - displayController.drawQRCode(); - } - }); - } + id.setText(Integer.toString(identity.getDevice().getDeviceId())); + fingerprint.setText(Util.twoLinesFingerprint(identity.getFingerprint())); + toggle.setSelected(identity.getEnabled()); + setGraphic(hBox); + + toggle.setOnAction(actionEvent -> { + identity.setEnabled(toggle.isSelected()); + repository.getIdentities().add(repository.getIdentities().remove(repository.getIdentities().size() -1)); + }); } } diff --git a/src/main/java/de/vanitasvitae/omemoqrgenerator/ListViewController.java b/src/main/java/de/vanitasvitae/omemoqrgenerator/ListViewController.java index 704f653..3ffc8c2 100644 --- a/src/main/java/de/vanitasvitae/omemoqrgenerator/ListViewController.java +++ b/src/main/java/de/vanitasvitae/omemoqrgenerator/ListViewController.java @@ -1,37 +1,28 @@ package de.vanitasvitae.omemoqrgenerator; -import java.util.Collection; - -import com.jfoenix.controls.JFXListView; -import javafx.collections.FXCollections; -import javafx.collections.ObservableList; +import javafx.event.EventHandler; import javafx.fxml.FXML; +import javafx.scene.control.ListView; +import javafx.scene.input.ScrollEvent; public class ListViewController { @FXML - private JFXListView listView; + private ListView listView; - private ObservableList identities = FXCollections.observableArrayList(); - - private QrDisplayController displayController = null; - - public void setDisplayController(QrDisplayController controller) { - this.displayController = controller; - } - - public void setIdentities(Collection identities) { - this.identities.clear(); - this.identities.addAll(identities); - } @FXML void initialize() { + Repository repository = Repository.getInstance(); listView.setCellFactory(listView -> { ListViewCell cell = new ListViewCell(); - cell.setDisplayController(displayController); - return new ListViewCell(); + return cell; + }); + listView.setItems(repository.getIdentities()); + listView.addEventFilter(ScrollEvent.SCROLL, event -> { + if (event.getDeltaX() != 0) { + event.consume(); + } }); - listView.setItems(identities); } } diff --git a/src/main/java/de/vanitasvitae/omemoqrgenerator/Main.java b/src/main/java/de/vanitasvitae/omemoqrgenerator/Main.java index d6b51e7..9d0734a 100644 --- a/src/main/java/de/vanitasvitae/omemoqrgenerator/Main.java +++ b/src/main/java/de/vanitasvitae/omemoqrgenerator/Main.java @@ -1,11 +1,8 @@ package de.vanitasvitae.omemoqrgenerator; -import java.io.IOException; import java.util.Map; import org.jivesoftware.smack.SmackConfiguration; -import org.jivesoftware.smack.SmackException; -import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smack.packet.Presence; import org.jivesoftware.smack.tcp.XMPPTCPConnection; import org.jivesoftware.smackx.omemo.internal.OmemoDevice; @@ -14,13 +11,11 @@ import org.jivesoftware.smackx.omemo.trust.OmemoFingerprint; import javafx.application.Application; import javafx.collections.FXCollections; import javafx.collections.ObservableList; -import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; import org.jxmpp.jid.BareJid; -import org.jxmpp.stringprep.XmppStringprepException; public class Main extends Application implements LoginCallback { @@ -83,7 +78,9 @@ public class Main extends Application implements LoginCallback { loader.setLocation(getClass().getResource("/fxml/login.fxml")); Parent root = loader.load(); stage.setMinHeight(600); + stage.setMaxHeight(600); stage.setMinWidth(400); + stage.setMaxWidth(400); // Register ourselves as callback for the login button. LoginController loginController = loader.getController(); @@ -97,21 +94,19 @@ public class Main extends Application implements LoginCallback { @Override public void login(String username, String password) { - XMPPTCPConnection connection = null; + Repository repository = Repository.getInstance(); + XMPPTCPConnection connection; try { connection = new XMPPTCPConnection(username, password); connection.connect().login(); - if (connection == null) { - return; - } - - BareJid jid = connection.getUser().asBareJid(); + repository.setJid(connection.getUser().asBareJid()); Map fingerprints = Util.getFingerprints(connection); - ObservableList identities = FXCollections.observableArrayList(); + ObservableList identities = repository.getIdentities(); for (OmemoDevice device : fingerprints.keySet()) { identities.addAll(new OmemoIdentity(device, fingerprints.get(device))); + System.out.println(Util.twoLinesFingerprint(fingerprints.get(device))); } connection.disconnect(new Presence(Presence.Type.unavailable)); @@ -119,8 +114,6 @@ public class Main extends Application implements LoginCallback { FXMLLoader loader = new FXMLLoader(); loader.setLocation(getClass().getResource("/fxml/qrdisplay.fxml")); Parent root = loader.load(); - QrDisplayController controller = loader.getController(); - controller.setFingerprints(jid, identities); Scene scene = new Scene(root, 400, 600); stage.setTitle("OMEMO QR-Code Generator"); diff --git a/src/main/java/de/vanitasvitae/omemoqrgenerator/QrDisplayController.java b/src/main/java/de/vanitasvitae/omemoqrgenerator/QrDisplayController.java index f6407e8..f40e507 100644 --- a/src/main/java/de/vanitasvitae/omemoqrgenerator/QrDisplayController.java +++ b/src/main/java/de/vanitasvitae/omemoqrgenerator/QrDisplayController.java @@ -2,24 +2,19 @@ package de.vanitasvitae.omemoqrgenerator; import java.awt.*; import java.awt.image.BufferedImage; -import java.util.HashSet; import java.util.Iterator; -import java.util.Map; -import java.util.Set; - -import org.jivesoftware.smackx.omemo.internal.OmemoDevice; -import org.jivesoftware.smackx.omemo.trust.OmemoFingerprint; import com.google.zxing.BarcodeFormat; import com.google.zxing.WriterException; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; -import javafx.collections.ObservableList; +import com.jfoenix.controls.JFXListView; +import javafx.collections.ListChangeListener; import javafx.embed.swing.SwingFXUtils; import javafx.fxml.FXML; +import javafx.scene.control.ListView; import javafx.scene.image.ImageView; import javafx.scene.layout.GridPane; -import org.jxmpp.jid.BareJid; public class QrDisplayController { @@ -27,29 +22,29 @@ public class QrDisplayController { private ImageView qr_view; @FXML - private GridPane listView; + private ListView listView; @FXML private ListViewController listViewController; - private BareJid jid; - private ObservableList identities = null; + private Repository repository = Repository.getInstance(); - public void setFingerprints(BareJid jid, ObservableList identities) { - this.jid = jid; - this.identities = identities; - this.listViewController.setDisplayController(this); - this.listViewController.setIdentities(this.identities); + @FXML + public void initialize() { drawQRCode(); + repository.getIdentities().addListener((ListChangeListener) change -> drawQRCode()); } public void drawQRCode() { - int width = 300, height = 300; + System.out.println("Draw!"); + Repository repository = Repository.getInstance(); + + int width = 360, height = 360; QRCodeWriter qrCodeWriter = new QRCodeWriter(); - String content = "xmpp:" + jid.toString(); + String content = "xmpp:" + repository.getJid().toString(); - Iterator iterator = identities.iterator(); + Iterator iterator = repository.getIdentities().iterator(); while (iterator.hasNext()) { OmemoIdentity first = iterator.next(); diff --git a/src/main/java/de/vanitasvitae/omemoqrgenerator/Repository.java b/src/main/java/de/vanitasvitae/omemoqrgenerator/Repository.java new file mode 100644 index 0000000..0636ed8 --- /dev/null +++ b/src/main/java/de/vanitasvitae/omemoqrgenerator/Repository.java @@ -0,0 +1,36 @@ +package de.vanitasvitae.omemoqrgenerator; + +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import org.jxmpp.jid.BareJid; + +public class Repository { + + private static Repository INSTANCE; + + private final ObservableList IDENTITIES = FXCollections.observableArrayList(); + private BareJid JID = null; + + private Repository() { + + } + + public static Repository getInstance() { + if (INSTANCE == null) { + INSTANCE = new Repository(); + } + return INSTANCE; + } + + public BareJid getJid() { + return JID; + } + + public void setJid(BareJid jid) { + this.JID = jid; + } + + public ObservableList getIdentities() { + return IDENTITIES; + } +} diff --git a/src/main/java/de/vanitasvitae/omemoqrgenerator/Util.java b/src/main/java/de/vanitasvitae/omemoqrgenerator/Util.java index 5cb8beb..95c02d4 100644 --- a/src/main/java/de/vanitasvitae/omemoqrgenerator/Util.java +++ b/src/main/java/de/vanitasvitae/omemoqrgenerator/Util.java @@ -20,6 +20,7 @@ import org.jivesoftware.smackx.pubsub.PayloadItem; import org.jivesoftware.smackx.pubsub.PubSubException; import org.jivesoftware.smackx.pubsub.PubSubManager; +import org.bouncycastle.util.Strings; import org.jxmpp.jid.BareJid; public class Util { @@ -94,4 +95,11 @@ public class Util { return items.get(items.size() - 1).getPayload(); } + + public static String twoLinesFingerprint(OmemoFingerprint fingerprint) { + String blocks = fingerprint.blocksOf8Chars(); + String out = blocks.substring(0, 35); + out = out + "\n" + blocks.substring(36); + return out; + } } diff --git a/src/main/resources/fxml/item.fxml b/src/main/resources/fxml/item.fxml index ea9d1c6..400717a 100644 --- a/src/main/resources/fxml/item.fxml +++ b/src/main/resources/fxml/item.fxml @@ -1,13 +1,31 @@ - - - - + + + + + + + - diff --git a/src/main/resources/fxml/listview.fxml b/src/main/resources/fxml/listview.fxml index ca6b40b..fda8293 100644 --- a/src/main/resources/fxml/listview.fxml +++ b/src/main/resources/fxml/listview.fxml @@ -1,16 +1,6 @@ - - - - + - - - - - - - - - + + diff --git a/src/main/resources/fxml/login.fxml b/src/main/resources/fxml/login.fxml index a418cee..3028893 100644 --- a/src/main/resources/fxml/login.fxml +++ b/src/main/resources/fxml/login.fxml @@ -9,8 +9,9 @@ diff --git a/src/main/resources/fxml/qrdisplay.fxml b/src/main/resources/fxml/qrdisplay.fxml index 5890d7c..8abcd98 100644 --- a/src/main/resources/fxml/qrdisplay.fxml +++ b/src/main/resources/fxml/qrdisplay.fxml @@ -2,9 +2,10 @@ - + + - - + +