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

v3.6.6
laoyuyu 6 years ago
parent c1cb23065f
commit f0d26e8aac
  1. 20
      Aria/src/main/java/com/arialyy/aria/core/common/AbsFileer.java
  2. 14
      Aria/src/main/java/com/arialyy/aria/core/download/BaseNormalTarget.java
  3. 1
      Aria/src/main/java/com/arialyy/aria/orm/DelegateFind.java
  4. 2
      DEV_LOG.md
  5. 2
      app/src/main/AndroidManifest.xml
  6. 2
      app/src/main/java/com/arialyy/simple/download/SingleTaskActivity.java

@ -39,8 +39,7 @@ import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.TimeUnit; 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>> public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY extends AbsTaskEntity<ENTITY>>
implements Runnable { implements Runnable {
@ -299,11 +298,7 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
} }
/** /**
* 检查记录 * 检查记录 对于分块任务 子分块不存在或被删除子线程将重新下载 对于普通任务 预下载文件不存在则任务任务呗删除
* 对于分块任务
* 子分块不存在或被删除子线程将重新下载
* 对于普通任务
* 预下载文件不存在则任务任务呗删除
*/ */
private void checkRecord() { private void checkRecord() {
mConfigFile = new File(CommonUtil.getFileConfigPath(false, mEntity.getFileName())); mConfigFile = new File(CommonUtil.getFileConfigPath(false, mEntity.getFileName()));
@ -421,9 +416,7 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
} }
/** /**
* convertDb 是兼容性代码 * convertDb 是兼容性代码 从3.4.1开始线程配置信息将存储在数据库中 将配置文件的内容复制到数据库中并将配置文件删除
* 从3.4.1开始线程配置信息将存储在数据库中
* 将配置文件的内容复制到数据库中并将配置文件删除
*/ */
private void convertDb() { private void convertDb() {
List<RecordWrapper> records = List<RecordWrapper> records =
@ -667,10 +660,15 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
config.END_LOCATION = config.TOTAL_FILE_SIZE; config.END_LOCATION = config.TOTAL_FILE_SIZE;
config.SUPPORT_BP = mTaskEntity.isSupportBP(); config.SUPPORT_BP = mTaskEntity.isSupportBP();
config.TASK_ENTITY = mTaskEntity; 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.startLocation = 0;
record.endLocation = config.TOTAL_FILE_SIZE; record.endLocation = config.TOTAL_FILE_SIZE;
record.key = mTempFile.getPath(); record.key = mTempFile.getPath();
mRecord.threadRecords.add(record);
config.THREAD_RECORD = record; config.THREAD_RECORD = record;
AbsThreadTask task = selectThreadTask(config); AbsThreadTask task = selectThreadTask(config);
if (task == null) return; if (task == null) return;

@ -69,12 +69,8 @@ abstract class BaseNormalTarget<TARGET extends BaseNormalTarget>
} }
/** /**
* 将任务设置为最高优先级任务最高优先级任务有以下特点 * 将任务设置为最高优先级任务最高优先级任务有以下特点 1在下载队列中有且只有一个最高优先级任务 2最高优先级任务会一直存在直到用户手动暂停或任务完成
* 1在下载队列中有且只有一个最高优先级任务 * 3任务调度器不会暂停最高优先级任务 4用户手动暂停或任务完成后第二次重新执行该任务该命令将失效 5如果下载队列中已经满了则会停止队尾的任务当高优先级任务完成后该队尾任务将自动执行
* 2最高优先级任务会一直存在直到用户手动暂停或任务完成
* 3任务调度器不会暂停最高优先级任务
* 4用户手动暂停或任务完成后第二次重新执行该任务该命令将失效
* 5如果下载队列中已经满了则会停止队尾的任务当高优先级任务完成后该队尾任务将自动执行
* 6把任务设置为最高优先级任务后将自动执行任务不需要重新调用start()启动任务 * 6把任务设置为最高优先级任务后将自动执行任务不需要重新调用start()启动任务
*/ */
@Override public void setHighestPriority() { @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保存路径不能重复 * 3保存路径不能重复
* *
* @return {@code true}合法 * @return {@code true}合法
@ -165,6 +158,7 @@ abstract class BaseNormalTarget<TARGET extends BaseNormalTarget>
//设置文件保存路径,如果新文件路径和旧文件路径不同,则修改路径 //设置文件保存路径,如果新文件路径和旧文件路径不同,则修改路径
if (!filePath.equals(mEntity.getDownloadPath())) { if (!filePath.equals(mEntity.getDownloadPath())) {
// 检查路径冲突
if (DbEntity.checkDataExist(DownloadEntity.class, "downloadPath=?", filePath)) { if (DbEntity.checkDataExist(DownloadEntity.class, "downloadPath=?", filePath)) {
if (!forceDownload) { if (!forceDownload) {
ALog.e(TAG, "下载失败,保存路径【" + filePath + "】已经被其它任务占用,请设置其它保存路径"); ALog.e(TAG, "下载失败,保存路径【" + filePath + "】已经被其它任务占用,请设置其它保存路径");

@ -175,6 +175,7 @@ class DelegateFind extends AbsDelegate {
} else { } else {
sql = sb.toString(); sql = sb.toString();
} }
//ALog.d(TAG, sql);
print(RELATION, sql); print(RELATION, sql);
Cursor cursor = db.rawQuery(sql, null); Cursor cursor = db.rawQuery(sql, null);
List<T> data = List<T> data =

@ -1,4 +1,6 @@
## 开发日志 ## 开发日志
+ v_3.5.4
- 修复不支持断点的下载地址,重复下载出现的数据库主键冲突问题
+ v_3.5.3 (2018/12/23) + v_3.5.3 (2018/12/23)
- 修复ftps不能加载默认证书的bug https://github.com/AriaLyy/Aria/issues/334 - 修复ftps不能加载默认证书的bug https://github.com/AriaLyy/Aria/issues/334
- 优化注解性能,移除不必要的判断代码 - 优化注解性能,移除不必要的判断代码

@ -20,7 +20,7 @@
<!--android:name=".download.group.DownloadGroupActivity"--> <!--android:name=".download.group.DownloadGroupActivity"-->
<!--android:name=".MainActivity"--> <!--android:name=".MainActivity"-->
<activity <activity
android:name=".upload.FtpUploadActivity" android:name=".download.SingleTaskActivity"
android:label="@string/app_name"> android:label="@string/app_name">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN"/> <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"; //"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/download1";
//"http://9.9.9.50:5000/download/CentOS-7-x86_64-Minimal-1804.iso"; //"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"; //"https://firmwareapi.azurewebsites.net/firmware-overview?name=A19_Filament_W_IMG0038_00102411-encrypted.ota";
@Bind(R.id.start) Button mStart; @Bind(R.id.start) Button mStart;
@Bind(R.id.stop) Button mStop; @Bind(R.id.stop) Button mStop;

Loading…
Cancel
Save