fix bug https://github.com/AriaLyy/Aria/issues/505 增加上传任务强制上传的功能
This commit is contained in:
@@ -30,7 +30,7 @@ public class CommandManager {
|
||||
EventMsgUtil.getDefault().register(this);
|
||||
}
|
||||
|
||||
public static CommandManager init() {
|
||||
public static void init() {
|
||||
if (instance == null) {
|
||||
synchronized (CommandManager.class) {
|
||||
if (instance == null) {
|
||||
@@ -38,7 +38,6 @@ public class CommandManager {
|
||||
}
|
||||
}
|
||||
}
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Event
|
||||
@@ -51,9 +50,6 @@ public class CommandManager {
|
||||
|
||||
@Event
|
||||
public void start(StartCmd cmd) {
|
||||
if (CommonUtil.isFastDoubleClick()) {
|
||||
return;
|
||||
}
|
||||
cmd.executeCmd();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,25 +1,44 @@
|
||||
/*
|
||||
* 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.command;
|
||||
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.common.AbsEntity;
|
||||
import com.arialyy.aria.core.download.DGTaskWrapper;
|
||||
import com.arialyy.aria.core.download.DTaskWrapper;
|
||||
import com.arialyy.aria.core.download.DownloadEntity;
|
||||
import com.arialyy.aria.core.download.DownloadGroupEntity;
|
||||
import com.arialyy.aria.core.common.AbsEntity;
|
||||
import com.arialyy.aria.core.task.AbsTask;
|
||||
import com.arialyy.aria.core.wrapper.AbsTaskWrapper;
|
||||
import com.arialyy.aria.core.inf.IEntity;
|
||||
import com.arialyy.aria.core.inf.IOptionConstant;
|
||||
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.UTaskQueue;
|
||||
import com.arialyy.aria.core.task.AbsTask;
|
||||
import com.arialyy.aria.core.upload.UTaskWrapper;
|
||||
import com.arialyy.aria.core.upload.UploadEntity;
|
||||
import com.arialyy.aria.core.wrapper.AbsTaskWrapper;
|
||||
import com.arialyy.aria.core.wrapper.ITaskWrapper;
|
||||
import com.arialyy.aria.orm.DbEntity;
|
||||
import com.arialyy.aria.util.ALog;
|
||||
import com.arialyy.aria.util.CommonUtil;
|
||||
import com.arialyy.aria.util.NetUtils;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
/**
|
||||
* Created by AriaL on 2017/6/13.
|
||||
@@ -30,7 +49,7 @@ import java.util.List;
|
||||
* 4.恢复下载的任务规则是,停止时间越晚的任务启动越早,按照DESC来进行排序
|
||||
*/
|
||||
final class ResumeAllCmd<T extends AbsTaskWrapper> extends AbsNormalCmd<T> {
|
||||
private List<AbsTaskWrapper> mWaitList = new ArrayList<>();
|
||||
|
||||
|
||||
ResumeAllCmd(T entity, int taskType) {
|
||||
super(entity, taskType);
|
||||
@@ -41,94 +60,8 @@ final class ResumeAllCmd<T extends AbsTaskWrapper> extends AbsNormalCmd<T> {
|
||||
ALog.w(TAG, "恢复任务失败,网络未连接");
|
||||
return;
|
||||
}
|
||||
if (isDownloadCmd) {
|
||||
findTaskData(1);
|
||||
findTaskData(2);
|
||||
} else {
|
||||
findTaskData(3);
|
||||
}
|
||||
resumeWaitTask();
|
||||
new Thread(new ResumeThread(isDownloadCmd, IEntity.STATE_COMPLETE)).start();
|
||||
}
|
||||
|
||||
/**
|
||||
* 查找数据库中的所有任务数据
|
||||
*
|
||||
* @param type {@code 1}单任务下载任务;{@code 2}任务组下载任务;{@code 3} 单任务上传任务
|
||||
*/
|
||||
private void findTaskData(int type) {
|
||||
if (type == 1) {
|
||||
List<DownloadEntity> entities =
|
||||
DbEntity.findDatas(DownloadEntity.class,
|
||||
"isGroupChild=? AND state!=? ORDER BY stopTime DESC", "false", "1");
|
||||
if (entities != null && !entities.isEmpty()) {
|
||||
for (DownloadEntity entity : entities) {
|
||||
addResumeEntity(TaskWrapperManager.getInstance()
|
||||
.getNormalTaskWrapper(DTaskWrapper.class, entity.getId()));
|
||||
}
|
||||
}
|
||||
} else if (type == 2) {
|
||||
List<DownloadGroupEntity> entities =
|
||||
DbEntity.findDatas(DownloadGroupEntity.class, "state!=? ORDER BY stopTime DESC", "1");
|
||||
if (entities != null && !entities.isEmpty()) {
|
||||
for (DownloadGroupEntity entity : entities) {
|
||||
addResumeEntity(
|
||||
TaskWrapperManager.getInstance()
|
||||
.getGroupWrapper(DGTaskWrapper.class, entity.getId()));
|
||||
}
|
||||
}
|
||||
} else if (type == 3) {
|
||||
List<UploadEntity> entities =
|
||||
DbEntity.findDatas(UploadEntity.class, "state!=? ORDER BY stopTime DESC", "1");
|
||||
if (entities != null && !entities.isEmpty()) {
|
||||
for (UploadEntity entity : entities) {
|
||||
addResumeEntity(TaskWrapperManager.getInstance()
|
||||
.getNormalTaskWrapper(UTaskWrapper.class, entity.getId()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加恢复实体
|
||||
*/
|
||||
private void addResumeEntity(AbsTaskWrapper te) {
|
||||
if (te == null || te.getEntity() == null) {
|
||||
return;
|
||||
}
|
||||
if (!mQueue.taskExists(te.getKey())) {
|
||||
mWaitList.add(te);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理等待状态的任务
|
||||
*/
|
||||
private void resumeWaitTask() {
|
||||
int maxTaskNum = mQueue.getMaxTaskNum();
|
||||
if (mWaitList == null || mWaitList.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
List<AbsEntity> resumeEntities = new ArrayList<>();
|
||||
|
||||
for (AbsTaskWrapper te : mWaitList) {
|
||||
if (te instanceof DTaskWrapper) {
|
||||
mQueue = DTaskQueue.getInstance();
|
||||
} else if (te instanceof UTaskWrapper) {
|
||||
mQueue = UTaskQueue.getInstance();
|
||||
} else if (te instanceof DGTaskWrapper) {
|
||||
mQueue = DGroupTaskQueue.getInstance();
|
||||
}
|
||||
if (mQueue.getCurrentExePoolNum() < maxTaskNum) {
|
||||
startTask(createTask(te));
|
||||
} else {
|
||||
te.getEntity().setState(IEntity.STATE_WAIT);
|
||||
AbsTask task = createTask(te);
|
||||
sendWaitState(task);
|
||||
resumeEntities.add(te.getEntity());
|
||||
}
|
||||
}
|
||||
if (!resumeEntities.isEmpty()) {
|
||||
DbEntity.updateManyData(resumeEntities);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,198 @@
|
||||
/*
|
||||
* 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.command;
|
||||
|
||||
import android.text.TextUtils;
|
||||
import com.arialyy.aria.core.common.AbsEntity;
|
||||
import com.arialyy.aria.core.download.DGTaskWrapper;
|
||||
import com.arialyy.aria.core.download.DTaskWrapper;
|
||||
import com.arialyy.aria.core.download.DownloadEntity;
|
||||
import com.arialyy.aria.core.download.DownloadGroupEntity;
|
||||
import com.arialyy.aria.core.inf.IEntity;
|
||||
import com.arialyy.aria.core.inf.IOptionConstant;
|
||||
import com.arialyy.aria.core.listener.ISchedulers;
|
||||
import com.arialyy.aria.core.manager.TaskWrapperManager;
|
||||
import com.arialyy.aria.core.queue.AbsTaskQueue;
|
||||
import com.arialyy.aria.core.queue.DGroupTaskQueue;
|
||||
import com.arialyy.aria.core.queue.DTaskQueue;
|
||||
import com.arialyy.aria.core.queue.UTaskQueue;
|
||||
import com.arialyy.aria.core.task.AbsTask;
|
||||
import com.arialyy.aria.core.upload.UTaskWrapper;
|
||||
import com.arialyy.aria.core.upload.UploadEntity;
|
||||
import com.arialyy.aria.core.wrapper.AbsTaskWrapper;
|
||||
import com.arialyy.aria.core.wrapper.ITaskWrapper;
|
||||
import com.arialyy.aria.orm.DbEntity;
|
||||
import com.arialyy.aria.util.ALog;
|
||||
import com.arialyy.aria.util.CommonUtil;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 恢复任务工具
|
||||
*/
|
||||
public class ResumeThread implements Runnable {
|
||||
private String TAG = CommonUtil.getClassName(getClass());
|
||||
private List<AbsTaskWrapper> mWaitList = new ArrayList<>();
|
||||
private boolean isDownloadCmd;
|
||||
private int excludeState;
|
||||
|
||||
ResumeThread(boolean isDownload, int excludeState) {
|
||||
this.isDownloadCmd = isDownload;
|
||||
this.excludeState = excludeState;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查找数据库中的所有任务数据
|
||||
*
|
||||
* @param type {@code 1}单任务下载任务;{@code 2}任务组下载任务;{@code 3} 单任务上传任务
|
||||
*/
|
||||
private void findTaskData(int type) {
|
||||
if (type == 1) {
|
||||
List<DownloadEntity> entities =
|
||||
DbEntity.findDatas(DownloadEntity.class,
|
||||
"isGroupChild=? AND state!=? ORDER BY stopTime DESC", "false",
|
||||
String.valueOf(excludeState));
|
||||
if (entities != null && !entities.isEmpty()) {
|
||||
for (DownloadEntity entity : entities) {
|
||||
addResumeEntity(TaskWrapperManager.getInstance()
|
||||
.getNormalTaskWrapper(DTaskWrapper.class, entity.getId()));
|
||||
}
|
||||
}
|
||||
} else if (type == 2) {
|
||||
List<DownloadGroupEntity> entities =
|
||||
DbEntity.findDatas(DownloadGroupEntity.class, "state!=? ORDER BY stopTime DESC",
|
||||
String.valueOf(excludeState));
|
||||
if (entities != null && !entities.isEmpty()) {
|
||||
for (DownloadGroupEntity entity : entities) {
|
||||
addResumeEntity(
|
||||
TaskWrapperManager.getInstance()
|
||||
.getGroupWrapper(DGTaskWrapper.class, entity.getId()));
|
||||
}
|
||||
}
|
||||
} else if (type == 3) {
|
||||
List<UploadEntity> entities =
|
||||
DbEntity.findDatas(UploadEntity.class, "state!=? ORDER BY stopTime DESC",
|
||||
String.valueOf(excludeState));
|
||||
if (entities != null && !entities.isEmpty()) {
|
||||
for (UploadEntity entity : entities) {
|
||||
addResumeEntity(TaskWrapperManager.getInstance()
|
||||
.getNormalTaskWrapper(UTaskWrapper.class, entity.getId()));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加恢复实体
|
||||
*/
|
||||
private void addResumeEntity(AbsTaskWrapper te) {
|
||||
if (te == null || te.getEntity() == null || TextUtils.isEmpty(te.getKey())) {
|
||||
return;
|
||||
}
|
||||
mWaitList.add(te);
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理等待状态的任务
|
||||
*/
|
||||
private void resumeWaitTask() {
|
||||
|
||||
if (mWaitList == null || mWaitList.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
List<AbsEntity> resumeEntities = new ArrayList<>();
|
||||
|
||||
for (AbsTaskWrapper wrapper : mWaitList) {
|
||||
AbsTaskQueue queue = null;
|
||||
if (wrapper instanceof DTaskWrapper) {
|
||||
queue = DTaskQueue.getInstance();
|
||||
} else if (wrapper instanceof UTaskWrapper) {
|
||||
queue = UTaskQueue.getInstance();
|
||||
} else if (wrapper instanceof DGTaskWrapper) {
|
||||
queue = DGroupTaskQueue.getInstance();
|
||||
}
|
||||
|
||||
if (queue == null){
|
||||
ALog.e(TAG, "任务类型错误");
|
||||
continue;
|
||||
}
|
||||
|
||||
if (wrapper.getEntity() == null || TextUtils.isEmpty(wrapper.getKey())) {
|
||||
ALog.e(TAG, "任务实体为空或key为空");
|
||||
continue;
|
||||
}
|
||||
|
||||
AbsTask task = queue.getTask(wrapper.getKey());
|
||||
if (task != null) {
|
||||
ALog.w(TAG, "任务已存在");
|
||||
continue;
|
||||
}
|
||||
|
||||
int maxTaskNum = queue.getMaxTaskNum();
|
||||
task = queue.createTask(wrapper);
|
||||
if (task == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
handleWrapper(wrapper);
|
||||
|
||||
if (queue.getCurrentExePoolNum() < maxTaskNum) {
|
||||
queue.startTask(task);
|
||||
} else {
|
||||
wrapper.getEntity().setState(IEntity.STATE_WAIT);
|
||||
sendWaitState(task);
|
||||
resumeEntities.add(wrapper.getEntity());
|
||||
}
|
||||
}
|
||||
if (!resumeEntities.isEmpty()) {
|
||||
DbEntity.updateManyData(resumeEntities);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 处理ftp的wrapper
|
||||
*/
|
||||
private void handleWrapper(AbsTaskWrapper wrapper) {
|
||||
int requestType = wrapper.getRequestType();
|
||||
if (requestType == ITaskWrapper.D_FTP
|
||||
|| requestType == ITaskWrapper.U_FTP
|
||||
|| requestType == ITaskWrapper.D_FTP_DIR) {
|
||||
wrapper.getOptionParams()
|
||||
.setParams(IOptionConstant.ftpUrlEntity,
|
||||
CommonUtil.getFtpUrlInfo(wrapper.getEntity().getKey()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 发送等待状态
|
||||
*/
|
||||
private void sendWaitState(AbsTask task) {
|
||||
if (task != null) {
|
||||
task.getTaskWrapper().setState(IEntity.STATE_WAIT);
|
||||
task.getOutHandler().obtainMessage(ISchedulers.WAIT, task).sendToTarget();
|
||||
}
|
||||
}
|
||||
|
||||
@Override public void run() {
|
||||
if (isDownloadCmd) {
|
||||
findTaskData(1);
|
||||
findTaskData(2);
|
||||
} else {
|
||||
findTaskData(3);
|
||||
}
|
||||
resumeWaitTask();
|
||||
}
|
||||
}
|
||||
@@ -18,27 +18,11 @@ package com.arialyy.aria.core.command;
|
||||
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.common.QueueMod;
|
||||
import com.arialyy.aria.core.download.DGTaskWrapper;
|
||||
import com.arialyy.aria.core.download.DTaskWrapper;
|
||||
import com.arialyy.aria.core.download.DownloadEntity;
|
||||
import com.arialyy.aria.core.download.DownloadGroupEntity;
|
||||
import com.arialyy.aria.core.inf.IEntity;
|
||||
import com.arialyy.aria.core.task.AbsTask;
|
||||
import com.arialyy.aria.core.wrapper.AbsTaskWrapper;
|
||||
import com.arialyy.aria.core.inf.IEntity;
|
||||
import com.arialyy.aria.core.inf.IOptionConstant;
|
||||
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.UTaskQueue;
|
||||
import com.arialyy.aria.core.upload.UTaskWrapper;
|
||||
import com.arialyy.aria.core.upload.UploadEntity;
|
||||
import com.arialyy.aria.core.wrapper.ITaskWrapper;
|
||||
import com.arialyy.aria.orm.DbEntity;
|
||||
import com.arialyy.aria.util.ALog;
|
||||
import com.arialyy.aria.util.CommonUtil;
|
||||
import com.arialyy.aria.util.NetUtils;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by lyy on 2016/8/22. 开始命令 队列模型{@link QueueMod#NOW}、{@link QueueMod#WAIT}
|
||||
@@ -107,75 +91,6 @@ final class StartCmd<T extends AbsTaskWrapper> extends AbsNormalCmd<T> {
|
||||
* 当缓冲队列为null时,查找数据库中所有等待中的任务
|
||||
*/
|
||||
private void findAllWaitTask() {
|
||||
new Thread(new WaitTaskThread()).start();
|
||||
}
|
||||
|
||||
private class WaitTaskThread implements Runnable {
|
||||
|
||||
@Override public void run() {
|
||||
if (isDownloadCmd) {
|
||||
handleTask(findWaitData(1));
|
||||
handleTask(findWaitData(2));
|
||||
} else {
|
||||
handleTask(findWaitData(3));
|
||||
}
|
||||
}
|
||||
|
||||
private List<AbsTaskWrapper> findWaitData(int type) {
|
||||
List<AbsTaskWrapper> waitList = new ArrayList<>();
|
||||
TaskWrapperManager tManager = TaskWrapperManager.getInstance();
|
||||
if (type == 1) { // 普通下载任务
|
||||
List<DownloadEntity> dEntities = DbEntity.findDatas(DownloadEntity.class,
|
||||
"isGroupChild=? and state=?", "false", "3");
|
||||
if (dEntities != null && !dEntities.isEmpty()) {
|
||||
for (DownloadEntity e : dEntities) {
|
||||
waitList.add(tManager.getNormalTaskWrapper(DTaskWrapper.class, e.getId()));
|
||||
}
|
||||
}
|
||||
} else if (type == 2) { // 组合任务
|
||||
List<DownloadGroupEntity> dEntities =
|
||||
DbEntity.findDatas(DownloadGroupEntity.class, "state=?", "3");
|
||||
if (dEntities != null && !dEntities.isEmpty()) {
|
||||
for (DownloadGroupEntity e : dEntities) {
|
||||
if (e.getTaskType() == ITaskWrapper.DG_HTTP) {
|
||||
waitList.add(tManager.getGroupWrapper(DGTaskWrapper.class, e.getId()));
|
||||
} else if (e.getTaskType() == ITaskWrapper.D_FTP_DIR) {
|
||||
waitList.add(tManager.getGroupWrapper(DGTaskWrapper.class, e.getId()));
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (type == 3) { //普通上传任务
|
||||
List<UploadEntity> dEntities = DbEntity.findDatas(UploadEntity.class, "state=?", "3");
|
||||
|
||||
if (dEntities != null && !dEntities.isEmpty()) {
|
||||
for (UploadEntity e : dEntities) {
|
||||
waitList.add(tManager.getNormalTaskWrapper(UTaskWrapper.class, e.getId()));
|
||||
}
|
||||
}
|
||||
}
|
||||
return waitList;
|
||||
}
|
||||
|
||||
private void handleTask(List<AbsTaskWrapper> waitList) {
|
||||
for (AbsTaskWrapper wrapper : waitList) {
|
||||
if (wrapper.getEntity() == null) continue;
|
||||
AbsTask task = getTask(wrapper.getKey());
|
||||
if (task != null) continue;
|
||||
if (wrapper instanceof DTaskWrapper) {
|
||||
if (wrapper.getRequestType() == ITaskWrapper.D_FTP
|
||||
|| wrapper.getRequestType() == ITaskWrapper.U_FTP) {
|
||||
wrapper.getOptionParams()
|
||||
.setParams(IOptionConstant.ftpUrlEntity,
|
||||
CommonUtil.getFtpUrlInfo(wrapper.getEntity().getKey()));
|
||||
}
|
||||
mQueue = DTaskQueue.getInstance();
|
||||
} else if (wrapper instanceof UTaskWrapper) {
|
||||
mQueue = UTaskQueue.getInstance();
|
||||
} else if (wrapper instanceof DGTaskWrapper) {
|
||||
mQueue = DGroupTaskQueue.getInstance();
|
||||
}
|
||||
createTask(wrapper);
|
||||
}
|
||||
}
|
||||
new Thread(new ResumeThread(isDownloadCmd, IEntity.STATE_WAIT)).start();
|
||||
}
|
||||
}
|
||||
@@ -19,6 +19,7 @@ import com.arialyy.aria.core.command.NormalCmdFactory;
|
||||
import com.arialyy.aria.core.event.EventMsgUtil;
|
||||
import com.arialyy.aria.core.wrapper.AbsTaskWrapper;
|
||||
import com.arialyy.aria.core.command.CmdHelper;
|
||||
import com.arialyy.aria.util.ALog;
|
||||
|
||||
/**
|
||||
* 创建任务时使用的控制器
|
||||
|
||||
@@ -133,18 +133,8 @@ public class CheckDEntityUtil implements ICheckEntityUtil {
|
||||
private boolean checkPathConflicts(String filePath) {
|
||||
//设置文件保存路径,如果新文件路径和旧文件路径不同,则修改路径
|
||||
if (!filePath.equals(mEntity.getFilePath())) {
|
||||
|
||||
//if (DbEntity.checkDataExist(DownloadEntity.class, "downloadPath=?", filePath)) {
|
||||
// if (!mWrapper.isForceDownload()) {
|
||||
// ALog.e(TAG, String.format("下载失败,保存路径【%s】已经被其它任务占用,请设置其它保存路径", filePath));
|
||||
// return false;
|
||||
// } else {
|
||||
// ALog.w(TAG, String.format("保存路径【%s】已经被其它任务占用,当前任务将覆盖该路径的文件", filePath));
|
||||
// RecordUtil.delTaskRecord(filePath, IRecordHandler.TYPE_DOWNLOAD);
|
||||
// }
|
||||
//}
|
||||
// 检查路径冲突
|
||||
if (!CheckUtil.checkAndHandlePathConflicts(mWrapper.isForceDownload(), filePath)) {
|
||||
if (!CheckUtil.checkDownloadPathConflicts(mWrapper.isForceDownload(), filePath)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -42,14 +42,17 @@ class DGTaskWrapperFactory implements IGroupWrapperFactory<DownloadGroupEntity,
|
||||
}
|
||||
|
||||
@Override public DGTaskWrapper getGroupWrapper(long taskId) {
|
||||
DGTaskWrapper wrapper;
|
||||
if (taskId == -1) {
|
||||
return new DGTaskWrapper(new DownloadGroupEntity());
|
||||
}
|
||||
DownloadGroupEntity entity = getOrCreateHttpDGEntity(taskId);
|
||||
DGTaskWrapper wrapper = new DGTaskWrapper(entity);
|
||||
if (entity.getSubEntities() != null && !entity.getSubEntities().isEmpty()) {
|
||||
wrapper.setSubTaskWrapper(DbDataHelper.createDGSubTaskWrapper(entity));
|
||||
wrapper = new DGTaskWrapper(new DownloadGroupEntity());
|
||||
}else {
|
||||
DownloadGroupEntity entity = getOrCreateHttpDGEntity(taskId);
|
||||
wrapper = new DGTaskWrapper(entity);
|
||||
if (entity.getSubEntities() != null && !entity.getSubEntities().isEmpty()) {
|
||||
wrapper.setSubTaskWrapper(DbDataHelper.createDGSubTaskWrapper(entity));
|
||||
}
|
||||
}
|
||||
wrapper.setRequestType(wrapper.getEntity().getTaskType());
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
|
||||
@@ -45,11 +45,14 @@ class DTaskWrapperFactory implements INormalTEFactory<DownloadEntity, DTaskWrapp
|
||||
* 通过下载地址创建任务实体
|
||||
*/
|
||||
@Override public DTaskWrapper create(long taskId) {
|
||||
DTaskWrapper wrapper;
|
||||
if (taskId == -1) {
|
||||
return new DTaskWrapper(new DownloadEntity());
|
||||
wrapper = new DTaskWrapper(new DownloadEntity());
|
||||
} else {
|
||||
wrapper = new DTaskWrapper(getEntity(taskId));
|
||||
}
|
||||
|
||||
return new DTaskWrapper(getEntity(taskId));
|
||||
wrapper.setRequestType(wrapper.getEntity().getTaskType());
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -17,6 +17,7 @@ package com.arialyy.aria.core.manager;
|
||||
|
||||
import com.arialyy.aria.core.upload.UTaskWrapper;
|
||||
import com.arialyy.aria.core.upload.UploadEntity;
|
||||
import com.arialyy.aria.util.ALog;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/11/1. 任务实体工厂
|
||||
@@ -38,10 +39,15 @@ class UTaskWrapperFactory implements INormalTEFactory<UploadEntity, UTaskWrapper
|
||||
}
|
||||
|
||||
@Override public UTaskWrapper create(long taskId) {
|
||||
UTaskWrapper wrapper;
|
||||
if (taskId == -1) {
|
||||
return new UTaskWrapper(new UploadEntity());
|
||||
wrapper = new UTaskWrapper(new UploadEntity());
|
||||
} else {
|
||||
wrapper = new UTaskWrapper(getUploadEntity(taskId));
|
||||
}
|
||||
return new UTaskWrapper(getUploadEntity(taskId));
|
||||
|
||||
wrapper.setRequestType(wrapper.getEntity().getTaskType());
|
||||
return wrapper;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -16,7 +16,6 @@
|
||||
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;
|
||||
@@ -60,6 +59,11 @@ public class CheckUEntityUtil implements ICheckEntityUtil {
|
||||
return false;
|
||||
}
|
||||
|
||||
// 检查路径冲突
|
||||
if (!CheckUtil.checkUploadPathConflicts(mWrapper.isForceUpload(), filePath)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
File file = new File(mEntity.getFilePath());
|
||||
if (!file.exists()) {
|
||||
ALog.e(TAG, "上传失败,文件【" + filePath + "】不存在");
|
||||
@@ -69,6 +73,7 @@ public class CheckUEntityUtil implements ICheckEntityUtil {
|
||||
ALog.e(TAG, "上传失败,文件【" + filePath + "】不能是文件夹");
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -19,7 +19,8 @@ import androidx.annotation.CheckResult;
|
||||
import com.arialyy.aria.core.common.AbsBuilderTarget;
|
||||
import com.arialyy.aria.core.common.FtpOption;
|
||||
import com.arialyy.aria.core.inf.Suggest;
|
||||
import com.arialyy.aria.core.wrapper.AbsTaskWrapper;
|
||||
import com.arialyy.aria.core.upload.UTaskWrapper;
|
||||
import com.arialyy.aria.core.wrapper.ITaskWrapper;
|
||||
import com.arialyy.aria.util.CommonUtil;
|
||||
|
||||
/**
|
||||
@@ -33,7 +34,7 @@ public class FtpBuilderTarget extends AbsBuilderTarget<FtpBuilderTarget> {
|
||||
FtpBuilderTarget(String filePath) {
|
||||
mConfigHandler = new UNormalConfigHandler<>(this, -1);
|
||||
mConfigHandler.setFilePath(filePath);
|
||||
getTaskWrapper().setRequestType(AbsTaskWrapper.U_FTP);
|
||||
getTaskWrapper().setRequestType(ITaskWrapper.U_FTP);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -48,6 +49,14 @@ public class FtpBuilderTarget extends AbsBuilderTarget<FtpBuilderTarget> {
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 如果文件路径被其它任务占用,删除其它任务
|
||||
*/
|
||||
public FtpBuilderTarget forceUpload() {
|
||||
((UTaskWrapper)getTaskWrapper()).setForceUpload(true);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置登陆、字符串编码、ftps等参数
|
||||
*/
|
||||
|
||||
@@ -20,7 +20,7 @@ import com.arialyy.aria.core.common.AbsNormalTarget;
|
||||
import com.arialyy.aria.core.common.FtpOption;
|
||||
import com.arialyy.aria.core.inf.Suggest;
|
||||
import com.arialyy.aria.core.upload.UploadEntity;
|
||||
import com.arialyy.aria.core.wrapper.AbsTaskWrapper;
|
||||
import com.arialyy.aria.core.wrapper.ITaskWrapper;
|
||||
import com.arialyy.aria.util.CommonUtil;
|
||||
|
||||
/**
|
||||
@@ -32,7 +32,7 @@ public class FtpNormalTarget extends AbsNormalTarget<FtpNormalTarget> {
|
||||
|
||||
FtpNormalTarget(long taskId) {
|
||||
mConfigHandler = new UNormalConfigHandler<>(this, taskId);
|
||||
getTaskWrapper().setRequestType(AbsTaskWrapper.U_FTP);
|
||||
getTaskWrapper().setRequestType(ITaskWrapper.U_FTP);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -19,6 +19,7 @@ import androidx.annotation.CheckResult;
|
||||
import com.arialyy.aria.core.common.AbsBuilderTarget;
|
||||
import com.arialyy.aria.core.common.HttpOption;
|
||||
import com.arialyy.aria.core.inf.Suggest;
|
||||
import com.arialyy.aria.core.upload.UTaskWrapper;
|
||||
import com.arialyy.aria.core.wrapper.AbsTaskWrapper;
|
||||
|
||||
/**
|
||||
@@ -60,4 +61,12 @@ public class HttpBuilderTarget extends AbsBuilderTarget<HttpBuilderTarget> {
|
||||
getTaskWrapper().getOptionParams().setParams(option);
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 如果文件路径被其它任务占用,删除其它任务
|
||||
*/
|
||||
public HttpBuilderTarget forceUpload() {
|
||||
((UTaskWrapper) getTaskWrapper()).setForceUpload(true);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user