Add adapter for Fever feeds api call

This commit is contained in:
Shinokuni 2021-12-25 17:34:40 +01:00
parent 9189be9d93
commit 2396ba1f7e
3 changed files with 122 additions and 0 deletions

View File

@ -0,0 +1,67 @@
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.skipToEnd
import com.readrops.db.entities.Feed
import com.squareup.moshi.FromJson
import com.squareup.moshi.JsonReader
import com.squareup.moshi.ToJson
class FeverFeedsAdapter {
@ToJson
fun toJson(feeds: List<Feed>) = ""
@SuppressLint("CheckResult")
@FromJson
fun fromJson(reader: JsonReader): List<Feed> = with(reader) {
return try {
val feeds = arrayListOf<Feed>()
beginObject()
// skip basic fields (api_version, auth, last_refreshed...)
repeat(3) {
skipField()
}
nextName() // beginning of feeds array
beginArray()
while (hasNext()) {
beginObject()
val feed = Feed()
while (hasNext()) {
with(feed) {
when(selectName(NAMES)) {
0 -> remoteId = nextInt().toString()
1 -> name = nextNonEmptyString()
2 -> url = nextNonEmptyString()
3 -> siteUrl = nextNullableString()
else -> skipValue()
}
}
}
feeds += feed
endObject()
}
endArray()
skipToEnd()
feeds
} catch (e: Exception) {
throw ParseException(e.message)
}
}
companion object {
val NAMES: JsonReader.Options = JsonReader.Options.of("id", "title", "url", "site_url")
}
}

View File

@ -0,0 +1,33 @@
package com.readrops.api.services.fever.adapters
import com.readrops.api.TestUtils
import com.readrops.db.entities.Feed
import com.squareup.moshi.Moshi
import com.squareup.moshi.Types
import okio.Buffer
import org.junit.Test
import kotlin.test.assertEquals
class FeverFeedsAdapterTest {
val adapter = Moshi.Builder()
.add(FeverFeedsAdapter())
.build()
.adapter<List<Feed>>(Types.newParameterizedType(List::class.java, Feed::class.java))!!
@Test
fun validFeedsTest() {
val stream = TestUtils.loadResource("services/fever/feeds.json")
val feeds = adapter.fromJson(Buffer().readFrom(stream))!!
assertEquals(feeds.size, 1)
with(feeds[0]) {
assertEquals(name, "xda-developers")
assertEquals(url, "https://www.xda-developers.com/feed/")
assertEquals(siteUrl, "https://www.xda-developers.com/")
assertEquals(remoteId, "32")
}
}
}

View File

@ -0,0 +1,22 @@
{
"api_version": 3,
"auth": 1,
"last_refreshed_on_time": 1640284745,
"feeds": [
{
"id": 32,
"favicon_id": 32,
"title": "xda-developers",
"url": "https:\/\/www.xda-developers.com\/feed\/",
"site_url": "https:\/\/www.xda-developers.com\/",
"is_spark": 0,
"last_updated_on_time": 1640364024
}
],
"feeds_groups": [
{
"group_id": 3,
"feed_ids": "5,4"
}
]
}