@@ -115,66 +115,80 @@ class ChatJob : Job() {
115
115
override fun onRunJob (params : Params ): Result {
116
116
if (StorageHelper .user == null ) return Result .FAILURE
117
117
118
- val synchronizationResult = conferenceId.let { conferenceId ->
119
- when (conferenceId) {
120
- 0L -> try {
121
- val newConferencesAndMessages = synchronize()
118
+ val synchronizationResult = when (conferenceId) {
119
+ 0L -> try {
120
+ handleSynchronization()
121
+ } catch (error: Throwable ) {
122
+ handleSynchronizationError(error)
123
+ }
124
+ else -> try {
125
+ handleLoadMoreMessages(conferenceId)
126
+ } catch (error: Throwable ) {
127
+ handleLoadMoreMessagesError(error)
128
+ }
129
+ }
122
130
123
- StorageHelper .areConferencesSynchronized = true
131
+ reschedule(context, synchronizationResult)
124
132
125
- if (newConferencesAndMessages.isNotEmpty()) {
126
- bus.post( SynchronizationEvent ())
133
+ return if (synchronizationResult != ERROR ) Result . SUCCESS else Result . FAILURE
134
+ }
127
135
128
- if (canShowNotification(context)) {
129
- showNotification(context)
130
- }
131
- }
136
+ private fun handleSynchronization (): SynchronizationResult {
137
+ val newConferencesAndMessages = synchronize()
132
138
133
- newConferencesAndMessages.flatMap { it.value }.maxBy { it.date }?.date?.let { mostRecentDate ->
134
- if (mostRecentDate > StorageHelper .lastChatMessageDate) {
135
- StorageHelper .lastChatMessageDate = mostRecentDate
136
- }
137
- }
139
+ StorageHelper .areConferencesSynchronized = true
138
140
139
- if (newConferencesAndMessages.isNotEmpty()) CHANGES else NO_CHANGES
140
- } catch (error: Throwable ) {
141
- when (error) {
142
- is ChatException -> bus.post(ChatErrorEvent (error))
143
- else -> bus.post(ChatErrorEvent (ChatSynchronizationException (error)))
144
- }
141
+ if (newConferencesAndMessages.isNotEmpty()) {
142
+ bus.post(SynchronizationEvent ())
145
143
146
- if (ErrorUtils .isIpBlockedError(error)) {
147
- ChatNotifications .showError(context, error)
144
+ if (canShowNotification(context)) {
145
+ showNotification(context)
146
+ }
147
+ }
148
148
149
- ERROR
150
- } else {
151
- NO_CHANGES
152
- }
153
- }
154
- else -> try {
155
- val fetchedMessages = loadMoreMessages(conferenceId)
149
+ newConferencesAndMessages.flatMap { it.value }.maxBy { it.date }?.date?.let { mostRecentDate ->
150
+ if (mostRecentDate > StorageHelper .lastChatMessageDate) {
151
+ StorageHelper .lastChatMessageDate = mostRecentDate
152
+ }
153
+ }
156
154
157
- fetchedMessages.maxBy { it.date }?.date?.let { mostRecentDate ->
158
- if (mostRecentDate > StorageHelper .lastChatMessageDate) {
159
- StorageHelper .lastChatMessageDate = mostRecentDate
160
- }
161
- }
155
+ return if (newConferencesAndMessages.isNotEmpty()) CHANGES else NO_CHANGES
156
+ }
162
157
163
- CHANGES
164
- } catch (error: Throwable ) {
165
- when (error) {
166
- is ChatException -> bus.post(ChatErrorEvent (error))
167
- else -> bus.post(ChatErrorEvent (ChatMessageException (error)))
168
- }
158
+ private fun handleSynchronizationError (error : Throwable ): SynchronizationResult {
159
+ when (error) {
160
+ is ChatException -> bus.post(ChatErrorEvent (error))
161
+ else -> bus.post(ChatErrorEvent (ChatSynchronizationException (error)))
162
+ }
169
163
170
- NO_CHANGES
171
- }
172
- }
164
+ return if (ErrorUtils .isIpBlockedError(error)) {
165
+ ChatNotifications .showError(context, error)
166
+
167
+ ERROR
168
+ } else {
169
+ NO_CHANGES
173
170
}
171
+ }
174
172
175
- reschedule(context, synchronizationResult)
173
+ private fun handleLoadMoreMessagesError (error : Throwable ): SynchronizationResult {
174
+ when (error) {
175
+ is ChatException -> bus.post(ChatErrorEvent (error))
176
+ else -> bus.post(ChatErrorEvent (ChatMessageException (error)))
177
+ }
176
178
177
- return if (synchronizationResult != ERROR ) Result .SUCCESS else Result .FAILURE
179
+ return NO_CHANGES
180
+ }
181
+
182
+ private fun handleLoadMoreMessages (conferenceId : Long ): SynchronizationResult {
183
+ val fetchedMessages = loadMoreMessages(conferenceId)
184
+
185
+ fetchedMessages.maxBy { it.date }?.date?.let { mostRecentDate ->
186
+ if (mostRecentDate > StorageHelper .lastChatMessageDate) {
187
+ StorageHelper .lastChatMessageDate = mostRecentDate
188
+ }
189
+ }
190
+
191
+ return CHANGES
178
192
}
179
193
180
194
private fun synchronize (): Map <LocalConference , List <LocalMessage >> {
@@ -231,7 +245,6 @@ class ChatJob : Job() {
231
245
232
246
// Per documentation: The api may return some String in case something went wrong.
233
247
if (result != null ) {
234
-
235
248
// Delete all messages we have correctly sent already.
236
249
chatDatabase.runInTransaction {
237
250
for (i in 0 .. index) {
@@ -279,12 +292,12 @@ class ChatJob : Job() {
279
292
val mostRecentMessage = chatDao.findMostRecentMessageForConference(conference.id.toLong())?.toNonLocalMessage()
280
293
281
294
return when (mostRecentMessage) {
282
- null -> fetchNewMessagesForEmptyConference (conference)
283
- else -> fetchNewMessagesForExistingConference (conference, mostRecentMessage)
295
+ null -> fetchForEmptyConference (conference)
296
+ else -> fetchForExistingConference (conference, mostRecentMessage)
284
297
}
285
298
}
286
299
287
- private fun fetchNewMessagesForEmptyConference (conference : Conference ): Pair <List <Message >, Boolean> {
300
+ private fun fetchForEmptyConference (conference : Conference ): Pair <List <Message >, Boolean> {
288
301
val newMessages = mutableListOf<Message >()
289
302
290
303
var unreadAmount = 0
@@ -311,7 +324,7 @@ class ChatJob : Job() {
311
324
return newMessages to false
312
325
}
313
326
314
- private fun fetchNewMessagesForExistingConference (conference : Conference , mostRecentMessage : Message ):
327
+ private fun fetchForExistingConference (conference : Conference , mostRecentMessage : Message ):
315
328
Pair <List <Message >, Boolean > {
316
329
val mostRecentMessageIdBeforeUpdate = mostRecentMessage.id.toLong()
317
330
val newMessages = mutableListOf<Message >()
0 commit comments