]> uap-core.de Git - rssreader.git/commitdiff
calculate delay time until next sync
authorOlaf Wintermann <olaf.wintermann@gmail.com>
Mon, 8 Sep 2025 07:45:49 +0000 (09:45 +0200)
committerOlaf Wintermann <olaf.wintermann@gmail.com>
Mon, 8 Sep 2025 07:45:49 +0000 (09:45 +0200)
rss-application/src/main/kotlin/de/unixwork/rssreader/App.kt
rss-application/src/main/kotlin/de/unixwork/rssreader/Database.kt

index cd127fa0caca5602cb30286430a0e5f5b107cbe3..8a151dcf68a26ef07f8ef7d0fb195febb250404b 100644 (file)
@@ -36,7 +36,7 @@ class App : Application {
         window = MainWindow()
         window?.show()
 
-        backgroundSync(10 * 1000L)
+        backgroundSync(10 * 1000L) // TODO: config
     }
 
     override fun shutdown() {
@@ -50,7 +50,7 @@ class App : Application {
             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) {
@@ -64,9 +64,19 @@ class App : Application {
                 }
                 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)
             }
         }
     }
index 4461840a1603acb260c89b05b314a2a7884c8270..92d30207a0dd92a53f5aa830c5635ba2025374b2 100644 (file)
@@ -402,4 +402,24 @@ object Database {
             }
         }
     }
+
+    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
+    }
 }