Skip to content

Commit 9e0111f

Browse files
committed
refactor: remove dependency on LegacyaccountDto from MessageListFragment
1 parent 0c7828b commit 9e0111f

File tree

3 files changed

+265
-60
lines changed

3 files changed

+265
-60
lines changed

legacy/core/src/main/java/com/fsck/k9/controller/KoinModule.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ val controllerModule = module {
3535
get<Logger>(named("syncDebug")),
3636
)
3737
} binds arrayOf(MessagingControllerRegistry::class)
38+
39+
single {
40+
MessagingControllerWrapper(
41+
messagingController = get(),
42+
accountManager = get(),
43+
)
3844
}
3945

4046
single<MessagingControllerRegistry> { get<MessagingController>() }
Lines changed: 212 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,212 @@
1+
package com.fsck.k9.controller
2+
3+
import app.k9mail.legacy.message.controller.MessageReference
4+
import app.k9mail.legacy.message.controller.MessagingListener
5+
import com.fsck.k9.mail.Flag
6+
import java.util.concurrent.Future
7+
import net.thunderbird.core.android.account.LegacyAccountDto
8+
import net.thunderbird.core.android.account.LegacyAccountDtoManager
9+
import net.thunderbird.feature.account.AccountId
10+
11+
/**
12+
* A wrapper around [MessagingController] that takes care of loading the account by [AccountId] and
13+
* provides some convenience methods.
14+
*/
15+
@Suppress("TooManyFunctions")
16+
class MessagingControllerWrapper(
17+
private val messagingController: MessagingController,
18+
private val accountManager: LegacyAccountDtoManager,
19+
) {
20+
21+
private fun getAccountDtoOrThrow(id: AccountId): LegacyAccountDto {
22+
return accountManager.getAccount(id.asRaw()) ?: error("Account not found: $id")
23+
}
24+
25+
fun loadMoreMessages(id: AccountId, folderId: Long) {
26+
val account = getAccountDtoOrThrow(id)
27+
messagingController.loadMoreMessages(account, folderId)
28+
}
29+
30+
fun loadSearchResults(
31+
id: AccountId,
32+
folderId: Long,
33+
messageServerIds: List<String>,
34+
listener: MessagingListener,
35+
) {
36+
val account = getAccountDtoOrThrow(id)
37+
messagingController.loadSearchResults(account, folderId, messageServerIds, listener)
38+
}
39+
40+
fun clearNewMessages(id: AccountId) {
41+
val account = getAccountDtoOrThrow(id)
42+
messagingController.clearNewMessages(account)
43+
}
44+
45+
fun searchRemoteMessages(
46+
id: AccountId,
47+
folderId: Long,
48+
query: String?,
49+
requiredFlags: Set<Flag>?,
50+
forbiddenFlags: Set<Flag>?,
51+
listener: MessagingListener,
52+
): Future<*>? = messagingController.searchRemoteMessages(
53+
id.asRaw(),
54+
folderId,
55+
query,
56+
requiredFlags,
57+
forbiddenFlags,
58+
listener,
59+
)
60+
61+
fun expunge(id: AccountId, folderId: Long) {
62+
val account = getAccountDtoOrThrow(id)
63+
messagingController.expunge(account, folderId)
64+
}
65+
66+
fun sendPendingMessages(id: AccountId, listener: MessagingListener?) {
67+
val account = getAccountDtoOrThrow(id)
68+
messagingController.sendPendingMessages(account, listener)
69+
}
70+
71+
fun setFlagForThreads(id: AccountId, threadIds: List<Long>, flag: Flag, newState: Boolean) {
72+
val account = getAccountDtoOrThrow(id)
73+
messagingController.setFlagForThreads(account, threadIds, flag, newState)
74+
}
75+
76+
fun setFlag(id: AccountId, messageIds: List<Long>, flag: Flag, newState: Boolean) {
77+
val account = getAccountDtoOrThrow(id)
78+
messagingController.setFlag(account, messageIds, flag, newState)
79+
}
80+
81+
fun isMoveCapable(id: AccountId): Boolean {
82+
val account = getAccountDtoOrThrow(id)
83+
return messagingController.isMoveCapable(account)
84+
}
85+
86+
fun isCopyCapable(id: AccountId): Boolean {
87+
val account = getAccountDtoOrThrow(id)
88+
return messagingController.isCopyCapable(account)
89+
}
90+
91+
fun moveMessagesInThread(
92+
id: AccountId,
93+
folderId: Long,
94+
messages: List<MessageReference>,
95+
destinationFolderId: Long,
96+
) {
97+
val account = getAccountDtoOrThrow(id)
98+
messagingController.moveMessagesInThread(
99+
account,
100+
folderId,
101+
messages,
102+
destinationFolderId,
103+
)
104+
}
105+
106+
fun moveMessages(
107+
id: AccountId,
108+
folderId: Long,
109+
messages: List<MessageReference>,
110+
destinationFolderId: Long,
111+
) {
112+
val account = getAccountDtoOrThrow(id)
113+
messagingController.moveMessages(
114+
account,
115+
folderId,
116+
messages,
117+
destinationFolderId,
118+
)
119+
}
120+
121+
fun copyMessagesInThread(
122+
id: AccountId,
123+
folderId: Long,
124+
messages: List<MessageReference>,
125+
destinationFolderId: Long,
126+
) {
127+
val account = getAccountDtoOrThrow(id)
128+
messagingController.copyMessagesInThread(
129+
account,
130+
folderId,
131+
messages,
132+
destinationFolderId,
133+
)
134+
}
135+
136+
fun copyMessages(
137+
id: AccountId,
138+
folderId: Long,
139+
messages: List<MessageReference>,
140+
destinationFolderId: Long,
141+
) {
142+
val account = getAccountDtoOrThrow(id)
143+
messagingController.copyMessages(
144+
account,
145+
folderId,
146+
messages,
147+
destinationFolderId,
148+
)
149+
}
150+
151+
fun moveToDraftsFolder(id: AccountId, folderId: Long, messages: List<MessageReference>) {
152+
val account = getAccountDtoOrThrow(id)
153+
messagingController.moveToDraftsFolder(account, folderId, messages)
154+
}
155+
156+
fun emptySpam(id: AccountId) {
157+
val account = getAccountDtoOrThrow(id)
158+
messagingController.emptySpam(account, null)
159+
}
160+
161+
fun emptyTrash(id: AccountId) {
162+
val account = getAccountDtoOrThrow(id)
163+
messagingController.emptyTrash(account, null)
164+
}
165+
166+
fun synchronizeMailbox(id: AccountId, folderId: Long, notify: Boolean, listener: MessagingListener?) {
167+
val account = getAccountDtoOrThrow(id)
168+
messagingController.synchronizeMailbox(account, folderId, notify, listener)
169+
}
170+
171+
fun checkMail(
172+
id: AccountId?,
173+
ignoreLastCheckedTime: Boolean,
174+
useManualWakeLock: Boolean,
175+
notify: Boolean,
176+
listener: MessagingListener?,
177+
) {
178+
val account = id?.let { getAccountDtoOrThrow(it) }
179+
180+
messagingController.checkMail(
181+
account,
182+
ignoreLastCheckedTime,
183+
useManualWakeLock,
184+
notify,
185+
listener,
186+
)
187+
}
188+
189+
fun supportsExpunge(id: AccountId): Boolean {
190+
val account = getAccountDtoOrThrow(id)
191+
return messagingController.supportsExpunge(account)
192+
}
193+
194+
fun isPushCapable(id: AccountId): Boolean {
195+
val account = getAccountDtoOrThrow(id)
196+
return messagingController.isPushCapable(account)
197+
}
198+
199+
fun markAllMessagesRead(id: AccountId, folderId: Long) {
200+
val account = getAccountDtoOrThrow(id)
201+
messagingController.markAllMessagesRead(account, folderId)
202+
}
203+
204+
fun isMoveCapable(message: MessageReference) = messagingController.isMoveCapable(message)
205+
fun isCopyCapable(message: MessageReference) = messagingController.isCopyCapable(message)
206+
207+
fun deleteThreads(messages: List<MessageReference>) = messagingController.deleteThreads(messages)
208+
209+
fun deleteMessages(messages: List<MessageReference>) = messagingController.deleteMessages(messages)
210+
fun archiveThreads(messages: List<MessageReference>) = messagingController.archiveThreads(messages)
211+
fun archiveMessages(messages: List<MessageReference>) = messagingController.archiveMessages(messages)
212+
}

0 commit comments

Comments
 (0)