fix subscriptions sync (#947)
This commit is contained in:
parent
fa78c80592
commit
6c44e503db
3 changed files with 37 additions and 13 deletions
|
@ -47,9 +47,7 @@ import android.widget.TextView;
|
|||
import android.widget.Toast;
|
||||
|
||||
import com.bumptech.glide.Glide;
|
||||
import com.bumptech.glide.request.target.BitmapImageViewTarget;
|
||||
import com.bumptech.glide.request.target.CustomTarget;
|
||||
import com.bumptech.glide.request.target.ImageViewTarget;
|
||||
import com.bumptech.glide.request.transition.Transition;
|
||||
import com.google.android.exoplayer2.Player;
|
||||
import com.google.android.exoplayer2.SimpleExoPlayer;
|
||||
|
@ -109,7 +107,6 @@ import java.util.Date;
|
|||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
@ -296,6 +293,7 @@ public class MainActivity extends AppCompatActivity implements SdkStatusListener
|
|||
public static final String PREFERENCE_KEY_INTERNAL_WALLET_RECEIVE_ADDRESS = "io.lbry.browser.preference.internal.WalletReceiveAddress";
|
||||
public static final String PREFERENCE_KEY_INTERNAL_REWARDS_NOT_INTERESTED = "io.lbry.browser.preference.internal.RewardsNotInterested";
|
||||
public static final String PREFERENCE_KEY_INTERNAL_NEW_ANDROID_REWARD_CLAIMED = "io.lbry.browser.preference.internal.NewAndroidRewardClaimed";
|
||||
public static final String PREFERENCE_KEY_INTERNAL_INITIAL_SUBSCRIPTION_MERGE_DONE = "io.lbry.browser.preference.internal.InitialSubscriptionMergeDone";
|
||||
|
||||
public static final String PREFERENCE_KEY_INTERNAL_FIRST_RUN_COMPLETED = "io.lbry.browser.preference.internal.FirstRunCompleted";
|
||||
public static final String PREFERENCE_KEY_INTERNAL_FIRST_AUTH_COMPLETED = "io.lbry.browser.preference.internal.FirstAuthCompleted";
|
||||
|
@ -554,6 +552,11 @@ public class MainActivity extends AppCompatActivity implements SdkStatusListener
|
|||
return sp.getBoolean(PREFERENCE_KEY_BACKGROUND_PLAYBACK, false);
|
||||
}
|
||||
|
||||
public boolean initialSubscriptionMergeDone() {
|
||||
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
|
||||
return sp.getBoolean(PREFERENCE_KEY_INTERNAL_INITIAL_SUBSCRIPTION_MERGE_DONE, false);
|
||||
}
|
||||
|
||||
private void initSpecialRouteMap() {
|
||||
specialRouteFragmentClassMap = new HashMap<>();
|
||||
specialRouteFragmentClassMap.put("about", AboutFragment.class);
|
||||
|
@ -1780,13 +1783,19 @@ public class MainActivity extends AppCompatActivity implements SdkStatusListener
|
|||
// reload subscriptions if wallet fragment is FollowingFragment
|
||||
//openNavFragments.get
|
||||
MergeSubscriptionsTask mergeTask = new MergeSubscriptionsTask(
|
||||
subscriptions, MainActivity.this, new MergeSubscriptionsTask.MergeSubscriptionsHandler() {
|
||||
subscriptions,
|
||||
!initialSubscriptionMergeDone(),
|
||||
MainActivity.this, new MergeSubscriptionsTask.MergeSubscriptionsHandler() {
|
||||
@Override
|
||||
public void onSuccess(List<Subscription> subscriptions, List<Subscription> diff) {
|
||||
Lbryio.subscriptions = new ArrayList<>(subscriptions);
|
||||
if (diff != null && diff.size() > 0) {
|
||||
saveSharedUserState();
|
||||
}
|
||||
|
||||
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(MainActivity.this);
|
||||
sp.edit().putBoolean(PREFERENCE_KEY_INTERNAL_INITIAL_SUBSCRIPTION_MERGE_DONE, true).apply();
|
||||
|
||||
for (Fragment fragment : openNavFragments.values()) {
|
||||
if (fragment instanceof FollowingFragment) {
|
||||
// reload local subscriptions
|
||||
|
|
|
@ -64,6 +64,7 @@ public class DatabaseHelper extends SQLiteOpenHelper {
|
|||
};
|
||||
|
||||
private static final String SQL_INSERT_SUBSCRIPTION = "REPLACE INTO subscriptions (channel_name, url) VALUES (?, ?)";
|
||||
private static final String SQL_CLEAR_SUBSCRIPTIONS = "DELETE FROM subscriptions";
|
||||
private static final String SQL_DELETE_SUBSCRIPTION = "DELETE FROM subscriptions WHERE url = ?";
|
||||
private static final String SQL_GET_SUBSCRIPTIONS = "SELECT channel_name, url FROM subscriptions";
|
||||
|
||||
|
@ -230,6 +231,9 @@ public class DatabaseHelper extends SQLiteOpenHelper {
|
|||
public static void deleteSubscription(Subscription subscription, SQLiteDatabase db) {
|
||||
db.execSQL(SQL_DELETE_SUBSCRIPTION, new Object[] { subscription.getUrl() });
|
||||
}
|
||||
public static void clearSubscriptions(SQLiteDatabase db) {
|
||||
db.execSQL(SQL_CLEAR_SUBSCRIPTIONS, null);
|
||||
}
|
||||
public static List<Subscription> getSubscriptions(SQLiteDatabase db) {
|
||||
List<Subscription> subscriptions = new ArrayList<>();
|
||||
Cursor cursor = null;
|
||||
|
|
|
@ -34,9 +34,11 @@ public class MergeSubscriptionsTask extends AsyncTask<Void, Void, List<Subscript
|
|||
private List<Subscription> diff;
|
||||
private MergeSubscriptionsHandler handler;
|
||||
private Exception error;
|
||||
private boolean replaceLocal;
|
||||
|
||||
public MergeSubscriptionsTask(List<Subscription> base, Context context, MergeSubscriptionsHandler handler) {
|
||||
public MergeSubscriptionsTask(List<Subscription> base, boolean replaceLocal, Context context, MergeSubscriptionsHandler handler) {
|
||||
this.base = base;
|
||||
this.replaceLocal = replaceLocal;
|
||||
this.context = context;
|
||||
this.handler = handler;
|
||||
}
|
||||
|
@ -53,6 +55,12 @@ public class MergeSubscriptionsTask extends AsyncTask<Void, Void, List<Subscript
|
|||
db = ((MainActivity) context).getDbHelper().getWritableDatabase();
|
||||
}
|
||||
if (db != null) {
|
||||
if (replaceLocal) {
|
||||
DatabaseHelper.clearSubscriptions(db);
|
||||
for (Subscription sub : base) {
|
||||
DatabaseHelper.createOrUpdateSubscription(sub, db);
|
||||
}
|
||||
} else {
|
||||
localSubs = DatabaseHelper.getSubscriptions(db);
|
||||
for (Subscription sub : localSubs) {
|
||||
if (!combined.contains(sub)) {
|
||||
|
@ -60,6 +68,7 @@ public class MergeSubscriptionsTask extends AsyncTask<Void, Void, List<Subscript
|
|||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// fetch remote subscriptions
|
||||
JSONArray array = (JSONArray) Lbryio.parseResponse(Lbryio.call("subscription", "list", context));
|
||||
|
@ -98,12 +107,14 @@ public class MergeSubscriptionsTask extends AsyncTask<Void, Void, List<Subscript
|
|||
}
|
||||
}
|
||||
|
||||
if (!replaceLocal) {
|
||||
for (int i = 0; i < localSubs.size(); i++) {
|
||||
Subscription local = localSubs.get(i);
|
||||
if (!base.contains(local) && !diff.contains(local)) {
|
||||
diff.add(local);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < remoteSubs.size(); i++) {
|
||||
Subscription remote = remoteSubs.get(i);
|
||||
if (!combined.contains(remote)) {
|
||||
|
|
Loading…
Reference in a new issue