fix bug https://github.com/AriaLyy/Aria/issues/542 fix bug https://github.com/AriaLyy/Aria/issues/547 修复下载失败时,中断重试无效的问题 增加忽略权限检查的api,`ignoreCheckPermissions()`
This commit is contained in:
@@ -23,8 +23,6 @@ import android.app.Dialog;
|
||||
import android.content.Context;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.widget.PopupWindow;
|
||||
import com.arialyy.aria.core.command.CommandManager;
|
||||
import com.arialyy.aria.core.common.QueueMod;
|
||||
@@ -76,7 +74,6 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
*/
|
||||
private Map<String, List<String>> mSubClass = new ConcurrentHashMap<>();
|
||||
private static Context APP;
|
||||
private Handler mAriaHandler;
|
||||
private DelegateWrapper mDbWrapper;
|
||||
private AriaConfig mConfig;
|
||||
|
||||
@@ -168,13 +165,6 @@ import java.util.concurrent.ConcurrentHashMap;
|
||||
}
|
||||
}
|
||||
|
||||
public synchronized Handler getAriaHandler() {
|
||||
if (mAriaHandler == null) {
|
||||
mAriaHandler = new Handler(Looper.getMainLooper());
|
||||
}
|
||||
return mAriaHandler;
|
||||
}
|
||||
|
||||
public Map<String, AbsReceiver> getReceiver() {
|
||||
return mReceivers;
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.arialyy.aria.core.command;
|
||||
|
||||
import com.arialyy.aria.core.AriaConfig;
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.task.DownloadTask;
|
||||
import com.arialyy.aria.core.wrapper.AbsTaskWrapper;
|
||||
@@ -41,7 +42,7 @@ final class HighestPriorityCmd<T extends AbsTaskWrapper> extends AbsNormalCmd<T>
|
||||
|
||||
@Override public void executeCmd() {
|
||||
if (!canExeCmd) return;
|
||||
if (!NetUtils.isConnected(AriaManager.getInstance().getAPP())){
|
||||
if (!NetUtils.isConnected(AriaConfig.getInstance().getAPP())){
|
||||
ALog.e(TAG, "启动任务失败,网络未连接");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.arialyy.aria.core.command;
|
||||
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.AriaConfig;
|
||||
import com.arialyy.aria.core.inf.IEntity;
|
||||
import com.arialyy.aria.core.wrapper.AbsTaskWrapper;
|
||||
import com.arialyy.aria.util.ALog;
|
||||
@@ -36,7 +36,7 @@ final class ResumeAllCmd<T extends AbsTaskWrapper> extends AbsNormalCmd<T> {
|
||||
}
|
||||
|
||||
@Override public void executeCmd() {
|
||||
if (!NetUtils.isConnected(AriaManager.getInstance().getAPP())) {
|
||||
if (!NetUtils.isConnected(AriaConfig.getInstance().getAPP())) {
|
||||
ALog.w(TAG, "恢复任务失败,网络未连接");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
|
||||
package com.arialyy.aria.core.command;
|
||||
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.AriaConfig;
|
||||
import com.arialyy.aria.core.common.QueueMod;
|
||||
import com.arialyy.aria.core.inf.IEntity;
|
||||
import com.arialyy.aria.core.task.AbsTask;
|
||||
@@ -37,6 +37,7 @@ final public class StartCmd<T extends AbsTaskWrapper> extends AbsNormalCmd<T> {
|
||||
|
||||
/**
|
||||
* 立即执行任务
|
||||
*
|
||||
* @param newStart true 立即执行任务,无论执行队列是否满了
|
||||
*/
|
||||
public void setNewStart(boolean newStart) {
|
||||
@@ -45,17 +46,17 @@ final public class StartCmd<T extends AbsTaskWrapper> extends AbsNormalCmd<T> {
|
||||
|
||||
@Override public void executeCmd() {
|
||||
if (!canExeCmd) return;
|
||||
if (!NetUtils.isConnected(AriaManager.getInstance().getAPP())) {
|
||||
if (!NetUtils.isConnected(AriaConfig.getInstance().getAPP())) {
|
||||
ALog.e(TAG, "启动任务失败,网络未连接");
|
||||
return;
|
||||
}
|
||||
String mod;
|
||||
int maxTaskNum = mQueue.getMaxTaskNum();
|
||||
AriaManager manager = AriaManager.getInstance();
|
||||
AriaConfig config = AriaConfig.getInstance();
|
||||
if (isDownloadCmd) {
|
||||
mod = manager.getDownloadConfig().getQueueMod();
|
||||
mod = config.getDConfig().getQueueMod();
|
||||
} else {
|
||||
mod = manager.getUploadConfig().getQueueMod();
|
||||
mod = config.getUConfig().getQueueMod();
|
||||
}
|
||||
|
||||
AbsTask task = getTask();
|
||||
@@ -81,9 +82,9 @@ final public class StartCmd<T extends AbsTaskWrapper> extends AbsNormalCmd<T> {
|
||||
startTask();
|
||||
}
|
||||
} else {
|
||||
if (newStart){
|
||||
if (newStart) {
|
||||
startTask();
|
||||
}else {
|
||||
} else {
|
||||
sendWaitState(task);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
*/
|
||||
package com.arialyy.aria.core.common;
|
||||
|
||||
import com.arialyy.aria.core.common.controller.IStartFeature;
|
||||
import com.arialyy.aria.core.common.controller.BuilderController;
|
||||
import com.arialyy.aria.core.common.controller.IStartFeature;
|
||||
import com.arialyy.aria.core.inf.AbsTarget;
|
||||
|
||||
/**
|
||||
@@ -34,6 +34,14 @@ public abstract class AbsBuilderTarget<TARGET extends AbsBuilderTarget> extends
|
||||
return mStartController;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否忽略权限检查
|
||||
*/
|
||||
public TARGET ignoreCheckPermissions() {
|
||||
getController().ignoreCheckPermissions();
|
||||
return (TARGET) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加任务
|
||||
*
|
||||
|
||||
@@ -31,6 +31,14 @@ import com.arialyy.aria.util.RecordUtil;
|
||||
public abstract class AbsNormalTarget<TARGET extends AbsNormalTarget> extends AbsTarget<TARGET>
|
||||
implements INormalFeature {
|
||||
|
||||
/**
|
||||
* 是否忽略权限检查
|
||||
*/
|
||||
public TARGET ignoreCheckPermissions() {
|
||||
getController().ignoreCheckPermissions();
|
||||
return (TARGET) this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 任务是否在执行
|
||||
*
|
||||
|
||||
@@ -19,21 +19,21 @@ import android.Manifest;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.AriaConfig;
|
||||
import com.arialyy.aria.core.common.AbsEntity;
|
||||
import com.arialyy.aria.core.download.CheckDEntityUtil;
|
||||
import com.arialyy.aria.core.download.CheckDGEntityUtil;
|
||||
import com.arialyy.aria.core.download.CheckFtpDirEntityUtil;
|
||||
import com.arialyy.aria.core.download.DGTaskWrapper;
|
||||
import com.arialyy.aria.core.download.DTaskWrapper;
|
||||
import com.arialyy.aria.core.common.AbsEntity;
|
||||
import com.arialyy.aria.core.wrapper.AbsTaskWrapper;
|
||||
import com.arialyy.aria.core.inf.ICheckEntityUtil;
|
||||
import com.arialyy.aria.core.task.ITask;
|
||||
import com.arialyy.aria.core.wrapper.ITaskWrapper;
|
||||
import com.arialyy.aria.core.listener.ISchedulers;
|
||||
import com.arialyy.aria.core.scheduler.TaskSchedulers;
|
||||
import com.arialyy.aria.core.task.ITask;
|
||||
import com.arialyy.aria.core.upload.CheckUEntityUtil;
|
||||
import com.arialyy.aria.core.upload.UTaskWrapper;
|
||||
import com.arialyy.aria.core.wrapper.AbsTaskWrapper;
|
||||
import com.arialyy.aria.core.wrapper.ITaskWrapper;
|
||||
import com.arialyy.aria.util.ALog;
|
||||
import com.arialyy.aria.util.CommonUtil;
|
||||
import java.lang.reflect.Constructor;
|
||||
@@ -46,6 +46,10 @@ public abstract class FeatureController {
|
||||
private final String TAG;
|
||||
|
||||
private AbsTaskWrapper mTaskWrapper;
|
||||
/**
|
||||
* 是否忽略权限检查 true 忽略权限检查
|
||||
*/
|
||||
private boolean ignoreCheckPermissions = false;
|
||||
|
||||
FeatureController(AbsTaskWrapper wrapper) {
|
||||
mTaskWrapper = wrapper;
|
||||
@@ -87,6 +91,13 @@ public abstract class FeatureController {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否忽略权限检查
|
||||
*/
|
||||
public void ignoreCheckPermissions() {
|
||||
this.ignoreCheckPermissions = true;
|
||||
}
|
||||
|
||||
protected AbsTaskWrapper getTaskWrapper() {
|
||||
return mTaskWrapper;
|
||||
}
|
||||
@@ -111,7 +122,7 @@ public abstract class FeatureController {
|
||||
* 如果检查实体失败,将错误回调
|
||||
*/
|
||||
boolean checkConfig() {
|
||||
if (!checkPermission()) {
|
||||
if (!ignoreCheckPermissions && !checkPermission()) {
|
||||
return false;
|
||||
}
|
||||
boolean b = checkEntity();
|
||||
@@ -134,21 +145,21 @@ public abstract class FeatureController {
|
||||
*/
|
||||
private boolean checkPermission() {
|
||||
|
||||
if (AriaManager.getInstance()
|
||||
if (AriaConfig.getInstance()
|
||||
.getAPP()
|
||||
.checkCallingOrSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
ALog.e(TAG, "启动失败,缺少权限:Manifest.permission.WRITE_EXTERNAL_STORAGE");
|
||||
return false;
|
||||
}
|
||||
if (AriaManager.getInstance()
|
||||
if (AriaConfig.getInstance()
|
||||
.getAPP()
|
||||
.checkCallingOrSelfPermission(Manifest.permission.INTERNET)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
ALog.e(TAG, "启动失败,缺少权限:Manifest.permission.INTERNET");
|
||||
return false;
|
||||
}
|
||||
if (AriaManager.getInstance()
|
||||
if (AriaConfig.getInstance()
|
||||
.getAPP()
|
||||
.checkCallingOrSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
|
||||
@@ -23,6 +23,7 @@ import com.arialyy.aria.core.wrapper.ITaskWrapper;
|
||||
import com.arialyy.aria.util.ALog;
|
||||
import com.arialyy.aria.util.CheckUtil;
|
||||
import com.arialyy.aria.util.CommonUtil;
|
||||
import com.arialyy.aria.util.FileUtil;
|
||||
import com.arialyy.aria.util.RecordUtil;
|
||||
import java.io.File;
|
||||
|
||||
@@ -65,8 +66,7 @@ public class CheckDEntityUtil implements ICheckEntityUtil {
|
||||
File file = new File(mWrapper.getTempFilePath());
|
||||
Object bw = mWrapper.getM3U8Params().getParam(IOptionConstant.bandWidth);
|
||||
int bandWidth = bw == null ? 0 : (int) bw;
|
||||
// 缓存文件夹格式:问文件夹/.文件名_码率
|
||||
String cacheDir = String.format("%s/.%s_%s", file.getParent(), file.getName(), bandWidth);
|
||||
String cacheDir = FileUtil.getTsCacheDir(file.getPath(), bandWidth);
|
||||
|
||||
mWrapper.getM3U8Params().setParams(IOptionConstant.cacheDir, cacheDir);
|
||||
M3U8Entity m3U8Entity = mEntity.getM3U8Entity();
|
||||
|
||||
@@ -18,6 +18,7 @@ package com.arialyy.aria.core.download;
|
||||
import androidx.annotation.CheckResult;
|
||||
import androidx.annotation.NonNull;
|
||||
import com.arialyy.annotations.TaskEnum;
|
||||
import com.arialyy.aria.core.AriaConfig;
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.command.CancelAllCmd;
|
||||
import com.arialyy.aria.core.command.CmdHelper;
|
||||
@@ -64,7 +65,7 @@ public class DownloadReceiver extends AbsReceiver {
|
||||
*/
|
||||
@Deprecated
|
||||
public DownloadReceiver setMaxSpeed(int maxSpeed) {
|
||||
AriaManager.getInstance().getDownloadConfig().setMaxSpeed(maxSpeed);
|
||||
AriaConfig.getInstance().getDConfig().setMaxSpeed(maxSpeed);
|
||||
return this;
|
||||
}
|
||||
|
||||
@@ -287,7 +288,7 @@ public class DownloadReceiver extends AbsReceiver {
|
||||
* @return 如果实体不存在,返回null
|
||||
*/
|
||||
public DownloadGroupEntity getGroupEntity(List<String> urls) {
|
||||
if (CheckUtil.checkDownloadUrlsIsEmpty(urls)){
|
||||
if (CheckUtil.checkDownloadUrlsIsEmpty(urls)) {
|
||||
return null;
|
||||
}
|
||||
return DbDataHelper.getDGEntity(CommonUtil.getMd5Code(urls));
|
||||
|
||||
@@ -16,13 +16,13 @@
|
||||
|
||||
package com.arialyy.aria.core.queue;
|
||||
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.AriaConfig;
|
||||
import com.arialyy.aria.core.download.DGTaskWrapper;
|
||||
import com.arialyy.aria.core.task.DownloadGroupTask;
|
||||
import com.arialyy.aria.core.event.DGMaxNumEvent;
|
||||
import com.arialyy.aria.core.event.Event;
|
||||
import com.arialyy.aria.core.event.EventMsgUtil;
|
||||
import com.arialyy.aria.core.scheduler.TaskSchedulers;
|
||||
import com.arialyy.aria.core.task.DownloadGroupTask;
|
||||
import com.arialyy.aria.util.ALog;
|
||||
|
||||
/**
|
||||
@@ -57,7 +57,7 @@ public class DGroupTaskQueue
|
||||
}
|
||||
|
||||
@Override public int getMaxTaskNum() {
|
||||
return AriaManager.getInstance().getDGroupConfig().getMaxTaskNum();
|
||||
return AriaConfig.getInstance().getDConfig().getMaxTaskNum();
|
||||
}
|
||||
|
||||
@Override public DownloadGroupTask createTask(DGTaskWrapper wrapper) {
|
||||
@@ -74,6 +74,6 @@ public class DGroupTaskQueue
|
||||
}
|
||||
|
||||
@Override public int getOldMaxNum() {
|
||||
return AriaManager.getInstance().getDGroupConfig().oldMaxTaskNum;
|
||||
return AriaConfig.getInstance().getDGConfig().oldMaxTaskNum;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,14 +16,14 @@
|
||||
|
||||
package com.arialyy.aria.core.queue;
|
||||
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.AriaConfig;
|
||||
import com.arialyy.aria.core.download.DTaskWrapper;
|
||||
import com.arialyy.aria.core.task.DownloadTask;
|
||||
import com.arialyy.aria.core.event.DMaxNumEvent;
|
||||
import com.arialyy.aria.core.event.Event;
|
||||
import com.arialyy.aria.core.event.EventMsgUtil;
|
||||
import com.arialyy.aria.core.inf.TaskSchedulerType;
|
||||
import com.arialyy.aria.core.scheduler.TaskSchedulers;
|
||||
import com.arialyy.aria.core.task.DownloadTask;
|
||||
import com.arialyy.aria.util.ALog;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.Map;
|
||||
@@ -60,7 +60,7 @@ public class DTaskQueue extends AbsTaskQueue<DownloadTask, DTaskWrapper> {
|
||||
}
|
||||
|
||||
@Override public int getOldMaxNum() {
|
||||
return AriaManager.getInstance().getDownloadConfig().oldMaxTaskNum;
|
||||
return AriaConfig.getInstance().getDConfig().oldMaxTaskNum;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -81,7 +81,7 @@ public class DTaskQueue extends AbsTaskQueue<DownloadTask, DTaskWrapper> {
|
||||
}
|
||||
}
|
||||
}
|
||||
int maxSize = AriaManager.getInstance().getDownloadConfig().getMaxTaskNum();
|
||||
int maxSize = AriaConfig.getInstance().getDConfig().getMaxTaskNum();
|
||||
int currentSize = mExecutePool.size();
|
||||
if (currentSize == 0 || currentSize < maxSize) {
|
||||
startTask(task);
|
||||
@@ -126,6 +126,6 @@ public class DTaskQueue extends AbsTaskQueue<DownloadTask, DTaskWrapper> {
|
||||
}
|
||||
|
||||
@Override public int getMaxTaskNum() {
|
||||
return AriaManager.getInstance().getDownloadConfig().getMaxTaskNum();
|
||||
return AriaConfig.getInstance().getDConfig().getMaxTaskNum();
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.arialyy.aria.core.queue;
|
||||
|
||||
import com.arialyy.aria.core.AriaConfig;
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.event.Event;
|
||||
import com.arialyy.aria.core.event.EventMsgUtil;
|
||||
@@ -55,11 +56,11 @@ public class UTaskQueue extends AbsTaskQueue<UploadTask, UTaskWrapper> {
|
||||
}
|
||||
|
||||
@Override public int getOldMaxNum() {
|
||||
return AriaManager.getInstance().getUploadConfig().oldMaxTaskNum;
|
||||
return AriaConfig.getInstance().getUConfig().oldMaxTaskNum;
|
||||
}
|
||||
|
||||
@Override public int getMaxTaskNum() {
|
||||
return AriaManager.getInstance().getUploadConfig().getMaxTaskNum();
|
||||
return AriaConfig.getInstance().getUConfig().getMaxTaskNum();
|
||||
}
|
||||
|
||||
@Override public UploadTask createTask(UTaskWrapper wrapper) {
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.arialyy.aria.core.queue.pool;
|
||||
|
||||
import com.arialyy.aria.core.AriaConfig;
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.task.AbsTask;
|
||||
|
||||
@@ -26,6 +27,6 @@ class DGLoadExecutePool<TASK extends AbsTask> extends DLoadExecutePool<TASK> {
|
||||
private final String TAG = "DGLoadExecutePool";
|
||||
|
||||
@Override protected int getMaxSize() {
|
||||
return AriaManager.getInstance().getDGroupConfig().getMaxTaskNum();
|
||||
return AriaConfig.getInstance().getDGConfig().getMaxTaskNum();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.arialyy.aria.core.queue.pool;
|
||||
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.AriaConfig;
|
||||
import com.arialyy.aria.core.task.AbsTask;
|
||||
import com.arialyy.aria.util.ALog;
|
||||
import com.arialyy.aria.util.CommonUtil;
|
||||
@@ -30,7 +30,7 @@ class DLoadExecutePool<TASK extends AbsTask> extends BaseExecutePool<TASK> {
|
||||
private final String TAG = "DownloadExecutePool";
|
||||
|
||||
@Override protected int getMaxSize() {
|
||||
return AriaManager.getInstance().getDownloadConfig().getMaxTaskNum();
|
||||
return AriaConfig.getInstance().getDConfig().getMaxTaskNum();
|
||||
}
|
||||
|
||||
@Override public boolean putTask(TASK task) {
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.arialyy.aria.core.queue.pool;
|
||||
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.AriaConfig;
|
||||
import com.arialyy.aria.core.task.AbsTask;
|
||||
|
||||
/**
|
||||
@@ -23,6 +23,6 @@ import com.arialyy.aria.core.task.AbsTask;
|
||||
*/
|
||||
public class UploadExecutePool<TASK extends AbsTask> extends BaseExecutePool<TASK> {
|
||||
@Override protected int getMaxSize() {
|
||||
return AriaManager.getInstance().getUploadConfig().getMaxTaskNum();
|
||||
return AriaConfig.getInstance().getUConfig().getMaxTaskNum();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -15,11 +15,11 @@
|
||||
*/
|
||||
package com.arialyy.aria.core.scheduler;
|
||||
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.AriaConfig;
|
||||
import com.arialyy.aria.core.common.AbsEntity;
|
||||
import com.arialyy.aria.core.task.ITask;
|
||||
import com.arialyy.aria.core.manager.TaskWrapperManager;
|
||||
import com.arialyy.aria.core.queue.ITaskQueue;
|
||||
import com.arialyy.aria.core.task.ITask;
|
||||
import com.arialyy.aria.util.ALog;
|
||||
import com.arialyy.aria.util.CommonUtil;
|
||||
import java.util.ArrayList;
|
||||
@@ -42,7 +42,6 @@ class FailureTaskHandler<TASK extends ITask> {
|
||||
private TaskSchedulers mSchedulers;
|
||||
private final ReentrantLock LOCK = new ReentrantLock();
|
||||
private Condition mCondition = LOCK.newCondition();
|
||||
private AriaManager mAriaManager;
|
||||
|
||||
static FailureTaskHandler init(TaskSchedulers schedulers) {
|
||||
if (INSTANCE == null) {
|
||||
@@ -57,7 +56,6 @@ class FailureTaskHandler<TASK extends ITask> {
|
||||
|
||||
private FailureTaskHandler(TaskSchedulers schedulers) {
|
||||
mSchedulers = schedulers;
|
||||
mAriaManager = AriaManager.getInstance();
|
||||
new Thread(new Runnable() {
|
||||
@Override public void run() {
|
||||
while (true) {
|
||||
@@ -82,35 +80,46 @@ 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.getTaskType());
|
||||
mAriaManager.getAriaHandler().postDelayed(new Runnable() {
|
||||
@Override public void run() {
|
||||
AbsEntity entity = task.getTaskWrapper().getEntity();
|
||||
if (entity.getFailNum() <= num) {
|
||||
ALog.d(TAG, String.format("任务【%s】开始重试", task.getTaskName()));
|
||||
queue.reTryStart(task);
|
||||
} else {
|
||||
queue.removeTaskFormQueue(task.getKey());
|
||||
mSchedulers.startNextTask(queue, task.getSchedulerType());
|
||||
TaskWrapperManager.getInstance().removeTaskWrapper(task.getTaskWrapper());
|
||||
}
|
||||
mExeQueue.remove(task);
|
||||
int index = mHashList.indexOf(task.hashCode());
|
||||
if (index != -1) {
|
||||
mHashList.remove(index);
|
||||
}
|
||||
if (LOCK.isLocked()) {
|
||||
try {
|
||||
LOCK.lock();
|
||||
mCondition.signalAll();
|
||||
} finally {
|
||||
LOCK.unlock();
|
||||
if (task.isNeedRetry()){
|
||||
long interval = task.getTaskWrapper().getConfig().getReTryInterval();
|
||||
final int num = task.getTaskWrapper().getConfig().getReTryNum();
|
||||
AriaConfig.getInstance().getAriaHandler().postDelayed(new Runnable() {
|
||||
@Override public void run() {
|
||||
AbsEntity entity = task.getTaskWrapper().getEntity();
|
||||
if (entity.getFailNum() <= num) {
|
||||
ALog.d(TAG, String.format("任务【%s】开始重试", task.getTaskName()));
|
||||
queue.reTryStart(task);
|
||||
} else {
|
||||
queue.removeTaskFormQueue(task.getKey());
|
||||
mSchedulers.startNextTask(queue, task.getSchedulerType());
|
||||
TaskWrapperManager.getInstance().removeTaskWrapper(task.getTaskWrapper());
|
||||
}
|
||||
next(task);
|
||||
}
|
||||
}, interval);
|
||||
}else {
|
||||
queue.removeTaskFormQueue(task.getKey());
|
||||
mSchedulers.startNextTask(queue, task.getSchedulerType());
|
||||
TaskWrapperManager.getInstance().removeTaskWrapper(task.getTaskWrapper());
|
||||
next(task);
|
||||
}
|
||||
}
|
||||
|
||||
private void next(TASK task){
|
||||
mExeQueue.remove(task);
|
||||
int index = mHashList.indexOf(task.hashCode());
|
||||
if (index != -1) {
|
||||
mHashList.remove(index);
|
||||
}
|
||||
if (LOCK.isLocked()) {
|
||||
try {
|
||||
LOCK.lock();
|
||||
mCondition.signalAll();
|
||||
} finally {
|
||||
LOCK.unlock();
|
||||
}
|
||||
}, interval);
|
||||
}
|
||||
}
|
||||
|
||||
void offer(TASK task) {
|
||||
|
||||
@@ -19,7 +19,7 @@ import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.os.Message;
|
||||
import com.arialyy.annotations.TaskEnum;
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.AriaConfig;
|
||||
import com.arialyy.aria.core.common.AbsEntity;
|
||||
import com.arialyy.aria.core.common.AbsNormalEntity;
|
||||
import com.arialyy.aria.core.group.GroupSendParams;
|
||||
@@ -53,10 +53,10 @@ public class TaskSchedulers<TASK extends ITask> implements ISchedulers {
|
||||
private static FailureTaskHandler mFailureTaskHandler;
|
||||
|
||||
private Map<String, Map<TaskEnum, ISchedulerListener>> mObservers = new ConcurrentHashMap<>();
|
||||
private AriaManager mAriaManager;
|
||||
private AriaConfig mAriaConfig;
|
||||
|
||||
private TaskSchedulers() {
|
||||
mAriaManager = AriaManager.getInstance();
|
||||
mAriaConfig = AriaConfig.getInstance();
|
||||
}
|
||||
|
||||
public static TaskSchedulers getInstance() {
|
||||
@@ -230,11 +230,11 @@ public class TaskSchedulers<TASK extends ITask> implements ISchedulers {
|
||||
}
|
||||
}
|
||||
|
||||
boolean canSend = mAriaManager.getAppConfig().isUseBroadcast();
|
||||
boolean canSend = mAriaConfig.getAConfig().isUseBroadcast();
|
||||
if (canSend) {
|
||||
Intent intent = new Intent(ISchedulers.ARIA_TASK_INFO_ACTION);
|
||||
intent.putExtras(data);
|
||||
mAriaManager.getAPP().sendBroadcast(intent);
|
||||
mAriaConfig.getAPP().sendBroadcast(intent);
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -284,9 +284,9 @@ public class TaskSchedulers<TASK extends ITask> implements ISchedulers {
|
||||
}
|
||||
}
|
||||
|
||||
boolean canSend = mAriaManager.getAppConfig().isUseBroadcast();
|
||||
boolean canSend = mAriaConfig.getAConfig().isUseBroadcast();
|
||||
if (canSend) {
|
||||
mAriaManager.getAPP().sendBroadcast(
|
||||
mAriaConfig.getAPP().sendBroadcast(
|
||||
createData(msg.what, ITask.DOWNLOAD_GROUP_SUB, params.entity));
|
||||
}
|
||||
|
||||
@@ -353,13 +353,13 @@ public class TaskSchedulers<TASK extends ITask> implements ISchedulers {
|
||||
startNextTask(getQueue(taskType), TaskSchedulerType.TYPE_DEFAULT);
|
||||
|
||||
// 发送广播
|
||||
boolean canSend = mAriaManager.getAppConfig().isUseBroadcast();
|
||||
boolean canSend = mAriaConfig.getAConfig().isUseBroadcast();
|
||||
if (canSend) {
|
||||
Intent intent = new Intent(ISchedulers.ARIA_TASK_INFO_ACTION);
|
||||
Bundle b = new Bundle();
|
||||
b.putInt(ISchedulers.TASK_TYPE, taskType);
|
||||
b.putInt(ISchedulers.TASK_STATE, ISchedulers.FAIL);
|
||||
mAriaManager.getAPP().sendBroadcast(intent);
|
||||
mAriaConfig.getAPP().sendBroadcast(intent);
|
||||
}
|
||||
|
||||
// 处理回调
|
||||
@@ -470,16 +470,16 @@ public class TaskSchedulers<TASK extends ITask> implements ISchedulers {
|
||||
* 发送普通任务的广播
|
||||
*/
|
||||
private void sendNormalBroadcast(int state, TASK task) {
|
||||
boolean canSend = mAriaManager.getAppConfig().isUseBroadcast();
|
||||
boolean canSend = mAriaConfig.getAConfig().isUseBroadcast();
|
||||
if (!canSend) {
|
||||
return;
|
||||
}
|
||||
int type = task.getTaskType();
|
||||
if (type == ITask.DOWNLOAD || type == ITask.DOWNLOAD_GROUP) {
|
||||
mAriaManager.getAPP().sendBroadcast(
|
||||
mAriaConfig.getAPP().sendBroadcast(
|
||||
createData(state, type, task.getTaskWrapper().getEntity()));
|
||||
} else if (type == ITask.UPLOAD) {
|
||||
mAriaManager.getAPP().sendBroadcast(
|
||||
mAriaConfig.getAPP().sendBroadcast(
|
||||
createData(state, type, task.getTaskWrapper().getEntity()));
|
||||
} else {
|
||||
ALog.w(TAG, "发送广播失败,没有对应的任务");
|
||||
@@ -519,9 +519,9 @@ public class TaskSchedulers<TASK extends ITask> implements ISchedulers {
|
||||
}
|
||||
|
||||
int num = task.getTaskWrapper().getConfig().getReTryNum();
|
||||
boolean isNotNetRetry = mAriaManager.getAppConfig().isNotNetRetry();
|
||||
boolean isNotNetRetry = mAriaConfig.getAConfig().isNotNetRetry();
|
||||
|
||||
if ((!NetUtils.isConnected(mAriaManager.getAPP()) && !isNotNetRetry)
|
||||
if ((!NetUtils.isConnected(mAriaConfig.getAPP()) && !isNotNetRetry)
|
||||
|| task.getTaskWrapper().getEntity().getFailNum() > num) {
|
||||
queue.removeTaskFormQueue(task.getKey());
|
||||
startNextTask(queue, task.getSchedulerType());
|
||||
|
||||
@@ -19,6 +19,7 @@ import android.text.TextUtils;
|
||||
import androidx.annotation.CheckResult;
|
||||
import androidx.annotation.NonNull;
|
||||
import com.arialyy.annotations.TaskEnum;
|
||||
import com.arialyy.aria.core.AriaConfig;
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.command.CancelAllCmd;
|
||||
import com.arialyy.aria.core.command.CmdHelper;
|
||||
@@ -58,7 +59,7 @@ public class UploadReceiver extends AbsReceiver {
|
||||
*/
|
||||
@Deprecated
|
||||
public UploadReceiver setMaxSpeed(int maxSpeed) {
|
||||
AriaManager.getInstance().getUploadConfig().setMaxSpeed(maxSpeed);
|
||||
AriaConfig.getInstance().getUConfig().setMaxSpeed(maxSpeed);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user