Local account : synchronize only the selected feed
This commit is contained in:
parent
8f093eb4a2
commit
1e29b26dc5
@ -75,7 +75,7 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import io.reactivex.Observer;
|
||||
import io.reactivex.CompletableObserver;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.disposables.Disposable;
|
||||
import io.reactivex.observers.DisposableSingleObserver;
|
||||
@ -622,10 +622,20 @@ public class MainActivity extends AppCompatActivity implements SwipeRefreshLayou
|
||||
}
|
||||
|
||||
private void sync(@Nullable List<Feed> feeds) {
|
||||
viewModel.sync(feeds)
|
||||
viewModel.sync(feeds, feed -> {
|
||||
if (viewModel.isAccountLocal() && feedNb > 0) {
|
||||
binding.syncProgressTextView.setText(getString(R.string.updating_feed, feed.getName()));
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
binding.syncProgressBar.setProgress((feedCount * 100) / feedNb, true);
|
||||
} else
|
||||
binding.syncProgressBar.setProgress((feedCount * 100) / feedNb);
|
||||
}
|
||||
|
||||
feedCount++;
|
||||
})
|
||||
.subscribeOn(Schedulers.io())
|
||||
.observeOn(AndroidSchedulers.mainThread())
|
||||
.subscribe(new Observer<Feed>() {
|
||||
.subscribe(new CompletableObserver() {
|
||||
@Override
|
||||
public void onSubscribe(@NonNull Disposable d) {
|
||||
syncDisposable = d;
|
||||
@ -636,30 +646,6 @@ public class MainActivity extends AppCompatActivity implements SwipeRefreshLayou
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNext(@NonNull Feed feed) {
|
||||
if (viewModel.isAccountLocal() && feedNb > 0) {
|
||||
binding.syncProgressTextView.setText(getString(R.string.updating_feed, feed.getName()));
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
|
||||
binding.syncProgressBar.setProgress((feedCount * 100) / feedNb, true);
|
||||
} else
|
||||
binding.syncProgressBar.setProgress((feedCount * 100) / feedNb);
|
||||
}
|
||||
|
||||
feedCount++;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(@NonNull Throwable e) {
|
||||
e.printStackTrace();
|
||||
binding.swipeRefreshLayout.setRefreshing(false);
|
||||
binding.syncProgressLayout.setVisibility(View.GONE);
|
||||
|
||||
Utils.showSnackbar(binding.mainRoot, e.getMessage());
|
||||
drawerManager.enableAccountSelection();
|
||||
updating = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete() {
|
||||
viewModel.invalidate();
|
||||
@ -682,6 +668,16 @@ public class MainActivity extends AppCompatActivity implements SwipeRefreshLayou
|
||||
updateDrawerFeeds(); // update drawer after syncing feeds
|
||||
updating = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(@NonNull Throwable e) {
|
||||
binding.swipeRefreshLayout.setRefreshing(false);
|
||||
binding.syncProgressLayout.setVisibility(View.GONE);
|
||||
|
||||
Utils.showSnackbar(binding.mainRoot, e.getMessage());
|
||||
drawerManager.enableAccountSelection();
|
||||
updating = false;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -9,10 +9,9 @@ import androidx.paging.LivePagedListBuilder;
|
||||
import androidx.paging.PagedList;
|
||||
|
||||
import com.readrops.app.repositories.ARepository;
|
||||
import com.readrops.app.repositories.FeedUpdate;
|
||||
import com.readrops.app.utils.SharedPreferencesManager;
|
||||
import com.readrops.db.Database;
|
||||
import com.readrops.db.queries.ItemsQueryBuilder;
|
||||
import com.readrops.db.queries.QueryFilters;
|
||||
import com.readrops.db.RoomFactoryWrapper;
|
||||
import com.readrops.db.entities.Feed;
|
||||
import com.readrops.db.entities.Folder;
|
||||
@ -21,17 +20,19 @@ import com.readrops.db.entities.account.Account;
|
||||
import com.readrops.db.filters.FilterType;
|
||||
import com.readrops.db.filters.ListSortType;
|
||||
import com.readrops.db.pojo.ItemWithFeed;
|
||||
import com.readrops.db.queries.ItemsQueryBuilder;
|
||||
import com.readrops.db.queries.QueryFilters;
|
||||
|
||||
import org.koin.core.parameter.ParametersHolderKt;
|
||||
import org.koin.java.KoinJavaComponent;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import io.reactivex.Completable;
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.Single;
|
||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
||||
import io.reactivex.schedulers.Schedulers;
|
||||
@ -123,9 +124,17 @@ public class MainViewModel extends ViewModel {
|
||||
return itemsWithFeed;
|
||||
}
|
||||
|
||||
public Observable<Feed> sync(List<Feed> feeds) {
|
||||
public Completable sync(List<Feed> feeds, FeedUpdate update) {
|
||||
itemsWithFeed.removeSource(lastFetch);
|
||||
return repository.sync(feeds);
|
||||
|
||||
// get current viewed feed
|
||||
if (feeds == null && queryFilters.getFilterType() == FilterType.FEED_FILTER) {
|
||||
return Single.<Feed>create(emitter -> emitter.onSuccess(database.feedDao()
|
||||
.getFeedById(queryFilters.getFilterFeedId())))
|
||||
.flatMapCompletable(feed -> repository.sync(Collections.singletonList(feed), update));
|
||||
}
|
||||
|
||||
return repository.sync(feeds, update);
|
||||
}
|
||||
|
||||
public Single<Integer> getFeedCount() {
|
||||
|
@ -54,7 +54,7 @@ class SyncWorker(context: Context, parameters: WorkerParameters) : Worker(contex
|
||||
|
||||
val repository = get<ARepository>(parameters = { parametersOf(it) })
|
||||
|
||||
disposable = repository.sync(null)
|
||||
disposable = repository.sync(null, null)
|
||||
.doOnError { throwable ->
|
||||
result = Result.failure()
|
||||
Log.e(TAG, throwable.message!!, throwable)
|
||||
|
@ -1,5 +1,7 @@
|
||||
package com.readrops.app.repositories;
|
||||
|
||||
import static com.readrops.app.utils.ReadropsKeys.FEEDS;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
||||
@ -29,11 +31,8 @@ import java.util.Map;
|
||||
import java.util.TreeMap;
|
||||
|
||||
import io.reactivex.Completable;
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.Single;
|
||||
|
||||
import static com.readrops.app.utils.ReadropsKeys.FEEDS;
|
||||
|
||||
public abstract class ARepository {
|
||||
|
||||
protected Context context;
|
||||
@ -57,7 +56,7 @@ public abstract class ARepository {
|
||||
|
||||
public abstract Completable login(Account account, boolean insert);
|
||||
|
||||
public abstract Observable<Feed> sync(List<Feed> feeds);
|
||||
public abstract Completable sync(@Nullable List<Feed> feeds, @Nullable FeedUpdate update);
|
||||
|
||||
public abstract Single<List<FeedInsertionResult>> addFeeds(List<ParsingResult> results);
|
||||
|
||||
|
@ -0,0 +1,9 @@
|
||||
package com.readrops.app.repositories
|
||||
|
||||
import com.readrops.db.entities.Feed
|
||||
|
||||
interface FeedUpdate {
|
||||
|
||||
fun onNext(feed: Feed)
|
||||
|
||||
}
|
@ -31,7 +31,6 @@ import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import io.reactivex.Completable;
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.Single;
|
||||
|
||||
public class FreshRSSRepository extends ARepository {
|
||||
@ -79,7 +78,7 @@ public class FreshRSSRepository extends ARepository {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<Feed> sync(List<Feed> feeds) {
|
||||
public Completable sync(@Nullable List<Feed> feeds, @Nullable FeedUpdate update) {
|
||||
FreshRSSSyncData syncData = new FreshRSSSyncData();
|
||||
SyncType syncType;
|
||||
|
||||
@ -119,7 +118,7 @@ public class FreshRSSRepository extends ARepository {
|
||||
|
||||
emitter.onSuccess(syncData);
|
||||
}).flatMap(syncData1 -> dataSource.sync(syncType, syncData1, account.getWriteToken()))
|
||||
.flatMapObservable(syncResult -> {
|
||||
.flatMapCompletable(syncResult -> {
|
||||
logger.addSplit("server queries");
|
||||
|
||||
insertFolders(syncResult.getFolders());
|
||||
@ -145,7 +144,7 @@ public class FreshRSSRepository extends ARepository {
|
||||
|
||||
this.syncResult = syncResult;
|
||||
|
||||
return Observable.empty();
|
||||
return Completable.complete();
|
||||
});
|
||||
}
|
||||
|
||||
|
@ -2,6 +2,8 @@ package com.readrops.app.repositories;
|
||||
|
||||
import android.accounts.NetworkErrorException;
|
||||
import android.content.Context;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.util.Log;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
@ -30,7 +32,6 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import io.reactivex.Completable;
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.Single;
|
||||
import kotlin.Pair;
|
||||
import okhttp3.Headers;
|
||||
@ -54,8 +55,8 @@ public class LocalFeedRepository extends ARepository {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<Feed> sync(@Nullable List<Feed> feeds) {
|
||||
return Observable.create(emitter -> {
|
||||
public Completable sync(@Nullable List<Feed> feeds, FeedUpdate update) {
|
||||
return Completable.create(emitter -> {
|
||||
List<Feed> feedList;
|
||||
|
||||
if (feeds == null || feeds.isEmpty()) {
|
||||
@ -65,7 +66,8 @@ public class LocalFeedRepository extends ARepository {
|
||||
}
|
||||
|
||||
for (Feed feed : feedList) {
|
||||
emitter.onNext(feed);
|
||||
Handler mainHandler = new Handler(Looper.getMainLooper());
|
||||
mainHandler.post(() -> update.onNext(feed));
|
||||
|
||||
try {
|
||||
Headers.Builder headers = new Headers.Builder();
|
||||
|
@ -33,7 +33,6 @@ import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import io.reactivex.Completable;
|
||||
import io.reactivex.Observable;
|
||||
import io.reactivex.Single;
|
||||
import okhttp3.OkHttpClient;
|
||||
|
||||
@ -74,9 +73,9 @@ public class NextNewsRepository extends ARepository {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Observable<Feed> sync(List<Feed> feeds) {
|
||||
public Completable sync(@Nullable List<Feed> feeds, @Nullable FeedUpdate update) {
|
||||
setCredentials(account);
|
||||
return Observable.create(emitter -> {
|
||||
return Completable.create(emitter -> {
|
||||
try {
|
||||
long lastModified = LocalDateTime.now().toDateTime().getMillis();
|
||||
SyncType syncType;
|
||||
|
Loading…
x
Reference in New Issue
Block a user