window = MainWindow()
window?.show()
- backgroundSync(10 * 1000L)
+ backgroundSync(10 * 1000L) // TODO: config
}
override fun shutdown() {
while(true) {
println("Background sync")
try {
- val pending = Database.getPendingFeeds(1 * 60)
+ val pending = Database.getPendingFeeds(1 * 60) // TODO: config
if(!pending.isEmpty()) {
SyncJob { pending }.syncBlocking()
GlobalScope.launch(ToolkitDispatcher) {
}
println("Background sync done")
- // TODO: check time until next feed needs sync
+ // get time until the next feed is pending, but wait at least the minimum delay time
+ var delayTimeMS = 60 * 1000L // TODO: config
+ try {
+ val seconds = Database.getUpdateWaitTime(1 * 60) // TODO: config
+ if(seconds > 0) {
+ println("wait for $seconds seconds until next sync")
+ delayTimeMS = seconds * 1000L
+ }
+ } catch (e: Exception) {
+ e.printStackTrace()
+ }
- delay(60 * 1000L)
+ delay(delayTimeMS)
}
}
}
}
}
}
+
+ public fun getUpdateWaitTime(defaultUpdateInterval: Int) : Int {
+ var seconds = 0
+ dataSource.connection.use { conn ->
+ conn.prepareStatement("""
+ select
+ datediff(ss, now(), min(dateadd(ss, case when c.update_interval = 0 then ? else c.update_interval end, coalesce(last_update, '1970-01-01')))) as next_update_in
+ from feeds f
+ inner join feedcollections c on f.feedcollection_id = c.feedcollection_id;
+ """.trimIndent()).use { stmt ->
+ stmt.setInt(1, defaultUpdateInterval)
+ stmt.executeQuery().use { rs ->
+ if(rs.next()) {
+ seconds = rs.getInt(1)
+ }
+ }
+ }
+ }
+ return seconds
+ }
}