1313
1414import java .io .File ;
1515
16+ import java .io .FileNotFoundException ;
17+ import java .io .IOException ;
1618import java .util .*;
19+ import java .util .concurrent .CompletableFuture ;
1720
1821
1922/**
@@ -54,32 +57,28 @@ private static void runOnFx(Runnable task) {
5457 }
5558
5659 /**
57- * Sends the current text message to the Ntfy server via the connection .
58- * The message is added to the local list before sending .
60+ * Sends the current text message asynchronously .
61+ * The network call is moved off the FX thread. UI updates happen via runOnFx .
5962 */
6063 public void sendMessage () {
61- String message = messageToSend .get ();
62- if (message != null && !message .trim ().isEmpty ()) {
63-
64- // 1. Skapa den lokala DTO:n (med isLocal = true)
65- NtfyMessageDto localMessage = new NtfyMessageDto (
66- UUID .randomUUID ().toString (),
67- System .currentTimeMillis () / 1000L ,
68- "message" ,
69- currentTopic .get (),
70- message .trim (),
71- true // Markera som lokalt skickat
72- );
73-
74- // 2. Lägg till i listan (UI-uppdatering) PÅ RÄTT TRÅD
75- runOnFx (() -> messages .add (localMessage ));
76-
77- // 3. Skicka meddelandet via anslutningen
78- connection .send (message , currentTopic .get ());
79-
80- // 4. Rensa meddelandefältet efter skickning
81- messageToSend .set ("" );
64+ final String message = messageToSend .get ();
65+ if (message == null || message .trim ().isEmpty ()) {
66+ System .err .println ("Cannot send empty message." );
67+ return ;
8268 }
69+
70+ // 1. Markera meddelandet som lokalt skickat och lägg till i listan (UI-uppdatering)
71+ final NtfyMessageDto localSentDto = new NtfyMessageDto (message , currentTopic .get (), "text" , true );
72+ runOnFx (() -> {
73+ messages .add (localSentDto );
74+ messageToSend .set ("" ); // Rensa inmatningsfältet
75+ });
76+
77+ // 2. Utför nätverksanropet på en bakgrundstråd
78+ CompletableFuture .runAsync (() -> {
79+ // Nätverksanropet sker här i bakgrunden
80+ connection .send (message , currentTopic .get ());
81+ });
8382 }
8483
8584 /**
@@ -89,27 +88,19 @@ public void sendMessage() {
8988 */
9089 public void sendFile () {
9190 File file = fileToSend .get ();
92- if (file != null ) {
93-
94- // 1. Skapa den lokala DTO:n för fil (ofta med tom message)
95- NtfyMessageDto localFileMessage = new NtfyMessageDto (
96- UUID .randomUUID ().toString (),
97- System .currentTimeMillis () / 1000L ,
98- "file" , // Använd "file" event om det är en fil
99- currentTopic .get (),
100- "Fil skickad: " + file .getName (), // Detta meddelande visas bara i logik, CellFactory hanterar visning
101- true
102- );
103-
104- // 2. Lägg till i listan (UI-uppdatering) PÅ RÄTT TRÅD
105- runOnFx (() -> messages .add (localFileMessage ));
106-
107- // 3. Skicka filen
108- connection .sendFile (file , currentTopic .get ());
91+ final NtfyMessageDto localSentDto = new NtfyMessageDto (file .getName (), currentTopic .get (), "file" , true );
92+ runOnFx (() -> {
93+ messages .add (localSentDto );
94+ fileToSend .set (null ); // Rensa filbilagan i UI
95+ });
10996
110- // 4. Rensa filbilagan efter skickning
111- fileToSend .set (null );
112- }
97+ // 2. Utför nätverksanropet på en bakgrundstråd
98+
99+ // 2. Utför nätverksanropet på en bakgrundstråd
100+ CompletableFuture .runAsync (() -> {
101+ // Nätverksanropet sker här i bakgrunden
102+ connection .sendFile (file , currentTopic .get ());
103+ });
113104 }
114105
115106 /**
0 commit comments