diff options
author | Allan Wang <me@allanwang.ca> | 2020-06-28 23:03:54 -0700 |
---|---|---|
committer | Allan Wang <me@allanwang.ca> | 2020-06-28 23:03:54 -0700 |
commit | 5eeff862c8f537f3781ce5ee92341e677f9f89c0 (patch) | |
tree | 31b27e1bed06300bfb515d8fc44f7a39ce7dca61 /app/src/main/kotlin/com/pitchedapps/frost/facebook/parsers | |
parent | aee8e7e00ceb476c6653d6f8328f1b376d747c0d (diff) | |
download | frost-5eeff862c8f537f3781ce5ee92341e677f9f89c0.tar.gz frost-5eeff862c8f537f3781ce5ee92341e677f9f89c0.tar.bz2 frost-5eeff862c8f537f3781ce5ee92341e677f9f89c0.zip |
Create badge parser and add test
Diffstat (limited to 'app/src/main/kotlin/com/pitchedapps/frost/facebook/parsers')
-rw-r--r-- | app/src/main/kotlin/com/pitchedapps/frost/facebook/parsers/BadgeParser.kt | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/app/src/main/kotlin/com/pitchedapps/frost/facebook/parsers/BadgeParser.kt b/app/src/main/kotlin/com/pitchedapps/frost/facebook/parsers/BadgeParser.kt new file mode 100644 index 00000000..db2bcfcb --- /dev/null +++ b/app/src/main/kotlin/com/pitchedapps/frost/facebook/parsers/BadgeParser.kt @@ -0,0 +1,48 @@ +package com.pitchedapps.frost.facebook.parsers + +import com.pitchedapps.frost.R +import com.pitchedapps.frost.facebook.FB_URL_BASE +import org.jsoup.nodes.Document + +object BadgeParser : FrostParser<FrostBadges> by BadgeParserImpl() + +data class FrostBadges( + val feed: String?, + val friends: String?, + val messages: String?, + val notifications: String? +) : ParseData { + override val isEmpty: Boolean + get() = feed.isNullOrEmpty() + && friends.isNullOrEmpty() + && messages.isNullOrEmpty() + && notifications.isNullOrEmpty() +} + +private class BadgeParserImpl : FrostParserBase<FrostBadges>(false) { + // Not actually displayed + override var nameRes: Int = R.string.frost_name + + override val url: String = FB_URL_BASE + + override fun parseImpl(doc: Document): FrostBadges? { + val header = doc.getElementById("header") ?: return null + if (header.select("[data-sigil=count]").isEmpty()) + return null + val (feed, requests, messages, notifications) = listOf( + "feed", + "requests", + "messages", + "notifications" + ) + .map { "[data-sigil*=$it] [data-sigil=count]" } + .map { doc.select(it) } + .map { e -> e?.getOrNull(0)?.ownText() } + return FrostBadges( + feed = feed, + friends = requests, + messages = messages, + notifications = notifications + ) + } +}
\ No newline at end of file |