Wrap Freshrss and Nextcloud News adapters code in a try/catch to throw ParseException
This commit is contained in:
parent
39e613e7e6
commit
86c58b9280
@ -1,6 +1,7 @@
|
||||
package com.readrops.api.services.freshrss.adapters
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import com.readrops.api.utils.exceptions.ParseException
|
||||
import com.readrops.db.entities.Feed
|
||||
import com.squareup.moshi.FromJson
|
||||
import com.squareup.moshi.JsonReader
|
||||
@ -16,36 +17,40 @@ class FreshRSSFeedsAdapter {
|
||||
fun fromJson(reader: JsonReader): List<Feed> {
|
||||
val feeds = mutableListOf<Feed>()
|
||||
|
||||
reader.beginObject()
|
||||
reader.nextName() // "subscriptions", beginning of the feed array
|
||||
reader.beginArray()
|
||||
|
||||
while (reader.hasNext()) {
|
||||
return try {
|
||||
reader.beginObject()
|
||||
reader.nextName() // "subscriptions", beginning of the feed array
|
||||
reader.beginArray()
|
||||
|
||||
val feed = Feed()
|
||||
while (reader.hasNext()) {
|
||||
with(feed) {
|
||||
when (reader.selectName(NAMES)) {
|
||||
0 -> name = reader.nextString()
|
||||
1 -> url = reader.nextString()
|
||||
2 -> siteUrl = reader.nextString()
|
||||
3 -> iconUrl = reader.nextString()
|
||||
4 -> remoteId = reader.nextString()
|
||||
5 -> remoteFolderId = getCategoryId(reader)
|
||||
else -> reader.skipValue()
|
||||
reader.beginObject()
|
||||
|
||||
val feed = Feed()
|
||||
while (reader.hasNext()) {
|
||||
with(feed) {
|
||||
when (reader.selectName(NAMES)) {
|
||||
0 -> name = reader.nextString()
|
||||
1 -> url = reader.nextString()
|
||||
2 -> siteUrl = reader.nextString()
|
||||
3 -> iconUrl = reader.nextString()
|
||||
4 -> remoteId = reader.nextString()
|
||||
5 -> remoteFolderId = getCategoryId(reader)
|
||||
else -> reader.skipValue()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
feeds += feed
|
||||
reader.endObject()
|
||||
}
|
||||
|
||||
feeds += feed
|
||||
reader.endArray()
|
||||
reader.endObject()
|
||||
|
||||
feeds
|
||||
} catch (e: Exception) {
|
||||
throw ParseException(e.message)
|
||||
}
|
||||
|
||||
reader.endArray()
|
||||
reader.endObject()
|
||||
|
||||
return feeds
|
||||
}
|
||||
|
||||
private fun getCategoryId(reader: JsonReader): String? {
|
||||
@ -72,6 +77,7 @@ class FreshRSSFeedsAdapter {
|
||||
}
|
||||
|
||||
companion object {
|
||||
val NAMES: JsonReader.Options = JsonReader.Options.of("title", "url", "htmlUrl", "iconUrl", "id", "categories")
|
||||
val NAMES: JsonReader.Options = JsonReader.Options.of("title", "url", "htmlUrl",
|
||||
"iconUrl", "id", "categories")
|
||||
}
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
package com.readrops.api.services.freshrss.adapters
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import com.readrops.api.utils.exceptions.ParseException
|
||||
import com.readrops.db.entities.Folder
|
||||
import com.squareup.moshi.FromJson
|
||||
import com.squareup.moshi.JsonReader
|
||||
@ -17,42 +18,46 @@ class FreshRSSFoldersAdapter {
|
||||
fun fromJson(reader: JsonReader): List<Folder> {
|
||||
val folders = mutableListOf<Folder>()
|
||||
|
||||
reader.beginObject()
|
||||
reader.nextName() // "tags", beginning of folder array
|
||||
reader.beginArray()
|
||||
|
||||
while (reader.hasNext()) {
|
||||
return try {
|
||||
reader.beginObject()
|
||||
|
||||
val folder = Folder()
|
||||
var type: String? = null
|
||||
reader.nextName() // "tags", beginning of folder array
|
||||
reader.beginArray()
|
||||
|
||||
while (reader.hasNext()) {
|
||||
with(folder) {
|
||||
when (reader.selectName(NAMES)) {
|
||||
0 -> {
|
||||
val id = reader.nextString()
|
||||
name = StringTokenizer(id, "/")
|
||||
.toList()
|
||||
.last() as String
|
||||
remoteId = id
|
||||
reader.beginObject()
|
||||
|
||||
val folder = Folder()
|
||||
var type: String? = null
|
||||
|
||||
while (reader.hasNext()) {
|
||||
with(folder) {
|
||||
when (reader.selectName(NAMES)) {
|
||||
0 -> {
|
||||
val id = reader.nextString()
|
||||
name = StringTokenizer(id, "/")
|
||||
.toList()
|
||||
.last() as String
|
||||
remoteId = id
|
||||
}
|
||||
1 -> type = reader.nextString()
|
||||
else -> reader.skipValue()
|
||||
}
|
||||
1 -> type = reader.nextString()
|
||||
else -> reader.skipValue()
|
||||
}
|
||||
}
|
||||
|
||||
if (type == "folder") // add only folders and avoid tags
|
||||
folders += folder
|
||||
|
||||
reader.endObject()
|
||||
}
|
||||
|
||||
if (type == "folder") // add only folders and avoid tags
|
||||
folders += folder
|
||||
|
||||
reader.endArray()
|
||||
reader.endObject()
|
||||
|
||||
folders
|
||||
} catch (e: Exception) {
|
||||
throw ParseException(e.message)
|
||||
}
|
||||
|
||||
reader.endArray()
|
||||
reader.endObject()
|
||||
|
||||
return folders
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
@ -3,6 +3,7 @@ package com.readrops.api.services.freshrss.adapters
|
||||
import android.util.TimingLogger
|
||||
import com.readrops.db.entities.Item
|
||||
import com.readrops.api.services.freshrss.FreshRSSDataSource.GOOGLE_READ
|
||||
import com.readrops.api.utils.exceptions.ParseException
|
||||
import com.squareup.moshi.JsonAdapter
|
||||
import com.squareup.moshi.JsonReader
|
||||
import com.squareup.moshi.JsonWriter
|
||||
@ -19,17 +20,21 @@ class FreshRSSItemsAdapter : JsonAdapter<List<Item>>() {
|
||||
val logger = TimingLogger(TAG, "item parsing")
|
||||
val items = mutableListOf<Item>()
|
||||
|
||||
reader.beginObject()
|
||||
while (reader.hasNext()) {
|
||||
if (reader.nextName() == "items") parseItems(reader, items) else reader.skipValue()
|
||||
return try {
|
||||
reader.beginObject()
|
||||
while (reader.hasNext()) {
|
||||
if (reader.nextName() == "items") parseItems(reader, items) else reader.skipValue()
|
||||
}
|
||||
|
||||
reader.endObject()
|
||||
|
||||
logger.addSplit("item parsing done")
|
||||
logger.dumpToLog()
|
||||
|
||||
items
|
||||
} catch (e: Exception) {
|
||||
throw ParseException(e.message)
|
||||
}
|
||||
|
||||
reader.endObject()
|
||||
|
||||
logger.addSplit("item parsing done")
|
||||
logger.dumpToLog()
|
||||
|
||||
return items
|
||||
}
|
||||
|
||||
private fun parseItems(reader: JsonReader, items: MutableList<Item>) {
|
||||
@ -127,7 +132,8 @@ class FreshRSSItemsAdapter : JsonAdapter<List<Item>>() {
|
||||
}
|
||||
|
||||
companion object {
|
||||
val NAMES: JsonReader.Options = JsonReader.Options.of("id", "published", "title", "summary", "alternate", "categories", "origin", "author")
|
||||
val NAMES: JsonReader.Options = JsonReader.Options.of("id", "published", "title",
|
||||
"summary", "alternate", "categories", "origin", "author")
|
||||
|
||||
val TAG = FreshRSSItemsAdapter::class.java.simpleName
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.readrops.api.services.nextcloudnews.adapters
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import com.readrops.api.utils.exceptions.ParseException
|
||||
import com.readrops.db.entities.Feed
|
||||
import com.readrops.api.utils.extensions.nextNullableString
|
||||
import com.squareup.moshi.FromJson
|
||||
@ -17,15 +18,19 @@ class NextNewsFeedsAdapter {
|
||||
fun fromJson(reader: JsonReader): List<Feed> {
|
||||
val feeds = mutableListOf<Feed>()
|
||||
|
||||
reader.beginObject()
|
||||
return try {
|
||||
reader.beginObject()
|
||||
|
||||
while (reader.hasNext()) {
|
||||
if (reader.nextName() == "feeds") parseFeeds(reader, feeds) else reader.skipValue()
|
||||
while (reader.hasNext()) {
|
||||
if (reader.nextName() == "feeds") parseFeeds(reader, feeds) else reader.skipValue()
|
||||
}
|
||||
|
||||
reader.endObject()
|
||||
|
||||
feeds
|
||||
} catch (e: Exception) {
|
||||
throw ParseException(e.message)
|
||||
}
|
||||
|
||||
reader.endObject()
|
||||
|
||||
return feeds
|
||||
}
|
||||
|
||||
private fun parseFeeds(reader: JsonReader, feeds: MutableList<Feed>) {
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.readrops.api.services.nextcloudnews.adapters
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import com.readrops.api.utils.exceptions.ParseException
|
||||
import com.readrops.db.entities.Folder
|
||||
import com.squareup.moshi.FromJson
|
||||
import com.squareup.moshi.JsonReader
|
||||
@ -16,32 +17,36 @@ class NextNewsFoldersAdapter {
|
||||
fun fromJson(reader: JsonReader): List<Folder> {
|
||||
val folders = mutableListOf<Folder>()
|
||||
|
||||
reader.beginObject()
|
||||
reader.nextName() // "folders", beginning of folders array
|
||||
reader.beginArray()
|
||||
|
||||
while (reader.hasNext()) {
|
||||
val folder = Folder()
|
||||
return try {
|
||||
reader.beginObject()
|
||||
reader.nextName() // "folders", beginning of folders array
|
||||
reader.beginArray()
|
||||
|
||||
while (reader.hasNext()) {
|
||||
with(folder) {
|
||||
when (reader.selectName(NAMES)) {
|
||||
0 -> remoteId = reader.nextInt().toString()
|
||||
1 -> name = reader.nextString()
|
||||
else -> reader.skipValue()
|
||||
val folder = Folder()
|
||||
reader.beginObject()
|
||||
|
||||
while (reader.hasNext()) {
|
||||
with(folder) {
|
||||
when (reader.selectName(NAMES)) {
|
||||
0 -> remoteId = reader.nextInt().toString()
|
||||
1 -> name = reader.nextString()
|
||||
else -> reader.skipValue()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
folders += folder
|
||||
reader.endObject()
|
||||
}
|
||||
|
||||
folders += folder
|
||||
reader.endArray()
|
||||
reader.endObject()
|
||||
|
||||
folders
|
||||
} catch (e: Exception) {
|
||||
throw ParseException(e.message)
|
||||
}
|
||||
|
||||
reader.endArray()
|
||||
reader.endObject()
|
||||
|
||||
return folders
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
@ -3,6 +3,7 @@ package com.readrops.api.services.nextcloudnews.adapters
|
||||
import android.annotation.SuppressLint
|
||||
import com.readrops.db.entities.Item
|
||||
import com.readrops.api.utils.ApiUtils
|
||||
import com.readrops.api.utils.exceptions.ParseException
|
||||
import com.readrops.api.utils.extensions.nextNullableString
|
||||
import com.squareup.moshi.JsonAdapter
|
||||
import com.squareup.moshi.JsonReader
|
||||
@ -21,46 +22,50 @@ class NextNewsItemsAdapter : JsonAdapter<List<Item>>() {
|
||||
override fun fromJson(reader: JsonReader): List<Item> {
|
||||
val items = mutableListOf<Item>()
|
||||
|
||||
reader.beginObject()
|
||||
reader.nextName() // "items", beginning of items array
|
||||
reader.beginArray()
|
||||
|
||||
while (reader.hasNext()) {
|
||||
val item = Item()
|
||||
return try {
|
||||
reader.beginObject()
|
||||
|
||||
var enclosureMime: String? = null
|
||||
var enclosureLink: String? = null
|
||||
reader.nextName() // "items", beginning of items array
|
||||
reader.beginArray()
|
||||
|
||||
while (reader.hasNext()) {
|
||||
with(item) {
|
||||
when (reader.selectName(NAMES)) {
|
||||
0 -> remoteId = reader.nextInt().toString()
|
||||
1 -> link = reader.nextNullableString()
|
||||
2 -> title = reader.nextString()
|
||||
3 -> author = reader.nextString()
|
||||
4 -> pubDate = LocalDateTime(reader.nextLong() * 1000L, DateTimeZone.getDefault())
|
||||
5 -> content = reader.nextString()
|
||||
6 -> enclosureMime = reader.nextNullableString()
|
||||
7 -> enclosureLink = reader.nextNullableString()
|
||||
8 -> feedRemoteId = reader.nextInt().toString()
|
||||
9 -> isRead = !reader.nextBoolean()
|
||||
else -> reader.skipValue()
|
||||
val item = Item()
|
||||
reader.beginObject()
|
||||
|
||||
var enclosureMime: String? = null
|
||||
var enclosureLink: String? = null
|
||||
|
||||
while (reader.hasNext()) {
|
||||
with(item) {
|
||||
when (reader.selectName(NAMES)) {
|
||||
0 -> remoteId = reader.nextInt().toString()
|
||||
1 -> link = reader.nextNullableString()
|
||||
2 -> title = reader.nextString()
|
||||
3 -> author = reader.nextString()
|
||||
4 -> pubDate = LocalDateTime(reader.nextLong() * 1000L, DateTimeZone.getDefault())
|
||||
5 -> content = reader.nextString()
|
||||
6 -> enclosureMime = reader.nextNullableString()
|
||||
7 -> enclosureLink = reader.nextNullableString()
|
||||
8 -> feedRemoteId = reader.nextInt().toString()
|
||||
9 -> isRead = !reader.nextBoolean()
|
||||
else -> reader.skipValue()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (enclosureMime != null && ApiUtils.isMimeImage(enclosureMime!!))
|
||||
item.imageLink = enclosureLink
|
||||
|
||||
items += item
|
||||
reader.endObject()
|
||||
}
|
||||
|
||||
if (enclosureMime != null && ApiUtils.isMimeImage(enclosureMime!!))
|
||||
item.imageLink = enclosureLink
|
||||
|
||||
items += item
|
||||
reader.endArray()
|
||||
reader.endObject()
|
||||
|
||||
items
|
||||
} catch (e: Exception) {
|
||||
throw ParseException(e.message)
|
||||
}
|
||||
|
||||
reader.endArray()
|
||||
reader.endObject()
|
||||
|
||||
return items
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
Loading…
x
Reference in New Issue
Block a user