Improve some adapters syntax
This commit is contained in:
parent
d6f98b0d08
commit
fa7b7346cd
@ -15,23 +15,20 @@ interface XmlAdapter<T> {
|
|||||||
fun fromXml(inputStream: InputStream): T
|
fun fromXml(inputStream: InputStream): T
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun xmlFeedAdapterFactory(type: LocalRSSHelper.RSSType): XmlAdapter<Feed> {
|
fun xmlFeedAdapterFactory(type: LocalRSSHelper.RSSType): XmlAdapter<Feed> = when (type) {
|
||||||
return when (type) {
|
LocalRSSHelper.RSSType.RSS_1 -> RSS1FeedAdapter()
|
||||||
LocalRSSHelper.RSSType.RSS_1 -> RSS1FeedAdapter()
|
LocalRSSHelper.RSSType.RSS_2 -> RSS2FeedAdapter()
|
||||||
LocalRSSHelper.RSSType.RSS_2 -> RSS2FeedAdapter()
|
LocalRSSHelper.RSSType.ATOM -> ATOMFeedAdapter()
|
||||||
LocalRSSHelper.RSSType.ATOM -> ATOMFeedAdapter()
|
else -> throw IllegalArgumentException("Unknown RSS type : $type")
|
||||||
else -> throw IllegalArgumentException("Unknown RSS type : $type")
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun xmlItemsAdapterFactory(type: LocalRSSHelper.RSSType): XmlAdapter<List<Item>> {
|
fun xmlItemsAdapterFactory(type: LocalRSSHelper.RSSType): XmlAdapter<List<Item>> =
|
||||||
return when (type) {
|
when (type) {
|
||||||
LocalRSSHelper.RSSType.RSS_1 -> RSS1ItemsAdapter()
|
LocalRSSHelper.RSSType.RSS_1 -> RSS1ItemsAdapter()
|
||||||
LocalRSSHelper.RSSType.RSS_2 -> RSS2ItemsAdapter()
|
LocalRSSHelper.RSSType.RSS_2 -> RSS2ItemsAdapter()
|
||||||
LocalRSSHelper.RSSType.ATOM -> ATOMItemsAdapter()
|
LocalRSSHelper.RSSType.ATOM -> ATOMItemsAdapter()
|
||||||
else -> throw IllegalArgumentException("Unknown RSS type : $type")
|
else -> throw IllegalArgumentException("Unknown RSS type : $type")
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
const val AUTHORS_MAX = 4
|
const val AUTHORS_MAX = 4
|
||||||
}
|
}
|
||||||
|
@ -37,13 +37,13 @@ class ATOMFeedAdapter : XmlAdapter<Feed> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun parseLink(konsume: Konsumer, feed: Feed) {
|
private fun parseLink(konsume: Konsumer, feed: Feed) = with(konsume) {
|
||||||
val rel = konsume.attributes.getValueOpt("rel")
|
val rel = attributes.getValueOpt("rel")
|
||||||
|
|
||||||
if (rel == "self")
|
if (rel == "self")
|
||||||
feed.url = konsume.attributes["href"]
|
feed.url = attributes["href"]
|
||||||
else if (rel == "alternate")
|
else if (rel == "alternate")
|
||||||
feed.siteUrl = konsume.attributes["href"]
|
feed.siteUrl = attributes["href"]
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -14,28 +14,26 @@ class JSONFeedAdapter {
|
|||||||
fun toJson(feed: Feed) = ""
|
fun toJson(feed: Feed) = ""
|
||||||
|
|
||||||
@FromJson
|
@FromJson
|
||||||
fun fromJson(reader: JsonReader): Feed {
|
fun fromJson(reader: JsonReader): Feed = try {
|
||||||
return try {
|
val feed = Feed()
|
||||||
val feed = Feed()
|
reader.beginObject()
|
||||||
reader.beginObject()
|
|
||||||
|
|
||||||
while (reader.hasNext()) {
|
while (reader.hasNext()) {
|
||||||
with(feed) {
|
with(feed) {
|
||||||
when (reader.selectName(names)) {
|
when (reader.selectName(names)) {
|
||||||
0 -> name = reader.nextNonEmptyString()
|
0 -> name = reader.nextNonEmptyString()
|
||||||
1 -> siteUrl = reader.nextNullableString()
|
1 -> siteUrl = reader.nextNullableString()
|
||||||
2 -> url = reader.nextNullableString()
|
2 -> url = reader.nextNullableString()
|
||||||
3 -> description = reader.nextNullableString()
|
3 -> description = reader.nextNullableString()
|
||||||
else -> reader.skipValue()
|
else -> reader.skipValue()
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
reader.endObject()
|
|
||||||
feed
|
|
||||||
} catch (e: Exception) {
|
|
||||||
throw ParseException(e.message)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reader.endObject()
|
||||||
|
feed
|
||||||
|
} catch (e: Exception) {
|
||||||
|
throw ParseException(e.message)
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -17,48 +17,46 @@ class JSONItemsAdapter : JsonAdapter<List<Item>>() {
|
|||||||
// not useful
|
// not useful
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun fromJson(reader: JsonReader): List<Item> {
|
override fun fromJson(reader: JsonReader): List<Item> = try {
|
||||||
return try {
|
val items = arrayListOf<Item>()
|
||||||
val items = arrayListOf<Item>()
|
reader.beginObject()
|
||||||
reader.beginObject()
|
|
||||||
|
|
||||||
while (reader.hasNext()) {
|
|
||||||
when (reader.nextName()) {
|
|
||||||
"items" -> parseItems(reader, items)
|
|
||||||
else -> reader.skipValue()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
items
|
|
||||||
} catch (e: Exception) {
|
|
||||||
throw ParseException(e.message)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun parseItems(reader: JsonReader, items: MutableList<Item>) {
|
|
||||||
reader.beginArray()
|
|
||||||
|
|
||||||
while (reader.hasNext()) {
|
while (reader.hasNext()) {
|
||||||
reader.beginObject()
|
when (reader.nextName()) {
|
||||||
|
"items" -> parseItems(reader, items)
|
||||||
|
else -> reader.skipValue()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
items
|
||||||
|
} catch (e: Exception) {
|
||||||
|
throw ParseException(e.message)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun parseItems(reader: JsonReader, items: MutableList<Item>) = with(reader) {
|
||||||
|
beginArray()
|
||||||
|
|
||||||
|
while (hasNext()) {
|
||||||
|
beginObject()
|
||||||
val item = Item()
|
val item = Item()
|
||||||
|
|
||||||
var contentText: String? = null
|
var contentText: String? = null
|
||||||
var contentHtml: String? = null
|
var contentHtml: String? = null
|
||||||
|
|
||||||
while (reader.hasNext()) {
|
while (hasNext()) {
|
||||||
with(item) {
|
with(item) {
|
||||||
when (reader.selectName(names)) {
|
when (selectName(names)) {
|
||||||
0 -> guid = reader.nextNonEmptyString()
|
0 -> guid = nextNonEmptyString()
|
||||||
1 -> link = reader.nextNonEmptyString()
|
1 -> link = nextNonEmptyString()
|
||||||
2 -> title = reader.nextNonEmptyString()
|
2 -> title = nextNonEmptyString()
|
||||||
3 -> contentHtml = reader.nextNullableString()
|
3 -> contentHtml = nextNullableString()
|
||||||
4 -> contentText = reader.nextNullableString()
|
4 -> contentText = nextNullableString()
|
||||||
5 -> description = reader.nextNullableString()
|
5 -> description = nextNullableString()
|
||||||
6 -> imageLink = reader.nextNullableString()
|
6 -> imageLink = nextNullableString()
|
||||||
7 -> pubDate = DateUtils.parse(reader.nextNullableString())
|
7 -> pubDate = DateUtils.parse(nextNullableString())
|
||||||
8 -> author = parseAuthor(reader) // jsonfeed 1.0
|
8 -> author = parseAuthor(reader) // jsonfeed 1.0
|
||||||
9 -> author = parseAuthors(reader) // jsonfeed 1.1
|
9 -> author = parseAuthors(reader) // jsonfeed 1.1
|
||||||
else -> reader.skipValue()
|
else -> skipValue()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -67,11 +65,11 @@ class JSONItemsAdapter : JsonAdapter<List<Item>>() {
|
|||||||
item.content = if (contentHtml != null) contentHtml else contentText
|
item.content = if (contentHtml != null) contentHtml else contentText
|
||||||
if (item.pubDate == null) item.pubDate = LocalDateTime.now()
|
if (item.pubDate == null) item.pubDate = LocalDateTime.now()
|
||||||
|
|
||||||
reader.endObject()
|
endObject()
|
||||||
items += item
|
items += item
|
||||||
}
|
}
|
||||||
|
|
||||||
reader.endArray()
|
endArray()
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun parseAuthor(reader: JsonReader): String? {
|
private fun parseAuthor(reader: JsonReader): String? {
|
||||||
@ -94,7 +92,7 @@ class JSONItemsAdapter : JsonAdapter<List<Item>>() {
|
|||||||
reader.beginArray()
|
reader.beginArray()
|
||||||
|
|
||||||
while (reader.hasNext()) {
|
while (reader.hasNext()) {
|
||||||
authors.add(parseAuthor(reader))
|
authors += parseAuthor(reader)
|
||||||
}
|
}
|
||||||
|
|
||||||
reader.endArray()
|
reader.endArray()
|
||||||
@ -103,11 +101,10 @@ class JSONItemsAdapter : JsonAdapter<List<Item>>() {
|
|||||||
authors.filterNotNull().joinToString(limit = AUTHORS_MAX) else null
|
authors.filterNotNull().joinToString(limit = AUTHORS_MAX) else null
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun validateItem(item: Item) {
|
private fun validateItem(item: Item): Boolean = when {
|
||||||
when {
|
item.title == null -> throw ParseException("Item title is required")
|
||||||
item.title == null -> throw ParseException("Item title is required")
|
item.link == null -> throw ParseException("Item link is required")
|
||||||
item.link == null -> throw ParseException("Item link is required")
|
else -> true
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
@ -58,10 +58,10 @@ class RSS2ItemsAdapter : XmlAdapter<List<Item>> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun parseEnclosure(konsumer: Konsumer, item: Item) {
|
private fun parseEnclosure(konsumer: Konsumer, item: Item) = with(konsumer) {
|
||||||
if (konsumer.attributes.getValueOpt("type") != null
|
if (attributes.getValueOpt("type") != null
|
||||||
&& ApiUtils.isMimeImage(konsumer.attributes["type"]) && item.imageLink == null)
|
&& ApiUtils.isMimeImage(attributes["type"]) && item.imageLink == null)
|
||||||
item.imageLink = konsumer.attributes.getValueOpt("url")
|
item.imageLink = attributes.getValueOpt("url")
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun isMediumImage(konsumer: Konsumer) = with(konsumer) {
|
private fun isMediumImage(konsumer: Konsumer) = with(konsumer) {
|
||||||
@ -88,15 +88,13 @@ class RSS2ItemsAdapter : XmlAdapter<List<Item>> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun finalizeItem(item: Item, creators: List<String?>) {
|
private fun finalizeItem(item: Item, creators: List<String?>) = with(item) {
|
||||||
item.apply {
|
validateItem(this)
|
||||||
validateItem(this)
|
|
||||||
|
|
||||||
if (pubDate == null) pubDate = LocalDateTime.now()
|
if (pubDate == null) pubDate = LocalDateTime.now()
|
||||||
if (guid == null) guid = link
|
if (guid == null) guid = link
|
||||||
if (author == null && creators.filterNotNull().isNotEmpty())
|
if (author == null && creators.filterNotNull().isNotEmpty())
|
||||||
author = creators.filterNotNull().joinToString(limit = AUTHORS_MAX)
|
author = creators.filterNotNull().joinToString(limit = AUTHORS_MAX)
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun validateItem(item: Item) {
|
private fun validateItem(item: Item) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user