connect ui to message sending methods

This commit is contained in:
Arnaud Vergnet 2020-12-16 11:35:20 +01:00
parent 6f1bd41cc9
commit 6f6492e8c0
4 changed files with 49 additions and 21 deletions

View file

@ -71,21 +71,25 @@ public class MainController implements Initializable {
}
});
editUserDialogController.setOnSuccessListener(() -> {
try {
final FXMLLoader loader = new FXMLLoader(getClass().getResource("dialogs/snackbar.fxml"));
snackbar.enqueue(new JFXSnackbar.SnackbarEvent(
loader.load()
));
final SnackbarController controller = loader.getController();
controller.setText("Nom d'utilisateur changé !");
controller.setMode(SnackbarController.Mode.SUCCESS);
} catch (IOException e) {
e.printStackTrace();
}
showSnackbarEvent("Nom d'utilisateur changé !", SnackbarController.Mode.SUCCESS);
});
editUserDialogController.show(root, mode);
}
private void showSnackbarEvent(String text, SnackbarController.Mode mode) {
try {
final FXMLLoader loader = new FXMLLoader(getClass().getResource("dialogs/snackbar.fxml"));
snackbar.enqueue(new JFXSnackbar.SnackbarEvent(
loader.load()
));
final SnackbarController controller = loader.getController();
controller.setText(text);
controller.setMode(mode);
} catch (IOException e) {
e.printStackTrace();
}
}
private void openAboutDialog() {
aboutDialogController.show(root);
}
@ -133,7 +137,7 @@ public class MainController implements Initializable {
listController.setUserSelectedListener((user) -> chatController.setRemoteUser(user));
chatController.addAttachmentListener(() -> System.out.println("attach event"));
chatController.addSendListener((text) -> System.out.println("sent : " + text));
chatController.addSendErrorListener((e) -> showSnackbarEvent("Erreur: Message non envoyé", SnackbarController.Mode.ERROR));
toolbarController.addEditListener(() -> openEditUsernameDialog(EditUsernameDialogController.Mode.EDIT));
toolbarController.addAboutListener(this::openAboutDialog);
}

View file

@ -6,6 +6,7 @@ import fr.insa.clavardator.ui.ButtonPressEvent;
import fr.insa.clavardator.ui.LoadingScreenController;
import fr.insa.clavardator.ui.NoSelectionModel;
import fr.insa.clavardator.users.PeerUser;
import fr.insa.clavardator.util.ErrorCallback;
import javafx.collections.FXCollections;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
@ -38,8 +39,8 @@ public class ChatController implements Initializable {
chatFooterController.addAttachmentListener(listener);
}
public void addSendListener(ChatFooterController.SendMessageEvent listener) {
chatFooterController.addSendListener(listener);
public void addSendErrorListener(ErrorCallback listener) {
chatFooterController.addSendErrorListener(listener);
}
public void setRemoteUser(PeerUser remoteUser) {

View file

@ -3,12 +3,12 @@ package fr.insa.clavardator.ui.chat;
import com.jfoenix.controls.JFXTextField;
import fr.insa.clavardator.ui.ButtonPressEvent;
import fr.insa.clavardator.users.PeerUser;
import fr.insa.clavardator.util.ErrorCallback;
import fr.insa.clavardator.util.Log;
import javafx.beans.value.ObservableValue;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.HBox;
import java.net.URL;
@ -25,7 +25,7 @@ public class ChatFooterController implements Initializable {
private JFXTextField textField;
private List<ButtonPressEvent> attachmentListeners;
private List<SendMessageEvent> sendListeners;
private List<ErrorCallback> sendErrorListeners;
private PeerUser remoteUser;
private HashMap<PeerUser, String> savedText;
@ -34,18 +34,27 @@ public class ChatFooterController implements Initializable {
public void addAttachmentListener(ButtonPressEvent listener) {
attachmentListeners.add(listener);
}
public void addSendListener(SendMessageEvent listener) {
sendListeners.add(listener);
public void addSendErrorListener(ErrorCallback listener) {
sendErrorListeners.add(listener);
}
public void onAttachmentPress() {
attachmentListeners.forEach(ButtonPressEvent::onPress);
}
public void onSend() {
sendListeners.forEach((l) -> l.onSend(findSavedText()));
if (remoteUser != null) {
remoteUser.sendTextMessage(textField.getText(), this::onSendError);
} else {
Log.e(this.getClass().getSimpleName(), "Error: remote user not set");
}
textField.setText("");
}
public void onSendError(Exception e) {
Log.e(this.getClass().getSimpleName(), "Error: Could not send message", e);
sendErrorListeners.forEach((l) -> l.onError(e));
}
public void setEnabled(boolean enabled) {
container.setDisable(!enabled);
}
@ -72,7 +81,7 @@ public class ChatFooterController implements Initializable {
public void initialize(URL location, ResourceBundle resources) {
savedText = new HashMap<>();
attachmentListeners = new ArrayList<>();
sendListeners = new ArrayList<>();
sendErrorListeners = new ArrayList<>();
textField.textProperty().addListener(this::onTextChange);
textField.setOnKeyPressed(event -> {
if (event.getCode() == KeyCode.ENTER) {

View file

@ -6,6 +6,7 @@ import fr.insa.clavardator.network.PeerConnection;
import fr.insa.clavardator.util.ErrorCallback;
import fr.insa.clavardator.util.Log;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.EOFException;
import java.net.InetAddress;
@ -67,6 +68,19 @@ public class PeerUser extends User implements Comparable<PeerUser> {
init(connection, callback, errorCallback);
}
public void sendTextMessage(String msg, @Nullable ErrorCallback errorCallback) {
if (connection != null) {
Log.v(this.getClass().getSimpleName(),
"Sending message to " + this.getUsername() + " / " + this.getId() + ": " + msg);
final Message message = new Message(CurrentUser.getInstance(), this, msg);
connection.send(
message,
() -> history.addMessage(message),
errorCallback);
} else {
Log.e(this.getClass().getSimpleName(), "Could not send message: connection is not initialized");
}
}
private void init(PeerConnection thisConnection, UserConnectedCallback callback, ErrorCallback errorCallback) {
// Send our username