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