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 45ed331..bac9787 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/app/AppWorker.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/app/AppWorker.java @@ -22,6 +22,7 @@ import java.util.Timer; import java.util.TimerTask; import com.radio.codec2talkie.R; +import com.radio.codec2talkie.protocol.aprs.tools.AprsIsData; import com.radio.codec2talkie.protocol.message.TextMessage; import com.radio.codec2talkie.storage.log.LogItem; import com.radio.codec2talkie.storage.log.LogItemRepository; @@ -375,17 +376,25 @@ public class AppWorker extends Thread { } }; - void storeLogData(String logData, boolean isTransmit) { - // TODO, parse through aprs data - String[] callsignData = logData.split(">"); - if (callsignData.length >= 2) { + private void storeLogData(String logData, boolean isTransmit) { + AprsIsData aprsIsData = AprsIsData.fromString(logData); + if (aprsIsData != null) { LogItem logItem = new LogItem(); logItem.setTimestampEpoch(System.currentTimeMillis()); - logItem.setSrcCallsign(callsignData[0]); - logItem.setLogLine(logData); logItem.setIsTransmit(isTransmit); + logItem.setSrcCallsign(aprsIsData.src); + logItem.setLogLine(logData); _logItemRepository.insertLogItem(logItem); _stationItemRepository.upsertStationItem(logItem.toStationItem()); + if (aprsIsData.hasThirdParty()) { + LogItem logItemThirdParty = new LogItem(); + logItemThirdParty.setTimestampEpoch(System.currentTimeMillis()); + logItemThirdParty.setIsTransmit(isTransmit); + logItemThirdParty.setSrcCallsign(aprsIsData.thirdParty.src); + logItemThirdParty.setLogLine(aprsIsData.thirdParty.convertToString(true)); + _logItemRepository.insertLogItem(logItemThirdParty); + _stationItemRepository.upsertStationItem(logItemThirdParty.toStationItem()); + } } } diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/AprsIs.java b/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/AprsIs.java index f1793ca..c855585 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/AprsIs.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/AprsIs.java @@ -127,7 +127,7 @@ public class AprsIs implements Protocol, Runnable { if (_isSelfEnabled) { AprsIsData aprsIsData = new AprsIsData(src, dst, path, new String(data)); synchronized (_toAprsIsQueue) { - String rawData = aprsIsData.toString() + "\n"; + String rawData = aprsIsData.convertToString(false) + "\n"; _toAprsIsQueue.put(rawData.getBytes()); } } @@ -152,7 +152,7 @@ public class AprsIs implements Protocol, Runnable { private byte[] thirdPartyWrap(AprsIsData aprsIsData) { // wrap into third party, https://aprs-is.net/IGateDetails.aspx aprsIsData.digipath = "TCPIP," + _callsign + "*"; - String txData = "}" + aprsIsData.toString(); + String txData = "}" + aprsIsData.convertToString(false); return txData.getBytes(); } @@ -208,7 +208,7 @@ public class AprsIs implements Protocol, Runnable { if (aprsIsData.hasThirdParty()) { aprsIsData = aprsIsData.thirdParty; } - String rawData = aprsIsData.toString() + "\n"; + String rawData = aprsIsData.convertToString(false) + "\n"; synchronized (_toAprsIsQueue) { _toAprsIsQueue.put(rawData.getBytes()); } diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/aprs/tools/AprsIsData.java b/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/aprs/tools/AprsIsData.java index e6f6f78..b2d8518 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/aprs/tools/AprsIsData.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/protocol/aprs/tools/AprsIsData.java @@ -32,11 +32,13 @@ public class AprsIsData { } @NonNull - public String toString() { + public String convertToString(boolean useRawPath) { String result = src + ">"; if (dst != null && dst.length() > 0) result += dst; - if (digipath != null && digipath.length() > 0) + if (useRawPath && rawDigipath != null && rawDigipath.length() > 0) + result += "," + rawDigipath; + else if (digipath != null && digipath.length() > 0) result += "," + digipath; result += ":" + data; return result; diff --git a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/LogItemHolder.java b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/LogItemHolder.java index ae00301..609de1c 100644 --- a/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/LogItemHolder.java +++ b/codec2talkie/src/main/java/com/radio/codec2talkie/storage/log/LogItemHolder.java @@ -33,7 +33,8 @@ public class LogItemHolder extends RecyclerView.ViewHolder implements View.OnCli DateTools.epochToIso8601(timestamp), isTransmitting ? "→" : "←", srcCallsign)); - _logItemViewMessage.setText(TextTools.addZeroWidthSpaces(text)); + if (text != null) + _logItemViewMessage.setText(TextTools.addZeroWidthSpaces(text)); } static LogItemHolder create(ViewGroup parent, boolean isClickable) {