Permalink
Browse files

修复不支持断点的下载地址,重复下载出现的数据库主键冲突问题

  • Loading branch information...
AriaLyy committed Jan 7, 2019
1 parent c1cb230 commit f0d26e8aac4e0d807002512ab7e23eefe27cf68d
@@ -39,8 +39,7 @@
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 void resume() {
}

/**
* 检查记录
* 对于分块任务:
* 子分块不存在或被删除,子线程将重新下载
* 对于普通任务:
* 预下载文件不存在,则任务任务呗删除
* 检查记录 对于分块任务: 子分块不存在或被删除,子线程将重新下载 对于普通任务: 预下载文件不存在,则任务任务呗删除
*/
private void checkRecord() {
mConfigFile = new File(CommonUtil.getFileConfigPath(false, mEntity.getFileName()));
@@ -421,9 +416,7 @@ private void handleBlockRecord() {
}

/**
* convertDb 是兼容性代码
* 从3.4.1开始,线程配置信息将存储在数据库中。
* 将配置文件的内容复制到数据库中,并将配置文件删除
* convertDb 是兼容性代码 从3.4.1开始,线程配置信息将存储在数据库中。 将配置文件的内容复制到数据库中,并将配置文件删除
*/
private void convertDb() {
List<RecordWrapper> records =
@@ -655,7 +648,7 @@ public void retryTask() {
* 处理不支持断点的任务
*/
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 @@ private void handleNoSupportBP() {
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 @@ public TARGET updateUrl(String newUrl) {
}

/**
* 将任务设置为最高优先级任务,最高优先级任务有以下特点:
* 1、在下载队列中,有且只有一个最高优先级任务
* 2、最高优先级任务会一直存在,直到用户手动暂停或任务完成
* 3、任务调度器不会暂停最高优先级任务
* 4、用户手动暂停或任务完成后,第二次重新执行该任务,该命令将失效
* 5、如果下载队列中已经满了,则会停止队尾的任务,当高优先级任务完成后,该队尾任务将自动执行
* 将任务设置为最高优先级任务,最高优先级任务有以下特点: 1、在下载队列中,有且只有一个最高优先级任务 2、最高优先级任务会一直存在,直到用户手动暂停或任务完成
* 3、任务调度器不会暂停最高优先级任务 4、用户手动暂停或任务完成后,第二次重新执行该任务,该命令将失效 5、如果下载队列中已经满了,则会停止队尾的任务,当高优先级任务完成后,该队尾任务将自动执行
* 6、把任务设置为最高优先级任务后,将自动执行任务,不需要重新调用start()启动任务
*/
@Override public void setHighestPriority() {
@@ -117,10 +113,7 @@ public DownloadEntity getDownloadEntity() {
}

/**
* 检查下载实体,判断实体是否合法
* 合法标准为:
* 1、下载路径不为null,并且下载路径是正常的http或ftp路径
* 2、保存路径不为null,并且保存路径是android文件系统路径
* 检查下载实体,判断实体是否合法 合法标准为: 1、下载路径不为null,并且下载路径是正常的http或ftp路径 2、保存路径不为null,并且保存路径是android文件系统路径
* 3、保存路径不能重复
*
* @return {@code true}合法
@@ -165,6 +158,7 @@ private boolean checkFilePath() {

//设置文件保存路径,如果新文件路径和旧文件路径不同,则修改路径
if (!filePath.equals(mEntity.getDownloadPath())) {
// 检查路径冲突
if (DbEntity.checkDataExist(DownloadEntity.class, "downloadPath=?", filePath)) {
if (!forceDownload) {
ALog.e(TAG, "下载失败,保存路径【" + filePath + "】已经被其它任务占用,请设置其它保存路径");
@@ -175,6 +175,7 @@ private DelegateFind() {
} 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 @@
//"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;

0 comments on commit f0d26e8

Please sign in to comment.