From 76c2fdf9d229a9d2a7b3339ffea1b7c7d6225993 Mon Sep 17 00:00:00 2001 From: Mikunj Date: Fri, 31 Jan 2020 10:26:10 +1100 Subject: [PATCH] Added rss feed proxy --- .../securesms/loki/LokiRSSFeedPoller.kt | 54 +++++++++---------- 1 file changed, 26 insertions(+), 28 deletions(-) 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