子任务管理器
This commit is contained in:
103
Aria/src/main/java/com/arialyy/aria/core/SubTaskManager.java
Normal file
103
Aria/src/main/java/com/arialyy/aria/core/SubTaskManager.java
Normal file
@@ -0,0 +1,103 @@
|
||||
/*
|
||||
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.arialyy.aria.core;
|
||||
|
||||
import android.text.TextUtils;
|
||||
import android.util.Log;
|
||||
import com.arialyy.aria.core.command.group.GroupCmdFactory;
|
||||
import com.arialyy.aria.core.inf.BaseGroupTaskEntity;
|
||||
import com.arialyy.aria.util.CommonUtil;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by lyy on 2017/9/4.
|
||||
* 子任务管理器
|
||||
*/
|
||||
public class SubTaskManager {
|
||||
private String TAG = "SubTaskManager";
|
||||
private BaseGroupTaskEntity mEntity;
|
||||
private String mTargetName;
|
||||
|
||||
public SubTaskManager(String targetName, BaseGroupTaskEntity entity) {
|
||||
mTargetName = targetName;
|
||||
mEntity = entity;
|
||||
}
|
||||
|
||||
/**
|
||||
* 启动任务组中的子任务
|
||||
*
|
||||
* @param url 子任务下载地址
|
||||
*/
|
||||
public void startSubTask(String url) {
|
||||
if (checkUrl(url)) {
|
||||
AriaManager.getInstance(AriaManager.APP)
|
||||
.setCmd(
|
||||
CommonUtil.createGroupCmd(mTargetName, mEntity, GroupCmdFactory.SUB_TASK_START, url))
|
||||
.exe();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 停止任务组中的子任务
|
||||
*
|
||||
* @param url 子任务下载地址
|
||||
*/
|
||||
public void stopSubTask(String url) {
|
||||
if (checkUrl(url)) {
|
||||
AriaManager.getInstance(AriaManager.APP)
|
||||
.setCmd(
|
||||
CommonUtil.createGroupCmd(mTargetName, mEntity, GroupCmdFactory.SUB_TASK_STOP, url))
|
||||
.exe();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除子任务组中的子任务
|
||||
*
|
||||
* @param url 子任务下载地址
|
||||
*/
|
||||
public void cancelSubTask(String url) {
|
||||
if (checkUrl(url)) {
|
||||
AriaManager.getInstance(AriaManager.APP)
|
||||
.setCmd(
|
||||
CommonUtil.createGroupCmd(mTargetName, mEntity, GroupCmdFactory.SUB_TASK_CANCEL, url))
|
||||
.exe();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查任务地址
|
||||
*
|
||||
* @param url 子任务地址
|
||||
* @return {@code false} 任务地址不合法
|
||||
*/
|
||||
private boolean checkUrl(String url) {
|
||||
if (TextUtils.isEmpty(url)) {
|
||||
Log.e(TAG, "子任务地址不能为null");
|
||||
return false;
|
||||
}
|
||||
List<String> urls = mEntity.getEntity().getUrls();
|
||||
if (urls == null || urls.isEmpty()) {
|
||||
Log.e(TAG, "任务组任务链接为null");
|
||||
return false;
|
||||
}
|
||||
if (!urls.contains(url)) {
|
||||
Log.e(TAG, "任务组中没有改Url【+ " + url + "】");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
@@ -22,11 +22,12 @@ import com.arialyy.aria.core.queue.ITaskQueue;
|
||||
/**
|
||||
* Created by AriaL on 2017/6/29.
|
||||
*/
|
||||
public abstract class AbsCmd<T extends AbsTaskEntity> implements ICmd{
|
||||
public abstract class AbsCmd<T extends AbsTaskEntity> implements ICmd {
|
||||
protected ITaskQueue mQueue;
|
||||
protected T mTaskEntity;
|
||||
protected String TAG;
|
||||
protected String mTargetName;
|
||||
|
||||
/**
|
||||
* 是否是下载任务的命令
|
||||
* {@code true} 下载任务的命令,{@code false} 上传任务的命令
|
||||
|
@@ -21,11 +21,11 @@ import com.arialyy.aria.core.inf.AbsTaskEntity;
|
||||
* Created by AriaL on 2017/6/29.
|
||||
* 抽象命令工厂
|
||||
*/
|
||||
public abstract class AbsCmdFactory<CMD extends AbsCmd> {
|
||||
public abstract class AbsCmdFactory<TASK_ENTITY extends AbsTaskEntity, CMD extends AbsCmd> {
|
||||
|
||||
/**
|
||||
* @param target 创建任务的对象
|
||||
* @param entity 下载实体
|
||||
*/
|
||||
public abstract <T extends AbsTaskEntity> CMD createCmd(String target, T entity, int type);
|
||||
public abstract CMD createCmd(String target, TASK_ENTITY entity, int type);
|
||||
}
|
||||
|
@@ -15,21 +15,25 @@
|
||||
*/
|
||||
package com.arialyy.aria.core.command.group;
|
||||
|
||||
import android.util.Log;
|
||||
import com.arialyy.aria.core.command.AbsCmd;
|
||||
import com.arialyy.aria.core.download.DownloadGroupTaskEntity;
|
||||
import com.arialyy.aria.core.download.DownloadTaskEntity;
|
||||
import com.arialyy.aria.core.inf.AbsTaskEntity;
|
||||
import com.arialyy.aria.core.inf.AbsGroupTask;
|
||||
import com.arialyy.aria.core.inf.BaseGroupTaskEntity;
|
||||
import com.arialyy.aria.core.queue.DownloadGroupTaskQueue;
|
||||
import com.arialyy.aria.core.queue.DownloadTaskQueue;
|
||||
import com.arialyy.aria.core.queue.UploadTaskQueue;
|
||||
import com.arialyy.aria.core.upload.UploadTaskEntity;
|
||||
import com.arialyy.aria.util.CommonUtil;
|
||||
|
||||
/**
|
||||
* Created by AriaL on 2017/6/29.
|
||||
* 任务组命令
|
||||
*/
|
||||
abstract class AbsGroupCmd<T extends AbsTaskEntity> extends AbsCmd<T> {
|
||||
public abstract class AbsGroupCmd<T extends BaseGroupTaskEntity> extends AbsCmd<T> {
|
||||
/**
|
||||
* 需要控制的子任务url
|
||||
*/
|
||||
String childUrl;
|
||||
|
||||
AbsGroupTask tempTask;
|
||||
|
||||
/**
|
||||
* @param targetName 创建任务的对象名
|
||||
@@ -43,4 +47,13 @@ abstract class AbsGroupCmd<T extends AbsTaskEntity> extends AbsCmd<T> {
|
||||
isDownloadCmd = true;
|
||||
}
|
||||
}
|
||||
|
||||
boolean checkTask() {
|
||||
tempTask = (AbsGroupTask) mQueue.getTask(mTaskEntity.getEntity());
|
||||
if (tempTask == null || !tempTask.isRunning()) {
|
||||
Log.d(TAG, "任务组没有执行,先执行任务组任务才能够执行子任务");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@@ -15,13 +15,13 @@
|
||||
*/
|
||||
package com.arialyy.aria.core.command.group;
|
||||
|
||||
import com.arialyy.aria.core.inf.AbsTaskEntity;
|
||||
import com.arialyy.aria.core.inf.BaseGroupTaskEntity;
|
||||
|
||||
/**
|
||||
* Created by AriaL on 2017/6/29.
|
||||
* 删除任务组
|
||||
*/
|
||||
class GroupCancelCmd<T extends AbsTaskEntity> extends AbsGroupCmd<T> {
|
||||
class GroupCancelCmd<T extends BaseGroupTaskEntity> extends AbsGroupCmd<T> {
|
||||
/**
|
||||
* @param targetName 创建任务的对象名
|
||||
*/
|
||||
@@ -30,6 +30,8 @@ class GroupCancelCmd<T extends AbsTaskEntity> extends AbsGroupCmd<T> {
|
||||
}
|
||||
|
||||
@Override public void executeCmd() {
|
||||
|
||||
if (checkTask()) {
|
||||
tempTask.cancelSubTask(childUrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -16,25 +16,25 @@
|
||||
package com.arialyy.aria.core.command.group;
|
||||
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.command.AbsCmdFactory;
|
||||
import com.arialyy.aria.core.inf.AbsTaskEntity;
|
||||
import com.arialyy.aria.core.inf.BaseGroupTaskEntity;
|
||||
|
||||
/**
|
||||
* Created by AriaL on 2017/6/29.
|
||||
* 任务组子任务控制命令
|
||||
*/
|
||||
class GroupCmdFactory extends AbsCmdFactory<AbsGroupCmd> {
|
||||
public class GroupCmdFactory {
|
||||
/**
|
||||
* 启动任务
|
||||
* 启动子任务
|
||||
*/
|
||||
public static final int TASK_START = 0xa1;
|
||||
public static final int SUB_TASK_START = 0xa1;
|
||||
/**
|
||||
* 停止任务
|
||||
* 停止子任务
|
||||
*/
|
||||
public static final int TASK_STOP = 0xa2;
|
||||
public static final int SUB_TASK_STOP = 0xa2;
|
||||
/**
|
||||
* 取消任务
|
||||
* 取消子任务
|
||||
*/
|
||||
public static final int TASK_CANCEL = 0xa3;
|
||||
public static final int SUB_TASK_CANCEL = 0xa3;
|
||||
|
||||
private static volatile GroupCmdFactory INSTANCE = null;
|
||||
|
||||
@@ -54,18 +54,25 @@ class GroupCmdFactory extends AbsCmdFactory<AbsGroupCmd> {
|
||||
/**
|
||||
* @param target 创建任务的对象
|
||||
* @param entity 下载实体
|
||||
* @param type 命令类型{@link #TASK_START}、{@link #TASK_CANCEL}、{@link #TASK_STOP}
|
||||
* @param type 命令类型{@link #SUB_TASK_START}、{@link #SUB_TASK_STOP}、{@link #SUB_TASK_CANCEL}
|
||||
* @param childUrl 需要控制的子任务url
|
||||
*/
|
||||
public <T extends AbsTaskEntity> AbsGroupCmd<T> createCmd(String target, T entity, int type) {
|
||||
public AbsGroupCmd createCmd(String target, BaseGroupTaskEntity entity, int type,
|
||||
String childUrl) {
|
||||
AbsGroupCmd cmd = null;
|
||||
switch (type) {
|
||||
case TASK_START:
|
||||
return new GroupStartCmd<>(target, entity);
|
||||
case TASK_STOP:
|
||||
return new GroupStopCmd<>(target, entity);
|
||||
case TASK_CANCEL:
|
||||
return new GroupCancelCmd<>(target, entity);
|
||||
default:
|
||||
return null;
|
||||
case SUB_TASK_START:
|
||||
cmd = new GroupStartCmd<>(target, entity);
|
||||
break;
|
||||
case SUB_TASK_STOP:
|
||||
cmd = new GroupStopCmd<>(target, entity);
|
||||
break;
|
||||
case SUB_TASK_CANCEL:
|
||||
cmd = new GroupCancelCmd<>(target, entity);
|
||||
}
|
||||
if (cmd != null) {
|
||||
cmd.childUrl = childUrl;
|
||||
}
|
||||
return cmd;
|
||||
}
|
||||
}
|
||||
|
@@ -15,18 +15,13 @@
|
||||
*/
|
||||
package com.arialyy.aria.core.command.group;
|
||||
|
||||
import android.text.TextUtils;
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.common.QueueMod;
|
||||
import com.arialyy.aria.core.inf.AbsGroupTask;
|
||||
import com.arialyy.aria.core.inf.AbsTaskEntity;
|
||||
import com.arialyy.aria.core.inf.IEntity;
|
||||
import com.arialyy.aria.core.inf.BaseGroupTaskEntity;
|
||||
|
||||
/**
|
||||
* Created by AriaL on 2017/6/29.
|
||||
* 任务组开始命令,该命令负责开始下载或恢复下载的操作
|
||||
* 任务组开始命令,该命令负责处理任务组子任务的开始\恢复等工作
|
||||
*/
|
||||
class GroupStartCmd<T extends AbsTaskEntity> extends AbsGroupCmd<T> {
|
||||
class GroupStartCmd<T extends BaseGroupTaskEntity> extends AbsGroupCmd<T> {
|
||||
/**
|
||||
* @param targetName 创建任务的对象名
|
||||
*/
|
||||
@@ -35,38 +30,8 @@ class GroupStartCmd<T extends AbsTaskEntity> extends AbsGroupCmd<T> {
|
||||
}
|
||||
|
||||
@Override public void executeCmd() {
|
||||
String mod;
|
||||
int maxTaskNum;
|
||||
AriaManager manager = AriaManager.getInstance(AriaManager.APP);
|
||||
if (isDownloadCmd) {
|
||||
mod = manager.getDownloadConfig().getQueueMod();
|
||||
maxTaskNum = manager.getDownloadConfig().getMaxTaskNum();
|
||||
} else {
|
||||
mod = manager.getUploadConfig().getQueueMod();
|
||||
maxTaskNum = manager.getUploadConfig().getMaxTaskNum();
|
||||
}
|
||||
|
||||
AbsGroupTask task = (AbsGroupTask) mQueue.getTask(mTaskEntity.getEntity());
|
||||
if (task == null) {
|
||||
task = (AbsGroupTask) mQueue.createTask(mTargetName, mTaskEntity);
|
||||
if (!TextUtils.isEmpty(mTargetName)) {
|
||||
task.setTargetName(mTargetName);
|
||||
}
|
||||
// 任务不存在时,根据配置不同,对任务执行操作
|
||||
if (mod.equals(QueueMod.NOW.getTag())) {
|
||||
mQueue.startTask(task);
|
||||
} else if (mod.equals(QueueMod.WAIT.getTag())) {
|
||||
if (mQueue.getCurrentExePoolNum() < maxTaskNum) {
|
||||
mQueue.startTask(task);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// 任务不存在时,根据配置不同,对任务执行操作
|
||||
if (!task.isRunning()
|
||||
&& mod.equals(QueueMod.WAIT.getTag())
|
||||
&& task.getState() == IEntity.STATE_WAIT) {
|
||||
mQueue.startTask(task);
|
||||
}
|
||||
if (checkTask()) {
|
||||
tempTask.startSubTask(childUrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -15,13 +15,13 @@
|
||||
*/
|
||||
package com.arialyy.aria.core.command.group;
|
||||
|
||||
import com.arialyy.aria.core.inf.AbsTaskEntity;
|
||||
import com.arialyy.aria.core.inf.BaseGroupTaskEntity;
|
||||
|
||||
/**
|
||||
* Created by AriaL on 2017/6/29.
|
||||
* 停止任务组的命令
|
||||
*/
|
||||
class GroupStopCmd<T extends AbsTaskEntity> extends AbsGroupCmd<T>{
|
||||
class GroupStopCmd<T extends BaseGroupTaskEntity> extends AbsGroupCmd<T> {
|
||||
/**
|
||||
* @param targetName 创建任务的对象名
|
||||
*/
|
||||
@@ -30,6 +30,8 @@ class GroupStopCmd<T extends AbsTaskEntity> extends AbsGroupCmd<T>{
|
||||
}
|
||||
|
||||
@Override public void executeCmd() {
|
||||
|
||||
if (checkTask()) {
|
||||
tempTask.stopSubTask(childUrl);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -24,7 +24,7 @@ import com.arialyy.aria.core.inf.AbsTaskEntity;
|
||||
* Created by Lyy on 2016/9/23.
|
||||
* 命令工厂
|
||||
*/
|
||||
public class NormalCmdFactory extends AbsCmdFactory<AbsNormalCmd> {
|
||||
public class NormalCmdFactory extends AbsCmdFactory<AbsTaskEntity, AbsNormalCmd> {
|
||||
/**
|
||||
* 创建任务
|
||||
*/
|
||||
@@ -82,7 +82,7 @@ public class NormalCmdFactory extends AbsCmdFactory<AbsNormalCmd> {
|
||||
* @param type 命令类型{@link #TASK_CREATE}、{@link #TASK_START}、{@link #TASK_CANCEL}、{@link
|
||||
* #TASK_STOP}、{@link #TASK_HIGHEST_PRIORITY}、{@link #TASK_STOP_ALL}、{@link #TASK_RESUME_ALL}
|
||||
*/
|
||||
public <T extends AbsTaskEntity> AbsNormalCmd<T> createCmd(String target, T entity, int type) {
|
||||
public AbsNormalCmd createCmd(String target, AbsTaskEntity entity, int type) {
|
||||
switch (type) {
|
||||
case TASK_CREATE:
|
||||
return new AddCmd<>(target, entity);
|
||||
@@ -105,4 +105,5 @@ public class NormalCmdFactory extends AbsCmdFactory<AbsNormalCmd> {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -16,9 +16,10 @@
|
||||
package com.arialyy.aria.core.download;
|
||||
|
||||
import android.text.TextUtils;
|
||||
import com.arialyy.aria.core.SubTaskManager;
|
||||
import com.arialyy.aria.core.inf.AbsDownloadTarget;
|
||||
import com.arialyy.aria.core.inf.AbsTarget;
|
||||
import com.arialyy.aria.core.inf.AbsTaskEntity;
|
||||
import com.arialyy.aria.core.inf.BaseGroupTaskEntity;
|
||||
import com.arialyy.aria.orm.DbEntity;
|
||||
import com.arialyy.aria.util.CommonUtil;
|
||||
import java.io.File;
|
||||
@@ -28,7 +29,7 @@ import java.util.List;
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/7/26.
|
||||
*/
|
||||
abstract class BaseGroupTarget<TARGET extends AbsTarget, TASK_ENTITY extends AbsTaskEntity>
|
||||
abstract class BaseGroupTarget<TARGET extends AbsTarget, TASK_ENTITY extends BaseGroupTaskEntity>
|
||||
extends AbsDownloadTarget<TARGET, DownloadGroupEntity, TASK_ENTITY> {
|
||||
|
||||
List<String> mUrls = new ArrayList<>();
|
||||
@@ -42,6 +43,8 @@ abstract class BaseGroupTarget<TARGET extends AbsTarget, TASK_ENTITY extends Abs
|
||||
*/
|
||||
private boolean isSetDirPathed = false;
|
||||
|
||||
private SubTaskManager mSubTaskManager;
|
||||
|
||||
/**
|
||||
* 查询任务组实体,如果数据库不存在该实体,则新创建一个新的任务组实体
|
||||
*/
|
||||
@@ -57,6 +60,18 @@ abstract class BaseGroupTarget<TARGET extends AbsTarget, TASK_ENTITY extends Abs
|
||||
return entity;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取子任务管理器
|
||||
*
|
||||
* @return 子任务管理器
|
||||
*/
|
||||
public SubTaskManager getSubTaskManager() {
|
||||
if (mSubTaskManager == null) {
|
||||
mSubTaskManager = new SubTaskManager(mTargetName, mTaskEntity);
|
||||
}
|
||||
return mSubTaskManager;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置任务组别名
|
||||
*/
|
||||
|
@@ -31,11 +31,6 @@ public class DownloadGroupEntity extends AbsGroupEntity {
|
||||
@OneToMany(table = DownloadEntity.class, key = "groupName") private List<DownloadEntity> subtask =
|
||||
new ArrayList<>();
|
||||
|
||||
/**
|
||||
* 子任务链接组
|
||||
*/
|
||||
@NormalList(clazz = String.class) private List<String> urls = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* 任务组下载文件的文件夹地址
|
||||
*
|
||||
@@ -59,14 +54,6 @@ public class DownloadGroupEntity extends AbsGroupEntity {
|
||||
this.dirPath = dirPath;
|
||||
}
|
||||
|
||||
public List<String> getUrls() {
|
||||
return urls;
|
||||
}
|
||||
|
||||
public void setUrls(List<String> urls) {
|
||||
this.urls = urls;
|
||||
}
|
||||
|
||||
void setGroupName(String key) {
|
||||
this.groupName = key;
|
||||
}
|
||||
|
@@ -19,6 +19,7 @@ import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.common.IUtil;
|
||||
import com.arialyy.aria.core.download.downloader.AbsGroupUtil;
|
||||
import com.arialyy.aria.core.download.downloader.DownloadGroupUtil;
|
||||
import com.arialyy.aria.core.download.downloader.FtpDirDownloadUtil;
|
||||
import com.arialyy.aria.core.inf.AbsGroupTask;
|
||||
@@ -33,7 +34,6 @@ import com.arialyy.aria.util.CheckUtil;
|
||||
public class DownloadGroupTask extends AbsGroupTask<DownloadGroupTaskEntity, DownloadGroupEntity> {
|
||||
private final String TAG = "DownloadGroupTask";
|
||||
private DownloadGroupListener mListener;
|
||||
private IUtil mUtil;
|
||||
|
||||
private DownloadGroupTask(DownloadGroupTaskEntity taskEntity, Handler outHandler) {
|
||||
mTaskEntity = taskEntity;
|
||||
|
@@ -15,13 +15,13 @@
|
||||
*/
|
||||
package com.arialyy.aria.core.download;
|
||||
|
||||
import com.arialyy.aria.core.inf.AbsTaskEntity;
|
||||
import com.arialyy.aria.core.inf.BaseGroupTaskEntity;
|
||||
import com.arialyy.aria.orm.OneToOne;
|
||||
|
||||
/**
|
||||
* Created by AriaL on 2017/7/1.
|
||||
*/
|
||||
public class DownloadGroupTaskEntity extends AbsTaskEntity<DownloadGroupEntity> {
|
||||
public class DownloadGroupTaskEntity extends BaseGroupTaskEntity<DownloadGroupEntity> {
|
||||
|
||||
@OneToOne(table = DownloadGroupEntity.class, key = "groupName") public DownloadGroupEntity entity;
|
||||
|
||||
|
@@ -300,7 +300,7 @@ public class DownloadReceiver extends AbsReceiver {
|
||||
@Override public void removeAllTask(boolean removeFile) {
|
||||
final AriaManager ariaManager = AriaManager.getInstance(AriaManager.APP);
|
||||
CancelAllCmd cancelCmd =
|
||||
(CancelAllCmd) CommonUtil.createCmd(targetName, new DownloadTaskEntity(),
|
||||
(CancelAllCmd) CommonUtil.createNormalCmd(targetName, new DownloadTaskEntity(),
|
||||
NormalCmdFactory.TASK_CANCEL_ALL);
|
||||
cancelCmd.removeFile = removeFile;
|
||||
ariaManager.setCmd(cancelCmd).exe();
|
||||
|
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
package com.arialyy.aria.core.download.downloader;
|
||||
|
||||
import android.util.Log;
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.common.IUtil;
|
||||
import com.arialyy.aria.core.download.DownloadEntity;
|
||||
@@ -38,7 +39,7 @@ import java.util.concurrent.Executors;
|
||||
* Created by AriaL on 2017/6/30.
|
||||
* 任务组核心逻辑
|
||||
*/
|
||||
abstract class AbsGroupUtil implements IUtil {
|
||||
public abstract class AbsGroupUtil implements IUtil {
|
||||
private final String TAG = "AbsGroupUtil";
|
||||
/**
|
||||
* 任务组所有任务总大小
|
||||
@@ -126,6 +127,55 @@ abstract class AbsGroupUtil implements IUtil {
|
||||
mTaskEntity.getEntity().update();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* 启动子任务下载
|
||||
*
|
||||
* @param url 子任务下载地址
|
||||
*/
|
||||
public void startSubTask(String url) {
|
||||
Downloader d = getDownloader(url);
|
||||
if (d != null && !d.isRunning()) {
|
||||
d.start();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 停止子任务下载
|
||||
*
|
||||
* @param url 子任务下载地址
|
||||
*/
|
||||
public void stopSubTask(String url) {
|
||||
Downloader d = getDownloader(url);
|
||||
if (d != null && d.isRunning()) {
|
||||
d.stop();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除子任务
|
||||
*
|
||||
* @param url 子任务下载地址
|
||||
*/
|
||||
public void cancelSunTask(String url) {
|
||||
Downloader d = getDownloader(url);
|
||||
if (d != null) {
|
||||
d.cancel();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 通过地址获取下载器
|
||||
*
|
||||
* @param url 子任务下载地址
|
||||
*/
|
||||
private Downloader getDownloader(String url) {
|
||||
Downloader d = mDownloaderMap.get(url);
|
||||
if (d == null) {
|
||||
Log.e(TAG, "链接【" + url + "】对应的下载器不存在");
|
||||
return null;
|
||||
}
|
||||
return d;
|
||||
}
|
||||
|
||||
@Override public long getFileSize() {
|
||||
return mTotalSize;
|
||||
|
@@ -98,7 +98,7 @@ public abstract class AbsDownloadTarget<TARGET extends AbsTarget, ENTITY extends
|
||||
protected void setHighestPriority() {
|
||||
AriaManager.getInstance(AriaManager.APP)
|
||||
.setCmd(
|
||||
CommonUtil.createCmd(mTargetName, mTaskEntity, NormalCmdFactory.TASK_HIGHEST_PRIORITY))
|
||||
CommonUtil.createNormalCmd(mTargetName, mTaskEntity, NormalCmdFactory.TASK_HIGHEST_PRIORITY))
|
||||
.exe();
|
||||
}
|
||||
|
||||
@@ -136,7 +136,7 @@ public abstract class AbsDownloadTarget<TARGET extends AbsTarget, ENTITY extends
|
||||
*/
|
||||
public void add() {
|
||||
AriaManager.getInstance(AriaManager.APP)
|
||||
.setCmd(CommonUtil.createCmd(mTargetName, mTaskEntity, NormalCmdFactory.TASK_CREATE))
|
||||
.setCmd(CommonUtil.createNormalCmd(mTargetName, mTaskEntity, NormalCmdFactory.TASK_CREATE))
|
||||
.exe();
|
||||
}
|
||||
|
||||
|
@@ -17,7 +17,10 @@ package com.arialyy.aria.core.inf;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import com.arialyy.aria.orm.NormalList;
|
||||
import com.arialyy.aria.orm.Primary;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by AriaL on 2017/6/3.
|
||||
@@ -33,6 +36,19 @@ public abstract class AbsGroupEntity extends AbsEntity implements Parcelable {
|
||||
*/
|
||||
private String alias = "";
|
||||
|
||||
/**
|
||||
* 子任务链接组
|
||||
*/
|
||||
@NormalList(clazz = String.class) private List<String> urls = new ArrayList<>();
|
||||
|
||||
public List<String> getUrls() {
|
||||
return urls;
|
||||
}
|
||||
|
||||
public void setUrls(List<String> urls) {
|
||||
this.urls = urls;
|
||||
}
|
||||
|
||||
public String getGroupName() {
|
||||
return groupName;
|
||||
}
|
||||
|
@@ -15,17 +15,53 @@
|
||||
*/
|
||||
package com.arialyy.aria.core.inf;
|
||||
|
||||
import com.arialyy.aria.core.download.downloader.AbsGroupUtil;
|
||||
|
||||
/**
|
||||
* Created by AriaL on 2017/6/29.
|
||||
* 任务组任务抽象类
|
||||
*/
|
||||
public abstract class AbsGroupTask<TASK_ENTITY extends AbsTaskEntity, ENTITY extends AbsGroupEntity>
|
||||
extends AbsTask<ENTITY> {
|
||||
|
||||
protected TASK_ENTITY mTaskEntity;
|
||||
|
||||
protected AbsGroupUtil mUtil;
|
||||
|
||||
@Override public String getKey() {
|
||||
return mEntity.getGroupName();
|
||||
}
|
||||
|
||||
/**
|
||||
* 启动任务组中的子任务
|
||||
*
|
||||
* @param url 子任务下载地址
|
||||
*/
|
||||
public void startSubTask(String url) {
|
||||
if (mUtil != null) {
|
||||
mUtil.startSubTask(url);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 停止任务组中的子任务
|
||||
*
|
||||
* @param url 子任务下载地址
|
||||
*/
|
||||
public void stopSubTask(String url) {
|
||||
if (mUtil != null) {
|
||||
mUtil.stopSubTask(url);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除子任务组中的子任务
|
||||
*
|
||||
* @param url 子任务下载地址
|
||||
*/
|
||||
public void cancelSubTask(String url) {
|
||||
if (mUtil != null) {
|
||||
mUtil.cancelSunTask(url);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -162,7 +162,7 @@ public abstract class AbsTarget<TARGET extends AbsTarget, ENTITY extends AbsEnti
|
||||
*/
|
||||
@Override public void start() {
|
||||
AriaManager.getInstance(AriaManager.APP)
|
||||
.setCmd(CommonUtil.createCmd(mTargetName, mTaskEntity, NormalCmdFactory.TASK_START))
|
||||
.setCmd(CommonUtil.createNormalCmd(mTargetName, mTaskEntity, NormalCmdFactory.TASK_START))
|
||||
.exe();
|
||||
}
|
||||
|
||||
@@ -177,7 +177,7 @@ public abstract class AbsTarget<TARGET extends AbsTarget, ENTITY extends AbsEnti
|
||||
|
||||
@Override public void stop() {
|
||||
AriaManager.getInstance(AriaManager.APP)
|
||||
.setCmd(CommonUtil.createCmd(mTargetName, mTaskEntity, NormalCmdFactory.TASK_STOP))
|
||||
.setCmd(CommonUtil.createNormalCmd(mTargetName, mTaskEntity, NormalCmdFactory.TASK_STOP))
|
||||
.exe();
|
||||
}
|
||||
|
||||
@@ -186,7 +186,7 @@ public abstract class AbsTarget<TARGET extends AbsTarget, ENTITY extends AbsEnti
|
||||
*/
|
||||
@Override public void resume() {
|
||||
AriaManager.getInstance(AriaManager.APP)
|
||||
.setCmd(CommonUtil.createCmd(mTargetName, mTaskEntity, NormalCmdFactory.TASK_START))
|
||||
.setCmd(CommonUtil.createNormalCmd(mTargetName, mTaskEntity, NormalCmdFactory.TASK_START))
|
||||
.exe();
|
||||
}
|
||||
|
||||
@@ -195,7 +195,7 @@ public abstract class AbsTarget<TARGET extends AbsTarget, ENTITY extends AbsEnti
|
||||
*/
|
||||
@Override public void cancel() {
|
||||
AriaManager.getInstance(AriaManager.APP)
|
||||
.setCmd(CommonUtil.createCmd(mTargetName, mTaskEntity, NormalCmdFactory.TASK_CANCEL))
|
||||
.setCmd(CommonUtil.createNormalCmd(mTargetName, mTaskEntity, NormalCmdFactory.TASK_CANCEL))
|
||||
.exe();
|
||||
}
|
||||
|
||||
@@ -207,7 +207,7 @@ public abstract class AbsTarget<TARGET extends AbsTarget, ENTITY extends AbsEnti
|
||||
*/
|
||||
public void cancel(boolean removeFile) {
|
||||
CancelCmd cancelCmd =
|
||||
(CancelCmd) CommonUtil.createCmd(mTargetName, mTaskEntity, NormalCmdFactory.TASK_CANCEL);
|
||||
(CancelCmd) CommonUtil.createNormalCmd(mTargetName, mTaskEntity, NormalCmdFactory.TASK_CANCEL);
|
||||
cancelCmd.removeFile = removeFile;
|
||||
AriaManager.getInstance(AriaManager.APP).setCmd(cancelCmd).exe();
|
||||
}
|
||||
|
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.arialyy.aria.core.inf;
|
||||
|
||||
/**
|
||||
* Created by lyy on 2017/9/5.
|
||||
*/
|
||||
public abstract class BaseGroupTaskEntity<ENTITY extends AbsGroupEntity> extends AbsTaskEntity<ENTITY>{
|
||||
@Override public ENTITY getEntity() {
|
||||
return null;
|
||||
}
|
||||
}
|
@@ -92,7 +92,7 @@ public class UploadReceiver extends AbsReceiver<UploadEntity> {
|
||||
@Override public void removeAllTask(boolean removeFile) {
|
||||
final AriaManager am = AriaManager.getInstance(AriaManager.APP);
|
||||
|
||||
am.setCmd(CommonUtil.createCmd(targetName, new DownloadTaskEntity(),
|
||||
am.setCmd(CommonUtil.createNormalCmd(targetName, new DownloadTaskEntity(),
|
||||
NormalCmdFactory.TASK_CANCEL_ALL)).exe();
|
||||
|
||||
Set<String> keys = am.getReceiver().keySet();
|
||||
|
@@ -24,16 +24,16 @@ import android.text.TextUtils;
|
||||
import android.util.Base64;
|
||||
import android.util.Log;
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.command.normal.NormalCmdFactory;
|
||||
import com.arialyy.aria.core.command.group.AbsGroupCmd;
|
||||
import com.arialyy.aria.core.command.group.GroupCmdFactory;
|
||||
import com.arialyy.aria.core.command.normal.AbsNormalCmd;
|
||||
import com.arialyy.aria.core.command.normal.NormalCmdFactory;
|
||||
import com.arialyy.aria.core.download.DownloadEntity;
|
||||
import com.arialyy.aria.core.download.DownloadGroupEntity;
|
||||
import com.arialyy.aria.core.download.DownloadGroupTaskEntity;
|
||||
import com.arialyy.aria.core.download.DownloadTaskEntity;
|
||||
import com.arialyy.aria.core.inf.AbsTaskEntity;
|
||||
import com.arialyy.aria.core.inf.BaseGroupTaskEntity;
|
||||
import com.arialyy.aria.core.upload.UploadEntity;
|
||||
import com.arialyy.aria.core.upload.UploadTaskEntity;
|
||||
import com.arialyy.aria.orm.DbEntity;
|
||||
import java.io.File;
|
||||
import java.io.FileFilter;
|
||||
import java.io.FileInputStream;
|
||||
@@ -43,6 +43,11 @@ import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.lang.reflect.Field;
|
||||
import java.lang.reflect.GenericArrayType;
|
||||
import java.lang.reflect.ParameterizedType;
|
||||
import java.lang.reflect.Type;
|
||||
import java.lang.reflect.TypeVariable;
|
||||
import java.lang.reflect.WildcardType;
|
||||
import java.math.BigDecimal;
|
||||
import java.math.BigInteger;
|
||||
import java.net.URLEncoder;
|
||||
@@ -58,11 +63,6 @@ import java.util.Properties;
|
||||
import java.util.Set;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
import java.lang.reflect.GenericArrayType;
|
||||
import java.lang.reflect.ParameterizedType;
|
||||
import java.lang.reflect.Type;
|
||||
import java.lang.reflect.TypeVariable;
|
||||
import java.lang.reflect.WildcardType;
|
||||
|
||||
/**
|
||||
* Created by lyy on 2016/1/22.
|
||||
@@ -398,10 +398,24 @@ public class CommonUtil {
|
||||
}
|
||||
}
|
||||
|
||||
public static <T extends AbsTaskEntity> AbsNormalCmd createCmd(String target, T entity, int cmd) {
|
||||
/**
|
||||
* 创建任务命令
|
||||
*/
|
||||
public static <T extends AbsTaskEntity> AbsNormalCmd createNormalCmd(String target, T entity,
|
||||
int cmd) {
|
||||
return NormalCmdFactory.getInstance().createCmd(target, entity, cmd);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建任务组命令
|
||||
*
|
||||
* @param childUrl 子任务url
|
||||
*/
|
||||
public static <T extends BaseGroupTaskEntity> AbsGroupCmd createGroupCmd(String target, T entity,
|
||||
int cmd, String childUrl) {
|
||||
return GroupCmdFactory.getInstance().createCmd(target, entity, cmd, childUrl);
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建隐性的Intent
|
||||
*/
|
||||
|
Reference in New Issue
Block a user