package com.openfarmanager.android.filesystem.actions.multi.network;
import android.content.Context;
import com.dropbox.client2.exception.DropboxException;
import com.openfarmanager.android.core.network.NetworkApi;
import com.openfarmanager.android.filesystem.FileProxy;
import com.openfarmanager.android.filesystem.actions.OnActionListener;
import com.openfarmanager.android.fragments.BaseFileSystemPanel;
import com.openfarmanager.android.model.NetworkEnum;
import com.openfarmanager.android.model.TaskStatusEnum;
import com.openfarmanager.android.model.exeptions.NetworkException;
import com.yandex.disk.client.exceptions.WebdavException;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import jcifs.smb.SmbAuthException;
import static com.openfarmanager.android.model.TaskStatusEnum.ERROR_DELETE_FILE;
import static com.openfarmanager.android.model.TaskStatusEnum.ERROR_FILE_NOT_EXISTS;
import static com.openfarmanager.android.model.TaskStatusEnum.OK;
import static com.openfarmanager.android.model.TaskStatusEnum.createNetworkError;
/**
* @author Vlad Namashko
*/
public class DeleteFromNetworkTask extends NetworkActionMultiTask {
protected List<FileProxy> mItems;
public DeleteFromNetworkTask(BaseFileSystemPanel panel, List<FileProxy> items) {
super(panel, null);
mItems = items;
}
@Override
protected void calculateSize() {
mTotalSize = mItems.size();
}
@Override
public TaskStatusEnum doAction() {
final NetworkApi api = getApi();
for (final FileProxy file : mItems) {
if (isCancelled()) {
break;
}
runSubTaskAsynk(new Callable<Void>() {
@Override
public Void call() throws Exception {
api.delete(file);
return null;
}
}, file);
}
mCurrentFile = getProgressText();
updateProgress();
return OK;
}
@Override
public TaskStatusEnum handleSubTaskException(Exception e) {
if (e instanceof NullPointerException) {
return ERROR_FILE_NOT_EXISTS;
} else if (e instanceof DropboxException || e instanceof SmbAuthException || e instanceof WebdavException) {
return createNetworkError(NetworkException.handleNetworkException(e));
} else {
return ERROR_DELETE_FILE;
}
}
@Override
public void onSubTaskDone(Future future) {
super.onSubTaskDone(future);
mDoneSize++;
mCurrentFile = getProgressText();
updateProgress();
}
@Override
protected String getTag() {
return "DeleteFromNetworkTask";
}
}