增加获取执行中的任务api

增加获取剩余时间的api
修复重构loader导致的m3u8问题
This commit is contained in:
laoyuyu
2020-01-07 21:56:35 +08:00
parent b1a2f232fa
commit 432ae1c145
37 changed files with 495 additions and 128 deletions

View File

@@ -36,6 +36,8 @@ import com.arialyy.aria.core.download.target.HttpNormalTarget;
import com.arialyy.aria.core.event.EventMsgUtil;
import com.arialyy.aria.core.inf.AbsReceiver;
import com.arialyy.aria.core.inf.ReceiverType;
import com.arialyy.aria.core.queue.DGroupTaskQueue;
import com.arialyy.aria.core.queue.DTaskQueue;
import com.arialyy.aria.core.scheduler.TaskSchedulers;
import com.arialyy.aria.core.task.ITask;
import com.arialyy.aria.orm.DbEntity;
@@ -302,6 +304,24 @@ public class DownloadReceiver extends AbsReceiver {
return DbDataHelper.getDGEntityByHash(url);
}
/**
* 获取执行中的任务
*
* @return 没有执行中的任务返回null
*/
public List<DownloadEntity> getDRunningTask() {
return DTaskQueue.getInstance().getRunningTask(DownloadEntity.class);
}
/**
* 获取执行中的任务
*
* @return 没有执行中的任务返回null
*/
public List<DownloadGroupEntity> getDGRunningTask() {
return DGroupTaskQueue.getInstance().getRunningTask(DownloadGroupEntity.class);
}
/**
* 下载任务是否存在
*

View File

@@ -17,8 +17,10 @@ package com.arialyy.aria.core.download.target;
import com.arialyy.aria.core.common.AbsNormalTarget;
import com.arialyy.aria.core.common.HttpOption;
import com.arialyy.aria.core.download.DGTaskWrapper;
import com.arialyy.aria.core.manager.SubTaskManager;
import com.arialyy.aria.core.wrapper.ITaskWrapper;
import com.arialyy.aria.util.ALog;
import java.util.List;
/**
@@ -101,6 +103,37 @@ public class GroupNormalTarget extends AbsNormalTarget<GroupNormalTarget> {
return mConfigHandler.setSubFileName(subTaskFileName);
}
/**
* 如果无法获取到组合任务到总长度,请调用该方法,
* 请注意:
* 1、如果组合任务到子任务数过多请不要使用该标志位否则Aria将需要消耗大量的时间获取组合任务的总长度直到获取完成组合任务总长度后才会执行下载。
* 2、如果你的知道组合任务的总长度请使用{@link #setFileSize(long)}设置组合任务的长度。
* 3、由于网络或其它原因的存在这种方式获取的组合任务大小有可能是不准确的。
*/
public GroupNormalTarget unknownSize() {
((DGTaskWrapper) getTaskWrapper()).setUnknownSize(true);
return this;
}
/**
* 任务组总任务大小任务组是一个抽象的概念没有真实的数据实体任务组的大小是Aria动态获取子任务大小相加而得到的
* 如果你知道当前任务组总大小,你也可以调用该方法给任务组设置大小
*
* 为了更好的用户体验,组合任务最好设置文件大小,默认需要强制设置文件大小。如果无法获取到总长度,请调用{@link #unknownSize()}
*
* @param fileSize 任务组总大小
*/
public GroupNormalTarget setFileSize(long fileSize) {
if (fileSize <= 0) {
ALog.e(TAG, "文件大小不能小于 0");
return this;
}
if (getEntity().getFileSize() <= 1 || getEntity().getFileSize() != fileSize) {
getEntity().setFileSize(fileSize);
}
return this;
}
@Override public boolean isRunning() {
return mConfigHandler.isRunning();
}

View File

@@ -16,6 +16,8 @@
package com.arialyy.aria.core.queue;
import android.text.TextUtils;
import com.arialyy.aria.core.common.AbsEntity;
import com.arialyy.aria.core.inf.IEntity;
import com.arialyy.aria.core.inf.TaskSchedulerType;
import com.arialyy.aria.core.manager.TaskWrapperManager;
@@ -31,6 +33,8 @@ import com.arialyy.aria.core.task.DownloadTask;
import com.arialyy.aria.core.task.UploadTask;
import com.arialyy.aria.core.wrapper.AbsTaskWrapper;
import com.arialyy.aria.util.ALog;
import java.util.ArrayList;
import java.util.List;
/**
* Created by lyy on 2017/2/23. 任务队列
@@ -64,7 +68,33 @@ public abstract class AbsTaskQueue<TASK extends AbsTask, TASK_WRAPPER extends Ab
abstract int getQueueType();
/**
* 获取执行中的任务
*
* @return 没有执行中的任务返回null
*/
public <T extends AbsEntity> List<T> getRunningTask(Class<T> type) {
List<TASK> exeTask = mExecutePool.getAllTask();
List<TASK> cacheTask = mCachePool.getAllTask();
List<T> entities = new ArrayList<>();
if (exeTask != null && !exeTask.isEmpty()) {
for (TASK task : exeTask) {
entities.add((T) task.getTaskWrapper().getEntity());
}
}
if (cacheTask != null && !cacheTask.isEmpty()) {
for (TASK task : cacheTask) {
entities.add((T) task.getTaskWrapper().getEntity());
}
}
return entities.isEmpty() ? null : entities;
}
@Override public boolean taskIsRunning(String key) {
if (TextUtils.isEmpty(key)) {
ALog.w(TAG, "key为空无法确认任务是否执行");
return false;
}
TASK task = mExecutePool.getTask(key);
if (task == null && ThreadTaskManager.getInstance().taskIsRunning(key)) {
ThreadTaskManager.getInstance().removeTaskThread(key);

View File

@@ -18,6 +18,7 @@ package com.arialyy.aria.core.queue;
import com.arialyy.aria.core.AriaConfig;
import com.arialyy.aria.core.download.DTaskWrapper;
import com.arialyy.aria.core.download.DownloadEntity;
import com.arialyy.aria.core.event.DMaxNumEvent;
import com.arialyy.aria.core.event.Event;
import com.arialyy.aria.core.event.EventMsgUtil;

View File

@@ -28,6 +28,7 @@ import com.arialyy.aria.core.common.ProxyHelper;
import com.arialyy.aria.core.event.EventMsgUtil;
import com.arialyy.aria.core.inf.AbsReceiver;
import com.arialyy.aria.core.inf.ReceiverType;
import com.arialyy.aria.core.queue.UTaskQueue;
import com.arialyy.aria.core.scheduler.TaskSchedulers;
import com.arialyy.aria.core.task.ITask;
import com.arialyy.aria.core.upload.target.FtpBuilderTarget;
@@ -230,6 +231,15 @@ public class UploadReceiver extends AbsReceiver {
ITask.UPLOAD));
}
/**
* 获取执行中的任务
*
* @return 没有执行中的任务返回null
*/
public List<UploadEntity> getURunningTask() {
return UTaskQueue.getInstance().getRunningTask(UploadEntity.class);
}
/**
* 删除所有任务
*