diff options
Diffstat (limited to 'app/src/main/java/net/lacolaco/smileessence/data/Pages.kt')
-rw-r--r-- | app/src/main/java/net/lacolaco/smileessence/data/Pages.kt | 57 |
1 files changed, 14 insertions, 43 deletions
diff --git a/app/src/main/java/net/lacolaco/smileessence/data/Pages.kt b/app/src/main/java/net/lacolaco/smileessence/data/Pages.kt index cc3c1ab1..1d898711 100644 --- a/app/src/main/java/net/lacolaco/smileessence/data/Pages.kt +++ b/app/src/main/java/net/lacolaco/smileessence/data/Pages.kt @@ -1,16 +1,21 @@ package net.lacolaco.smileessence.data -import com.beust.klaxon.* -import net.lacolaco.smileessence.Logger +import com.beust.klaxon.JsonObject +import com.beust.klaxon.array +import com.beust.klaxon.json +import com.beust.klaxon.string import net.lacolaco.smileessence.view.page.* sealed class PageInfo(val fragmentClass: Class<out PageFragment<*>>) { abstract val name: String + var ephemeral = false + abstract fun describe(): String abstract fun toJson(): JsonObject class ComposePageInfo() : PageInfo(ComposePageFragment::class.java) { - override val name = "Compose" + override val name + get() = "Compose" override fun describe(): String { return "" @@ -23,8 +28,9 @@ sealed class PageInfo(val fragmentClass: Class<out PageFragment<*>>) { } } - class TweetsPageInfo(override val name: String, val patternStrings: List<String>) : + data class TweetsPageInfo(override val name: String, val patternStrings: List<String>) : PageInfo(TweetsPageFragment::class.java) { + @Transient val patterns = patternStrings.map { Regex(it) } override fun describe(): String { @@ -33,7 +39,8 @@ sealed class PageInfo(val fragmentClass: Class<out PageFragment<*>>) { return sb.toString() } - constructor(json: JsonObject) : this(json.string("name")!!, json.array<String>("patterns")!!.toList()) + constructor(json: JsonObject) + : this(json.string("name")!!, json.array<String>("patterns")!!) override fun toJson() = json { obj("name" to name, "patterns" to array(patternStrings)) @@ -41,7 +48,8 @@ sealed class PageInfo(val fragmentClass: Class<out PageFragment<*>>) { } class EventsPageInfo() : PageInfo(EventsPageFragment::class.java) { - override val name = "Events" + override val name + get() = "Events" override fun describe(): String { return "" @@ -83,41 +91,4 @@ sealed class PageInfo(val fragmentClass: Class<out PageFragment<*>>) { obj("full_name" to fullName) } } - - // XXX: Yucks - companion object { - fun parseList(input: String): List<PageInfo> { - Logger.error("parsing: $input") - val parser = Parser() - val json = parser.parse(StringBuilder(input)) as JsonArray<*> - return json.map { - val data: JsonObject = (it as JsonObject).obj("data")!! - when (it.string("kind")) { - "compose" -> ComposePageInfo(data) - "tweets" -> TweetsPageInfo(data) - "events" -> EventsPageInfo(data) - "search" -> SearchPageInfo(data) - "list" -> ListPageInfo(data) - // FIXME: Remove this - "messages" -> null - else -> throw RuntimeException("invalid kind") - } - }.mapNotNull { it } // FIXME - } - - fun stringifyList(input: List<PageInfo>): String { - return json { - array(input.map { - val kind = when (it) { - is ComposePageInfo -> "compose" - is TweetsPageInfo -> "tweets" - is EventsPageInfo -> "events" - is SearchPageInfo -> "search" - is ListPageInfo -> "list" - } - obj("kind" to kind, "data" to it.toJson()) - }) - }.toJsonString() - } - } } |