Merge pull request #32 from informatik-ag-ngl/f/save_attachment
Added ability to save attachments.
This commit is contained in:
commit
3e7a949be5
@ -77,6 +77,10 @@ public class Settings {
|
|||||||
items.putIfAbsent("enterToSend", new SettingsItem<>(true, "Enter to send", "Sends a message by pressing the enter key."));
|
items.putIfAbsent("enterToSend", new SettingsItem<>(true, "Enter to send", "Sends a message by pressing the enter key."));
|
||||||
items.putIfAbsent("hideOnClose", new SettingsItem<>(true, "Hide on close", "Hides the chat window when it is closed."));
|
items.putIfAbsent("hideOnClose", new SettingsItem<>(true, "Hide on close", "Hides the chat window when it is closed."));
|
||||||
items.putIfAbsent("currentTheme", new SettingsItem<>("dark", "Current Theme Name", "The name of the currently selected theme."));
|
items.putIfAbsent("currentTheme", new SettingsItem<>("dark", "Current Theme Name", "The name of the currently selected theme."));
|
||||||
|
items.putIfAbsent("downloadLocation",
|
||||||
|
new SettingsItem<>(new File(System.getProperty("user.home") + "/Downloads/"), "Download location",
|
||||||
|
"The location where files will be saved to"));
|
||||||
|
items.putIfAbsent("autoSaveDownloads", new SettingsItem<>(false, "Save without asking?", "Should downloads be saved without asking?"));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -120,6 +124,37 @@ public class Settings {
|
|||||||
*/
|
*/
|
||||||
public void setEnterToSend(boolean enterToSend) { ((SettingsItem<Boolean>) items.get("enterToSend")).set(enterToSend); }
|
public void setEnterToSend(boolean enterToSend) { ((SettingsItem<Boolean>) items.get("enterToSend")).set(enterToSend); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return whether Envoy will prompt a dialogue before saving an
|
||||||
|
* {@link envoy.data.Attachment}
|
||||||
|
* @since Envoy Client v0.2-beta
|
||||||
|
*/
|
||||||
|
public Boolean isDownloadSavedWithoutAsking() { return (Boolean) items.get("autoSaveDownloads").get(); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets whether Envoy will prompt a dialogue before saving an
|
||||||
|
* {@link envoy.data.Attachment}.
|
||||||
|
*
|
||||||
|
* @param autosaveDownload whether a download should be saved without asking
|
||||||
|
* before
|
||||||
|
* @since Envoy Client v0.2-beta
|
||||||
|
*/
|
||||||
|
public void setDownloadSavedWithoutAsking(boolean autosaveDownload) { ((SettingsItem<Boolean>) items.get("autoSaveDownloads")).set(autosaveDownload); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the path where downloads should be saved
|
||||||
|
* @since Envoy Client v0.2-beta
|
||||||
|
*/
|
||||||
|
public File getDownloadLocation() { return (File) items.get("downloadLocation").get(); }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sets the path where downloads should be saved.
|
||||||
|
*
|
||||||
|
* @param downloadLocation the path to set
|
||||||
|
* @since Envoy Client v0.2-beta
|
||||||
|
*/
|
||||||
|
public void setDownloadLocation(File downloadLocation) { ((SettingsItem<File>) items.get("downloadLocation")).set(downloadLocation); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return the current on close mode.
|
* @return the current on close mode.
|
||||||
* @since Envoy Client v0.3-alpha
|
* @since Envoy Client v0.3-alpha
|
||||||
|
@ -27,6 +27,11 @@ public final class AudioRecorder {
|
|||||||
*/
|
*/
|
||||||
public static final AudioFormat DEFAULT_AUDIO_FORMAT = new AudioFormat(16000, 16, 1, true, false);
|
public static final AudioFormat DEFAULT_AUDIO_FORMAT = new AudioFormat(16000, 16, 1, true, false);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The format in which audio files will be saved.
|
||||||
|
*/
|
||||||
|
public static final String FILE_FORMAT = "wav";
|
||||||
|
|
||||||
private final AudioFormat format;
|
private final AudioFormat format;
|
||||||
private final DataLine.Info info;
|
private final DataLine.Info info;
|
||||||
|
|
||||||
@ -78,7 +83,7 @@ public final class AudioRecorder {
|
|||||||
line.start();
|
line.start();
|
||||||
|
|
||||||
// Prepare temp file
|
// Prepare temp file
|
||||||
tempFile = Files.createTempFile("recording", "wav");
|
tempFile = Files.createTempFile("recording", FILE_FORMAT);
|
||||||
|
|
||||||
// Start the recording
|
// Start the recording
|
||||||
final var ais = new AudioInputStream(line);
|
final var ais = new AudioInputStream(line);
|
||||||
@ -117,6 +122,6 @@ public final class AudioRecorder {
|
|||||||
line.close();
|
line.close();
|
||||||
try {
|
try {
|
||||||
Files.deleteIfExists(tempFile);
|
Files.deleteIfExists(tempFile);
|
||||||
} catch (IOException e) {}
|
} catch (final IOException e) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,8 @@ import java.io.ByteArrayInputStream;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
@ -240,9 +242,10 @@ public final class ChatScene implements Restorable {
|
|||||||
this.client = client;
|
this.client = client;
|
||||||
this.writeProxy = writeProxy;
|
this.writeProxy = writeProxy;
|
||||||
|
|
||||||
|
MessageControl.setUser(localDB.getUser());
|
||||||
|
MessageControl.setSceneContext(sceneContext);
|
||||||
chatList.setItems(FXCollections.observableList(localDB.getChats()));
|
chatList.setItems(FXCollections.observableList(localDB.getChats()));
|
||||||
contactLabel.setText(localDB.getUser().getName());
|
contactLabel.setText(localDB.getUser().getName());
|
||||||
MessageControl.setUser(localDB.getUser());
|
|
||||||
if (!client.isOnline()) updateInfoLabel("You are offline", "infoLabel-info");
|
if (!client.isOnline()) updateInfoLabel("You are offline", "infoLabel-info");
|
||||||
|
|
||||||
recorder = new AudioRecorder();
|
recorder = new AudioRecorder();
|
||||||
@ -334,7 +337,9 @@ public final class ChatScene implements Restorable {
|
|||||||
});
|
});
|
||||||
recorder.start();
|
recorder.start();
|
||||||
} else {
|
} else {
|
||||||
pendingAttachment = new Attachment(recorder.finish(), AttachmentType.VOICE);
|
pendingAttachment = new Attachment(recorder.finish(), "Voice_recording_"
|
||||||
|
+ DateTimeFormatter.ofPattern("yyyy_MM_dd-HH_mm_ss").format(LocalDateTime.now()) + "." + AudioRecorder.FILE_FORMAT,
|
||||||
|
AttachmentType.VOICE);
|
||||||
recording = false;
|
recording = false;
|
||||||
Platform.runLater(() -> {
|
Platform.runLater(() -> {
|
||||||
voiceButton.setGraphic(new ImageView(IconUtil.loadIconThemeSensitive("microphone", DEFAULT_ICON_SIZE)));
|
voiceButton.setGraphic(new ImageView(IconUtil.loadIconThemeSensitive("microphone", DEFAULT_ICON_SIZE)));
|
||||||
@ -385,7 +390,7 @@ public final class ChatScene implements Restorable {
|
|||||||
// Create the pending attachment
|
// Create the pending attachment
|
||||||
try {
|
try {
|
||||||
final var fileBytes = Files.readAllBytes(file.toPath());
|
final var fileBytes = Files.readAllBytes(file.toPath());
|
||||||
pendingAttachment = new Attachment(fileBytes, type);
|
pendingAttachment = new Attachment(fileBytes, file.getName(), type);
|
||||||
checkPostConditions(false);
|
checkPostConditions(false);
|
||||||
// Setting the preview image as image of the attachmentView
|
// Setting the preview image as image of the attachmentView
|
||||||
if (type == AttachmentType.PICTURE)
|
if (type == AttachmentType.PICTURE)
|
||||||
|
@ -4,6 +4,7 @@ import javafx.fxml.FXML;
|
|||||||
import javafx.scene.control.*;
|
import javafx.scene.control.*;
|
||||||
|
|
||||||
import envoy.client.ui.SceneContext;
|
import envoy.client.ui.SceneContext;
|
||||||
|
import envoy.client.ui.settings.DownloadSettingsPane;
|
||||||
import envoy.client.ui.settings.GeneralSettingsPane;
|
import envoy.client.ui.settings.GeneralSettingsPane;
|
||||||
import envoy.client.ui.settings.SettingsPane;
|
import envoy.client.ui.settings.SettingsPane;
|
||||||
|
|
||||||
@ -29,7 +30,10 @@ public class SettingsScene {
|
|||||||
* @param sceneContext enables the user to return to the chat scene
|
* @param sceneContext enables the user to return to the chat scene
|
||||||
* @since Envoy Client v0.1-beta
|
* @since Envoy Client v0.1-beta
|
||||||
*/
|
*/
|
||||||
public void initializeData(SceneContext sceneContext) { this.sceneContext = sceneContext; }
|
public void initializeData(SceneContext sceneContext) {
|
||||||
|
this.sceneContext = sceneContext;
|
||||||
|
settingsList.getItems().add(new DownloadSettingsPane(sceneContext));
|
||||||
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private void initialize() {
|
private void initialize() {
|
||||||
|
@ -2,7 +2,7 @@ package envoy.client.ui.listcell;
|
|||||||
|
|
||||||
import java.awt.Toolkit;
|
import java.awt.Toolkit;
|
||||||
import java.awt.datatransfer.StringSelection;
|
import java.awt.datatransfer.StringSelection;
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.*;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
@ -16,9 +16,12 @@ import javafx.scene.control.MenuItem;
|
|||||||
import javafx.scene.image.Image;
|
import javafx.scene.image.Image;
|
||||||
import javafx.scene.image.ImageView;
|
import javafx.scene.image.ImageView;
|
||||||
import javafx.scene.layout.VBox;
|
import javafx.scene.layout.VBox;
|
||||||
|
import javafx.stage.FileChooser;
|
||||||
|
|
||||||
|
import envoy.client.data.Settings;
|
||||||
import envoy.client.ui.AudioControl;
|
import envoy.client.ui.AudioControl;
|
||||||
import envoy.client.ui.IconUtil;
|
import envoy.client.ui.IconUtil;
|
||||||
|
import envoy.client.ui.SceneContext;
|
||||||
import envoy.data.Message;
|
import envoy.data.Message;
|
||||||
import envoy.data.Message.MessageStatus;
|
import envoy.data.Message.MessageStatus;
|
||||||
import envoy.data.User;
|
import envoy.data.User;
|
||||||
@ -38,9 +41,12 @@ public class MessageControl extends Label {
|
|||||||
|
|
||||||
private static User client;
|
private static User client;
|
||||||
|
|
||||||
|
private static SceneContext sceneContext;
|
||||||
|
|
||||||
private static final DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss")
|
private static final DateTimeFormatter dateFormat = DateTimeFormatter.ofPattern("dd.MM.yyyy HH:mm:ss")
|
||||||
.withZone(ZoneId.systemDefault());
|
.withZone(ZoneId.systemDefault());
|
||||||
private static final Map<MessageStatus, Image> statusImages = IconUtil.loadByEnum(MessageStatus.class, 16);
|
private static final Map<MessageStatus, Image> statusImages = IconUtil.loadByEnum(MessageStatus.class, 16);
|
||||||
|
private static final Settings settings = Settings.getInstance();
|
||||||
private static final Logger logger = EnvoyLog.getLogger(MessageControl.class);
|
private static final Logger logger = EnvoyLog.getLogger(MessageControl.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -116,11 +122,36 @@ public class MessageControl extends Label {
|
|||||||
|
|
||||||
private void loadMessageInfoScene(Message message) { logger.log(Level.FINEST, "message info scene was requested for " + message); }
|
private void loadMessageInfoScene(Message message) { logger.log(Level.FINEST, "message info scene was requested for " + message); }
|
||||||
|
|
||||||
private void saveAttachment(Message message) { logger.log(Level.FINEST, "attachment saving was requested for " + message); }
|
private void saveAttachment(Message message) {
|
||||||
|
File file;
|
||||||
|
final var fileName = message.getAttachment().getName();
|
||||||
|
final var downloadLocation = settings.getDownloadLocation();
|
||||||
|
// Show save file dialog, if the user did not opt-out
|
||||||
|
if (!settings.isDownloadSavedWithoutAsking()) {
|
||||||
|
final var fileChooser = new FileChooser();
|
||||||
|
fileChooser.setInitialFileName(fileName);
|
||||||
|
fileChooser.setInitialDirectory(downloadLocation);
|
||||||
|
file = fileChooser.showSaveDialog(sceneContext.getStage());
|
||||||
|
} else file = new File(downloadLocation, fileName);
|
||||||
|
|
||||||
|
// A file was selected
|
||||||
|
if (file != null) try (FileOutputStream fos = new FileOutputStream(file)) {
|
||||||
|
fos.write(message.getAttachment().getData());
|
||||||
|
logger.log(Level.FINE, "Attachment of message was saved at " + file.getAbsolutePath());
|
||||||
|
} catch (final IOException e) {
|
||||||
|
logger.log(Level.WARNING, "Could not save attachment of " + message + ": ", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param client the user who has logged in
|
* @param client the user who has logged in
|
||||||
* @since Envoy Client v0.1-beta
|
* @since Envoy Client v0.1-beta
|
||||||
*/
|
*/
|
||||||
public static void setUser(User client) { MessageControl.client = client; }
|
public static void setUser(User client) { MessageControl.client = client; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param sceneContext the scene context storing the stage used in Envoy
|
||||||
|
* @since Envoy Client v0.1-beta
|
||||||
|
*/
|
||||||
|
public static void setSceneContext(SceneContext sceneContext) { MessageControl.sceneContext = sceneContext; }
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,65 @@
|
|||||||
|
package envoy.client.ui.settings;
|
||||||
|
|
||||||
|
import javafx.geometry.Insets;
|
||||||
|
import javafx.scene.control.Button;
|
||||||
|
import javafx.scene.control.CheckBox;
|
||||||
|
import javafx.scene.control.Label;
|
||||||
|
import javafx.scene.layout.HBox;
|
||||||
|
import javafx.scene.layout.VBox;
|
||||||
|
import javafx.stage.DirectoryChooser;
|
||||||
|
|
||||||
|
import envoy.client.ui.SceneContext;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays options for downloading {@link envoy.data.Attachment}s.
|
||||||
|
* <p>
|
||||||
|
* Project: <strong>envoy-client</strong><br>
|
||||||
|
* File: <strong>DownloadSettingsPane.java</strong><br>
|
||||||
|
* Created: <strong>27.07.2020</strong><br>
|
||||||
|
*
|
||||||
|
* @author Leon Hofmeister
|
||||||
|
* @since Envoy Client v0.2-beta
|
||||||
|
*/
|
||||||
|
public class DownloadSettingsPane extends SettingsPane {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a new {@code DownloadSettingsPane}.
|
||||||
|
*
|
||||||
|
* @param sceneContext the {@code SceneContext} used to block input to the
|
||||||
|
* {@link javafx.stage.Stage} used in Envoy
|
||||||
|
* @since Envoy Client v0.2-beta
|
||||||
|
*/
|
||||||
|
public DownloadSettingsPane(SceneContext sceneContext) {
|
||||||
|
super("Download");
|
||||||
|
final var vbox = new VBox(15);
|
||||||
|
vbox.setPadding(new Insets(15));
|
||||||
|
// checkbox to disable asking
|
||||||
|
final var checkBox = new CheckBox(settings.getItems().get("autoSaveDownloads").getUserFriendlyName());
|
||||||
|
checkBox.setSelected(settings.isDownloadSavedWithoutAsking());
|
||||||
|
checkBox.setOnAction(e -> settings.setDownloadSavedWithoutAsking(checkBox.isSelected()));
|
||||||
|
vbox.getChildren().add(checkBox);
|
||||||
|
|
||||||
|
// Displaying the default path to save to
|
||||||
|
vbox.getChildren().add(new Label(settings.getItems().get("downloadLocation").getDescription() + ":"));
|
||||||
|
final var hbox = new HBox(20);
|
||||||
|
final var currentPath = new Label(settings.getDownloadLocation().getAbsolutePath());
|
||||||
|
hbox.getChildren().add(currentPath);
|
||||||
|
|
||||||
|
// Setting the default path
|
||||||
|
final var button = new Button("Select");
|
||||||
|
button.setOnAction(e -> {
|
||||||
|
final var directoryChooser = new DirectoryChooser();
|
||||||
|
directoryChooser.setTitle("Select the directory where attachments should be saved to");
|
||||||
|
directoryChooser.setInitialDirectory(settings.getDownloadLocation());
|
||||||
|
final var selectedDirectory = directoryChooser.showDialog(sceneContext.getStage());
|
||||||
|
|
||||||
|
if (selectedDirectory != null) {
|
||||||
|
currentPath.setText(selectedDirectory.getAbsolutePath());
|
||||||
|
settings.setDownloadLocation(selectedDirectory);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
hbox.getChildren().add(button);
|
||||||
|
vbox.getChildren().add(hbox);
|
||||||
|
getChildren().add(vbox);
|
||||||
|
}
|
||||||
|
}
|
@ -5,7 +5,6 @@ import java.util.List;
|
|||||||
import javafx.scene.control.ComboBox;
|
import javafx.scene.control.ComboBox;
|
||||||
import javafx.scene.layout.VBox;
|
import javafx.scene.layout.VBox;
|
||||||
|
|
||||||
import envoy.client.data.Settings;
|
|
||||||
import envoy.client.data.SettingsItem;
|
import envoy.client.data.SettingsItem;
|
||||||
import envoy.client.event.ThemeChangeEvent;
|
import envoy.client.event.ThemeChangeEvent;
|
||||||
import envoy.data.User.UserStatus;
|
import envoy.data.User.UserStatus;
|
||||||
@ -21,8 +20,6 @@ import envoy.event.EventBus;
|
|||||||
*/
|
*/
|
||||||
public class GeneralSettingsPane extends SettingsPane {
|
public class GeneralSettingsPane extends SettingsPane {
|
||||||
|
|
||||||
private static final Settings settings = Settings.getInstance();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @since Envoy Client v0.1-beta
|
* @since Envoy Client v0.1-beta
|
||||||
*/
|
*/
|
||||||
|
@ -2,11 +2,13 @@ package envoy.client.ui.settings;
|
|||||||
|
|
||||||
import javafx.scene.layout.Pane;
|
import javafx.scene.layout.Pane;
|
||||||
|
|
||||||
|
import envoy.client.data.Settings;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Project: <strong>envoy-client</strong><br>
|
* Project: <strong>envoy-client</strong><br>
|
||||||
* File: <strong>SettingsPane.java</strong><br>
|
* File: <strong>SettingsPane.java</strong><br>
|
||||||
* Created: <strong>18.04.2020</strong><br>
|
* Created: <strong>18.04.2020</strong><br>
|
||||||
*
|
*
|
||||||
* @author Kai S. K. Engelbart
|
* @author Kai S. K. Engelbart
|
||||||
* @since Envoy Client v0.1-beta
|
* @since Envoy Client v0.1-beta
|
||||||
*/
|
*/
|
||||||
@ -14,6 +16,8 @@ public abstract class SettingsPane extends Pane {
|
|||||||
|
|
||||||
protected String title;
|
protected String title;
|
||||||
|
|
||||||
|
protected static final Settings settings = Settings.getInstance();
|
||||||
|
|
||||||
protected SettingsPane(String title) { this.title = title; }
|
protected SettingsPane(String title) { this.title = title; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -18,29 +18,28 @@ public class Attachment implements Serializable {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Defines the type of the attachment.
|
* Defines the type of the attachment.
|
||||||
*
|
*
|
||||||
* @since Envoy Common v0.1-beta
|
* @since Envoy Common v0.1-beta
|
||||||
*/
|
*/
|
||||||
public enum AttachmentType {
|
public enum AttachmentType {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This attachment type denotes a picture.
|
* This attachment type denotes a picture.
|
||||||
*
|
*
|
||||||
* @since Envoy Common v0.1-beta
|
* @since Envoy Common v0.1-beta
|
||||||
*/
|
*/
|
||||||
PICTURE,
|
PICTURE,
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This attachment type denotes a video.
|
* This attachment type denotes a video.
|
||||||
*
|
*
|
||||||
* @since Envoy Common v0.1-beta
|
* @since Envoy Common v0.1-beta
|
||||||
*/
|
*/
|
||||||
VIDEO,
|
VIDEO,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This attachment type denotes a voice message.
|
* This attachment type denotes a voice message.
|
||||||
*
|
*
|
||||||
* @since Envoy Common v0.1-beta
|
* @since Envoy Common v0.1-beta
|
||||||
*/
|
*/
|
||||||
VOICE,
|
VOICE,
|
||||||
@ -55,18 +54,21 @@ public class Attachment implements Serializable {
|
|||||||
|
|
||||||
private final byte[] data;
|
private final byte[] data;
|
||||||
private final AttachmentType type;
|
private final AttachmentType type;
|
||||||
|
private final String name;
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
private static final long serialVersionUID = 2L;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs an attachment.
|
* Constructs an attachment.
|
||||||
*
|
*
|
||||||
* @param data the data of the attachment
|
* @param data the data of the attachment
|
||||||
|
* @param name the name of the attachment
|
||||||
* @param type the type of the attachment
|
* @param type the type of the attachment
|
||||||
* @since Envoy Common v0.1-beta
|
* @since Envoy Common v0.1-beta
|
||||||
*/
|
*/
|
||||||
public Attachment(byte[] data, AttachmentType type) {
|
public Attachment(byte[] data, String name, AttachmentType type) {
|
||||||
this.data = data;
|
this.data = data;
|
||||||
|
this.name = name;
|
||||||
this.type = type;
|
this.type = type;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,4 +83,10 @@ public class Attachment implements Serializable {
|
|||||||
* @since Envoy Common v0.1-beta
|
* @since Envoy Common v0.1-beta
|
||||||
*/
|
*/
|
||||||
public AttachmentType getType() { return type; }
|
public AttachmentType getType() { return type; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the name
|
||||||
|
* @since Envoy Common v0.2-beta
|
||||||
|
*/
|
||||||
|
public String getName() { return name; }
|
||||||
}
|
}
|
||||||
|
@ -47,7 +47,7 @@ public class Message {
|
|||||||
/**
|
/**
|
||||||
* Named query retrieving pending messages for a user (parameter {@code :user})
|
* Named query retrieving pending messages for a user (parameter {@code :user})
|
||||||
* which was last seen after a specific date (parameter {@code :lastSeen}).
|
* which was last seen after a specific date (parameter {@code :lastSeen}).
|
||||||
*
|
*
|
||||||
* @since Envoy Server Standalone v0.1-beta
|
* @since Envoy Server Standalone v0.1-beta
|
||||||
*/
|
*/
|
||||||
public static final String getPending = "Message.getPending";
|
public static final String getPending = "Message.getPending";
|
||||||
@ -76,6 +76,7 @@ public class Message {
|
|||||||
protected envoy.data.Message.MessageStatus status;
|
protected envoy.data.Message.MessageStatus status;
|
||||||
protected AttachmentType attachmentType;
|
protected AttachmentType attachmentType;
|
||||||
protected byte[] attachment;
|
protected byte[] attachment;
|
||||||
|
protected String attachmentName;
|
||||||
protected boolean forwarded;
|
protected boolean forwarded;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -93,7 +94,7 @@ public class Message {
|
|||||||
* @since Envoy Server Standalone v0.1-alpha
|
* @since Envoy Server Standalone v0.1-alpha
|
||||||
*/
|
*/
|
||||||
public Message(envoy.data.Message message) {
|
public Message(envoy.data.Message message) {
|
||||||
PersistenceManager persistenceManager = PersistenceManager.getInstance();
|
final var persistenceManager = PersistenceManager.getInstance();
|
||||||
id = message.getID();
|
id = message.getID();
|
||||||
status = message.getStatus();
|
status = message.getStatus();
|
||||||
text = message.getText();
|
text = message.getText();
|
||||||
@ -104,8 +105,10 @@ public class Message {
|
|||||||
recipient = persistenceManager.getContactByID(message.getRecipientID());
|
recipient = persistenceManager.getContactByID(message.getRecipientID());
|
||||||
forwarded = message.isForwarded();
|
forwarded = message.isForwarded();
|
||||||
if (message.hasAttachment()) {
|
if (message.hasAttachment()) {
|
||||||
attachment = message.getAttachment().getData();
|
final var messageAttachment = message.getAttachment();
|
||||||
attachmentType = message.getAttachment().getType();
|
attachment = messageAttachment.getData();
|
||||||
|
attachmentName = messageAttachment.getName();
|
||||||
|
attachmentType = messageAttachment.getType();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,20 +126,20 @@ public class Message {
|
|||||||
* @since Envoy Server Standalone v0.1-beta
|
* @since Envoy Server Standalone v0.1-beta
|
||||||
*/
|
*/
|
||||||
MessageBuilder prepareBuilder() {
|
MessageBuilder prepareBuilder() {
|
||||||
var builder = new MessageBuilder(sender.getID(), recipient.getID(), id).setText(text)
|
final var builder = new MessageBuilder(sender.getID(), recipient.getID(), id).setText(text)
|
||||||
.setCreationDate(creationDate)
|
.setCreationDate(creationDate)
|
||||||
.setReceivedDate(receivedDate)
|
.setReceivedDate(receivedDate)
|
||||||
.setReadDate(readDate)
|
.setReadDate(readDate)
|
||||||
.setStatus(status)
|
.setStatus(status)
|
||||||
.setForwarded(forwarded);
|
.setForwarded(forwarded);
|
||||||
if (attachment != null) builder.setAttachment(new Attachment(attachment, attachmentType));
|
if (attachment != null) builder.setAttachment(new Attachment(attachment, attachmentName, attachmentType));
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the message status to {@link MessageStatus#RECEIVED} and sets the
|
* Sets the message status to {@link MessageStatus#RECEIVED} and sets the
|
||||||
* current time stamp as the received date.
|
* current time stamp as the received date.
|
||||||
*
|
*
|
||||||
* @since Envoy Server Standalone v0.1-beta
|
* @since Envoy Server Standalone v0.1-beta
|
||||||
*/
|
*/
|
||||||
public void received() {
|
public void received() {
|
||||||
@ -147,7 +150,7 @@ public class Message {
|
|||||||
/**
|
/**
|
||||||
* Sets the message status to {@link MessageStatus#READ} and sets the
|
* Sets the message status to {@link MessageStatus#READ} and sets the
|
||||||
* current time stamp as the read date.
|
* current time stamp as the read date.
|
||||||
*
|
*
|
||||||
* @since Envoy Server Standalone v0.1-beta
|
* @since Envoy Server Standalone v0.1-beta
|
||||||
*/
|
*/
|
||||||
public void read() {
|
public void read() {
|
||||||
@ -282,6 +285,18 @@ public class Message {
|
|||||||
*/
|
*/
|
||||||
public void setAttachmentType(AttachmentType attachmentType) { this.attachmentType = attachmentType; }
|
public void setAttachmentType(AttachmentType attachmentType) { this.attachmentType = attachmentType; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the attachmentName
|
||||||
|
* @since Envoy Server v0.2-beta
|
||||||
|
*/
|
||||||
|
public String getAttachmentName() { return attachmentName; }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param attachmentName the attachmentName to set
|
||||||
|
* @since Envoy Server v0.2-beta
|
||||||
|
*/
|
||||||
|
public void setAttachmentName(String attachmentName) { this.attachmentName = attachmentName; }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return whether this message is a forwarded message
|
* @return whether this message is a forwarded message
|
||||||
* @since Envoy Server Standalone v0.1-alpha
|
* @since Envoy Server Standalone v0.1-alpha
|
||||||
|
Reference in New Issue
Block a user