修复不支持断点的下载地址,重复下载出现的数据库主键冲突问题
This commit is contained in:
@@ -39,8 +39,7 @@ import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
/**
|
||||
* Created by AriaL on 2017/7/1.
|
||||
* 任务处理器
|
||||
* Created by AriaL on 2017/7/1. 任务处理器
|
||||
*/
|
||||
public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY extends AbsTaskEntity<ENTITY>>
|
||||
implements Runnable {
|
||||
@@ -299,11 +298,7 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查记录
|
||||
* 对于分块任务:
|
||||
* 子分块不存在或被删除,子线程将重新下载
|
||||
* 对于普通任务:
|
||||
* 预下载文件不存在,则任务任务呗删除
|
||||
* 检查记录 对于分块任务: 子分块不存在或被删除,子线程将重新下载 对于普通任务: 预下载文件不存在,则任务任务呗删除
|
||||
*/
|
||||
private void checkRecord() {
|
||||
mConfigFile = new File(CommonUtil.getFileConfigPath(false, mEntity.getFileName()));
|
||||
@@ -421,9 +416,7 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
|
||||
}
|
||||
|
||||
/**
|
||||
* convertDb 是兼容性代码
|
||||
* 从3.4.1开始,线程配置信息将存储在数据库中。
|
||||
* 将配置文件的内容复制到数据库中,并将配置文件删除
|
||||
* convertDb 是兼容性代码 从3.4.1开始,线程配置信息将存储在数据库中。 将配置文件的内容复制到数据库中,并将配置文件删除
|
||||
*/
|
||||
private void convertDb() {
|
||||
List<RecordWrapper> records =
|
||||
@@ -655,7 +648,7 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
|
||||
* 处理不支持断点的任务
|
||||
*/
|
||||
private void handleNoSupportBP() {
|
||||
if (mListener instanceof BaseDListener){
|
||||
if (mListener instanceof BaseDListener) {
|
||||
((BaseDListener) mListener).supportBreakpoint(false);
|
||||
}
|
||||
SubThreadConfig<TASK_ENTITY> config = new SubThreadConfig<>();
|
||||
@@ -667,10 +660,15 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
|
||||
config.END_LOCATION = config.TOTAL_FILE_SIZE;
|
||||
config.SUPPORT_BP = mTaskEntity.isSupportBP();
|
||||
config.TASK_ENTITY = mTaskEntity;
|
||||
ThreadRecord record = new ThreadRecord();
|
||||
ThreadRecord record = DbEntity.findFirst(ThreadRecord.class, "key=?", mRecord.filePath);
|
||||
if (record != null) {
|
||||
record.deleteData();
|
||||
}
|
||||
record = new ThreadRecord();
|
||||
record.startLocation = 0;
|
||||
record.endLocation = config.TOTAL_FILE_SIZE;
|
||||
record.key = mTempFile.getPath();
|
||||
mRecord.threadRecords.add(record);
|
||||
config.THREAD_RECORD = record;
|
||||
AbsThreadTask task = selectThreadTask(config);
|
||||
if (task == null) return;
|
||||
|
||||
@@ -69,12 +69,8 @@ abstract class BaseNormalTarget<TARGET extends BaseNormalTarget>
|
||||
}
|
||||
|
||||
/**
|
||||
* 将任务设置为最高优先级任务,最高优先级任务有以下特点:
|
||||
* 1、在下载队列中,有且只有一个最高优先级任务
|
||||
* 2、最高优先级任务会一直存在,直到用户手动暂停或任务完成
|
||||
* 3、任务调度器不会暂停最高优先级任务
|
||||
* 4、用户手动暂停或任务完成后,第二次重新执行该任务,该命令将失效
|
||||
* 5、如果下载队列中已经满了,则会停止队尾的任务,当高优先级任务完成后,该队尾任务将自动执行
|
||||
* 将任务设置为最高优先级任务,最高优先级任务有以下特点: 1、在下载队列中,有且只有一个最高优先级任务 2、最高优先级任务会一直存在,直到用户手动暂停或任务完成
|
||||
* 3、任务调度器不会暂停最高优先级任务 4、用户手动暂停或任务完成后,第二次重新执行该任务,该命令将失效 5、如果下载队列中已经满了,则会停止队尾的任务,当高优先级任务完成后,该队尾任务将自动执行
|
||||
* 6、把任务设置为最高优先级任务后,将自动执行任务,不需要重新调用start()启动任务
|
||||
*/
|
||||
@Override public void setHighestPriority() {
|
||||
@@ -117,10 +113,7 @@ abstract class BaseNormalTarget<TARGET extends BaseNormalTarget>
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查下载实体,判断实体是否合法
|
||||
* 合法标准为:
|
||||
* 1、下载路径不为null,并且下载路径是正常的http或ftp路径
|
||||
* 2、保存路径不为null,并且保存路径是android文件系统路径
|
||||
* 检查下载实体,判断实体是否合法 合法标准为: 1、下载路径不为null,并且下载路径是正常的http或ftp路径 2、保存路径不为null,并且保存路径是android文件系统路径
|
||||
* 3、保存路径不能重复
|
||||
*
|
||||
* @return {@code true}合法
|
||||
@@ -165,6 +158,7 @@ abstract class BaseNormalTarget<TARGET extends BaseNormalTarget>
|
||||
|
||||
//设置文件保存路径,如果新文件路径和旧文件路径不同,则修改路径
|
||||
if (!filePath.equals(mEntity.getDownloadPath())) {
|
||||
// 检查路径冲突
|
||||
if (DbEntity.checkDataExist(DownloadEntity.class, "downloadPath=?", filePath)) {
|
||||
if (!forceDownload) {
|
||||
ALog.e(TAG, "下载失败,保存路径【" + filePath + "】已经被其它任务占用,请设置其它保存路径");
|
||||
|
||||
@@ -175,6 +175,7 @@ class DelegateFind extends AbsDelegate {
|
||||
} else {
|
||||
sql = sb.toString();
|
||||
}
|
||||
//ALog.d(TAG, sql);
|
||||
print(RELATION, sql);
|
||||
Cursor cursor = db.rawQuery(sql, null);
|
||||
List<T> data =
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
## 开发日志
|
||||
+ v_3.5.4
|
||||
- 修复不支持断点的下载地址,重复下载出现的数据库主键冲突问题
|
||||
+ v_3.5.3 (2018/12/23)
|
||||
- 修复ftps不能加载默认证书的bug https://github.com/AriaLyy/Aria/issues/334
|
||||
- 优化注解性能,移除不必要的判断代码
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<!--android:name=".download.group.DownloadGroupActivity"-->
|
||||
<!--android:name=".MainActivity"-->
|
||||
<activity
|
||||
android:name=".upload.FtpUploadActivity"
|
||||
android:name=".download.SingleTaskActivity"
|
||||
android:label="@string/app_name">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
|
||||
@@ -67,7 +67,7 @@ public class SingleTaskActivity extends BaseActivity<ActivitySingleBinding> {
|
||||
//"https://dl.genymotion.com/releases/genymotion-2.12.1/genymotion-2.12.1-vbox.exe";
|
||||
//"http://9.9.9.50:5000/download1";
|
||||
//"http://9.9.9.50:5000/download/CentOS-7-x86_64-Minimal-1804.iso";
|
||||
"http://cdn-s1.touchfound.com/theme/1543979562763_6907.zip";
|
||||
"http://v2.qingdian1.com/m_20180730_991/2/2B9FB34A4BCD8CE61481D1C8418EFE36_1080P.m3u8";
|
||||
//"https://firmwareapi.azurewebsites.net/firmware-overview?name=A19_Filament_W_IMG0038_00102411-encrypted.ota";
|
||||
@Bind(R.id.start) Button mStart;
|
||||
@Bind(R.id.stop) Button mStop;
|
||||
|
||||
Reference in New Issue
Block a user