Add Moshi adapter for FreshRSS folders api call
This commit is contained in:
parent
90ef573b6e
commit
fea6c78520
@ -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) {
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
@ -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")
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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 = ""
|
@ -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")
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user