1 package org
.asamk
.signal
.manager
.helper
;
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
;
10 import java
.util
.function
.Supplier
;
12 public class Context
{
14 private final Object LOCK
= new Object();
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
;
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
;
40 final SignalAccount account
,
41 final SignalDependencies dependencies
,
42 final AvatarStore avatarStore
,
43 final AttachmentStore attachmentStore
,
44 final StickerPackStore stickerPackStore
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);
54 public SignalAccount
getAccount() {
58 public SignalDependencies
getDependencies() {
62 public AvatarStore
getAvatarStore() {
66 public StickerPackStore
getStickerPackStore() {
67 return stickerPackStore
;
70 AttachmentStore
getAttachmentStore() {
71 return attachmentStore
;
74 JobExecutor
getJobExecutor() {
78 public AttachmentHelper
getAttachmentHelper() {
79 return getOrCreate(() -> attachmentHelper
, () -> attachmentHelper
= new AttachmentHelper(this));
82 public ContactHelper
getContactHelper() {
83 return getOrCreate(() -> contactHelper
, () -> contactHelper
= new ContactHelper(account
));
86 GroupV2Helper
getGroupV2Helper() {
87 return getOrCreate(() -> groupV2Helper
, () -> groupV2Helper
= new GroupV2Helper(this));
90 public GroupHelper
getGroupHelper() {
91 return getOrCreate(() -> groupHelper
, () -> groupHelper
= new GroupHelper(this));
94 public IdentityHelper
getIdentityHelper() {
95 return getOrCreate(() -> identityHelper
, () -> identityHelper
= new IdentityHelper(this));
98 public IncomingMessageHandler
getIncomingMessageHandler() {
99 return getOrCreate(() -> incomingMessageHandler
,
100 () -> this.incomingMessageHandler
= new IncomingMessageHandler(this));
103 public PinHelper
getPinHelper() {
104 return getOrCreate(() -> pinHelper
, () -> pinHelper
= new PinHelper(dependencies
.getKeyBackupService()));
107 public PreKeyHelper
getPreKeyHelper() {
108 return getOrCreate(() -> preKeyHelper
, () -> preKeyHelper
= new PreKeyHelper(account
, dependencies
));
111 public ProfileHelper
getProfileHelper() {
112 return getOrCreate(() -> profileHelper
, () -> profileHelper
= new ProfileHelper(this));
115 public ReceiveHelper
getReceiveHelper() {
116 return getOrCreate(() -> receiveHelper
, () -> receiveHelper
= new ReceiveHelper(this));
119 public RecipientHelper
getRecipientHelper() {
120 return getOrCreate(() -> recipientHelper
, () -> recipientHelper
= new RecipientHelper(this));
123 public SendHelper
getSendHelper() {
124 return getOrCreate(() -> sendHelper
, () -> sendHelper
= new SendHelper(this));
127 public StorageHelper
getStorageHelper() {
128 return getOrCreate(() -> storageHelper
, () -> storageHelper
= new StorageHelper(this));
131 public SyncHelper
getSyncHelper() {
132 return getOrCreate(() -> syncHelper
, () -> syncHelper
= new SyncHelper(this));
135 UnidentifiedAccessHelper
getUnidentifiedAccessHelper() {
136 return getOrCreate(() -> unidentifiedAccessHelper
,
137 () -> unidentifiedAccessHelper
= new UnidentifiedAccessHelper(this));
140 private <T
> T
getOrCreate(Supplier
<T
> supplier
, Callable creator
) {
141 var value
= supplier
.get();
146 synchronized (LOCK
) {
147 value
= supplier
.get();
152 return supplier
.get();
156 private interface Callable
{