mirror of
https://github.com/wulkanowy/wulkanowy.git
synced 2025-01-19 11:36:46 -06:00
Don't stop loading the timetable when error occurs in upcoming lessons notification scheduling (#1532)
This commit is contained in:
parent
9211baf7ec
commit
f9e0f7b390
@ -31,6 +31,7 @@ import io.github.wulkanowy.utils.nickOrName
|
|||||||
import io.github.wulkanowy.utils.toTimestamp
|
import io.github.wulkanowy.utils.toTimestamp
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
|
import java.time.LocalDate
|
||||||
import java.time.LocalDateTime
|
import java.time.LocalDateTime
|
||||||
import java.time.LocalDateTime.now
|
import java.time.LocalDateTime.now
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@ -57,10 +58,13 @@ class TimetableNotificationSchedulerHelper @Inject constructor(
|
|||||||
lessons.sortedBy { it.start }.forEachIndexed { index, lesson ->
|
lessons.sortedBy { it.start }.forEachIndexed { index, lesson ->
|
||||||
val upcomingTime = getUpcomingLessonTime(index, lessons, lesson)
|
val upcomingTime = getUpcomingLessonTime(index, lessons, lesson)
|
||||||
cancelScheduledTo(
|
cancelScheduledTo(
|
||||||
upcomingTime..lesson.start,
|
range = upcomingTime..lesson.start,
|
||||||
getRequestCode(upcomingTime, studentId)
|
requestCode = getRequestCode(upcomingTime, studentId)
|
||||||
|
)
|
||||||
|
cancelScheduledTo(
|
||||||
|
range = lesson.start..lesson.end,
|
||||||
|
requestCode = getRequestCode(lesson.start, studentId)
|
||||||
)
|
)
|
||||||
cancelScheduledTo(lesson.start..lesson.end, getRequestCode(lesson.start, studentId))
|
|
||||||
|
|
||||||
Timber.d("TimetableNotification canceled: type 1 & 2, subject: ${lesson.subject}, start: ${lesson.start}, student: $studentId")
|
Timber.d("TimetableNotification canceled: type 1 & 2, subject: ${lesson.subject}, start: ${lesson.start}, student: $studentId")
|
||||||
}
|
}
|
||||||
@ -82,6 +86,11 @@ class TimetableNotificationSchedulerHelper @Inject constructor(
|
|||||||
return cancelScheduled(lessons, student)
|
return cancelScheduled(lessons, student)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (lessons.firstOrNull()?.date?.isAfter(LocalDate.now().plusDays(2)) == true) {
|
||||||
|
Timber.d("Timetable notification scheduling skipped - lessons are too far")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
withContext(dispatchersProvider.backgroundThread) {
|
withContext(dispatchersProvider.backgroundThread) {
|
||||||
lessons.groupBy { it.date }
|
lessons.groupBy { it.date }
|
||||||
.map { it.value.sortedBy { lesson -> lesson.start } }
|
.map { it.value.sortedBy { lesson -> lesson.start } }
|
||||||
@ -96,26 +105,26 @@ class TimetableNotificationSchedulerHelper @Inject constructor(
|
|||||||
|
|
||||||
if (lesson.start > now()) {
|
if (lesson.start > now()) {
|
||||||
scheduleBroadcast(
|
scheduleBroadcast(
|
||||||
intent,
|
intent = intent,
|
||||||
student.studentId,
|
studentId = student.studentId,
|
||||||
NOTIFICATION_TYPE_UPCOMING,
|
notificationType = NOTIFICATION_TYPE_UPCOMING,
|
||||||
getUpcomingLessonTime(index, active, lesson)
|
time = getUpcomingLessonTime(index, active, lesson)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lesson.end > now()) {
|
if (lesson.end > now()) {
|
||||||
scheduleBroadcast(
|
scheduleBroadcast(
|
||||||
intent,
|
intent = intent,
|
||||||
student.studentId,
|
studentId = student.studentId,
|
||||||
NOTIFICATION_TYPE_CURRENT,
|
notificationType = NOTIFICATION_TYPE_CURRENT,
|
||||||
lesson.start
|
time = lesson.start
|
||||||
)
|
)
|
||||||
if (active.lastIndex == index) {
|
if (active.lastIndex == index) {
|
||||||
scheduleBroadcast(
|
scheduleBroadcast(
|
||||||
intent,
|
intent = intent,
|
||||||
student.studentId,
|
studentId = student.studentId,
|
||||||
NOTIFICATION_TYPE_LAST_LESSON_CANCELLATION,
|
notificationType = NOTIFICATION_TYPE_LAST_LESSON_CANCELLATION,
|
||||||
lesson.end
|
time = lesson.end
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -143,6 +152,7 @@ class TimetableNotificationSchedulerHelper @Inject constructor(
|
|||||||
notificationType: Int,
|
notificationType: Int,
|
||||||
time: LocalDateTime
|
time: LocalDateTime
|
||||||
) {
|
) {
|
||||||
|
try {
|
||||||
AlarmManagerCompat.setExactAndAllowWhileIdle(
|
AlarmManagerCompat.setExactAndAllowWhileIdle(
|
||||||
alarmManager, RTC_WAKEUP, time.toTimestamp(),
|
alarmManager, RTC_WAKEUP, time.toTimestamp(),
|
||||||
PendingIntent.getBroadcast(context, getRequestCode(time, studentId), intent.also {
|
PendingIntent.getBroadcast(context, getRequestCode(time, studentId), intent.also {
|
||||||
@ -155,5 +165,8 @@ class TimetableNotificationSchedulerHelper @Inject constructor(
|
|||||||
intent.getStringExtra(LESSON_TITLE)
|
intent.getStringExtra(LESSON_TITLE)
|
||||||
}, start: $time, student: $studentId"
|
}, start: $time, student: $studentId"
|
||||||
)
|
)
|
||||||
|
} catch (e: IllegalStateException) {
|
||||||
|
Timber.e(e)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user