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.FreshRSSAPI;
|
||||||
import com.readrops.readropslibrary.services.freshrss.FreshRSSCredentials;
|
import com.readrops.readropslibrary.services.freshrss.FreshRSSCredentials;
|
||||||
import com.readrops.readropslibrary.services.freshrss.FreshRSSSyncData;
|
import com.readrops.readropslibrary.services.freshrss.FreshRSSSyncData;
|
||||||
import com.readrops.readropslibrary.services.freshrss.json.FreshRSSFolder;
|
|
||||||
import com.readrops.readropslibrary.services.freshrss.json.FreshRSSItem;
|
import com.readrops.readropslibrary.services.freshrss.json.FreshRSSItem;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.StringTokenizer;
|
|
||||||
|
|
||||||
import io.reactivex.Completable;
|
import io.reactivex.Completable;
|
||||||
import io.reactivex.Observable;
|
import io.reactivex.Observable;
|
||||||
@ -199,22 +197,8 @@ public class FreshRSSRepository extends ARepository<FreshRSSAPI> {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void insertFolders(List<FreshRSSFolder> freshRSSFolders) {
|
private void insertFolders(List<Folder> freshRSSFolders) {
|
||||||
List<Folder> folders = new ArrayList<>();
|
database.folderDao().foldersUpsert(freshRSSFolders, account);
|
||||||
|
|
||||||
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 insertItems(List<FreshRSSItem> items, boolean initialSync) {
|
private void insertItems(List<FreshRSSItem> items, boolean initialSync) {
|
||||||
|
@ -4,11 +4,12 @@ import androidx.annotation.NonNull;
|
|||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
import com.readrops.readropsdb.entities.Feed;
|
import com.readrops.readropsdb.entities.Feed;
|
||||||
|
import com.readrops.readropsdb.entities.Folder;
|
||||||
import com.readrops.readropslibrary.services.API;
|
import com.readrops.readropslibrary.services.API;
|
||||||
import com.readrops.readropslibrary.services.Credentials;
|
import com.readrops.readropslibrary.services.Credentials;
|
||||||
import com.readrops.readropslibrary.services.SyncType;
|
import com.readrops.readropslibrary.services.SyncType;
|
||||||
import com.readrops.readropslibrary.services.freshrss.adapters.FreshRSSFeedAdapter;
|
import com.readrops.readropslibrary.services.freshrss.adapters.FreshRSSFeedsAdapter;
|
||||||
import com.readrops.readropslibrary.services.freshrss.json.FreshRSSFolders;
|
import com.readrops.readropslibrary.services.freshrss.adapters.FreshRSSFoldersAdapter;
|
||||||
import com.readrops.readropslibrary.services.freshrss.json.FreshRSSItems;
|
import com.readrops.readropslibrary.services.freshrss.json.FreshRSSItems;
|
||||||
import com.readrops.readropslibrary.services.freshrss.json.FreshRSSUserInfo;
|
import com.readrops.readropslibrary.services.freshrss.json.FreshRSSUserInfo;
|
||||||
import com.squareup.moshi.Moshi;
|
import com.squareup.moshi.Moshi;
|
||||||
@ -35,7 +36,8 @@ public class FreshRSSAPI extends API<FreshRSSService> {
|
|||||||
@Override
|
@Override
|
||||||
protected Moshi buildMoshi() {
|
protected Moshi buildMoshi() {
|
||||||
return new Moshi.Builder()
|
return new Moshi.Builder()
|
||||||
.add(new FreshRSSFeedAdapter())
|
.add(new FreshRSSFeedsAdapter())
|
||||||
|
.add(new FreshRSSFoldersAdapter())
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -122,6 +124,10 @@ public class FreshRSSAPI extends API<FreshRSSService> {
|
|||||||
.flatMap(freshRSSFeeds -> {
|
.flatMap(freshRSSFeeds -> {
|
||||||
syncResult.setFeeds(freshRSSFeeds);
|
syncResult.setFeeds(freshRSSFeeds);
|
||||||
|
|
||||||
|
return getFolders();
|
||||||
|
}).flatMap(folders -> {
|
||||||
|
syncResult.setFolders(folders);
|
||||||
|
|
||||||
return Single.just(syncResult);
|
return Single.just(syncResult);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -131,7 +137,7 @@ public class FreshRSSAPI extends API<FreshRSSService> {
|
|||||||
*
|
*
|
||||||
* @return the feeds folders
|
* @return the feeds folders
|
||||||
*/
|
*/
|
||||||
public Single<FreshRSSFolders> getFolders() {
|
public Single<List<Folder>> getFolders() {
|
||||||
return api.getFolders();
|
return api.getFolders();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package com.readrops.readropslibrary.services.freshrss;
|
package com.readrops.readropslibrary.services.freshrss;
|
||||||
|
|
||||||
import com.readrops.readropsdb.entities.Feed;
|
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.FreshRSSItems;
|
||||||
import com.readrops.readropslibrary.services.freshrss.json.FreshRSSUserInfo;
|
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);
|
Single<FreshRSSItems> getItems(@Query("xt") String excludeTarget, @Query("n") int max, @Query("ot") Long lastModified);
|
||||||
|
|
||||||
@GET("reader/api/0/tag/list?output=json")
|
@GET("reader/api/0/tag/list?output=json")
|
||||||
Single<FreshRSSFolders> getFolders();
|
Single<List<Folder>> getFolders();
|
||||||
|
|
||||||
@FormUrlEncoded
|
@FormUrlEncoded
|
||||||
@POST("reader/api/0/edit-tag")
|
@POST("reader/api/0/edit-tag")
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package com.readrops.readropslibrary.services.freshrss;
|
package com.readrops.readropslibrary.services.freshrss;
|
||||||
|
|
||||||
import com.readrops.readropsdb.entities.Feed;
|
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 com.readrops.readropslibrary.services.freshrss.json.FreshRSSItem;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -9,7 +9,7 @@ import java.util.List;
|
|||||||
|
|
||||||
public class FreshRSSSyncResult {
|
public class FreshRSSSyncResult {
|
||||||
|
|
||||||
private List<FreshRSSFolder> folders;
|
private List<Folder> folders;
|
||||||
|
|
||||||
private List<Feed> feeds;
|
private List<Feed> feeds;
|
||||||
|
|
||||||
@ -46,11 +46,11 @@ public class FreshRSSSyncResult {
|
|||||||
this.lastUpdated = lastUpdated;
|
this.lastUpdated = lastUpdated;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<FreshRSSFolder> getFolders() {
|
public List<Folder> getFolders() {
|
||||||
return folders;
|
return folders;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFolders(List<FreshRSSFolder> folders) {
|
public void setFolders(List<Folder> folders) {
|
||||||
this.folders = folders;
|
this.folders = folders;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ import com.squareup.moshi.FromJson
|
|||||||
import com.squareup.moshi.JsonReader
|
import com.squareup.moshi.JsonReader
|
||||||
import com.squareup.moshi.ToJson
|
import com.squareup.moshi.ToJson
|
||||||
|
|
||||||
class FreshRSSFeedAdapter {
|
class FreshRSSFeedsAdapter {
|
||||||
|
|
||||||
@ToJson
|
@ToJson
|
||||||
fun toJson(feed: Feed): String = ""
|
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