From 6e917683434ab5834b80b1b942b6592428088a81 Mon Sep 17 00:00:00 2001 From: tom79 Date: Tue, 23 Apr 2019 18:14:12 +0200 Subject: [PATCH] Sync timelines --- .../mastodon/activities/BaseMainActivity.java | 15 +---- .../asynctasks/SyncTimelinesAsyncTask.java | 66 ++++++++++++++----- .../interfaces/OnSyncTimelineInterface.java | 2 +- 3 files changed, 53 insertions(+), 30 deletions(-) diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java b/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java index d810e6a21..28e68499d 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/activities/BaseMainActivity.java @@ -1782,10 +1782,8 @@ public abstract class BaseMainActivity extends BaseActivity - public static HashMap tagFragment = new HashMap<>(); - @Override - public void syncedTimelines(List manageTimelines) { + public void syncedTimelines(List manageTimelines, boolean updateOnly) { new ManageTimelines().createTabs(BaseMainActivity.this, manageTimelines); SharedPreferences sharedpreferences = getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE); boolean optimize_loading = sharedpreferences.getBoolean(Helper.SET_OPTIMIZE_LOADING, false); @@ -2629,15 +2627,4 @@ public abstract class BaseMainActivity extends BaseActivity }); } - - - public void syncTimelines(Context context){ - - //Sync lists - ArrayList lists = new ArrayList<>(); - if( MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON || MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA ){ - - } - - } } \ No newline at end of file diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/SyncTimelinesAsyncTask.java b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/SyncTimelinesAsyncTask.java index b5b72da9f..7cef61a35 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/SyncTimelinesAsyncTask.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/asynctasks/SyncTimelinesAsyncTask.java @@ -27,6 +27,7 @@ import fr.gouv.etalab.mastodon.activities.MainActivity; import fr.gouv.etalab.mastodon.client.API; import fr.gouv.etalab.mastodon.client.APIResponse; +import fr.gouv.etalab.mastodon.client.Entities.Instance; import fr.gouv.etalab.mastodon.client.Entities.ManageTimelines; import fr.gouv.etalab.mastodon.client.Entities.RemoteInstance; import fr.gouv.etalab.mastodon.client.Entities.TagTimeline; @@ -51,11 +52,18 @@ public class SyncTimelinesAsyncTask extends AsyncTask { private OnSyncTimelineInterface listener; private WeakReference contextReference; private List manageTimelines; + private boolean updateOnly; + public SyncTimelinesAsyncTask(Context context, boolean updateOnly, OnSyncTimelineInterface onSyncTimelineInterface){ + this.contextReference = new WeakReference<>(context); + this.listener = onSyncTimelineInterface; + this.updateOnly = updateOnly; + } public SyncTimelinesAsyncTask(Context context, OnSyncTimelineInterface onSyncTimelineInterface){ this.contextReference = new WeakReference<>(context); this.listener = onSyncTimelineInterface; + this.updateOnly = false; } @Override @@ -161,19 +169,6 @@ public class SyncTimelinesAsyncTask extends AsyncTask { List tagsInDb = new SearchDAO(contextReference.get(), db).getAll(); List instancesInDb = new InstancesDAO(contextReference.get(), db).getAllInstances(); - List tagsInTabs = new ArrayList<>(); - List instanceInTabs =new ArrayList<>(); - - for (ManageTimelines mtl: manageTimelines){ - if( mtl.getType() == ManageTimelines.Type.TAG){ - tagsInTabs.add(mtl.getTagTimeline()); - }else if(mtl.getType() == ManageTimelines.Type.INSTANCE){ - instanceInTabs.add(mtl.getRemoteInstance()); - } - } - - - for(TagTimeline tag: tagsInDb){ boolean isInDb = false; ManageTimelines timelines_tmp = null; @@ -196,9 +191,9 @@ public class SyncTimelinesAsyncTask extends AsyncTask { }else{ //Update list timelines_tmp.setTagTimeline(tag); + new TimelinesDAO(contextReference.get(), db).update(timelines_tmp); } } - for(ManageTimelines manageTimelines: manageTimelines){ if( manageTimelines.getTagTimeline() == null ) continue; @@ -213,6 +208,46 @@ public class SyncTimelinesAsyncTask extends AsyncTask { } } + + for(RemoteInstance instance: instancesInDb){ + boolean isInDb = false; + ManageTimelines timelines_tmp = null; + for(ManageTimelines manageTimeline: manageTimelines){ + if( manageTimeline.getRemoteInstance() == null ) + continue; + if(manageTimeline.getRemoteInstance().getId().equals(instance.getId())){ + isInDb = true; + timelines_tmp = manageTimeline; + break; + } + } + if( !isInDb){ + ManageTimelines manageTL = new ManageTimelines(); + manageTL.setRemoteInstance(instance); + manageTL.setDisplayed(true); + manageTL.setType(ManageTimelines.Type.INSTANCE); + manageTL.setPosition(manageTimelines.size()); + new TimelinesDAO(contextReference.get(), db).insert(manageTL); + }else{ + //Update list + timelines_tmp.setRemoteInstance(instance); + new TimelinesDAO(contextReference.get(), db).update(timelines_tmp); + } + } + for(ManageTimelines manageTimelines: manageTimelines){ + if( manageTimelines.getRemoteInstance() == null ) + continue; + boolean shouldBeRemoved = true; + for(RemoteInstance instance: instancesInDb){ + if( instance.getId().equals(manageTimelines.getRemoteInstance().getId())){ + shouldBeRemoved = false; + } + } + if( shouldBeRemoved){ + new TimelinesDAO(contextReference.get(), db).remove(manageTimelines); + } + } + APIResponse apiResponse = new API(contextReference.get()).getLists(); List lists = apiResponse.getLists(); if( lists != null && lists.size() > 0){ @@ -239,6 +274,7 @@ public class SyncTimelinesAsyncTask extends AsyncTask { }else{ //Update list timelines_tmp.setListTimeline(list); + new TimelinesDAO(contextReference.get(), db).update(timelines_tmp); } } for(ManageTimelines manageTimelines: manageTimelines){ @@ -266,7 +302,7 @@ public class SyncTimelinesAsyncTask extends AsyncTask { @Override protected void onPostExecute(Void result) { - listener.syncedTimelines(manageTimelines); + listener.syncedTimelines(manageTimelines, updateOnly); } } diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/interfaces/OnSyncTimelineInterface.java b/app/src/main/java/fr/gouv/etalab/mastodon/interfaces/OnSyncTimelineInterface.java index cb4e5620f..f89933601 100644 --- a/app/src/main/java/fr/gouv/etalab/mastodon/interfaces/OnSyncTimelineInterface.java +++ b/app/src/main/java/fr/gouv/etalab/mastodon/interfaces/OnSyncTimelineInterface.java @@ -24,5 +24,5 @@ import fr.gouv.etalab.mastodon.client.Entities.ManageTimelines; * Interface when timelines are retrieved */ public interface OnSyncTimelineInterface { - void syncedTimelines(List manageTimelines); + void syncedTimelines(List manageTimelines, boolean updateOnly); }