diff --git a/datastore/src/main/java/net/jami/datastore/dao/ContactDao.java b/datastore/src/main/java/net/jami/datastore/dao/ContactDao.java index df1a2cbf2d27561ce93f266be5b2f5af59b59cf4..c429f5e1b81f241396a79d8c84d7b59b3b211614 100644 --- a/datastore/src/main/java/net/jami/datastore/dao/ContactDao.java +++ b/datastore/src/main/java/net/jami/datastore/dao/ContactDao.java @@ -67,8 +67,8 @@ public class ContactDao extends AbstractDao<Contact> { PreparedStatement ps = connection.getConnection().prepareStatement(delete); ps.setString(1, contactList.get(0).getOwner()); ps.executeUpdate(); - String insert = "INSERT INTO contacts (owner, uri, displayName, timestamp, status,banned,confirmed) VALUES " + - "(?, ?, ?, ?, ?,?,?)"; + String insert = "INSERT INTO contacts (owner, uri, displayName, timestamp, status, banned, confirmed, conversationId) VALUES " + + "(?, ?, ?, ?, ?, ?, ?, ?)"; for (Contact contact : contactList) { ps = connection.getConnection().prepareStatement(insert); contact.getInsert(ps); diff --git a/datastore/src/main/resources/db/migration/V31__Contacts.sql b/datastore/src/main/resources/db/migration/V31__Contacts.sql index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..fdc6655bc19c185d196807a866c93f1b5569a1b6 100644 --- a/datastore/src/main/resources/db/migration/V31__Contacts.sql +++ b/datastore/src/main/resources/db/migration/V31__Contacts.sql @@ -0,0 +1 @@ +ALTER TABLE contacts ADD COLUMN conversationId varchar(255); \ No newline at end of file diff --git a/jams-common/src/main/java/net/jami/jams/common/objects/contacts/Contact.java b/jams-common/src/main/java/net/jami/jams/common/objects/contacts/Contact.java index b25d2e1b1e336b06f5e7ab5e441288ed63dea6df..b7d71c16361f9a3b63ed0f0cf05bfb62f7cfb7c5 100644 --- a/jams-common/src/main/java/net/jami/jams/common/objects/contacts/Contact.java +++ b/jams-common/src/main/java/net/jami/jams/common/objects/contacts/Contact.java @@ -47,6 +47,7 @@ public class Contact implements DatabaseObject { private Character status; //A = added, D = deleted. private Boolean banned = false; private Boolean confirmed = false; + private String conversationId; public Contact(ResultSet rs) throws Exception { this.owner = rs.getString("owner"); @@ -56,6 +57,7 @@ public class Contact implements DatabaseObject { this.status = (char) rs.getInt("status"); this.banned = rs.getBoolean("banned"); this.confirmed = rs.getBoolean("confirmed"); + this.conversationId = rs.getString("conversationId"); } @Override @@ -68,6 +70,7 @@ public class Contact implements DatabaseObject { ps.setInt(5,status); ps.setBoolean(6,banned); ps.setBoolean(7,confirmed); + ps.setString(8, conversationId); return ps; } diff --git a/jams-common/src/main/java/net/jami/jams/common/serialization/serializers/ContactCodec.java b/jams-common/src/main/java/net/jami/jams/common/serialization/serializers/ContactCodec.java index 2797af5f62045ea71b3806659d17eac0e00d57b4..55bdcf400bc7ecd4aabda852907f4c852b7ce532 100644 --- a/jams-common/src/main/java/net/jami/jams/common/serialization/serializers/ContactCodec.java +++ b/jams-common/src/main/java/net/jami/jams/common/serialization/serializers/ContactCodec.java @@ -16,7 +16,8 @@ public class ContactCodec implements Encoder, Decoder { * "added" : 1595523510, * "banned" : false, * "uri" : "520290d7f45e5811fe5af637d328e7fbf5e8cab9", - * "removed" : 0 + * "removed" : 0, + * "conversationId": 6a61013979964f70c8fb9183a8b238d58a1846ed * } */ @Override @@ -24,6 +25,7 @@ public class ContactCodec implements Encoder, Decoder { Any input = jsonIterator.readAny(); Contact contact = new Contact(); contact.setUri(input.get("uri").toString()); + contact.setConversationId(input.get("conversationId").toString()); long timeAdded = 0L; long timeRemoved = 0L; if(!input.get("added").toString().isBlank()) @@ -49,6 +51,7 @@ public class ContactCodec implements Encoder, Decoder { Contact ct = (Contact) o; StringBuilder sb = new StringBuilder(); sb.append("{\"uri\":\"").append(ct.getUri()).append("\","); + sb.append("\"conversationId\":").append(ct.getConversationId()).append(","); switch (ct.getStatus()){ case 'A': sb.append("\"added\":").append(ct.getTimestamp()); diff --git a/jams-common/src/test/java/net/jami/jams/common/objects/contacts/ContactTest.java b/jams-common/src/test/java/net/jami/jams/common/objects/contacts/ContactTest.java index a2a84931027a3d095ccf3b06aefd2e24eff55b58..3eca7619976dd507fa1a58b7d6ee443cb0e4e893 100644 --- a/jams-common/src/test/java/net/jami/jams/common/objects/contacts/ContactTest.java +++ b/jams-common/src/test/java/net/jami/jams/common/objects/contacts/ContactTest.java @@ -22,8 +22,8 @@ class ContactTest { @Test public void deserialize(){ - String str = "[{\"uri\":\"tcp://def@local\",\"added\":1594742298377,\"banned\":false,\"confirmed\":true}," + - "{\"uri\":\"tcp://abc@19293.com\",\"removed\":1594742298377,\"banned\":true,\"confirmed\":true}]"; + String str = "[{\"uri\":\"tcp://def@local\",\"added\":1594742298377,\"banned\":false,\"confirmed\":true,\"confirmed\":6a61013979964f70c8fb9183a8b238d58a1846ed}," + + "{\"uri\":\"tcp://abc@19293.com\",\"removed\":1594742298377,\"banned\":true,\"confirmed\":true,\"confirmed\":2b61024119964f70c8fb9183a8b238d58a1846ed}]"; Contact[] contacts = JsonIterator.deserialize(str,Contact[].class); Assertions.assertEquals(2,contacts.length); } @@ -35,6 +35,7 @@ class ContactTest { contact1.setStatus('A'); contact1.setTimestamp(System.currentTimeMillis()); contact1.setUri("tcp://def@local"); + contact1.setConversationId("6a61013979964f70c8fb9183a8b238d58a1846ed"); contact1.setBanned(false); contact1.setConfirmed(false); Contact contact2 = new Contact(); @@ -42,6 +43,7 @@ class ContactTest { contact2.setStatus('D'); contact2.setTimestamp(System.currentTimeMillis()); contact2.setUri("tcp://abc@19293.com"); + contact2.setConversationId("2b61024119964f70c8fb9183a8b238d58a1846ed"); contact2.setBanned(true); contact2.setConfirmed(true); ArrayList<Contact> lst = new ArrayList<>(); @@ -58,6 +60,7 @@ class ContactTest { contact1.setStatus('A'); contact1.setTimestamp(System.currentTimeMillis()); contact1.setUri("tcp://def@local"); + contact1.setConversationId("6a61013979964f70c8fb9183a8b238d58a1846ed"); Contact contact2 = new Contact(); contact2.setOwner("fsidokhine"); contact2.setStatus('D'); @@ -71,6 +74,7 @@ class ContactTest { contact3.setStatus('A'); contact3.setTimestamp(System.currentTimeMillis() + 10000); contact3.setUri("tcp://abc@19293.com"); + contact3.setConversationId("2b61024119964f70c8fb9183a8b238d58a1846ed"); ArrayList<Contact> lst2 = new ArrayList<>(); lst2.add(contact3); List<Contact> out = ContactMerger.mergeContacts(lst,lst2); diff --git a/jams-react-client/src/views/Contacts/Contacts.js b/jams-react-client/src/views/Contacts/Contacts.js index bf2ee4e8850e0378b93de74c22ecf1508d82ad57..c85e1af899512bcfad5038c1d97c07e3522c7d14 100644 --- a/jams-react-client/src/views/Contacts/Contacts.js +++ b/jams-react-client/src/views/Contacts/Contacts.js @@ -13,6 +13,9 @@ import CardBody from "components/Card/CardBody.js"; import CardFooter from "components/Card/CardFooter.js"; import BusinessOutlinedIcon from "@material-ui/icons/BusinessOutlined"; +import QuestionAnswerIcon from "@material-ui/icons/QuestionAnswer"; +import SmsFailedIcon from "@material-ui/icons/SmsFailed"; + import Search from "@material-ui/icons/Search"; import IconButton from "@material-ui/core/IconButton"; @@ -457,6 +460,16 @@ export default function Users(props) { />} {contact.organization && ` ${contact.organization}`} </li> + <li> + { contact.conversationId === null ? <SmsFailedIcon + fontSize="small" + style={{ marginRight: "10px" }} + ></SmsFailedIcon> : <QuestionAnswerIcon + fontSize="small" + style={{ marginRight: "10px" }} + />} + {contact.conversationId === null ? "No conversation id" : ` ${contact.conversationId}`} + </li> </ul> </CardBody> </a>