@@ -20,11 +20,12 @@ import jakarta.mail.internet.InternetAddress
2020/* *
2121 * @author Denys Bondarenko
2222 */
23- fun Thread.getUniqueRecipients (account : String , localFolder : LocalFolder ? ): List <InternetAddress > {
23+ fun Thread?.getUniqueRecipients (account : String , localFolder : LocalFolder ? ): List <InternetAddress > {
24+ val threadMessages = this ?.messages
2425 return mutableListOf<InternetAddress >().apply {
25- val filteredMessages = messages ?.filter {
26+ val filteredMessages = threadMessages ?.filter {
2627 it.canBeUsed(localFolder)
27- }?.takeIf {
28+ }?.filterNotNull()?. takeIf {
2829 it.isNotEmpty()
2930 } ? : return @apply
3031 val fromHeaderName = " From"
@@ -69,42 +70,43 @@ fun Thread.getUniqueRecipients(account: String, localFolder: LocalFolder?): List
6970 }
7071}
7172
72- fun Thread.getUniqueLabelsSet (localFolder : LocalFolder ? ): Set <String > {
73- return messages?.filter {
74- it.canBeUsed(localFolder)
73+ fun Thread? .getUniqueLabelsSet (localFolder : LocalFolder ? ): Set <String > {
74+ return this ?. messages?.filter {
75+ it? .canBeUsed(localFolder) == true
7576 }?.flatMap {
76- it.labelIds ? : emptyList()
77+ it? .labelIds ? : emptyList()
7778 }?.toSortedSet() ? : emptySet()
7879}
7980
80- fun Thread.getDraftsCount (localFolder : LocalFolder ? ): Int {
81- return messages?.filter {
82- it.canBeUsed(localFolder) && it.labelIds.contains(LABEL_DRAFT )
81+ fun Thread? .getDraftsCount (localFolder : LocalFolder ? ): Int {
82+ return this ?. messages?.filter {
83+ it? .canBeUsed(localFolder) == true && it.labelIds? .contains(LABEL_DRAFT ) == true
8384 }?.size ? : 0
8485}
8586
86- fun Thread.hasUnreadMessages (localFolder : LocalFolder ? ): Boolean {
87- return messages?.filter {
88- it.canBeUsed(localFolder)
87+ fun Thread? .hasUnreadMessages (localFolder : LocalFolder ? ): Boolean {
88+ return this ?. messages?.filter {
89+ it? .canBeUsed(localFolder) == true
8990 }?.any {
90- it.labelIds?.contains(GmailApiHelper .LABEL_UNREAD ) == true
91+ it? .labelIds?.contains(GmailApiHelper .LABEL_UNREAD ) == true
9192 } == true
9293}
9394
94- fun Thread.hasAttachments (localFolder : LocalFolder ? ): Boolean {
95- return messages?.filter { it.canBeUsed(localFolder) }?.any { it.hasAttachments() } == true
95+ fun Thread?.hasAttachments (localFolder : LocalFolder ? ): Boolean {
96+ return this ?.messages?.filter { it?.canBeUsed(localFolder) == true }
97+ ?.any { it.hasAttachments() } == true
9698}
9799
98- fun Thread.hasPgp (localFolder : LocalFolder ? ): Boolean {
99- return messages?.filter { it.canBeUsed(localFolder) }?.any { it.hasPgp() } == true
100+ fun Thread? .hasPgp (localFolder : LocalFolder ? ): Boolean {
101+ return this ?. messages?.filter { it.canBeUsed(localFolder) }?.any { it.hasPgp() } == true
100102}
101103
102- fun Thread.extractSubject (
104+ fun Thread? .extractSubject (
103105 context : Context ,
104106 receiverEmail : String ,
105107 localFolder : LocalFolder ?
106108): String {
107- val filteredMessages = messages?.filter { it.canBeUsed(localFolder) }
109+ val filteredMessages = this ?. messages?.filter { it.canBeUsed(localFolder) }
108110
109111 return filteredMessages?.getOrNull(0 )?.takeIf { message ->
110112 (message.getRecipients(" From" ).any { internetAddress ->
@@ -120,22 +122,25 @@ fun Thread.extractSubject(
120122 ? : context.getString(R .string.no_subject)
121123}
122124
123- fun Thread.filteredMessages (localFolder : LocalFolder ? ): List <Message > {
124- return messages?.filter { it.canBeUsed(localFolder) } ? : emptyList()
125+ fun Thread? .filteredMessages (localFolder : LocalFolder ? ): List <Message > {
126+ return this ?. messages?.filter { it.canBeUsed(localFolder) } ? : emptyList()
125127}
126128
127- fun Thread.toThreadInfo (
129+ fun Thread? .toThreadInfo (
128130 context : Context ,
129131 accountEntity : AccountEntity ,
130132 localFolder : LocalFolder ? = null
131- ): GmailThreadInfo {
133+ ): GmailThreadInfo ? {
134+ val threadId = this ?.id ? : return null
132135 val receiverEmail = accountEntity.email
133136 val lastMessage = messages?.lastOrNull {
134- ! it.labelIds.contains(LABEL_DRAFT ) && it.canBeUsed(localFolder)
135- } ? : messages?.first()
137+ it?.labelIds?.contains(LABEL_DRAFT ) == false && it.canBeUsed(localFolder)
138+ }
139+ ? : messages?.firstOrNull()
140+ ? : return null
136141 val gmailThreadInfo = GmailThreadInfo (
137- id = id ,
138- lastMessage = requireNotNull( lastMessage) ,
142+ id = threadId ,
143+ lastMessage = lastMessage,
139144 messagesCount = messages?.filter { it.canBeUsed(localFolder) }?.size ? : 0 ,
140145 draftsCount = getDraftsCount(localFolder),
141146 recipients = getUniqueRecipients(receiverEmail, localFolder),
0 commit comments