Use rxjava with feed synchronization

This commit is contained in:
Shinokuni 2019-03-08 16:29:26 +01:00
parent f7a0ef47fe
commit ed9fb458c8
4 changed files with 31 additions and 8 deletions

View File

@ -43,6 +43,10 @@ import java.util.ArrayList;
import java.util.List;
import java.util.TreeMap;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.observers.DisposableCompletableObserver;
import io.reactivex.schedulers.Schedulers;
public class MainActivity extends AppCompatActivity implements SimpleCallback, SwipeRefreshLayout.OnRefreshListener {
public static final String TAG = MainActivity.class.getSimpleName();
@ -214,7 +218,23 @@ public class MainActivity extends AppCompatActivity implements SimpleCallback, S
@Override
public void onRefresh() {
Log.d(TAG, "syncing started");
viewModel.sync();
viewModel.sync()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new DisposableCompletableObserver() {
@Override
public void onComplete() {
refreshLayout.setRefreshing(false);
adapter.submitList(newItems);
}
@Override
public void onError(Throwable e) {
refreshLayout.setRefreshing(false);
Toast.makeText(getApplication(), e.getMessage(), Toast.LENGTH_LONG).show();
}
});
}
public void displayAddFeedDialog(View view) {

View File

@ -32,7 +32,7 @@ public abstract class ARepository {
this.callback = callback;
}
public abstract void sync();
public abstract Completable sync();
public abstract void addFeed(ParsingResult result);

View File

@ -1,5 +1,6 @@
package com.readrops.app.repositories;
import android.annotation.SuppressLint;
import android.app.Application;
import android.arch.lifecycle.LiveData;
import android.graphics.Bitmap;
@ -50,8 +51,8 @@ public class LocalFeedRepository extends ARepository implements QueryCallback {
}
@Override
public void sync() {
executor.execute(() -> {
public Completable sync() {
return Completable.create(emitter -> {
RSSNetwork rssNet = new RSSNetwork();
rssNet.setCallback(this);
List<Feed> feedList = database.feedDao().getAllFeeds();
@ -66,11 +67,11 @@ public class LocalFeedRepository extends ARepository implements QueryCallback {
rssNet.requestUrl(feed.getUrl(), headers);
} catch (Exception e) {
failureCallBackInMainThread(e);
emitter.onError(e);
}
}
postCallBackSuccess();
emitter.onComplete();
});
}

View File

@ -12,6 +12,8 @@ import com.readrops.readropslibrary.ParsingResult;
import java.util.List;
import io.reactivex.Completable;
public class MainViewModel extends AndroidViewModel {
private LiveData<List<ItemWithFeed>> itemsWithFeed;
@ -33,8 +35,8 @@ public class MainViewModel extends AndroidViewModel {
repository.setCallback(simpleCallback);
}
public void sync() {
repository.sync();
public Completable sync() {
return repository.sync();
}
public void addFeed(ParsingResult parsingResult) {