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