Sync timelines

This commit is contained in:
tom79 2019-04-23 18:14:12 +02:00
parent 3b2cd6b533
commit 6e91768343
3 changed files with 53 additions and 30 deletions

View File

@ -1782,10 +1782,8 @@ public abstract class BaseMainActivity extends BaseActivity
public static HashMap<String, DisplayStatusFragment> tagFragment = new HashMap<>();
@Override
public void syncedTimelines(List<ManageTimelines> manageTimelines) {
public void syncedTimelines(List<ManageTimelines> 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<fr.gouv.etalab.mastodon.client.Entities.List> lists = new ArrayList<>();
if( MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.MASTODON || MainActivity.social == UpdateAccountInfoAsyncTask.SOCIAL.PLEROMA ){
}
}
}

View File

@ -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<Void, Void, Void> {
private OnSyncTimelineInterface listener;
private WeakReference<Context> contextReference;
private List<ManageTimelines> 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<Void, Void, Void> {
List<TagTimeline> tagsInDb = new SearchDAO(contextReference.get(), db).getAll();
List<RemoteInstance> instancesInDb = new InstancesDAO(contextReference.get(), db).getAllInstances();
List<TagTimeline> tagsInTabs = new ArrayList<>();
List<RemoteInstance> 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<Void, Void, Void> {
}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<Void, Void, Void> {
}
}
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<fr.gouv.etalab.mastodon.client.Entities.List> lists = apiResponse.getLists();
if( lists != null && lists.size() > 0){
@ -239,6 +274,7 @@ public class SyncTimelinesAsyncTask extends AsyncTask<Void, Void, Void> {
}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<Void, Void, Void> {
@Override
protected void onPostExecute(Void result) {
listener.syncedTimelines(manageTimelines);
listener.syncedTimelines(manageTimelines, updateOnly);
}
}

View File

@ -24,5 +24,5 @@ import fr.gouv.etalab.mastodon.client.Entities.ManageTimelines;
* Interface when timelines are retrieved
*/
public interface OnSyncTimelineInterface {
void syncedTimelines(List<ManageTimelines> manageTimelines);
void syncedTimelines(List<ManageTimelines> manageTimelines, boolean updateOnly);
}