移除检查任务信息主动抛出的异常
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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 任务配置为空");
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
Reference in New Issue
Block a user