diff --git a/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/core/Temerity.kt b/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/core/Temerity.kt index 97261a23863e7f1c0bd6739d798f72434e1062c8..685947d248b9561c27d7318e8bffebc1369dbe59 100644 --- a/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/core/Temerity.kt +++ b/temerity/src/commonMain/kotlin/edu/ucsc/its/temerity/core/Temerity.kt @@ -596,13 +596,26 @@ public class Temerity internal constructor( startTime: LocalDate, endTime: LocalDate, ): List<DeviceRecordingSession> = withContext(libraryCoroutineDispatcher) { - val request = platformApi.getDeviceSchedule( - deviceId, - startTime.applyScheduledSessionDateFormat(), - endTime.applyScheduledSessionDateFormat(), - ) - val response = request.executeApiResponse<String>() - decodeResponseCatching(response) + try { + val request = platformApi.getDeviceSchedule( + deviceId, + startTime.applyScheduledSessionDateFormat(), + endTime.applyScheduledSessionDateFormat(), + ) + val response = request.executeApiResponse<String>() + return@withContext decodeResponseCatching(response) + } catch (e: Exception) { + when (e) { + is BreakException -> { + if (config.optDebugEnabled) { + get<KermitLogger>(named("libraryLogger")).d("Caught BreakException() from decodeResponseCatching() notifying we're done reading recording sessions from API: ${e.page} pages read") + } + return@withContext emptyList<DeviceRecordingSession>() + } + + else -> throw e + } + } } public override suspend fun getStorageAnalyticsReport(groupId: Long): ByteArray = withContext(libraryCoroutineDispatcher) { diff --git a/temerity/src/jvmTest/kotlin/edu/ucsc/its/temerity/test/ProdReportTests.kt b/temerity/src/jvmTest/kotlin/edu/ucsc/its/temerity/test/ProdReportTests.kt index 87a59821f0318ea4551199a3d0f5a614608a5df0..5f61a923904ca0d4e6f143dc254f76f62181308d 100644 --- a/temerity/src/jvmTest/kotlin/edu/ucsc/its/temerity/test/ProdReportTests.kt +++ b/temerity/src/jvmTest/kotlin/edu/ucsc/its/temerity/test/ProdReportTests.kt @@ -258,5 +258,18 @@ private class ProdReportTests : TemProdFunSpec() { File(saveFilename).shouldNotBeEmpty() } } + + test("PlatformClient can fetch a list of courses recorded the previous day") { + runBlocking { + val yesterday = today.minus(1, DateTimeUnit.DAY) + val devices = testTemerity.getDevices() + val schedule = arrayListOf<Pair<String, List<DeviceRecordingSession>>>() + devices.forEach { device -> + val deviceDailySchedule = testTemerity.getDeviceSchedule(device.deviceId, yesterday.minus(1, DateTimeUnit.DAY), yesterday) + schedule.add(Pair(device.stationName, deviceDailySchedule)) + } + schedule.toDataFrame().writeCSV("DeviceSchedule-$yesterday.csv") + } + } } }