]> nmode's Git Repositories - signal-cli/blob - lib/src/main/java/org/asamk/signal/manager/helper/Context.java
79b7b959116d21a714f0c003b988a3b18143a9c6
[signal-cli] / lib / src / main / java / org / asamk / signal / manager / helper / Context.java
1 package org.asamk.signal.manager.helper;
2
3 import org.asamk.signal.manager.AttachmentStore;
4 import org.asamk.signal.manager.AvatarStore;
5 import org.asamk.signal.manager.JobExecutor;
6 import org.asamk.signal.manager.SignalDependencies;
7 import org.asamk.signal.manager.StickerPackStore;
8 import org.asamk.signal.manager.storage.SignalAccount;
9
10 import java.util.function.Supplier;
11
12 public class Context {
13
14 private final Object LOCK = new Object();
15
16 private final SignalAccount account;
17 private final SignalDependencies dependencies;
18 private final AvatarStore avatarStore;
19 private final StickerPackStore stickerPackStore;
20 private final AttachmentStore attachmentStore;
21 private final JobExecutor jobExecutor;
22
23 private AttachmentHelper attachmentHelper;
24 private ContactHelper contactHelper;
25 private GroupHelper groupHelper;
26 private GroupV2Helper groupV2Helper;
27 private IdentityHelper identityHelper;
28 private IncomingMessageHandler incomingMessageHandler;
29 private PinHelper pinHelper;
30 private PreKeyHelper preKeyHelper;
31 private ProfileHelper profileHelper;
32 private ReceiveHelper receiveHelper;
33 private RecipientHelper recipientHelper;
34 private SendHelper sendHelper;
35 private StorageHelper storageHelper;
36 private SyncHelper syncHelper;
37 private UnidentifiedAccessHelper unidentifiedAccessHelper;
38
39 public Context(
40 final SignalAccount account,
41 final SignalDependencies dependencies,
42 final AvatarStore avatarStore,
43 final AttachmentStore attachmentStore,
44 final StickerPackStore stickerPackStore
45 ) {
46 this.account = account;
47 this.dependencies = dependencies;
48 this.avatarStore = avatarStore;
49 this.stickerPackStore = stickerPackStore;
50 this.attachmentStore = attachmentStore;
51 this.jobExecutor = new JobExecutor(this);
52 }
53
54 public SignalAccount getAccount() {
55 return account;
56 }
57
58 public SignalDependencies getDependencies() {
59 return dependencies;
60 }
61
62 public AvatarStore getAvatarStore() {
63 return avatarStore;
64 }
65
66 public StickerPackStore getStickerPackStore() {
67 return stickerPackStore;
68 }
69
70 AttachmentStore getAttachmentStore() {
71 return attachmentStore;
72 }
73
74 JobExecutor getJobExecutor() {
75 return jobExecutor;
76 }
77
78 public AttachmentHelper getAttachmentHelper() {
79 return getOrCreate(() -> attachmentHelper, () -> attachmentHelper = new AttachmentHelper(this));
80 }
81
82 public ContactHelper getContactHelper() {
83 return getOrCreate(() -> contactHelper, () -> contactHelper = new ContactHelper(account));
84 }
85
86 GroupV2Helper getGroupV2Helper() {
87 return getOrCreate(() -> groupV2Helper, () -> groupV2Helper = new GroupV2Helper(this));
88 }
89
90 public GroupHelper getGroupHelper() {
91 return getOrCreate(() -> groupHelper, () -> groupHelper = new GroupHelper(this));
92 }
93
94 public IdentityHelper getIdentityHelper() {
95 return getOrCreate(() -> identityHelper, () -> identityHelper = new IdentityHelper(this));
96 }
97
98 public IncomingMessageHandler getIncomingMessageHandler() {
99 return getOrCreate(() -> incomingMessageHandler,
100 () -> this.incomingMessageHandler = new IncomingMessageHandler(this));
101 }
102
103 public PinHelper getPinHelper() {
104 return getOrCreate(() -> pinHelper, () -> pinHelper = new PinHelper(dependencies.getKeyBackupService()));
105 }
106
107 public PreKeyHelper getPreKeyHelper() {
108 return getOrCreate(() -> preKeyHelper, () -> preKeyHelper = new PreKeyHelper(account, dependencies));
109 }
110
111 public ProfileHelper getProfileHelper() {
112 return getOrCreate(() -> profileHelper, () -> profileHelper = new ProfileHelper(this));
113 }
114
115 public ReceiveHelper getReceiveHelper() {
116 return getOrCreate(() -> receiveHelper, () -> receiveHelper = new ReceiveHelper(this));
117 }
118
119 public RecipientHelper getRecipientHelper() {
120 return getOrCreate(() -> recipientHelper, () -> recipientHelper = new RecipientHelper(this));
121 }
122
123 public SendHelper getSendHelper() {
124 return getOrCreate(() -> sendHelper, () -> sendHelper = new SendHelper(this));
125 }
126
127 public StorageHelper getStorageHelper() {
128 return getOrCreate(() -> storageHelper, () -> storageHelper = new StorageHelper(this));
129 }
130
131 public SyncHelper getSyncHelper() {
132 return getOrCreate(() -> syncHelper, () -> syncHelper = new SyncHelper(this));
133 }
134
135 UnidentifiedAccessHelper getUnidentifiedAccessHelper() {
136 return getOrCreate(() -> unidentifiedAccessHelper,
137 () -> unidentifiedAccessHelper = new UnidentifiedAccessHelper(this));
138 }
139
140 private <T> T getOrCreate(Supplier<T> supplier, Callable creator) {
141 var value = supplier.get();
142 if (value != null) {
143 return value;
144 }
145
146 synchronized (LOCK) {
147 value = supplier.get();
148 if (value != null) {
149 return value;
150 }
151 creator.call();
152 return supplier.get();
153 }
154 }
155
156 private interface Callable {
157
158 void call();
159 }
160 }