mirror of https://github.com/readrops/Readrops.git
Add adapter for Fever items call
This commit is contained in:
parent
2396ba1f7e
commit
76cd9355f8
|
@ -0,0 +1,73 @@
|
|||
package com.readrops.api.services.fever.adapters
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import com.readrops.api.utils.exceptions.ParseException
|
||||
import com.readrops.api.utils.extensions.nextNonEmptyString
|
||||
import com.readrops.api.utils.extensions.nextNullableString
|
||||
import com.readrops.api.utils.extensions.skipField
|
||||
import com.readrops.api.utils.extensions.toBoolean
|
||||
import com.readrops.db.entities.Item
|
||||
import com.squareup.moshi.FromJson
|
||||
import com.squareup.moshi.JsonReader
|
||||
import com.squareup.moshi.ToJson
|
||||
import org.joda.time.LocalDateTime
|
||||
|
||||
class FeverItemsAdapter {
|
||||
|
||||
@ToJson
|
||||
fun toJson(items: List<Item>) = ""
|
||||
|
||||
@SuppressLint("CheckResult")
|
||||
@FromJson
|
||||
fun fromJson(reader: JsonReader): List<Item> = with(reader) {
|
||||
return try {
|
||||
val items = arrayListOf<Item>()
|
||||
|
||||
beginObject()
|
||||
|
||||
repeat(4) {
|
||||
skipField()
|
||||
}
|
||||
|
||||
nextName() // beginning of items array
|
||||
beginArray()
|
||||
|
||||
while (hasNext()) {
|
||||
beginObject()
|
||||
|
||||
val item = Item()
|
||||
while (hasNext()) {
|
||||
with(item) {
|
||||
when (selectName(NAMES)) {
|
||||
0 -> remoteId = nextNonEmptyString()
|
||||
1 -> feedRemoteId = nextInt().toString()
|
||||
2 -> title = nextNonEmptyString()
|
||||
3 -> author = nextNullableString()
|
||||
4 -> content = nextNullableString()
|
||||
5 -> link = nextNullableString()
|
||||
6 -> isRead = nextInt().toBoolean()
|
||||
7 -> pubDate = LocalDateTime(nextLong() * 1000L)
|
||||
else -> skipValue()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
items += item
|
||||
endObject()
|
||||
}
|
||||
|
||||
endArray()
|
||||
|
||||
items
|
||||
} catch (e: Exception) {
|
||||
throw ParseException(e.message)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
val NAMES: JsonReader.Options = JsonReader.Options.of(
|
||||
"id", "feed_id", "title", "author", "html", "url",
|
||||
"is_read", "created_on_time"
|
||||
)
|
||||
}
|
||||
}
|
|
@ -24,3 +24,5 @@ fun JsonReader.skipToEnd() {
|
|||
skipField()
|
||||
}
|
||||
}
|
||||
|
||||
fun Int.toBoolean(): Boolean = this == 1
|
||||
|
|
|
@ -0,0 +1,36 @@
|
|||
package com.readrops.api.services.fever.adapters
|
||||
|
||||
import com.readrops.api.TestUtils
|
||||
import com.readrops.db.entities.Item
|
||||
import com.squareup.moshi.Moshi
|
||||
import com.squareup.moshi.Types
|
||||
import okio.Buffer
|
||||
import org.junit.Test
|
||||
import kotlin.test.assertEquals
|
||||
import kotlin.test.assertNotNull
|
||||
|
||||
class FeverItemsAdapterTest {
|
||||
|
||||
private val adapter = Moshi.Builder()
|
||||
.add(FeverItemsAdapter())
|
||||
.build()
|
||||
.adapter<List<Item>>(Types.newParameterizedType(List::class.java, Item::class.java))
|
||||
|
||||
@Test
|
||||
fun validItemsTest() {
|
||||
val stream = TestUtils.loadResource("services/fever/items.json")
|
||||
|
||||
val items = adapter.fromJson(Buffer().readFrom(stream))!!
|
||||
|
||||
with(items[0]) {
|
||||
assertEquals(title, "FreshRSS 1.9.0")
|
||||
assertEquals(author, "Alkarex")
|
||||
assertEquals(link, "https://github.com/FreshRSS/FreshRSS/releases/tag/1.9.0")
|
||||
assertNotNull(content)
|
||||
assertEquals(isRead, true)
|
||||
assertNotNull(pubDate)
|
||||
assertEquals(remoteId, "1546007484154894")
|
||||
assertEquals(feedRemoteId, "2")
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue