package com.battlelancer.seriesguide.util.tasks;
import android.support.annotation.NonNull;
import com.battlelancer.seriesguide.SgApp;
import com.battlelancer.seriesguide.backend.HexagonTools;
import com.battlelancer.seriesguide.provider.SeriesGuideContract;
import com.uwetrottmann.seriesguide.backend.lists.Lists;
import com.uwetrottmann.seriesguide.backend.lists.model.SgList;
import com.uwetrottmann.seriesguide.backend.lists.model.SgListItem;
import com.uwetrottmann.seriesguide.backend.lists.model.SgListList;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
/**
* Task to remove an item from a single list (basically delete the list item).
*/
public class RemoveListItemTask extends BaseActionTask {
private final String listItemId;
public RemoveListItemTask(@NonNull SgApp app, @NonNull String listItemId) {
super(app);
this.listItemId = listItemId;
}
@Override
protected boolean isSendingToTrakt() {
return false;
}
@Override
protected Integer doBackgroundAction(Void... params) {
if (isSendingToHexagon()) {
Lists listsService = getContext().getHexagonTools().getListsService();
if (listsService == null) {
return ERROR_HEXAGON_API; // no longer signed in
}
// extract the list id of this list item
String[] splitListItemId = SeriesGuideContract.ListItems.splitListItemId(listItemId);
if (splitListItemId == null) {
return ERROR_DATABASE;
}
String removeFromListId = splitListItemId[2];
// send the item to be removed from hexagon
SgListList wrapper = new SgListList();
List<SgList> lists = buildListItemLists(removeFromListId, listItemId);
wrapper.setLists(lists);
try {
listsService.removeItems(wrapper).execute();
} catch (IOException e) {
HexagonTools.trackFailedRequest(getContext(), "remove list item", e);
return ERROR_HEXAGON_API;
}
}
// update local state
if (!doDatabaseUpdate()) {
return ERROR_DATABASE;
}
return SUCCESS;
}
@NonNull
private static List<SgList> buildListItemLists(String listId, String listItemId) {
List<SgList> lists = new ArrayList<>(1);
SgList list = new SgList();
list.setListId(listId);
lists.add(list);
List<SgListItem> items = new ArrayList<>(1);
list.setListItems(items);
SgListItem item = new SgListItem();
items.add(item);
item.setListItemId(listItemId);
return lists;
}
private boolean doDatabaseUpdate() {
int deleted = getContext().getContentResolver()
.delete(SeriesGuideContract.ListItems.buildListItemUri(listItemId), null, null);
if (deleted == 0) {
return false; // nothing got deleted
}
// notify URI used by list fragments
getContext().getContentResolver()
.notifyChange(SeriesGuideContract.ListItems.CONTENT_WITH_DETAILS_URI, null);
return true;
}
@Override
protected int getSuccessTextResId() {
return 0; // display no success message
}
}