From d22e97ffc88bee8d995c1ce480c80626e3f30b9f Mon Sep 17 00:00:00 2001 From: CalDescent Date: Fri, 10 Feb 2023 18:13:42 +0000 Subject: [PATCH] Fixed build issues due to merge. --- .../org/qortal/api/resource/ChatResource.java | 7 +---- .../org/qortal/controller/Controller.java | 4 +-- src/main/java/org/qortal/network/Network.java | 2 +- .../network/message/ChatMessagesMessage.java | 26 ++++++++++++++++--- .../hsqldb/HSQLDBChatRepository.java | 13 +++++----- .../org/qortal/test/ChatMessageTests.java | 5 +++- 6 files changed, 38 insertions(+), 19 deletions(-) diff --git a/src/main/java/org/qortal/api/resource/ChatResource.java b/src/main/java/org/qortal/api/resource/ChatResource.java index 2601e938..fa034f29 100644 --- a/src/main/java/org/qortal/api/resource/ChatResource.java +++ b/src/main/java/org/qortal/api/resource/ChatResource.java @@ -134,12 +134,7 @@ public class ChatResource { try (final Repository repository = RepositoryManager.getRepository()) { - ChatTransactionData chatTransactionData = (ChatTransactionData) repository.getTransactionRepository().fromSignature(signature); - if (chatTransactionData == null) { - throw ApiExceptionFactory.INSTANCE.createCustomException(request, ApiError.INVALID_CRITERIA, "Message not found"); - } - - return repository.getChatRepository().toChatMessage(chatTransactionData); + return repository.getChatRepository().getChatMessageBySignature(signature); } catch (DataException e) { throw ApiExceptionFactory.INSTANCE.createException(request, ApiError.REPOSITORY_ISSUE, e); } diff --git a/src/main/java/org/qortal/controller/Controller.java b/src/main/java/org/qortal/controller/Controller.java index 07051068..36dc2723 100644 --- a/src/main/java/org/qortal/controller/Controller.java +++ b/src/main/java/org/qortal/controller/Controller.java @@ -1954,7 +1954,7 @@ public class Controller extends Thread { boolean reverse = (direction == Direction.BACKWARDS); List chatMessages = repository.getChatRepository().getMessagesMatchingCriteria( - before, after, null, null, numberRequested, 0, reverse); + before, after, null, null, null, null, null, numberRequested, 0, reverse); Message chatMessagesMessage = new ChatMessagesMessage(chatMessages); chatMessagesMessage.setId(message.getId()); @@ -2012,7 +2012,7 @@ public class Controller extends Thread { // Get all recent messages from repository List ourChatMessages = repository.getChatRepository().getMessagesMatchingCriteria( - null, after, null, null, null, 0, true); + null, after, null, null, null, null, null, null, 0, true); for (ChatMessage chatMessage : ourChatMessages) { // Skip if the sender already has this one diff --git a/src/main/java/org/qortal/network/Network.java b/src/main/java/org/qortal/network/Network.java index 17e6d276..8eae9f7b 100644 --- a/src/main/java/org/qortal/network/Network.java +++ b/src/main/java/org/qortal/network/Network.java @@ -1233,7 +1233,7 @@ public class Network { // Get all recent messages from repository List ourChatMessages = repository.getChatRepository().getMessagesMatchingCriteria( - null, after, null, null, null, 0, true); + null, after, null, null, null, null, null, null, 0, true); List signatures = new ArrayList<>(); for (ChatMessage chatMessage : ourChatMessages) { diff --git a/src/main/java/org/qortal/network/message/ChatMessagesMessage.java b/src/main/java/org/qortal/network/message/ChatMessagesMessage.java index 0075bdcb..efd4707a 100644 --- a/src/main/java/org/qortal/network/message/ChatMessagesMessage.java +++ b/src/main/java/org/qortal/network/message/ChatMessagesMessage.java @@ -14,11 +14,15 @@ import java.util.ArrayList; import java.util.List; import static org.qortal.naming.Name.MAX_NAME_SIZE; +import static org.qortal.transform.Transformer.SIGNATURE_LENGTH; public class ChatMessagesMessage extends Message { private List chatMessages; + private static final int CHAT_REFERENCE_LENGTH = SIGNATURE_LENGTH; + + public ChatMessagesMessage(List chatMessages) { super(MessageType.CHAT_MESSAGES); @@ -44,6 +48,14 @@ public class ChatMessagesMessage extends Message { Serialization.serializeSizedStringV2(bytes, chatMessage.getRecipientName()); + // Include chat reference if it's not null + if (chatMessage.getChatReference() != null) { + bytes.write((byte) 1); + bytes.write(chatMessage.getChatReference()); + } else { + bytes.write((byte) 0); + } + bytes.write(Ints.toByteArray(chatMessage.getData().length)); bytes.write(chatMessage.getData()); @@ -81,7 +93,7 @@ public class ChatMessagesMessage extends Message { int txGroupId = bytes.getInt(); - byte[] reference = new byte[Transformer.SIGNATURE_LENGTH]; + byte[] reference = new byte[SIGNATURE_LENGTH]; bytes.get(reference); byte[] senderPublicKey = new byte[Transformer.PUBLIC_KEY_LENGTH]; @@ -95,6 +107,14 @@ public class ChatMessagesMessage extends Message { String recipientName = Serialization.deserializeSizedStringV2(bytes, MAX_NAME_SIZE); + byte[] chatReference = null; + boolean hasChatReference = bytes.get() != 0; + + if (hasChatReference) { + chatReference = new byte[CHAT_REFERENCE_LENGTH]; + bytes.get(chatReference); + } + int dataLength = bytes.getInt(); byte[] data = new byte[dataLength]; bytes.get(data); @@ -103,11 +123,11 @@ public class ChatMessagesMessage extends Message { boolean isEncrypted = bytes.getInt() == 1; - byte[] signature = new byte[Transformer.SIGNATURE_LENGTH]; + byte[] signature = new byte[SIGNATURE_LENGTH]; bytes.get(signature); ChatMessage chatMessage = new ChatMessage(timestamp, txGroupId, reference, senderPublicKey, - sender, senderName, recipient, recipientName, data, isText, isEncrypted, signature); + sender, senderName, recipient, recipientName, chatReference, data, isText, isEncrypted, signature); chatMessages.add(chatMessage); } diff --git a/src/main/java/org/qortal/repository/hsqldb/HSQLDBChatRepository.java b/src/main/java/org/qortal/repository/hsqldb/HSQLDBChatRepository.java index bf686201..086c89ac 100644 --- a/src/main/java/org/qortal/repository/hsqldb/HSQLDBChatRepository.java +++ b/src/main/java/org/qortal/repository/hsqldb/HSQLDBChatRepository.java @@ -262,7 +262,7 @@ public class HSQLDBChatRepository implements ChatRepository { sql.append("SELECT created_when, tx_group_id, reference, creator, sender, recipient, " // TODO: + "SenderNames.name, RecipientNames.name, " - + "data, is_text, is_encrypted, signature " + + "chat_reference, data, is_text, is_encrypted, signature " + "FROM ChatMessages WHERE signature = ?"); // TODO: + "LEFT OUTER JOIN Names AS SenderNames ON SenderNames.owner = sender " // TODO: + "LEFT OUTER JOIN Names AS RecipientNames ON RecipientNames.owner = recipient "); @@ -279,13 +279,14 @@ public class HSQLDBChatRepository implements ChatRepository { String senderName = resultSet.getString(6); // TOOD String recipient = resultSet.getString(7); String recipientName = resultSet.getString(8); // TODO - byte[] data = resultSet.getBytes(9); - boolean isText = resultSet.getBoolean(10); - boolean isEncrypted = resultSet.getBoolean(11); - byte[] signatureResult = resultSet.getBytes(12); + byte[] chatReference = resultSet.getBytes(9); + byte[] data = resultSet.getBytes(10); + boolean isText = resultSet.getBoolean(11); + boolean isEncrypted = resultSet.getBoolean(12); + byte[] signatureResult = resultSet.getBytes(13); ChatMessage chatMessage = new ChatMessage(timestamp, groupId, reference, senderPublicKey, sender, - senderName, recipient, recipientName, data, isText, isEncrypted, signatureResult); + senderName, recipient, recipientName, chatReference, data, isText, isEncrypted, signatureResult); return chatMessage; } catch (SQLException e) { diff --git a/src/test/java/org/qortal/test/ChatMessageTests.java b/src/test/java/org/qortal/test/ChatMessageTests.java index 7428d2cb..9d6fbe76 100644 --- a/src/test/java/org/qortal/test/ChatMessageTests.java +++ b/src/test/java/org/qortal/test/ChatMessageTests.java @@ -37,6 +37,9 @@ public class ChatMessageTests extends Common { long timestamp = NTP.getTime(); int txGroupId = 1; + byte[] chatReference = new byte[64]; + new Random().nextBytes(chatReference); + byte[] messageData = new byte[80]; new Random().nextBytes(messageData); @@ -45,7 +48,7 @@ public class ChatMessageTests extends Common { ChatMessage aliceMessage = new ChatMessage(timestamp, txGroupId, alice.getLastReference(), alice.getPublicKey(), alice.getAddress(), "alice", bob.getAddress(), "bob", - messageData, true, true, signature); + chatReference, messageData, true, true, signature); // Serialize ChatMessagesMessage chatMessagesMessage = new ChatMessagesMessage(Arrays.asList(aliceMessage));