]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/helper/ContactHelper.java
Fix NPR when loading an inactive group
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / helper / ContactHelper.java
1 package org.asamk.signal.manager.helper;
2
3 import org.asamk.signal.manager.api.Contact;
4 import org.asamk.signal.manager.storage.SignalAccount;
5 import org.asamk.signal.manager.storage.recipients.RecipientId;
6
7 public class ContactHelper {
8
9 private final SignalAccount account;
10
11 public ContactHelper(final SignalAccount account) {
12 this.account = account;
13 }
14
15 public boolean isContactBlocked(final RecipientId recipientId) {
16 var sourceContact = account.getContactStore().getContact(recipientId);
17 return sourceContact != null && sourceContact.isBlocked();
18 }
19
20 public void setContactName(
21 final RecipientId recipientId,
22 final String givenName,
23 final String familyName,
24 final String nickGivenName,
25 final String nickFamilyName,
26 final String note
27 ) {
28 var contact = account.getContactStore().getContact(recipientId);
29 final var builder = contact == null ? Contact.newBuilder() : Contact.newBuilder(contact);
30 builder.withIsHidden(false);
31 if (givenName != null) {
32 builder.withGivenName(givenName);
33 }
34 if (familyName != null) {
35 builder.withFamilyName(familyName);
36 }
37 if (nickGivenName != null) {
38 builder.withNickNameGivenName(nickGivenName);
39 }
40 if (nickFamilyName != null) {
41 builder.withNickNameFamilyName(nickFamilyName);
42 }
43 if (note != null) {
44 builder.withNote(note);
45 }
46 account.getContactStore().storeContact(recipientId, builder.build());
47 }
48
49 public void setExpirationTimer(RecipientId recipientId, int messageExpirationTimer) {
50 var contact = account.getContactStore().getContact(recipientId);
51 if (contact != null && contact.messageExpirationTime() == messageExpirationTimer) {
52 return;
53 }
54 final var builder = contact == null ? Contact.newBuilder() : Contact.newBuilder(contact);
55 final var version = contact == null
56 ? 1
57 : contact.messageExpirationTimeVersion() == Integer.MAX_VALUE
58 ? Integer.MAX_VALUE
59 : contact.messageExpirationTimeVersion() + 1;
60 account.getContactStore()
61 .storeContact(recipientId,
62 builder.withMessageExpirationTime(messageExpirationTimer)
63 .withMessageExpirationTimeVersion(version)
64 .build());
65 }
66
67 public void setExpirationTimer(
68 RecipientId recipientId,
69 int messageExpirationTimer,
70 int messageExpirationTimerVersion
71 ) {
72 var contact = account.getContactStore().getContact(recipientId);
73 if (contact != null && (
74 contact.messageExpirationTime() == messageExpirationTimer
75 || contact.messageExpirationTimeVersion() >= messageExpirationTimerVersion
76 )) {
77 return;
78 }
79 final var builder = contact == null ? Contact.newBuilder() : Contact.newBuilder(contact);
80 account.getContactStore()
81 .storeContact(recipientId,
82 builder.withMessageExpirationTime(messageExpirationTimer)
83 .withMessageExpirationTimeVersion(messageExpirationTimerVersion)
84 .build());
85 }
86
87 public void setContactBlocked(RecipientId recipientId, boolean blocked) {
88 var contact = account.getContactStore().getContact(recipientId);
89 final var builder = contact == null ? Contact.newBuilder() : Contact.newBuilder(contact);
90 if (blocked) {
91 builder.withIsProfileSharingEnabled(false);
92 }
93 account.getContactStore().storeContact(recipientId, builder.withIsBlocked(blocked).build());
94 }
95
96 public void setContactProfileSharing(RecipientId recipientId, boolean profileSharing) {
97 var contact = account.getContactStore().getContact(recipientId);
98 final var builder = contact == null ? Contact.newBuilder() : Contact.newBuilder(contact);
99 builder.withIsProfileSharingEnabled(profileSharing);
100 account.getContactStore().storeContact(recipientId, builder.build());
101 }
102
103 public void setContactHidden(RecipientId recipientId, boolean hidden) {
104 var contact = account.getContactStore().getContact(recipientId);
105 final var builder = contact == null ? Contact.newBuilder() : Contact.newBuilder(contact);
106 account.getContactStore().storeContact(recipientId, builder.withIsHidden(hidden).build());
107 }
108 }