2020-09-30 20:50:58 +02:00
|
|
|
package envoy.client.util;
|
|
|
|
|
|
|
|
import java.awt.Toolkit;
|
|
|
|
import java.awt.datatransfer.StringSelection;
|
|
|
|
import java.io.*;
|
|
|
|
import java.util.logging.*;
|
|
|
|
|
|
|
|
import javafx.stage.FileChooser;
|
|
|
|
|
2021-02-19 11:09:07 +01:00
|
|
|
import dev.kske.eventbus.core.EventBus;
|
2020-10-19 18:17:51 +02:00
|
|
|
|
2020-09-30 20:50:58 +02:00
|
|
|
import envoy.data.Message;
|
|
|
|
import envoy.util.EnvoyLog;
|
|
|
|
|
2020-10-19 18:17:51 +02:00
|
|
|
import envoy.client.data.*;
|
|
|
|
import envoy.client.event.MessageDeletion;
|
|
|
|
import envoy.client.ui.controller.ChatScene;
|
2020-09-30 20:50:58 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Contains methods that are commonly used for {@link Message}s.
|
|
|
|
*
|
|
|
|
* @author Leon Hofmeister
|
|
|
|
* @since Envoy Client v0.3-beta
|
|
|
|
*/
|
|
|
|
public class MessageUtil {
|
|
|
|
|
|
|
|
private MessageUtil() {}
|
|
|
|
|
|
|
|
private static Logger logger = EnvoyLog.getLogger(MessageUtil.class);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Copies the text of the given message to the System Clipboard.
|
|
|
|
*
|
|
|
|
* @param message the message whose text to copy
|
|
|
|
* @since Envoy Client v0.3-beta
|
|
|
|
*/
|
|
|
|
public static void copyMessageText(Message message) {
|
2020-10-19 18:17:51 +02:00
|
|
|
logger.log(Level.FINEST,
|
|
|
|
"A copy of message text \"" + message.getText() + "\" was requested");
|
|
|
|
Toolkit.getDefaultToolkit().getSystemClipboard()
|
|
|
|
.setContents(new StringSelection(message.getText()), null);
|
2020-09-30 20:50:58 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Deletes the given message.
|
|
|
|
*
|
|
|
|
* @param message the message to delete
|
|
|
|
* @since Envoy Client v0.3-beta
|
|
|
|
*/
|
|
|
|
public static void deleteMessage(Message message) {
|
|
|
|
final var messageDeletionEvent = new MessageDeletion(message.getID());
|
2020-10-19 18:17:51 +02:00
|
|
|
final var controller =
|
|
|
|
Context.getInstance().getSceneContext().getController();
|
|
|
|
if (controller instanceof ChatScene)
|
|
|
|
((ChatScene) controller).clearMessageSelection();
|
2020-09-30 20:50:58 +02:00
|
|
|
|
|
|
|
// Removing the message locally
|
|
|
|
EventBus.getInstance().dispatch(messageDeletionEvent);
|
|
|
|
|
|
|
|
logger.log(Level.FINEST, "message deletion was requested for " + message);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
2020-10-19 18:17:51 +02:00
|
|
|
* Forwards the given message. Currently not implemented.
|
2020-09-30 20:50:58 +02:00
|
|
|
*
|
|
|
|
* @param message the message to forward
|
|
|
|
* @since Envoy Client v0.3-beta
|
|
|
|
*/
|
2020-10-19 18:17:51 +02:00
|
|
|
public static void forwardMessage(Message message) {
|
|
|
|
logger.log(Level.FINEST, "Message forwarding was requested for " + message);
|
|
|
|
}
|
2020-09-30 20:50:58 +02:00
|
|
|
|
|
|
|
/**
|
2020-10-19 18:17:51 +02:00
|
|
|
* Quotes the given message. Currently not implemented.
|
2020-09-30 20:50:58 +02:00
|
|
|
*
|
|
|
|
* @param message the message to quote
|
|
|
|
* @since Envoy Client v0.3-beta
|
|
|
|
*/
|
2020-10-19 18:17:51 +02:00
|
|
|
public static void quoteMessage(Message message) {
|
|
|
|
logger.log(Level.FINEST, "Message quotation was requested for " + message);
|
|
|
|
}
|
2020-09-30 20:50:58 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Saves the attachment of a message, if present.
|
|
|
|
*
|
|
|
|
* @param message the message whose attachment to save
|
|
|
|
* @throws IllegalStateException if no attachment is present in the message
|
|
|
|
* @since Envoy Client v0.3-beta
|
|
|
|
*/
|
|
|
|
public static void saveAttachment(Message message) {
|
2020-10-19 18:17:51 +02:00
|
|
|
if (!message.hasAttachment())
|
|
|
|
throw new IllegalArgumentException("Cannot save a non-existing attachment");
|
2020-09-30 20:50:58 +02:00
|
|
|
File file;
|
|
|
|
final var fileName = message.getAttachment().getName();
|
|
|
|
final var downloadLocation = Settings.getInstance().getDownloadLocation();
|
|
|
|
|
|
|
|
// Show save file dialog, if the user did not opt-out
|
|
|
|
if (!Settings.getInstance().isDownloadSavedWithoutAsking()) {
|
|
|
|
final var fileChooser = new FileChooser();
|
|
|
|
fileChooser.setInitialFileName(fileName);
|
|
|
|
fileChooser.setInitialDirectory(downloadLocation);
|
|
|
|
file = fileChooser.showSaveDialog(Context.getInstance().getSceneContext().getStage());
|
2020-10-19 18:17:51 +02:00
|
|
|
} else
|
|
|
|
file = new File(downloadLocation, fileName);
|
2020-09-30 20:50:58 +02:00
|
|
|
|
|
|
|
// A file was selected
|
2020-10-19 18:17:51 +02:00
|
|
|
if (file != null)
|
|
|
|
try (var 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);
|
|
|
|
}
|
2020-09-30 20:50:58 +02:00
|
|
|
}
|
|
|
|
}
|