]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/storage/recipients/Profile.java
44ee5f6d05ec0210cc282fd15f457ffeaffe5e8e
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / storage / recipients / Profile.java
1 package org.asamk.signal.manager.storage.recipients;
2
3 import org.whispersystems.signalservice.internal.util.Util;
4
5 import java.util.Collections;
6 import java.util.Objects;
7 import java.util.Set;
8
9 public class Profile {
10
11 private final long lastUpdateTimestamp;
12
13 private final String givenName;
14
15 private final String familyName;
16
17 private final String about;
18
19 private final String aboutEmoji;
20
21 private final String avatarUrlPath;
22
23 private final UnidentifiedAccessMode unidentifiedAccessMode;
24
25 private final Set<Capability> capabilities;
26
27 public Profile(
28 final long lastUpdateTimestamp,
29 final String givenName,
30 final String familyName,
31 final String about,
32 final String aboutEmoji,
33 final String avatarUrlPath,
34 final UnidentifiedAccessMode unidentifiedAccessMode,
35 final Set<Capability> capabilities
36 ) {
37 this.lastUpdateTimestamp = lastUpdateTimestamp;
38 this.givenName = givenName;
39 this.familyName = familyName;
40 this.about = about;
41 this.aboutEmoji = aboutEmoji;
42 this.avatarUrlPath = avatarUrlPath;
43 this.unidentifiedAccessMode = unidentifiedAccessMode;
44 this.capabilities = capabilities;
45 }
46
47 private Profile(final Builder builder) {
48 lastUpdateTimestamp = builder.lastUpdateTimestamp;
49 givenName = builder.givenName;
50 familyName = builder.familyName;
51 about = builder.about;
52 aboutEmoji = builder.aboutEmoji;
53 avatarUrlPath = builder.avatarUrlPath;
54 unidentifiedAccessMode = builder.unidentifiedAccessMode;
55 capabilities = builder.capabilities;
56 }
57
58 public static Builder newBuilder() {
59 return new Builder();
60 }
61
62 public static Builder newBuilder(final Profile copy) {
63 Builder builder = new Builder();
64 builder.lastUpdateTimestamp = copy.getLastUpdateTimestamp();
65 builder.givenName = copy.getGivenName();
66 builder.familyName = copy.getFamilyName();
67 builder.about = copy.getAbout();
68 builder.aboutEmoji = copy.getAboutEmoji();
69 builder.avatarUrlPath = copy.getAvatarUrlPath();
70 builder.unidentifiedAccessMode = copy.getUnidentifiedAccessMode();
71 builder.capabilities = copy.getCapabilities();
72 return builder;
73 }
74
75 public long getLastUpdateTimestamp() {
76 return lastUpdateTimestamp;
77 }
78
79 public String getGivenName() {
80 return givenName;
81 }
82
83 public String getFamilyName() {
84 return familyName;
85 }
86
87 public String getInternalServiceName() {
88 if (familyName == null) {
89 return givenName == null ? "" : givenName;
90 }
91 return String.join("\0", givenName == null ? "" : givenName, familyName);
92 }
93
94 public String getDisplayName() {
95 final var noGivenName = Util.isEmpty(givenName);
96 final var noFamilyName = Util.isEmpty(familyName);
97
98 if (noGivenName && noFamilyName) {
99 return "";
100 } else if (noGivenName) {
101 return familyName;
102 } else if (noFamilyName) {
103 return givenName;
104 }
105
106 return givenName + " " + familyName;
107 }
108
109 public String getAbout() {
110 return about;
111 }
112
113 public String getAboutEmoji() {
114 return aboutEmoji;
115 }
116
117 public String getAvatarUrlPath() {
118 return avatarUrlPath;
119 }
120
121 public UnidentifiedAccessMode getUnidentifiedAccessMode() {
122 return unidentifiedAccessMode;
123 }
124
125 public Set<Capability> getCapabilities() {
126 return capabilities;
127 }
128
129 public enum UnidentifiedAccessMode {
130 UNKNOWN,
131 DISABLED,
132 ENABLED,
133 UNRESTRICTED;
134
135 static UnidentifiedAccessMode valueOfOrUnknown(String value) {
136 try {
137 return valueOf(value);
138 } catch (IllegalArgumentException ignored) {
139 return UNKNOWN;
140 }
141 }
142 }
143
144 public enum Capability {
145 gv2,
146 storage,
147 gv1Migration,
148 senderKey,
149 announcementGroup;
150
151 static Capability valueOfOrNull(String value) {
152 try {
153 return valueOf(value);
154 } catch (IllegalArgumentException ignored) {
155 return null;
156 }
157 }
158 }
159
160 @Override
161 public boolean equals(final Object o) {
162 if (this == o) return true;
163 if (o == null || getClass() != o.getClass()) return false;
164 final Profile profile = (Profile) o;
165 return lastUpdateTimestamp == profile.lastUpdateTimestamp
166 && Objects.equals(givenName, profile.givenName)
167 && Objects.equals(familyName, profile.familyName)
168 && Objects.equals(about, profile.about)
169 && Objects.equals(aboutEmoji, profile.aboutEmoji)
170 && Objects.equals(avatarUrlPath, profile.avatarUrlPath)
171 && unidentifiedAccessMode == profile.unidentifiedAccessMode
172 && Objects.equals(capabilities, profile.capabilities);
173 }
174
175 @Override
176 public int hashCode() {
177 return Objects.hash(lastUpdateTimestamp,
178 givenName,
179 familyName,
180 about,
181 aboutEmoji,
182 avatarUrlPath,
183 unidentifiedAccessMode,
184 capabilities);
185 }
186
187 public static final class Builder {
188
189 private String givenName;
190 private String familyName;
191 private String about;
192 private String aboutEmoji;
193 private String avatarUrlPath;
194 private UnidentifiedAccessMode unidentifiedAccessMode = UnidentifiedAccessMode.UNKNOWN;
195 private Set<Capability> capabilities = Collections.emptySet();
196 private long lastUpdateTimestamp = 0;
197
198 private Builder() {
199 }
200
201 public Builder withGivenName(final String val) {
202 givenName = val;
203 return this;
204 }
205
206 public Builder withFamilyName(final String val) {
207 familyName = val;
208 return this;
209 }
210
211 public Builder withAbout(final String val) {
212 about = val;
213 return this;
214 }
215
216 public Builder withAboutEmoji(final String val) {
217 aboutEmoji = val;
218 return this;
219 }
220
221 public Builder withAvatarUrlPath(final String val) {
222 avatarUrlPath = val;
223 return this;
224 }
225
226 public Builder withUnidentifiedAccessMode(final UnidentifiedAccessMode val) {
227 unidentifiedAccessMode = val;
228 return this;
229 }
230
231 public Builder withCapabilities(final Set<Capability> val) {
232 capabilities = val;
233 return this;
234 }
235
236 public Profile build() {
237 return new Profile(this);
238 }
239
240 public Builder withLastUpdateTimestamp(final long val) {
241 lastUpdateTimestamp = val;
242 return this;
243 }
244 }
245 }