mirror of
https://github.com/oxen-io/session-android.git
synced 2024-11-24 02:25:19 +00:00
Update for core changes
This commit is contained in:
parent
ff536676eb
commit
69c00a2be0
@ -1,76 +0,0 @@
|
||||
package org.thoughtcrime.securesms.loki.shelved
|
||||
|
||||
import android.content.Context
|
||||
import android.os.Handler
|
||||
import android.text.Html
|
||||
import android.util.Log
|
||||
import com.prof.rssparser.engine.XMLParser
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.Runnable
|
||||
import org.thoughtcrime.securesms.jobs.PushDecryptJob
|
||||
import org.thoughtcrime.securesms.loki.utilities.successBackground
|
||||
import org.whispersystems.libsignal.util.guava.Optional
|
||||
import org.whispersystems.signalservice.api.messages.SignalServiceContent
|
||||
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.shelved.rssfeeds.LokiRSSFeed
|
||||
import org.whispersystems.signalservice.loki.api.shelved.rssfeeds.LokiRSSFeedProxy
|
||||
import java.text.SimpleDateFormat
|
||||
import java.util.regex.Pattern
|
||||
|
||||
class LokiRSSFeedPoller(private val context: Context, private val feed: LokiRSSFeed) {
|
||||
private val handler = Handler()
|
||||
private val job = Job()
|
||||
private var hasStarted = false
|
||||
|
||||
private val task = object : Runnable {
|
||||
|
||||
override fun run() {
|
||||
poll()
|
||||
handler.postDelayed(this, interval)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val interval: Long = 8 * 60 * 1000
|
||||
}
|
||||
|
||||
fun startIfNeeded() {
|
||||
if (hasStarted) return
|
||||
task.run()
|
||||
hasStarted = true
|
||||
}
|
||||
|
||||
fun stop() {
|
||||
handler.removeCallbacks(task)
|
||||
job.cancel()
|
||||
hasStarted = false
|
||||
}
|
||||
|
||||
private fun poll() {
|
||||
LokiRSSFeedProxy.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<br>$description"
|
||||
val urlRegex = Pattern.compile("<a\\s+(?:[^>]*?\\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, SignalServiceGroup.GroupType.RSS_FEED, null, null, null, null)
|
||||
val x2 = SignalServiceDataMessage(timestamp, x1, null, body)
|
||||
val x3 = SignalServiceContent(x2, "Loki", SignalServiceAddress.DEFAULT_DEVICE_ID, timestamp, false, false)
|
||||
PushDecryptJob(context).handleTextMessage(x3, x2, Optional.absent(), Optional.absent())
|
||||
}
|
||||
}.fail { exception ->
|
||||
Log.d("Loki", "Couldn't update RSS feed with ID: $feed.id due to exception: $exception.")
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user