package com.battlelancer.seriesguide.util.tasks;
import android.content.ContentValues;
import android.support.annotation.NonNull;
import com.battlelancer.seriesguide.SgApp;
import com.battlelancer.seriesguide.backend.HexagonTools;
import com.battlelancer.seriesguide.provider.SeriesGuideContract;
import com.battlelancer.seriesguide.ui.ListsActivity;
import com.uwetrottmann.seriesguide.backend.lists.Lists;
import com.uwetrottmann.seriesguide.backend.lists.model.SgList;
import com.uwetrottmann.seriesguide.backend.lists.model.SgListList;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.greenrobot.eventbus.EventBus;
/**
* Task to add a new list.
*/
public class AddListTask extends BaseActionTask {
@NonNull protected final String listName;
public AddListTask(@NonNull SgApp app, @NonNull String listName) {
super(app);
this.listName = listName;
}
@Override
protected boolean isSendingToTrakt() {
return false;
}
@Override
protected Integer doBackgroundAction(Void... params) {
String listId = getListId();
if (isSendingToHexagon()) {
Lists listsService = getContext().getHexagonTools().getListsService();
if (listsService == null) {
return ERROR_HEXAGON_API; // no longer signed in
}
// send list to be added to hexagon
SgListList wrapper = new SgListList();
List<SgList> lists = buildList(listId, listName);
wrapper.setLists(lists);
try {
listsService.save(wrapper).execute();
} catch (IOException e) {
HexagonTools.trackFailedRequest(getContext(), "add list", e);
return ERROR_HEXAGON_API;
}
}
// update local state
if (!doDatabaseUpdate(listId)) {
return ERROR_DATABASE;
}
return SUCCESS;
}
protected String getListId() {
return SeriesGuideContract.Lists.generateListId(listName);
}
@NonNull
private static List<SgList> buildList(@NonNull String listId, @NonNull String listName) {
List<SgList> lists = new ArrayList<>(1);
SgList list = new SgList();
list.setListId(listId);
list.setName(listName);
lists.add(list);
return lists;
}
protected boolean doDatabaseUpdate(String listId) {
ContentValues values = new ContentValues();
values.put(SeriesGuideContract.Lists.LIST_ID, listId);
values.put(SeriesGuideContract.Lists.NAME, listName);
getContext().getContentResolver().insert(SeriesGuideContract.Lists.CONTENT_URI, values);
// notify lists activity
EventBus.getDefault().post(new ListsActivity.ListsChangedEvent());
return true;
}
@Override
protected int getSuccessTextResId() {
return 0; // display no success message
}
}