package com.openfarmanager.android.filesystem.actions.multi.network; import com.dropbox.client2.exception.DropboxException; import com.openfarmanager.android.App; import com.openfarmanager.android.R; 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.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 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.createNetworkError; /** * @author Vlad Namashko */ public class MoveFromNetworkMultiTask extends CopyFromNetworkMultiTask { public MoveFromNetworkMultiTask(BaseFileSystemPanel panel, List<FileProxy> items, String destination) { super(panel, items, destination); } @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 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); } return TaskStatusEnum.OK; } protected Runnable getActionRunnable() { return mActionRunnable; } private Runnable mActionRunnable = new Runnable() { @Override public void run() { setHeader(App.sInstance.getString(R.string.action_copy)); TaskStatusEnum status = MoveFromNetworkMultiTask.super.doAction(); if (hasSubTasks() && handleSubTasks(status)) { return; } setHeader(App.sInstance.getString(R.string.action_delete)); status = doAction(); if (hasSubTasks() && handleSubTasks(status)) { return; } onTaskDone(status); } }; }