Add Moshi adapter for FreshRSS folders api call

This commit is contained in:
Shinokuni 2020-01-03 15:49:48 +01:00
parent 90ef573b6e
commit fea6c78520
6 changed files with 80 additions and 29 deletions

View File

@ -20,13 +20,11 @@ import com.readrops.readropslibrary.services.SyncType;
import com.readrops.readropslibrary.services.freshrss.FreshRSSAPI;
import com.readrops.readropslibrary.services.freshrss.FreshRSSCredentials;
import com.readrops.readropslibrary.services.freshrss.FreshRSSSyncData;
import com.readrops.readropslibrary.services.freshrss.json.FreshRSSFolder;
import com.readrops.readropslibrary.services.freshrss.json.FreshRSSItem;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;
import io.reactivex.Completable;
import io.reactivex.Observable;
@ -199,22 +197,8 @@ public class FreshRSSRepository extends ARepository<FreshRSSAPI> {
}
private void insertFolders(List<FreshRSSFolder> freshRSSFolders) {
List<Folder> folders = new ArrayList<>();
for (FreshRSSFolder freshRSSFolder : freshRSSFolders) {
if (freshRSSFolder.getType() != null && freshRSSFolder.getType().equals("folder")) {
List<Object> tokens = Collections.list(new StringTokenizer(freshRSSFolder.getId(), "/"));
Folder folder = new Folder((String) tokens.get(tokens.size() - 1));
folder.setRemoteId(freshRSSFolder.getId());
folder.setAccountId(account.getId());
folders.add(folder);
}
}
database.folderDao().foldersUpsert(folders, account);
private void insertFolders(List<Folder> freshRSSFolders) {
database.folderDao().foldersUpsert(freshRSSFolders, account);
}
private void insertItems(List<FreshRSSItem> items, boolean initialSync) {

View File

@ -4,11 +4,12 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.readrops.readropsdb.entities.Feed;
import com.readrops.readropsdb.entities.Folder;
import com.readrops.readropslibrary.services.API;
import com.readrops.readropslibrary.services.Credentials;
import com.readrops.readropslibrary.services.SyncType;
import com.readrops.readropslibrary.services.freshrss.adapters.FreshRSSFeedAdapter;
import com.readrops.readropslibrary.services.freshrss.json.FreshRSSFolders;
import com.readrops.readropslibrary.services.freshrss.adapters.FreshRSSFeedsAdapter;
import com.readrops.readropslibrary.services.freshrss.adapters.FreshRSSFoldersAdapter;
import com.readrops.readropslibrary.services.freshrss.json.FreshRSSItems;
import com.readrops.readropslibrary.services.freshrss.json.FreshRSSUserInfo;
import com.squareup.moshi.Moshi;
@ -35,7 +36,8 @@ public class FreshRSSAPI extends API<FreshRSSService> {
@Override
protected Moshi buildMoshi() {
return new Moshi.Builder()
.add(new FreshRSSFeedAdapter())
.add(new FreshRSSFeedsAdapter())
.add(new FreshRSSFoldersAdapter())
.build();
}
@ -122,6 +124,10 @@ public class FreshRSSAPI extends API<FreshRSSService> {
.flatMap(freshRSSFeeds -> {
syncResult.setFeeds(freshRSSFeeds);
return getFolders();
}).flatMap(folders -> {
syncResult.setFolders(folders);
return Single.just(syncResult);
});
}
@ -131,7 +137,7 @@ public class FreshRSSAPI extends API<FreshRSSService> {
*
* @return the feeds folders
*/
public Single<FreshRSSFolders> getFolders() {
public Single<List<Folder>> getFolders() {
return api.getFolders();
}

View File

@ -1,7 +1,7 @@
package com.readrops.readropslibrary.services.freshrss;
import com.readrops.readropsdb.entities.Feed;
import com.readrops.readropslibrary.services.freshrss.json.FreshRSSFolders;
import com.readrops.readropsdb.entities.Folder;
import com.readrops.readropslibrary.services.freshrss.json.FreshRSSItems;
import com.readrops.readropslibrary.services.freshrss.json.FreshRSSUserInfo;
@ -38,7 +38,7 @@ public interface FreshRSSService {
Single<FreshRSSItems> getItems(@Query("xt") String excludeTarget, @Query("n") int max, @Query("ot") Long lastModified);
@GET("reader/api/0/tag/list?output=json")
Single<FreshRSSFolders> getFolders();
Single<List<Folder>> getFolders();
@FormUrlEncoded
@POST("reader/api/0/edit-tag")

View File

@ -1,7 +1,7 @@
package com.readrops.readropslibrary.services.freshrss;
import com.readrops.readropsdb.entities.Feed;
import com.readrops.readropslibrary.services.freshrss.json.FreshRSSFolder;
import com.readrops.readropsdb.entities.Folder;
import com.readrops.readropslibrary.services.freshrss.json.FreshRSSItem;
import java.util.ArrayList;
@ -9,7 +9,7 @@ import java.util.List;
public class FreshRSSSyncResult {
private List<FreshRSSFolder> folders;
private List<Folder> folders;
private List<Feed> feeds;
@ -46,11 +46,11 @@ public class FreshRSSSyncResult {
this.lastUpdated = lastUpdated;
}
public List<FreshRSSFolder> getFolders() {
public List<Folder> getFolders() {
return folders;
}
public void setFolders(List<FreshRSSFolder> folders) {
public void setFolders(List<Folder> folders) {
this.folders = folders;
}
}

View File

@ -6,7 +6,7 @@ import com.squareup.moshi.FromJson
import com.squareup.moshi.JsonReader
import com.squareup.moshi.ToJson
class FreshRSSFeedAdapter {
class FreshRSSFeedsAdapter {
@ToJson
fun toJson(feed: Feed): String = ""

View File

@ -0,0 +1,61 @@
package com.readrops.readropslibrary.services.freshrss.adapters
import android.annotation.SuppressLint
import com.readrops.readropsdb.entities.Folder
import com.squareup.moshi.FromJson
import com.squareup.moshi.JsonReader
import com.squareup.moshi.ToJson
import java.util.*
class FreshRSSFoldersAdapter {
@ToJson
fun toJson(folder: Folder): String = ""
@SuppressLint("CheckResult")
@FromJson
fun fromJson(reader: JsonReader): List<Folder> {
val folders = mutableListOf<Folder>()
reader.beginObject()
reader.nextName() // "tags", beginning of folder array
reader.beginArray()
while (reader.hasNext()) {
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()
}
}
}
if (type == "folder") // add only folders and avoid tags
folders += folder
reader.endObject()
}
reader.endArray()
reader.endObject()
return folders
}
companion object {
val NAMES: JsonReader.Options = JsonReader.Options.of("id", "type")
}
}