Fix getting the feed

Now the app handles a Throwable properly to get the feed if the cache
fails.
This commit is contained in:
Adolfo Santiago 2022-04-03 10:25:09 +02:00
parent 69f27b92e5
commit 8a45bde090
No known key found for this signature in database
GPG key ID: 244D6F9A317B4A65

View file

@ -15,6 +15,8 @@
package com.keylesspalace.tusky.fragment;
import static com.uber.autodispose.AutoDispose.autoDisposable;
import static com.uber.autodispose.android.lifecycle.AndroidLifecycleScopeProvider.from;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
@ -25,7 +27,6 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.arch.core.util.Function;
@ -42,17 +43,32 @@ import androidx.recyclerview.widget.ListUpdateCallback;
import androidx.recyclerview.widget.RecyclerView;
import androidx.recyclerview.widget.SimpleItemAnimator;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import at.connyduck.sparkbutton.helpers.Utils;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.keylesspalace.tusky.AccountListActivity;
import com.keylesspalace.tusky.BaseActivity;
import com.keylesspalace.tusky.R;
import com.keylesspalace.tusky.adapter.StatusBaseViewHolder;
import com.keylesspalace.tusky.adapter.TimelineAdapter;
import com.keylesspalace.tusky.appstore.*;
import com.keylesspalace.tusky.appstore.BlockEvent;
import com.keylesspalace.tusky.appstore.BookmarkEvent;
import com.keylesspalace.tusky.appstore.DomainMuteEvent;
import com.keylesspalace.tusky.appstore.EmojiReactEvent;
import com.keylesspalace.tusky.appstore.EventHub;
import com.keylesspalace.tusky.appstore.FavoriteEvent;
import com.keylesspalace.tusky.appstore.MuteConversationEvent;
import com.keylesspalace.tusky.appstore.MuteEvent;
import com.keylesspalace.tusky.appstore.PreferenceChangedEvent;
import com.keylesspalace.tusky.appstore.ReblogEvent;
import com.keylesspalace.tusky.appstore.StatusComposedEvent;
import com.keylesspalace.tusky.appstore.StatusDeletedEvent;
import com.keylesspalace.tusky.appstore.UnfollowEvent;
import com.keylesspalace.tusky.db.AccountManager;
import com.keylesspalace.tusky.di.Injectable;
import com.keylesspalace.tusky.entity.*;
import com.keylesspalace.tusky.entity.EmojiReaction;
import com.keylesspalace.tusky.entity.Filter;
import com.keylesspalace.tusky.entity.Poll;
import com.keylesspalace.tusky.entity.Status;
import com.keylesspalace.tusky.interfaces.ActionButtonActivity;
import com.keylesspalace.tusky.interfaces.RefreshableFragment;
import com.keylesspalace.tusky.interfaces.ReselectableFragment;
@ -75,21 +91,17 @@ import com.keylesspalace.tusky.util.ViewDataUtils;
import com.keylesspalace.tusky.view.BackgroundMessageView;
import com.keylesspalace.tusky.view.EndlessOnScrollListener;
import com.keylesspalace.tusky.viewdata.StatusViewData;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
import java.util.concurrent.TimeUnit;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
import javax.inject.Inject;
import at.connyduck.sparkbutton.helpers.Utils;
import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers;
import kotlin.Unit;
import kotlin.collections.CollectionsKt;
import kotlin.jvm.functions.Function1;
@ -97,13 +109,11 @@ import retrofit2.Call;
import retrofit2.Callback;
import retrofit2.Response;
import static com.uber.autodispose.AutoDispose.autoDisposable;
import static com.uber.autodispose.android.lifecycle.AndroidLifecycleScopeProvider.from;
public class TimelineFragment extends SFragment implements
SwipeRefreshLayout.OnRefreshListener,
StatusActionListener,
Injectable, ReselectableFragment, RefreshableFragment {
private static final String TAG = "TimelineF"; // logging tag
private static final String KIND_ARG = "kind";
private static final String ID_ARG = "id";
@ -135,6 +145,7 @@ public class TimelineFragment extends SFragment implements
@Inject
public EventHub eventHub;
@Inject
TimelineRepository timelineRepo;
@ -170,7 +181,7 @@ public class TimelineFragment extends SFragment implements
private boolean initialUpdateFailed = false;
private PairedList<Either<Placeholder, Status>, StatusViewData> statuses =
new PairedList<>(new Function<Either<Placeholder, Status>, StatusViewData>() {
new PairedList<>(new Function<>() {
@Override
public StatusViewData apply(Either<Placeholder, Status> input) {
Status status = input.asRightOrNull();
@ -271,9 +282,10 @@ public class TimelineFragment extends SFragment implements
this.sendInitialRequest();
} else {
progressBar.setVisibility(View.GONE);
if (isNeedRefresh)
if(isNeedRefresh) {
onRefresh();
}
}
return rootView;
}
@ -305,6 +317,10 @@ public class TimelineFragment extends SFragment implements
// Request statuses including current top to refresh all of them
}
this.updateCurrent();
this.loadAbove();
},
throwable -> {
this.updateCurrent();
this.loadAbove();
});
@ -354,7 +370,8 @@ public class TimelineFragment extends SFragment implements
this.updateAdapter();
}
this.bottomLoading = false;
this.progressBar.setVisibility(View.GONE);
this.swipeRefreshLayout.setRefreshing(false);
},
(e) -> {
this.initialUpdateFailed = true;