diff --git a/src/org/thoughtcrime/securesms/loki/LokiRSSFeedPoller.kt b/src/org/thoughtcrime/securesms/loki/LokiRSSFeedPoller.kt
index d695c7de26..338c298e5f 100644
--- a/src/org/thoughtcrime/securesms/loki/LokiRSSFeedPoller.kt
+++ b/src/org/thoughtcrime/securesms/loki/LokiRSSFeedPoller.kt
@@ -4,8 +4,9 @@ import android.content.Context
import android.os.Handler
import android.text.Html
import android.util.Log
-import com.prof.rssparser.Parser
-import kotlinx.coroutines.*
+import com.prof.rssparser.engine.XMLParser
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.Runnable
import org.thoughtcrime.securesms.jobs.PushDecryptJob
import org.whispersystems.libsignal.util.guava.Optional
import org.whispersystems.signalservice.api.messages.SignalServiceContent
@@ -13,6 +14,8 @@ import org.whispersystems.signalservice.api.messages.SignalServiceDataMessage
import org.whispersystems.signalservice.api.messages.SignalServiceGroup
import org.whispersystems.signalservice.api.push.SignalServiceAddress
import org.whispersystems.signalservice.loki.api.LokiRSSFeed
+import org.whispersystems.signalservice.loki.api.LokiRSSProxy
+import org.whispersystems.signalservice.loki.utilities.successBackground
import java.text.SimpleDateFormat
import java.util.regex.Pattern
@@ -22,7 +25,6 @@ class LokiRSSFeedPoller(private val context: Context, private val feed: LokiRSSF
private var hasStarted = false
private val task = object : Runnable {
-
override fun run() {
poll()
handler.postDelayed(this, interval)
@@ -46,32 +48,28 @@ class LokiRSSFeedPoller(private val context: Context, private val feed: LokiRSSF
}
private fun poll() {
- CoroutineScope(Dispatchers.Main).launch {
- try {
- val url = feed.url
- val parser = Parser()
- val items = parser.getArticles(url)
- items.reversed().forEach { item ->
- val title = item.title ?: return@forEach
- val description = item.description ?: return@forEach
- val dateAsString = item.pubDate ?: return@forEach
- val formatter = SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z") // e.g. Tue, 27 Aug 2019 03:52:05 +0000
- val date = formatter.parse(dateAsString)
- val timestamp = date.time
- var bodyAsHTML = "$title
$description"
- val urlRegex = Pattern.compile("]*?\\s+)?href=\"([^\"]*)\".*?>(.*?)<.*?\\/a>")
- val matcher = urlRegex.matcher(bodyAsHTML)
- bodyAsHTML = matcher.replaceAll("$2 ($1)")
- val body = Html.fromHtml(bodyAsHTML).toString().trim()
- val id = feed.id.toByteArray()
- val x1 = SignalServiceGroup(SignalServiceGroup.Type.UPDATE, id, null, null, null)
- val x2 = SignalServiceDataMessage(timestamp, x1, null, body)
- val x3 = SignalServiceContent(x2, "Loki", SignalServiceAddress.DEFAULT_DEVICE_ID, timestamp, false)
- PushDecryptJob(context).handleTextMessage(x3, x2, Optional.absent(), Optional.absent())
- }
- } catch (exception: Exception) {
- Log.d("Loki", "Couldn't update RSS feed with ID: $feed.id.")
+ LokiRSSProxy.fetch(feed.url).successBackground { xml ->
+ val items = XMLParser(xml).call()
+ items.reversed().forEach { item ->
+ val title = item.title ?: return@forEach
+ val description = item.description ?: return@forEach
+ val dateAsString = item.pubDate ?: return@forEach
+ val formatter = SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss Z") // e.g. Tue, 27 Aug 2019 03:52:05 +0000
+ val date = formatter.parse(dateAsString)
+ val timestamp = date.time
+ var bodyAsHTML = "$title
$description"
+ val urlRegex = Pattern.compile("]*?\\s+)?href=\"([^\"]*)\".*?>(.*?)<.*?\\/a>")
+ val matcher = urlRegex.matcher(bodyAsHTML)
+ bodyAsHTML = matcher.replaceAll("$2 ($1)")
+ val body = Html.fromHtml(bodyAsHTML).toString().trim()
+ val id = feed.id.toByteArray()
+ val x1 = SignalServiceGroup(SignalServiceGroup.Type.UPDATE, id, null, null, null)
+ val x2 = SignalServiceDataMessage(timestamp, x1, null, body)
+ val x3 = SignalServiceContent(x2, "Loki", SignalServiceAddress.DEFAULT_DEVICE_ID, timestamp, false)
+ PushDecryptJob(context).handleTextMessage(x3, x2, Optional.absent(), Optional.absent())
}
+ }.fail { exception ->
+ Log.d("Loki", "Couldn't update RSS feed with ID: $feed.id. $exception")
}
}
}
\ No newline at end of file