From 854bd629da2531a9cb5592c6d26b09e51b2e2d43 Mon Sep 17 00:00:00 2001 From: sh123 Date: Sun, 16 Jul 2023 11:12:55 +0300 Subject: [PATCH] Handle auto reply messages --- .../com/radio/codec2talkie/app/AppWorker.java | 10 ++++++++-- .../protocol/message/TextMessage.java | 18 ++++++++++++++++++ .../codec2talkie/storage/AppDatabase.java | 2 +- .../storage/message/MessageItem.java | 2 +- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/app/AppWorker.java b/codec2talkie/src/main/java/com/radio/codec2talkie/app/AppWorker.java index 1dbd158..f14b245 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/app/AppWorker.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/app/AppWorker.java @@ -299,7 +299,11 @@ public class AppWorker extends Thread { String note = (textMessage.src == null ? "UNK" : textMessage.src) + "→" + (textMessage.dst == null ? "UNK" : textMessage.dst); sendStatusUpdate(AppMessage.EV_TEXT_MESSAGE_RECEIVED, note + ": " + textMessage.text); - _messageItemRepository.insertMessageItem(textMessage.toMessageItem(false)); + if (textMessage.isAutoReply()) { + // TODO, acknowledge or reject message with the given (src, dst, ackId) + } else { + _messageItemRepository.insertMessageItem(textMessage.toMessageItem(false)); + } Log.i(TAG, "message received: " + textMessage.text); } @@ -342,7 +346,9 @@ public class AppWorker extends Thread { String note = (textMessage.src == null ? "UNK" : textMessage.src) + "→" + (textMessage.dst == null ? "UNK" : textMessage.dst); sendStatusUpdate(AppMessage.EV_TEXT_MESSAGE_TRANSMITTED, note); - _messageItemRepository.insertMessageItem(textMessage.toMessageItem(true)); + if (!textMessage.isAutoReply()) { + _messageItemRepository.insertMessageItem(textMessage.toMessageItem(true)); + } } @Override diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/message/TextMessage.java b/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/message/TextMessage.java index ac85273..99b146c 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/message/TextMessage.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/message/TextMessage.java @@ -2,6 +2,8 @@ package com.radio.codec2talkie.protocol.message; import com.radio.codec2talkie.storage.message.MessageItem; +import java.util.Locale; + public class TextMessage { public String src; public String dst; @@ -21,4 +23,20 @@ public class TextMessage { messageItem.setRetryCnt(0); return messageItem; } + + public boolean isAck() { + return this.text != null && + this.text.toLowerCase(Locale.ROOT).equals("ack") && + this.ackId > 0; + } + + public boolean isRej() { + return this.text != null && + this.text.toLowerCase(Locale.ROOT).equals("rej") && + this.ackId > 0; + } + + public boolean isAutoReply() { + return isAck() || isRej(); + } } diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/AppDatabase.java b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/AppDatabase.java index 9d9eaf5..a85730a 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/AppDatabase.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/AppDatabase.java @@ -20,7 +20,7 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @androidx.room.Database( - version = 12, + version = 13, entities = {LogItem.class, MessageItem.class, PositionItem.class, StationItem.class}, exportSchema = false ) diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/message/MessageItem.java b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/message/MessageItem.java index 2896e54..3324538 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/message/MessageItem.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/message/MessageItem.java @@ -4,7 +4,7 @@ import androidx.room.Entity; import androidx.room.Index; import androidx.room.PrimaryKey; -@Entity(indices = {@Index(value = {"id", "srcCallsign", "ackId"}, unique = true)}) +@Entity(indices = {@Index(value = {"id", "srcCallsign", "dstCallsign", "ackId"}, unique = true)}) public class MessageItem { @PrimaryKey(autoGenerate = true)