移除检查任务信息主动抛出的异常

This commit is contained in:
laoyuyu
2019-10-21 19:55:55 +08:00
parent fb0b95bd07
commit 2b0fcbb98f
30 changed files with 227 additions and 263 deletions

View File

@@ -24,8 +24,6 @@ import android.app.Service;
import android.content.Context;
import android.os.Build;
import android.widget.PopupWindow;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import com.arialyy.aria.core.download.DownloadReceiver;
import com.arialyy.aria.core.upload.UploadReceiver;
import com.arialyy.aria.util.ALog;
@@ -136,14 +134,8 @@ import com.arialyy.aria.util.ALog;
return (Service) obj;
} else if (obj instanceof Activity) {
return (Activity) obj;
} else if (obj instanceof DialogFragment) {
return ((DialogFragment) obj).getContext();
} else if (obj instanceof android.app.DialogFragment) {
return ((android.app.DialogFragment) obj).getActivity();
} else if (obj instanceof Fragment) {
return ((Fragment) obj).getContext();
} else if (obj instanceof android.app.Fragment) {
return ((android.app.Fragment) obj).getActivity();
} else if (AriaManager.isFragment(obj.getClass())) {
return AriaManager.getFragmentActivity(obj);
} else if (obj instanceof Dialog) {
return ((Dialog) obj).getContext();
} else if (obj instanceof PopupWindow) {

View File

@@ -21,17 +21,11 @@ import android.app.Activity;
import android.app.Application;
import android.app.Dialog;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.widget.PopupWindow;
import androidx.fragment.app.DialogFragment;
import androidx.fragment.app.Fragment;
import com.arialyy.aria.core.command.CommandManager;
import com.arialyy.aria.core.common.QueueMod;
import com.arialyy.aria.core.config.AppConfig;
@@ -53,6 +47,8 @@ import com.arialyy.aria.util.ALog;
import com.arialyy.aria.util.AriaCrashHandler;
import com.arialyy.aria.util.RecordUtil;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
@@ -60,13 +56,18 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
* Created by lyy on 2016/12/1. https://github.com/AriaLyy/Aria Aria管理器任务操作在这里执行
* Created by lyy on 2016/12/1. https://github.com/AriaLyy/Aria
* Aria管理器任务操作在这里执行
*/
@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) public class AriaManager {
private static final String TAG = "AriaManager";
private static final Object LOCK = new Object();
/**
* android、androidx、support的fragment、dialogFragment类名
*/
private static List<String> mFragmentClassName = new ArrayList<>();
private static List<String> mDialogFragmentClassName = new ArrayList<>();
@SuppressLint("StaticFieldLeak") private static volatile AriaManager INSTANCE = null;
private Map<String, AbsReceiver> mReceivers = new ConcurrentHashMap<>();
@@ -79,6 +80,19 @@ import java.util.concurrent.ConcurrentHashMap;
private DelegateWrapper mDbWrapper;
private AriaConfig mConfig;
static {
mFragmentClassName.add("androidx.fragment.app.Fragment");
mFragmentClassName.add("androidx.fragment.app.DialogFragment");
mFragmentClassName.add("android.app.Fragment");
mFragmentClassName.add("android.app.DialogFragment");
mFragmentClassName.add("android.support.v4.app.Fragment");
mFragmentClassName.add("android.support.v4.app.DialogFragment");
mDialogFragmentClassName.add("androidx.fragment.app.DialogFragment");
mDialogFragmentClassName.add("android.app.DialogFragment");
mDialogFragmentClassName.add("android.support.v4.app.DialogFragment");
}
private AriaManager(Context context) {
APP = context.getApplicationContext();
}
@@ -114,8 +128,6 @@ import java.util.concurrent.ConcurrentHashMap;
return APP;
}
/**
* 初始化数据库
*/
@@ -166,8 +178,6 @@ import java.util.concurrent.ConcurrentHashMap;
return mAriaHandler;
}
public Map<String, AbsReceiver> getReceiver() {
return mReceivers;
}
@@ -303,25 +313,12 @@ import java.util.concurrent.ConcurrentHashMap;
needRmReceiver = widgetLiftManager.handleDialogLift((Dialog) obj);
} else if (obj instanceof PopupWindow) {
needRmReceiver = widgetLiftManager.handlePopupWindowLift((PopupWindow) obj);
} else if (obj instanceof DialogFragment) {
needRmReceiver = widgetLiftManager.handleDialogFragmentLift((DialogFragment) obj);
} else if (obj instanceof android.app.DialogFragment) {
needRmReceiver = widgetLiftManager.handleDialogFragmentLift((android.app.DialogFragment) obj);
} else if (isDialogFragment(obj.getClass())) {
needRmReceiver = widgetLiftManager.handleDialogFragmentLift(getDialog(obj));
}
if (receiver == null) {
AbsReceiver absReceiver;
switch (type) {
case ReceiverType.DOWNLOAD:
absReceiver = new DownloadReceiver();
break;
case ReceiverType.UPLOAD:
absReceiver = new UploadReceiver();
break;
default:
absReceiver = new DownloadReceiver();
break;
}
AbsReceiver absReceiver =
type.equals(ReceiverType.DOWNLOAD) ? new DownloadReceiver() : new UploadReceiver();
absReceiver.targetName = obj.getClass().getName();
AbsReceiver.OBJ_MAP.put(absReceiver.getKey(), obj);
absReceiver.needRmListener = needRmReceiver;
@@ -339,14 +336,8 @@ import java.util.concurrent.ConcurrentHashMap;
* @return {@link #createKey(String, Object)}
*/
private String getKey(@ReceiverType String type, Object obj) {
if (obj instanceof DialogFragment) {
relateSubClass(type, obj, ((DialogFragment) obj).getActivity());
} else if (obj instanceof android.app.DialogFragment) {
relateSubClass(type, obj, ((android.app.DialogFragment) obj).getActivity());
} else if (obj instanceof Fragment) {
relateSubClass(type, obj, ((Fragment) obj).getActivity());
} else if (obj instanceof android.app.Fragment) {
relateSubClass(type, obj, ((android.app.Fragment) obj).getActivity());
if (isFragment(obj.getClass())) {
relateSubClass(type, obj, getFragmentActivity(obj));
} else if (obj instanceof Dialog) {
Activity activity = ((Dialog) obj).getOwnerActivity();
if (activity != null) {
@@ -361,10 +352,86 @@ import java.util.concurrent.ConcurrentHashMap;
return createKey(type, obj);
}
/**
* 获取fragment的activity
*
* @return 获取失败返回null
*/
static Activity getFragmentActivity(Object obj) {
try {
Method method = obj.getClass().getMethod("getActivity");
return (Activity) method.invoke(obj);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return null;
}
/**
* 判断注解对象是否是fragment
*
* @return true 对象是fragment
*/
static boolean isFragment(Class subClazz) {
Class parentClass = subClazz.getSuperclass();
if (parentClass == null) {
return false;
} else {
String parentName = parentClass.getName();
if (mFragmentClassName.contains(parentName)) {
return true;
} else {
return isFragment(parentClass);
}
}
}
/**
* 判断对象是否是DialogFragment
*
* @return true 对象是DialogFragment
*/
private boolean isDialogFragment(Class subClazz) {
Class parentClass = subClazz.getSuperclass();
if (parentClass == null) {
return false;
} else {
String parentName = parentClass.getName();
if (mFragmentClassName.contains(parentName)) {
return true;
} else {
return isDialogFragment(parentClass);
}
}
}
/**
* 获取DialogFragment的dialog
*
* @return 获取失败返回null
*/
private Dialog getDialog(Object obj) {
try {
Method method = obj.getClass().getMethod("getDialog");
return (Dialog) method.invoke(obj);
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return null;
}
/**
* 关联Activity类和Fragment间的关系
*
* @param sub Frgament或dialog类
* @param sub Fragment或dialog类
* @param activity activity寄主类
*/
private void relateSubClass(@ReceiverType String type, Object sub, Activity activity) {

View File

@@ -21,7 +21,6 @@ import android.content.DialogInterface;
import android.os.Build;
import android.os.Message;
import android.widget.PopupWindow;
import androidx.fragment.app.DialogFragment;
import com.arialyy.aria.util.ALog;
import com.arialyy.aria.util.CommonUtil;
import java.lang.reflect.Field;
@@ -35,22 +34,9 @@ final class WidgetLiftManager {
/**
* 处理DialogFragment事件
*
* @param dialogFragment {@link android.app.DialogFragment}
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB) boolean handleDialogFragmentLift(
android.app.DialogFragment dialogFragment) {
return handleDialogLift(dialogFragment.getDialog());
}
/**
* 处理DialogFragment事件
*
* @param dialogFragment {@link DialogFragment}
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB) boolean handleDialogFragmentLift(
DialogFragment dialogFragment) {
return handleDialogLift(dialogFragment.getDialog());
@TargetApi(Build.VERSION_CODES.HONEYCOMB) boolean handleDialogFragmentLift(Dialog dialog) {
return handleDialogLift(dialog);
}
/**

View File

@@ -16,6 +16,7 @@
package com.arialyy.aria.core.download;
import android.text.TextUtils;
import com.arialyy.aria.core.common.ErrorCode;
import com.arialyy.aria.core.inf.ICheckEntityUtil;
import com.arialyy.aria.core.inf.IOptionConstant;
import com.arialyy.aria.core.inf.IRecordHandler;
@@ -24,6 +25,7 @@ import com.arialyy.aria.core.wrapper.ITaskWrapper;
import com.arialyy.aria.orm.DbEntity;
import com.arialyy.aria.util.ALog;
import com.arialyy.aria.util.CheckUtil;
import com.arialyy.aria.util.CommonUtil;
import com.arialyy.aria.util.RecordUtil;
import java.io.File;
@@ -31,7 +33,7 @@ import java.io.File;
* 检查下载任务实体
*/
public class CheckDEntityUtil implements ICheckEntityUtil {
private final String TAG = "CheckDLoadEntity";
private final String TAG = CommonUtil.getClassName(getClass());
private DTaskWrapper mWrapper;
private DownloadEntity mEntity;
@@ -47,7 +49,7 @@ public class CheckDEntityUtil implements ICheckEntityUtil {
@Override
public boolean checkEntity() {
if (mWrapper.getErrorEvent() != null) {
ALog.e(TAG, mWrapper.getErrorEvent().errorMsg);
ALog.e(TAG, String.format("下载失败,%s", mWrapper.getErrorEvent().errorMsg));
return false;
}
@@ -179,7 +181,7 @@ public class CheckDEntityUtil implements ICheckEntityUtil {
if (TextUtils.isEmpty(url)) {
ALog.e(TAG, "下载失败url为null");
return false;
} else if (!CheckUtil.checkUrlNotThrow(url)) {
} else if (!CheckUtil.checkUrl(url)) {
ALog.e(TAG, "下载失败url【" + url + "】错误");
return false;
}

View File

@@ -16,6 +16,7 @@
package com.arialyy.aria.core.download;
import android.text.TextUtils;
import com.arialyy.aria.core.common.ErrorCode;
import com.arialyy.aria.core.common.RequestEnum;
import com.arialyy.aria.core.inf.ICheckEntityUtil;
import com.arialyy.aria.core.inf.IOptionConstant;
@@ -113,7 +114,7 @@ public class CheckDGEntityUtil implements ICheckEntityUtil {
@Override
public boolean checkEntity() {
if (mWrapper.getErrorEvent() != null) {
ALog.e(TAG, mWrapper.getErrorEvent().errorMsg);
ALog.e(TAG, String.format("下载失败,%s", mWrapper.getErrorEvent().errorMsg));
return false;
}

View File

@@ -17,6 +17,7 @@ package com.arialyy.aria.core.download;
import android.text.TextUtils;
import com.arialyy.aria.core.FtpUrlEntity;
import com.arialyy.aria.core.common.ErrorCode;
import com.arialyy.aria.core.inf.ICheckEntityUtil;
import com.arialyy.aria.core.inf.IOptionConstant;
import com.arialyy.aria.orm.DbEntity;
@@ -77,7 +78,7 @@ public class CheckFtpDirEntityUtil implements ICheckEntityUtil {
@Override
public boolean checkEntity() {
if (mWrapper.getErrorEvent() != null) {
ALog.e(TAG, mWrapper.getErrorEvent().errorMsg);
ALog.e(TAG, String.format("下载失败,%s", mWrapper.getErrorEvent().errorMsg));
return false;
}

View File

@@ -20,9 +20,10 @@ import androidx.annotation.NonNull;
import com.arialyy.annotations.TaskEnum;
import com.arialyy.aria.core.AriaManager;
import com.arialyy.aria.core.command.CancelAllCmd;
import com.arialyy.aria.core.command.CmdHelper;
import com.arialyy.aria.core.command.NormalCmdFactory;
import com.arialyy.aria.core.common.AbsBuilderTarget;
import com.arialyy.aria.core.common.ErrorCode;
import com.arialyy.aria.core.common.AbsEntity;
import com.arialyy.aria.core.common.ProxyHelper;
import com.arialyy.aria.core.download.target.DTargetFactory;
import com.arialyy.aria.core.download.target.FtpBuilderTarget;
@@ -34,15 +35,13 @@ import com.arialyy.aria.core.download.target.GroupNormalTarget;
import com.arialyy.aria.core.download.target.HttpBuilderTarget;
import com.arialyy.aria.core.download.target.HttpNormalTarget;
import com.arialyy.aria.core.event.EventMsgUtil;
import com.arialyy.aria.core.common.AbsEntity;
import com.arialyy.aria.core.inf.AbsReceiver;
import com.arialyy.aria.core.task.ITask;
import com.arialyy.aria.core.inf.ReceiverType;
import com.arialyy.aria.core.scheduler.TaskSchedulers;
import com.arialyy.aria.core.task.ITask;
import com.arialyy.aria.orm.DbEntity;
import com.arialyy.aria.util.ALog;
import com.arialyy.aria.util.CheckUtil;
import com.arialyy.aria.core.command.CmdHelper;
import com.arialyy.aria.util.CommonUtil;
import com.arialyy.aria.util.ComponentUtil;
import com.arialyy.aria.util.DbDataHelper;
@@ -77,7 +76,6 @@ public class DownloadReceiver extends AbsReceiver {
@CheckResult
public HttpBuilderTarget load(@NonNull String url) {
ComponentUtil.getInstance().checkComponentExist(ComponentUtil.COMPONENT_TYPE_HTTP);
CheckUtil.checkUrlInvalidThrow(url);
return DTargetFactory.getInstance()
.generateBuilderTarget(HttpBuilderTarget.class, url);
}
@@ -91,7 +89,6 @@ public class DownloadReceiver extends AbsReceiver {
@CheckResult
public HttpNormalTarget load(long taskId) {
ComponentUtil.getInstance().checkComponentExist(ComponentUtil.COMPONENT_TYPE_HTTP);
CheckUtil.checkTaskId(taskId);
return DTargetFactory.getInstance()
.generateNormalTarget(HttpNormalTarget.class, taskId);
}
@@ -104,7 +101,6 @@ public class DownloadReceiver extends AbsReceiver {
@CheckResult
public GroupBuilderTarget loadGroup(List<String> urls) {
ComponentUtil.getInstance().checkComponentExist(ComponentUtil.COMPONENT_TYPE_HTTP);
CheckUtil.checkDownloadUrls(urls);
return DTargetFactory.getInstance().generateGroupBuilderTarget(urls);
}
@@ -117,7 +113,6 @@ public class DownloadReceiver extends AbsReceiver {
@CheckResult
public GroupNormalTarget loadGroup(long taskId) {
ComponentUtil.getInstance().checkComponentExist(ComponentUtil.COMPONENT_TYPE_HTTP);
CheckUtil.checkTaskId(taskId);
return DTargetFactory.getInstance()
.generateNormalTarget(GroupNormalTarget.class, taskId);
}
@@ -128,7 +123,6 @@ public class DownloadReceiver extends AbsReceiver {
@CheckResult
public FtpBuilderTarget loadFtp(@NonNull String url) {
ComponentUtil.getInstance().checkComponentExist(ComponentUtil.COMPONENT_TYPE_FTP);
CheckUtil.checkUrlInvalidThrow(url);
return DTargetFactory.getInstance()
.generateBuilderTarget(FtpBuilderTarget.class, url);
}
@@ -142,7 +136,6 @@ public class DownloadReceiver extends AbsReceiver {
@CheckResult
public FtpNormalTarget loadFtp(long taskId) {
ComponentUtil.getInstance().checkComponentExist(ComponentUtil.COMPONENT_TYPE_FTP);
CheckUtil.checkTaskId(taskId);
return DTargetFactory.getInstance()
.generateNormalTarget(FtpNormalTarget.class, taskId);
}
@@ -153,7 +146,6 @@ public class DownloadReceiver extends AbsReceiver {
@CheckResult
public FtpDirBuilderTarget loadFtpDir(@NonNull String dirUrl) {
ComponentUtil.getInstance().checkComponentExist(ComponentUtil.COMPONENT_TYPE_FTP);
CheckUtil.checkUrlInvalidThrow(dirUrl);
return DTargetFactory.getInstance().generateDirBuilderTarget(dirUrl);
}
@@ -166,7 +158,6 @@ public class DownloadReceiver extends AbsReceiver {
@CheckResult
public FtpDirNormalTarget loadFtpDir(long taskId) {
ComponentUtil.getInstance().checkComponentExist(ComponentUtil.COMPONENT_TYPE_FTP);
CheckUtil.checkTaskId(taskId);
return DTargetFactory.getInstance()
.generateNormalTarget(FtpDirNormalTarget.class, taskId);
}
@@ -244,7 +235,10 @@ public class DownloadReceiver extends AbsReceiver {
* @param taskId 任务实体唯一id
*/
public DownloadEntity getDownloadEntity(long taskId) {
CheckUtil.checkTaskId(taskId);
if (taskId < 0) {
ALog.e(TAG, "taskId错误");
return null;
}
return DbEntity.findFirst(DownloadEntity.class, "rowid=?", String.valueOf(taskId));
}
@@ -255,7 +249,9 @@ public class DownloadReceiver extends AbsReceiver {
* @return 如果url错误或查找不到数据则返回null
*/
public DownloadEntity getFirstDownloadEntity(String downloadUrl) {
CheckUtil.checkUrl(downloadUrl);
if (!CheckUtil.checkUrl(downloadUrl)) {
return null;
}
return DbEntity.findFirst(DownloadEntity.class, "url=? and isGroupChild='false'", downloadUrl);
}
@@ -265,7 +261,9 @@ public class DownloadReceiver extends AbsReceiver {
* @return 如果url错误或查找不到数据则返回null
*/
public List<DownloadEntity> getDownloadEntity(String downloadUrl) {
CheckUtil.checkUrl(downloadUrl);
if (!CheckUtil.checkUrl(downloadUrl)) {
return null;
}
return DbEntity.findDatas(DownloadEntity.class, "url=? and isGroupChild='false'", downloadUrl);
}
@@ -276,7 +274,9 @@ public class DownloadReceiver extends AbsReceiver {
* @return 如果实体不存在返回null
*/
public DownloadGroupEntity getGroupEntity(long taskId) {
CheckUtil.checkTaskId(taskId);
if (taskId < 0) {
ALog.e(TAG, "任务Id错误");
}
return DbDataHelper.getDGEntity(taskId);
}
@@ -287,7 +287,9 @@ public class DownloadReceiver extends AbsReceiver {
* @return 如果实体不存在返回null
*/
public DownloadGroupEntity getGroupEntity(List<String> urls) {
CheckUtil.checkDownloadUrls(urls);
if (CheckUtil.checkDownloadUrlsIsEmpty(urls)){
return null;
}
return DbDataHelper.getDGEntity(CommonUtil.getMd5Code(urls));
}
@@ -298,7 +300,9 @@ public class DownloadReceiver extends AbsReceiver {
* @return 如果实体不存在返回null
*/
public DownloadGroupEntity getFtpDirEntity(String url) {
CheckUtil.checkUrl(url);
if (!CheckUtil.checkUrl(url)) {
return null;
}
return DbDataHelper.getDGEntity(url);
}

View File

@@ -17,15 +17,17 @@ package com.arialyy.aria.core.download.target;
import android.text.TextUtils;
import androidx.annotation.CheckResult;
import com.arialyy.aria.core.common.AbsNormalTarget;
import com.arialyy.aria.core.common.ErrorCode;
import com.arialyy.aria.core.download.DGTaskWrapper;
import com.arialyy.aria.core.download.DownloadGroupEntity;
import com.arialyy.aria.core.task.DownloadGroupTask;
import com.arialyy.aria.core.event.ErrorEvent;
import com.arialyy.aria.core.inf.AbsTarget;
import com.arialyy.aria.core.inf.IConfigHandler;
import com.arialyy.aria.core.manager.SubTaskManager;
import com.arialyy.aria.core.manager.TaskWrapperManager;
import com.arialyy.aria.core.queue.DGroupTaskQueue;
import com.arialyy.aria.core.task.DownloadGroupTask;
import com.arialyy.aria.orm.DbEntity;
import com.arialyy.aria.util.CommonUtil;
@@ -44,9 +46,15 @@ abstract class AbsGroupConfigHandler<TARGET extends AbsTarget> implements IConfi
TAG = CommonUtil.getClassName(getClass());
mTarget = target;
mWrapper = TaskWrapperManager.getInstance().getGroupWrapper(DGTaskWrapper.class, taskId);
if (taskId != -1 && mWrapper.getEntity().getId() == -1) {
mWrapper.setErrorEvent(new ErrorEvent(taskId, String.format("没有id为%s的任务", taskId)));
// 判断已存在的任务
if (mTarget instanceof AbsNormalTarget) {
if (taskId < 0) {
mWrapper.setErrorEvent(new ErrorEvent(taskId, "任务id为空"));
} else if (mWrapper.getEntity().getId() < 0) {
mWrapper.setErrorEvent(new ErrorEvent(taskId, "任务信息不存在"));
}
}
mTarget.setTaskWrapper(mWrapper);
if (getEntity() != null) {
getTaskWrapper().setDirPathTemp(getEntity().getDirPath());

View File

@@ -16,6 +16,7 @@
package com.arialyy.aria.core.download.target;
import android.text.TextUtils;
import com.arialyy.aria.core.common.AbsNormalTarget;
import com.arialyy.aria.core.download.DTaskWrapper;
import com.arialyy.aria.core.download.DownloadEntity;
import com.arialyy.aria.core.event.ErrorEvent;
@@ -47,11 +48,16 @@ class DNormalConfigHandler<TARGET extends AbsTarget> implements IConfigHandler {
private void initTarget(long taskId) {
mWrapper = TaskWrapperManager.getInstance().getNormalTaskWrapper(DTaskWrapper.class, taskId);
if (taskId != -1 && mWrapper.getEntity().getId() == -1) {
mWrapper.setErrorEvent(new ErrorEvent(taskId, String.format("没有id为%s的任务", taskId)));
// 判断已存在的任务
if (mTarget instanceof AbsNormalTarget) {
if (taskId < 0) {
mWrapper.setErrorEvent(new ErrorEvent(taskId, "任务id为空"));
} else if (mWrapper.getEntity().getId() < 0) {
mWrapper.setErrorEvent(new ErrorEvent(taskId, "任务信息不存在"));
}
}
mEntity = mWrapper.getEntity();
mEntity = mWrapper.getEntity();
mTarget.setTaskWrapper(mWrapper);
if (mEntity != null) {
getWrapper().setTempFilePath(mEntity.getFilePath());

View File

@@ -39,7 +39,8 @@ public class FtpBuilderTarget extends AbsBuilderTarget<FtpBuilderTarget> {
/**
* 设置登陆、字符串编码、ftps等参数
*/
@CheckResult(suggest = Suggest.TASK_CONTROLLER)
@com.arialyy.aria.core.common.CheckResult(suggest = Suggest.TASK_CONTROLLER)
//@CheckResult(suggest = Suggest.TASK_CONTROLLER)
public FtpBuilderTarget option(FtpOption option) {
if (option == null) {
throw new NullPointerException("ftp 任务配置为空");

View File

@@ -84,7 +84,7 @@ class FailureTaskHandler<TASK extends ITask> {
private void retryTask(final TASK task) {
long interval = task.getTaskWrapper().getConfig().getReTryInterval();
final int num = task.getTaskWrapper().getConfig().getReTryNum();
final ITaskQueue queue = mSchedulers.getQueue(task);
final ITaskQueue queue = mSchedulers.getQueue(task.getTaskType());
mAriaManager.getAriaHandler().postDelayed(new Runnable() {
@Override public void run() {
AbsEntity entity = task.getTaskWrapper().getEntity();

View File

@@ -20,21 +20,21 @@ import android.os.Bundle;
import android.os.Message;
import com.arialyy.annotations.TaskEnum;
import com.arialyy.aria.core.AriaManager;
import com.arialyy.aria.core.task.DownloadGroupTask;
import com.arialyy.aria.core.task.DownloadTask;
import com.arialyy.aria.core.common.AbsEntity;
import com.arialyy.aria.core.common.AbsNormalEntity;
import com.arialyy.aria.core.task.AbsTask;
import com.arialyy.aria.core.group.GroupSendParams;
import com.arialyy.aria.core.inf.IEntity;
import com.arialyy.aria.core.listener.ISchedulers;
import com.arialyy.aria.core.task.ITask;
import com.arialyy.aria.core.inf.TaskSchedulerType;
import com.arialyy.aria.core.listener.ISchedulers;
import com.arialyy.aria.core.manager.TaskWrapperManager;
import com.arialyy.aria.core.queue.DGroupTaskQueue;
import com.arialyy.aria.core.queue.DTaskQueue;
import com.arialyy.aria.core.queue.ITaskQueue;
import com.arialyy.aria.core.queue.UTaskQueue;
import com.arialyy.aria.core.task.AbsTask;
import com.arialyy.aria.core.task.DownloadGroupTask;
import com.arialyy.aria.core.task.DownloadTask;
import com.arialyy.aria.core.task.ITask;
import com.arialyy.aria.core.task.UploadTask;
import com.arialyy.aria.util.ALog;
import com.arialyy.aria.util.NetUtils;
@@ -74,10 +74,9 @@ public class TaskSchedulers<TASK extends ITask> implements ISchedulers {
/**
* 通过任务类型获取任务队列
*
* @param curTask 当前接收到的的任务
* @param taskType 任务类型
*/
ITaskQueue getQueue(TASK curTask) {
int taskType = curTask.getTaskType();
ITaskQueue getQueue(int taskType) {
if (taskType == ITask.DOWNLOAD) {
return DTaskQueue.getInstance();
}
@@ -171,6 +170,11 @@ public class TaskSchedulers<TASK extends ITask> implements ISchedulers {
}
@Override public boolean handleMessage(Message msg) {
if (msg.what == CHECK_FAIL) {
handlePreFailTask(msg.arg1);
return true;
}
if (msg.arg1 == IS_SUB_TASK) {
return handleSubEvent(msg);
}
@@ -180,11 +184,11 @@ public class TaskSchedulers<TASK extends ITask> implements ISchedulers {
}
TASK task = (TASK) msg.obj;
if (task == null && msg.what != ISchedulers.CHECK_FAIL) {
if (task == null) {
ALog.e(TAG, "请传入下载任务");
return true;
}
handleNormalEvent(task, msg.what, msg.arg1);
handleNormalEvent(task, msg.what);
return true;
}
@@ -292,8 +296,8 @@ public class TaskSchedulers<TASK extends ITask> implements ISchedulers {
/**
* 处理普通任务和任务组的事件
*/
private void handleNormalEvent(TASK task, int what, int arg1) {
ITaskQueue queue = getQueue(task);
private void handleNormalEvent(TASK task, int what) {
ITaskQueue queue = getQueue(task.getTaskType());
switch (what) {
case STOP:
if (task.getState() == IEntity.STATE_WAIT) {
@@ -324,9 +328,6 @@ public class TaskSchedulers<TASK extends ITask> implements ISchedulers {
case FAIL:
handleFailTask(queue, task);
break;
case CHECK_FAIL:
handlePreFailTask(queue, arg1);
break;
}
if (what == FAIL || what == CHECK_FAIL) {
@@ -343,8 +344,13 @@ public class TaskSchedulers<TASK extends ITask> implements ISchedulers {
normalTaskCallback(what, task);
}
private void handlePreFailTask(ITaskQueue queue, int taskType) {
startNextTask(queue, TaskSchedulerType.TYPE_DEFAULT);
/**
* 处理what为{@link #CHECK_FAIL}信息错误的任务
*
* @param taskType 任务类型
*/
private void handlePreFailTask(int taskType) {
startNextTask(getQueue(taskType), TaskSchedulerType.TYPE_DEFAULT);
// 发送广播
boolean canSend = mAriaManager.getAppConfig().isUseBroadcast();

View File

@@ -16,6 +16,7 @@
package com.arialyy.aria.core.upload;
import android.text.TextUtils;
import com.arialyy.aria.core.common.ErrorCode;
import com.arialyy.aria.core.inf.ICheckEntityUtil;
import com.arialyy.aria.util.ALog;
import com.arialyy.aria.util.CheckUtil;
@@ -38,7 +39,7 @@ public class CheckUEntityUtil implements ICheckEntityUtil {
@Override
public boolean checkEntity() {
if (mWrapper.getErrorEvent() != null) {
ALog.e(TAG, mWrapper.getErrorEvent().errorMsg);
ALog.e(TAG, String.format("上传失败,%s", mWrapper.getErrorEvent().errorMsg));
return false;
}
@@ -77,7 +78,7 @@ public class CheckUEntityUtil implements ICheckEntityUtil {
if (TextUtils.isEmpty(url)) {
ALog.e(TAG, "上传失败url为null");
return false;
} else if (!CheckUtil.checkUrlNotThrow(url)) {
} else if (!CheckUtil.checkUrl(url)) {
ALog.e(TAG, "上传失败url【" + url + "】错误");
return false;
}

View File

@@ -70,7 +70,7 @@ public class UploadReceiver extends AbsReceiver {
@CheckResult
public HttpBuilderTarget load(@NonNull String filePath) {
ComponentUtil.getInstance().checkComponentExist(ComponentUtil.COMPONENT_TYPE_HTTP);
CheckUtil.checkUploadPath(filePath);
CheckUtil.checkUploadPathIsEmpty(filePath);
return UTargetFactory.getInstance()
.generateBuilderTarget(HttpBuilderTarget.class, filePath);
}
@@ -84,7 +84,6 @@ public class UploadReceiver extends AbsReceiver {
@CheckResult
public HttpNormalTarget load(long taskId) {
ComponentUtil.getInstance().checkComponentExist(ComponentUtil.COMPONENT_TYPE_HTTP);
CheckUtil.checkTaskId(taskId);
return UTargetFactory.getInstance()
.generateNormalTarget(HttpNormalTarget.class, taskId);
}
@@ -97,7 +96,7 @@ public class UploadReceiver extends AbsReceiver {
@CheckResult
public FtpBuilderTarget loadFtp(@NonNull String filePath) {
ComponentUtil.getInstance().checkComponentExist(ComponentUtil.COMPONENT_TYPE_FTP);
CheckUtil.checkUploadPath(filePath);
CheckUtil.checkUploadPathIsEmpty(filePath);
return UTargetFactory.getInstance()
.generateBuilderTarget(FtpBuilderTarget.class, filePath);
}
@@ -111,7 +110,6 @@ public class UploadReceiver extends AbsReceiver {
@CheckResult
public FtpNormalTarget loadFtp(long taskId) {
ComponentUtil.getInstance().checkComponentExist(ComponentUtil.COMPONENT_TYPE_FTP);
CheckUtil.checkTaskId(taskId);
return UTargetFactory.getInstance()
.generateNormalTarget(FtpNormalTarget.class, taskId);
}

View File

@@ -15,19 +15,18 @@
*/
package com.arialyy.aria.core.upload.target;
import com.arialyy.aria.core.processor.IFtpUploadInterceptor;
import com.arialyy.aria.core.common.AbsEntity;
import com.arialyy.aria.core.common.AbsNormalTarget;
import com.arialyy.aria.core.common.ErrorCode;
import com.arialyy.aria.core.event.ErrorEvent;
import com.arialyy.aria.core.inf.AbsTarget;
import com.arialyy.aria.core.inf.IConfigHandler;
import com.arialyy.aria.core.inf.IOptionConstant;
import com.arialyy.aria.core.manager.TaskWrapperManager;
import com.arialyy.aria.core.queue.UTaskQueue;
import com.arialyy.aria.core.task.UploadTask;
import com.arialyy.aria.core.upload.UTaskWrapper;
import com.arialyy.aria.core.upload.UploadEntity;
import com.arialyy.aria.core.task.UploadTask;
import com.arialyy.aria.orm.DbEntity;
import com.arialyy.aria.util.CommonUtil;
import java.io.File;
/**
@@ -35,7 +34,6 @@ import java.io.File;
* 普通上传任务通用功能处理
*/
class UNormalConfigHandler<TARGET extends AbsTarget> implements IConfigHandler {
private String TAG = "UNormalDelegate";
private UploadEntity mEntity;
private TARGET mTarget;
private UTaskWrapper mWrapper;
@@ -47,9 +45,15 @@ class UNormalConfigHandler<TARGET extends AbsTarget> implements IConfigHandler {
private void initTarget(long taskId) {
mWrapper = TaskWrapperManager.getInstance().getNormalTaskWrapper(UTaskWrapper.class, taskId);
if (taskId != -1 && mWrapper.getEntity().getId() == -1) {
mWrapper.setErrorEvent(new ErrorEvent(taskId, String.format("没有id为%s的任务", taskId)));
// 判断已存在的任务
if (mTarget instanceof AbsNormalTarget) {
if (taskId < 0) {
mWrapper.setErrorEvent(new ErrorEvent(taskId, "任务id为空"));
} else if (mWrapper.getEntity().getId() < 0) {
mWrapper.setErrorEvent(new ErrorEvent(taskId, "任务信息不存在"));
}
}
mEntity = mWrapper.getEntity();
mTarget.setTaskWrapper(mWrapper);
getTaskWrapper().setTempUrl(mEntity.getUrl());