diff --git a/Aria/build.gradle b/Aria/build.gradle index 572c2daa..025b23bb 100644 --- a/Aria/build.gradle +++ b/Aria/build.gradle @@ -26,8 +26,8 @@ dependencies { testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.1.1' compile project(':AriaAnnotations') -// compile 'com.arialyy.aria:aria-ftp-plug:1.0.3' + compile 'com.arialyy.aria:aria-ftp-plug:1.0.3' - compile project(':AriaFtpPlug') +// compile project(':AriaFtpPlug') } apply from: 'bintray-release.gradle' diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/normal/AbsNormalCmd.java b/Aria/src/main/java/com/arialyy/aria/core/command/normal/AbsNormalCmd.java index c4964772..7e6a996a 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/command/normal/AbsNormalCmd.java +++ b/Aria/src/main/java/com/arialyy/aria/core/command/normal/AbsNormalCmd.java @@ -90,10 +90,12 @@ public abstract class AbsNormalCmd extends AbsCmd { } /** - * 删除所有任务 + * 发送等待状态 */ - void removeAll() { - mQueue.removeAllTask(); + void sendWaitState(AbsTask task) { + if (task != null) { + task.getOutHandler().obtainMessage(ISchedulers.WAIT, task).sendToTarget(); + } } /** @@ -119,6 +121,17 @@ public abstract class AbsNormalCmd extends AbsCmd { mQueue.cancelTask(tempTask); } + /** + * 删除任务 + */ + void removeTask(AbsTaskEntity taskEntity) { + AbsTask tempTask = getTask(taskEntity.getEntity()); + if (tempTask == null){ + tempTask = createTask(taskEntity); + } + mQueue.cancelTask(tempTask); + } + /** * 启动任务 */ diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/normal/CancelAllCmd.java b/Aria/src/main/java/com/arialyy/aria/core/command/normal/CancelAllCmd.java index cd0197fb..9c4181a5 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/command/normal/CancelAllCmd.java +++ b/Aria/src/main/java/com/arialyy/aria/core/command/normal/CancelAllCmd.java @@ -16,7 +16,19 @@ package com.arialyy.aria.core.command.normal; +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.manager.TEManager; +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.UploadEntity; +import com.arialyy.aria.core.upload.UploadTaskEntity; +import com.arialyy.aria.orm.DbEntity; +import java.util.List; /** * Created by AriaL on 2017/6/27. @@ -37,6 +49,64 @@ public class CancelAllCmd extends AbsNormalCmd { } @Override public void executeCmd() { - removeAll(); + if (!canExeCmd) return; + if (isDownloadCmd) { + removeAllDTask(); + removeAllDGTask(); + } else { + removeUTask(); + } + } + + /** + * 删除所有普通下载任务 + */ + private void removeAllDTask() { + List entities = + DbEntity.findDatas(DownloadEntity.class, "isGroupChild=?", "false"); + if (entities != null && !entities.isEmpty()) { + for (DownloadEntity entity : entities) { + remove(TEManager.getInstance().getTEntity(DownloadTaskEntity.class, entity.getKey())); + } + } + } + + /** + * 删除所有下载任务组任务 + */ + private void removeAllDGTask() { + List entities = + DbEntity.findDatas(DownloadGroupEntity.class, "state!=?", "-1"); + if (entities != null && !entities.isEmpty()) { + for (DownloadGroupEntity entity : entities) { + remove( + TEManager.getInstance().getGTEntity(DownloadGroupTaskEntity.class, entity.getUrls())); + } + } + } + + /** + * 删除所有普通上传任务 + */ + private void removeUTask() { + List entities = + DbEntity.findDatas(UploadEntity.class, "isGroupChild=?", "false"); + if (entities != null && !entities.isEmpty()) { + for (UploadEntity entity : entities) { + remove(TEManager.getInstance().getTEntity(UploadTaskEntity.class, entity.getKey())); + } + } + } + + private void remove(AbsTaskEntity te) { + if (te instanceof DownloadTaskEntity) { + mQueue = DownloadTaskQueue.getInstance(); + } else if (te instanceof UploadTaskEntity) { + mQueue = UploadTaskQueue.getInstance(); + } else if (te instanceof DownloadGroupTaskEntity) { + mQueue = DownloadGroupTaskQueue.getInstance(); + } + te.setRemoveFile(removeFile); + removeTask(te); } } diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/normal/ResumeAllCmd.java b/Aria/src/main/java/com/arialyy/aria/core/command/normal/ResumeAllCmd.java index 2a6353ea..ef4cf1d2 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/command/normal/ResumeAllCmd.java +++ b/Aria/src/main/java/com/arialyy/aria/core/command/normal/ResumeAllCmd.java @@ -5,6 +5,7 @@ import com.arialyy.aria.core.download.DownloadGroupTaskEntity; import com.arialyy.aria.core.download.DownloadTaskEntity; import com.arialyy.aria.core.download.wrapper.DGTEWrapper; import com.arialyy.aria.core.download.wrapper.DTEWrapper; +import com.arialyy.aria.core.inf.AbsTask; import com.arialyy.aria.core.inf.AbsTaskEntity; import com.arialyy.aria.core.inf.IEntity; import com.arialyy.aria.core.queue.DownloadGroupTaskQueue; @@ -142,8 +143,8 @@ final class ResumeAllCmd extends AbsNormalCmd { startTask(createTask(te)); } else { te.getEntity().setState(IEntity.STATE_WAIT); - createTask(te); - sendWaitState(); + AbsTask task = createTask(te); + sendWaitState(task); } } } diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/normal/StartCmd.java b/Aria/src/main/java/com/arialyy/aria/core/command/normal/StartCmd.java index 51bad424..eaaf57d0 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/command/normal/StartCmd.java +++ b/Aria/src/main/java/com/arialyy/aria/core/command/normal/StartCmd.java @@ -117,7 +117,6 @@ class StartCmd extends AbsNormalCmd { } private List findWaitData(int type) { - // TODO: 2018/4/20 需要测试 List waitList = new ArrayList<>(); if (type == 1) { List wrappers = DbEntity.findRelationData(DTEWrapper.class, diff --git a/Aria/src/main/java/com/arialyy/aria/core/common/AbsFileer.java b/Aria/src/main/java/com/arialyy/aria/core/common/AbsFileer.java index a523335a..6bff75d7 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/common/AbsFileer.java +++ b/Aria/src/main/java/com/arialyy/aria/core/common/AbsFileer.java @@ -69,8 +69,7 @@ public abstract class AbsFileer mTask = new HashMap<>(); private Timer mTimer; - @Deprecated - private File mConfigFile; + @Deprecated private File mConfigFile; /** * 进度刷新间隔 */ @@ -356,6 +355,7 @@ public abstract class AbsFileer, TASK extends AbsTask> implements IDownloadListener { private static final String TAG = "BaseDListener"; - protected WeakReference outHandler; + WeakReference outHandler; private int RUN_SAVE_INTERVAL = 5 * 1000; //5s保存一次下载中的进度 private long mLastLen = 0; //上一次发送长度 private boolean isFirst = true; protected ENTITY mEntity; protected TASK_ENTITY mTaskEntity; - protected TASK mTask; + private TASK mTask; private boolean isConvertSpeed = false; boolean isWait = false; private long mLastSaveTime; diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/BaseGroupTarget.java b/Aria/src/main/java/com/arialyy/aria/core/download/BaseGroupTarget.java index 894580ef..bac8f572 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/BaseGroupTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/BaseGroupTarget.java @@ -15,6 +15,7 @@ */ package com.arialyy.aria.core.download; +import android.support.annotation.CheckResult; import android.text.TextUtils; import android.util.Log; import com.arialyy.aria.core.manager.SubTaskManager; @@ -49,6 +50,7 @@ abstract class BaseGroupTarget * * @return 子任务管理器 */ + @CheckResult public SubTaskManager getSubTaskManager() { if (mSubTaskManager == null) { mSubTaskManager = new SubTaskManager(mTargetName, mTaskEntity); @@ -59,6 +61,7 @@ abstract class BaseGroupTarget /** * 设置任务组别名 */ + @CheckResult public TARGET setGroupAlias(String alias) { if (TextUtils.isEmpty(alias)) return (TARGET) this; mEntity.setAlias(alias); @@ -76,6 +79,7 @@ abstract class BaseGroupTarget * @deprecated {@link #setDirPath(String)} 请使用这个api */ @Deprecated + @CheckResult public TARGET setDownloadDirPath(String groupDirPath) { return setDirPath(groupDirPath); } @@ -99,6 +103,7 @@ abstract class BaseGroupTarget * * @param dirPath 任务组保存文件夹路径 */ + @CheckResult public TARGET setDirPath(String dirPath) { mDirPathTemp = dirPath; return (TARGET) this; diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupListener.java b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupListener.java index 48cb6167..d029b959 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupListener.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupListener.java @@ -19,6 +19,7 @@ import android.os.Handler; import com.arialyy.aria.core.download.downloader.IDownloadGroupListener; import com.arialyy.aria.core.inf.GroupSendParams; import com.arialyy.aria.core.scheduler.ISchedulers; +import com.arialyy.aria.util.ALog; /** * Created by Aria.Lao on 2017/7/20. @@ -85,11 +86,17 @@ class DownloadGroupListener } private void saveCurrentLocation() { + if (mEntity.getSubEntities() == null || mEntity.getSubEntities().isEmpty()) { + ALog.w(TAG, "保存进度失败,子任务为null"); + return; + } long location = 0; for (DownloadEntity e : mEntity.getSubEntities()) { location += e.getCurrentProgress(); } - + if (location > mEntity.getFileSize()) { + location = mEntity.getFileSize(); + } mEntity.setCurrentProgress(location); mEntity.update(); } diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTarget.java b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTarget.java index dd148419..086c6e69 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTarget.java @@ -15,6 +15,7 @@ */ package com.arialyy.aria.core.download; +import android.support.annotation.CheckResult; import android.text.TextUtils; import com.arialyy.aria.core.manager.TEManager; import com.arialyy.aria.util.ALog; @@ -40,7 +41,7 @@ public class DownloadGroupTarget extends BaseGroupTarget { */ private List mSubNameTemp = new ArrayList<>(); - DownloadGroupTarget(DownloadGroupEntity groupEntity, String targetName) { + public DownloadGroupTarget(DownloadGroupEntity groupEntity, String targetName) { this.mTargetName = targetName; if (groupEntity.getUrls() != null && !groupEntity.getUrls().isEmpty()) { this.mUrls.addAll(groupEntity.getUrls()); @@ -72,6 +73,7 @@ public class DownloadGroupTarget extends BaseGroupTarget { * * @param fileSize 任务组总大小 */ + @CheckResult public DownloadGroupTarget setFileSize(long fileSize) { if (fileSize <= 0) { ALog.e(TAG, "文件大小不能小于 0"); @@ -86,6 +88,7 @@ public class DownloadGroupTarget extends BaseGroupTarget { /** * 如果你是使用{@link DownloadReceiver#load(DownloadGroupEntity)}进行下载操作,那么你需要设置任务组的下载地址 */ + @CheckResult public DownloadGroupTarget setGroupUrl(List urls) { mUrls.clear(); mUrls.addAll(urls); @@ -97,6 +100,7 @@ public class DownloadGroupTarget extends BaseGroupTarget { * * @deprecated {@link #setSubFileName(List)} 请使用该api */ + @CheckResult @Deprecated public DownloadGroupTarget setSubTaskFileName(List subTaskFileName) { return setSubFileName(subTaskFileName); } @@ -104,6 +108,7 @@ public class DownloadGroupTarget extends BaseGroupTarget { /** * 设置子任务文件名,该方法必须在{@link #setDirPath(String)}之后调用,否则不生效 */ + @CheckResult public DownloadGroupTarget setSubFileName(List subTaskFileName) { if (subTaskFileName == null || subTaskFileName.isEmpty()) { ALog.e(TAG, "修改子任务的文件名失败:列表为null"); @@ -143,13 +148,9 @@ public class DownloadGroupTarget extends BaseGroupTarget { reChangeDirPath(mDirPathTemp); } - if (mSubNameTemp.isEmpty()) { - for (String url : mUrls) { - int lastIndex = url.lastIndexOf(File.separator); - mSubNameTemp.add(url.substring(lastIndex + 1, url.length())); - } + if (!mSubNameTemp.isEmpty()) { + updateSingleSubFileName(); } - updateSingleSubFileName(); return true; } return false; diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadReceiver.java b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadReceiver.java index e28836d8..5ded3c79 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadReceiver.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadReceiver.java @@ -15,6 +15,7 @@ */ package com.arialyy.aria.core.download; +import android.support.annotation.CheckResult; import android.support.annotation.NonNull; import android.text.TextUtils; import com.arialyy.aria.core.AriaManager; @@ -59,6 +60,7 @@ public class DownloadReceiver extends AbsReceiver { * * @param entity 下载实体 */ + @CheckResult public DownloadTarget load(DownloadEntity entity) { return load(entity, false); } @@ -78,6 +80,7 @@ public class DownloadReceiver extends AbsReceiver { * * */ + @CheckResult @Deprecated public DownloadTarget load(DownloadEntity entity, boolean refreshInfo) { CheckUtil.checkDownloadEntity(entity); return new DownloadTarget(entity, targetName, refreshInfo); @@ -88,6 +91,7 @@ public class DownloadReceiver extends AbsReceiver { * * @param url 下载地址 */ + @CheckResult public DownloadTarget load(@NonNull String url) { return load(url, false); } @@ -108,6 +112,7 @@ public class DownloadReceiver extends AbsReceiver { * * */ + @CheckResult @Deprecated public DownloadTarget load(@NonNull String url, boolean refreshInfo) { CheckUtil.checkUrlInvalidThrow(url); return new DownloadTarget(url, targetName, refreshInfo); @@ -120,6 +125,7 @@ public class DownloadReceiver extends AbsReceiver { * @deprecated {@link #loadGroup(DownloadGroupEntity)} */ @Deprecated + @CheckResult public DownloadGroupTarget load(List urls) { return loadGroup(urls); } @@ -127,6 +133,7 @@ public class DownloadReceiver extends AbsReceiver { /** * 加载下载地址,如果任务组的中的下载地址改变了,则任务从新的一个任务组 */ + @CheckResult public DownloadGroupTarget loadGroup(List urls) { CheckUtil.checkDownloadUrls(urls); return new DownloadGroupTarget(urls, targetName); @@ -137,6 +144,7 @@ public class DownloadReceiver extends AbsReceiver { * * @param entity 下载实体 */ + @CheckResult public FtpDownloadTarget loadFtp(DownloadEntity entity) { return loadFtp(entity, false); } @@ -156,6 +164,7 @@ public class DownloadReceiver extends AbsReceiver { * * */ + @CheckResult @Deprecated public FtpDownloadTarget loadFtp(DownloadEntity entity, boolean refreshInfo) { CheckUtil.checkDownloadEntity(entity); if (!entity.getUrl().startsWith("ftp")) { @@ -167,6 +176,7 @@ public class DownloadReceiver extends AbsReceiver { /** * 加载ftp单任务下载地址 */ + @CheckResult public FtpDownloadTarget loadFtp(@NonNull String url) { return loadFtp(url, false); } @@ -176,6 +186,7 @@ public class DownloadReceiver extends AbsReceiver { * * @param refreshInfo 是否刷新下载信息 */ + @CheckResult public FtpDownloadTarget loadFtp(@NonNull String url, boolean refreshInfo) { CheckUtil.checkUrlInvalidThrow(url); return new FtpDownloadTarget(url, targetName, refreshInfo); @@ -189,6 +200,7 @@ public class DownloadReceiver extends AbsReceiver { * @deprecated 请使用 {@link #loadGroup(DownloadGroupEntity)} */ @Deprecated + @CheckResult public DownloadGroupTarget load(DownloadGroupEntity groupEntity) { return loadGroup(groupEntity); } @@ -199,6 +211,7 @@ public class DownloadReceiver extends AbsReceiver { * @param groupEntity 如果加载的任务实体没有子项的下载地址, * 那么你需要使用{@link DownloadGroupTarget#setGroupUrl(List)}设置子项的下载地址 */ + @CheckResult public DownloadGroupTarget loadGroup(DownloadGroupEntity groupEntity) { return new DownloadGroupTarget(groupEntity, targetName); } @@ -206,6 +219,7 @@ public class DownloadReceiver extends AbsReceiver { /** * 加载ftp文件夹下载地址 */ + @CheckResult public FtpDirDownloadTarget loadFtpDir(@NonNull String dirUrl) { CheckUtil.checkUrlInvalidThrow(dirUrl); return new FtpDirDownloadTarget(dirUrl, targetName); @@ -214,7 +228,7 @@ public class DownloadReceiver extends AbsReceiver { /** * 将当前类注册到Aria */ - public DownloadReceiver register() { + public void register() { String className = obj.getClass().getName(); Set dCounter = ProxyHelper.getInstance().downloadCounter; Set dgCounter = ProxyHelper.getInstance().downloadGroupCounter; @@ -226,7 +240,6 @@ public class DownloadReceiver extends AbsReceiver { && dgsCounter.contains(className))) { DownloadGroupSchedulers.getInstance().register(obj); } - return this; } /** diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTarget.java b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTarget.java index 7d06a4df..207cccaa 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTarget.java @@ -15,10 +15,12 @@ */ package com.arialyy.aria.core.download; +import android.support.annotation.CheckResult; import android.support.annotation.NonNull; import com.arialyy.aria.core.common.RequestEnum; import com.arialyy.aria.core.delegate.HttpHeaderDelegate; import com.arialyy.aria.core.inf.IHttpHeaderTarget; +import java.net.Proxy; import java.util.Map; /** @@ -29,7 +31,7 @@ public class DownloadTarget extends BaseNormalTarget implements IHttpHeaderTarget { private HttpHeaderDelegate mDelegate; - DownloadTarget(DownloadEntity entity, String targetName) { + public DownloadTarget(DownloadEntity entity, String targetName) { this(entity, targetName, false); } @@ -52,11 +54,23 @@ public class DownloadTarget extends BaseNormalTarget * * @param use {@code true} 使用 */ + @CheckResult public DownloadTarget useServerFileName(boolean use) { mTaskEntity.setUseServerFileName(use); return this; } + /** + * 设置URL的代理 + * + * @param proxy {@link Proxy} + */ + @CheckResult + public DownloadTarget setUrlProxy(Proxy proxy) { + mTaskEntity.setProxy(proxy); + return this; + } + /** * 设置文件存储路径 * 该api后续版本会删除 @@ -64,6 +78,7 @@ public class DownloadTarget extends BaseNormalTarget * @param downloadPath 文件保存路径 * @deprecated {@link #setFilePath(String)} 请使用这个api */ + @CheckResult @Deprecated public DownloadTarget setDownloadPath(@NonNull String downloadPath) { return setFilePath(downloadPath); } @@ -75,6 +90,7 @@ public class DownloadTarget extends BaseNormalTarget * * @param filePath 路径必须为文件路径,不能为文件夹路径 */ + @CheckResult public DownloadTarget setFilePath(@NonNull String filePath) { mTempFilePath = filePath; return this; @@ -91,14 +107,17 @@ public class DownloadTarget extends BaseNormalTarget return HTTP; } + @CheckResult @Override public DownloadTarget addHeader(@NonNull String key, @NonNull String value) { return mDelegate.addHeader(key, value); } + @CheckResult @Override public DownloadTarget addHeaders(Map headers) { return mDelegate.addHeaders(headers); } + @CheckResult @Override public DownloadTarget setRequestMode(RequestEnum requestEnum) { return mDelegate.setRequestMode(requestEnum); } diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/FtpDirDownloadTarget.java b/Aria/src/main/java/com/arialyy/aria/core/download/FtpDirDownloadTarget.java index 60f99319..a5978483 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/FtpDirDownloadTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/FtpDirDownloadTarget.java @@ -15,6 +15,7 @@ */ package com.arialyy.aria.core.download; +import android.support.annotation.CheckResult; import android.text.TextUtils; import com.arialyy.aria.core.delegate.FtpDelegate; import com.arialyy.aria.core.inf.AbsTaskEntity; @@ -89,15 +90,15 @@ public class FtpDirDownloadTarget extends BaseGroupTarget } return true; } - + @CheckResult @Override public FtpDirDownloadTarget charSet(String charSet) { return mDelegate.charSet(charSet); } - + @CheckResult @Override public FtpDirDownloadTarget login(String userName, String password) { return mDelegate.login(userName, password); } - + @CheckResult @Override public FtpDirDownloadTarget login(String userName, String password, String account) { return mDelegate.login(userName, password, account); } diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/FtpDownloadTarget.java b/Aria/src/main/java/com/arialyy/aria/core/download/FtpDownloadTarget.java index 1a60635c..8cfcc298 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/FtpDownloadTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/FtpDownloadTarget.java @@ -15,6 +15,7 @@ */ package com.arialyy.aria.core.download; +import android.support.annotation.CheckResult; import android.support.annotation.NonNull; import com.arialyy.aria.core.delegate.FtpDelegate; import com.arialyy.aria.core.inf.AbsTaskEntity; @@ -29,7 +30,7 @@ public class FtpDownloadTarget extends BaseNormalTarget implements IFtpTarget { private FtpDelegate mDelegate; - FtpDownloadTarget(DownloadEntity entity, String targetName, boolean refreshInfo) { + public FtpDownloadTarget(DownloadEntity entity, String targetName, boolean refreshInfo) { this(entity.getUrl(), targetName, refreshInfo); } @@ -59,6 +60,7 @@ public class FtpDownloadTarget extends BaseNormalTarget * @deprecated {@link #setFilePath(String)} 请使用这个api */ @Deprecated + @CheckResult public FtpDownloadTarget setDownloadPath(@NonNull String filePath) { return setFilePath(filePath); } @@ -69,6 +71,7 @@ public class FtpDownloadTarget extends BaseNormalTarget * 1、如果保存路径是该文件的保存路径,如:/mnt/sdcard/file.zip,则使用路径中的文件名file.zip * 2、如果保存路径是文件夹路径,如:/mnt/sdcard/,则使用FTP服务器该文件的文件名 */ + @CheckResult public FtpDownloadTarget setFilePath(@NonNull String filePath) { mTempFilePath = filePath; return this; @@ -78,14 +81,17 @@ public class FtpDownloadTarget extends BaseNormalTarget return FTP; } + @CheckResult @Override public FtpDownloadTarget charSet(String charSet) { return mDelegate.charSet(charSet); } + @CheckResult @Override public FtpDownloadTarget login(String userName, String password) { return mDelegate.login(userName, password); } + @CheckResult @Override public FtpDownloadTarget login(String userName, String password, String account) { return mDelegate.login(userName, password, account); } diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/AbsGroupUtil.java b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/AbsGroupUtil.java index 436a5fab..285c2b15 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/AbsGroupUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/AbsGroupUtil.java @@ -44,11 +44,11 @@ public abstract class AbsGroupUtil implements IUtil { /** * FTP文件夹 */ - protected int FTP_DIR = 0xa1; + int FTP_DIR = 0xa1; /** * HTTP 任务组 */ - protected int HTTP_GROUP = 0xa2; + int HTTP_GROUP = 0xa2; /** * 任务组所有任务总长度 @@ -57,7 +57,7 @@ public abstract class AbsGroupUtil implements IUtil { long mCurrentLocation = 0; private ExecutorService mExePool; protected IDownloadGroupListener mListener; - protected DownloadGroupTaskEntity mGTEntity; + DownloadGroupTaskEntity mGTEntity; private boolean isRunning = false; private Timer mTimer; /** @@ -266,7 +266,7 @@ public abstract class AbsGroupUtil implements IUtil { } /** - * 预处理操作,由于属性的不同,http任务组在构造函数中就可以完成了 + * 预处理操作 * 而FTP文件夹的,需要获取完成所有子任务信息才算预处理完成 */ protected void onPre() { @@ -302,7 +302,6 @@ public abstract class AbsGroupUtil implements IUtil { @Override public void resume() { start(); - mListener.onResume(mCurrentLocation); } @Override public void setMaxSpeed(double maxSpeed) { @@ -329,7 +328,11 @@ public abstract class AbsGroupUtil implements IUtil { void startRunningFlow() { closeTimer(true); mListener.onPostPre(mTotalLen); - mListener.onStart(mCurrentLocation); + if (mCurrentLocation > 0) { + mListener.onResume(mCurrentLocation); + } else { + mListener.onStart(mCurrentLocation); + } startTimer(); } @@ -340,7 +343,16 @@ public abstract class AbsGroupUtil implements IUtil { if (!isRunning) { closeTimer(false); } else if (mCurrentLocation >= 0) { - mListener.onProgress(mCurrentLocation); + long t = 0; + for (DownloadTaskEntity te : mGTEntity.getSubTaskEntities()) { + if (te.getState() == IEntity.STATE_COMPLETE) { + t += te.getEntity().getFileSize(); + } else { + t += te.getEntity().getCurrentProgress(); + } + } + mCurrentLocation = t; + mListener.onProgress(t); } } }, 0, mUpdateInterval); @@ -349,8 +361,8 @@ public abstract class AbsGroupUtil implements IUtil { /** * 创建子任务下载器,默认创建完成自动启动 */ - Downloader createChildDownload(DownloadTaskEntity taskEntity) { - return createChildDownload(taskEntity, true); + void createChildDownload(DownloadTaskEntity taskEntity) { + createChildDownload(taskEntity, true); } /** @@ -415,7 +427,7 @@ public abstract class AbsGroupUtil implements IUtil { @Override public void onProgress(long currentLocation) { long speed = currentLocation - lastLen; - mCurrentLocation += speed; + //mCurrentLocation += speed; subEntity.setCurrentProgress(currentLocation); handleSpeed(speed); mListener.onSubRunning(subEntity); diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/ConnectionHelp.java b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/ConnectionHelp.java index 0803249a..b19393d0 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/ConnectionHelp.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/ConnectionHelp.java @@ -16,7 +16,9 @@ package com.arialyy.aria.core.download.downloader; import android.text.TextUtils; +import com.arialyy.aria.core.common.RequestEnum; import com.arialyy.aria.core.download.DownloadTaskEntity; +import com.arialyy.aria.core.inf.AbsTaskEntity; import com.arialyy.aria.util.SSLContextUtil; import java.io.IOException; import java.io.InputStream; @@ -44,7 +46,7 @@ class ConnectionHelp { * @throws IOException */ static InputStream convertInputStream(HttpURLConnection connection) throws IOException { - String encoding = connection.getContentEncoding(); + String encoding = connection.getHeaderField("Content-Encoding"); if (TextUtils.isEmpty(encoding)) { return connection.getInputStream(); } @@ -62,9 +64,14 @@ class ConnectionHelp { * * @throws IOException */ - static HttpURLConnection handleConnection(URL url) throws IOException { + static HttpURLConnection handleConnection(URL url, AbsTaskEntity taskEntity) throws IOException { HttpURLConnection conn; - URLConnection urlConn = url.openConnection(); + URLConnection urlConn; + if (taskEntity.getProxy() != null) { + urlConn = url.openConnection(taskEntity.getProxy()); + } else { + urlConn = url.openConnection(); + } if (urlConn instanceof HttpsURLConnection) { conn = (HttpsURLConnection) urlConn; SSLContext sslContext = @@ -86,9 +93,10 @@ class ConnectionHelp { * * @throws ProtocolException */ - static HttpURLConnection setConnectParam(DownloadTaskEntity entity, HttpURLConnection conn) - throws ProtocolException { - conn.setRequestMethod(entity.getRequestEnum().name); + static HttpURLConnection setConnectParam(DownloadTaskEntity entity, HttpURLConnection conn) { + if (entity.getRequestEnum() == RequestEnum.POST) { + conn.setDoInput(true); + } Set keys = null; if (entity.getHeaders() != null && entity.getHeaders().size() > 0) { keys = entity.getHeaders().keySet(); diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/DownloadGroupUtil.java b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/DownloadGroupUtil.java index ed7f8361..b82fdc3f 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/DownloadGroupUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/DownloadGroupUtil.java @@ -43,6 +43,7 @@ public class DownloadGroupUtil extends AbsGroupUtil implements IUtil { */ private int mInitFailNum; private boolean isStop = false; + private boolean isStart = false; /** * 文件信息回调组 @@ -52,7 +53,6 @@ public class DownloadGroupUtil extends AbsGroupUtil implements IUtil { public DownloadGroupUtil(IDownloadGroupListener listener, DownloadGroupTaskEntity taskEntity) { super(listener, taskEntity); mInfoPool = Executors.newCachedThreadPool(); - onPre(); } @Override int getTaskType() { @@ -76,7 +76,7 @@ public class DownloadGroupUtil extends AbsGroupUtil implements IUtil { } @Override protected void onStart() { - super.onStart(); + onPre(); isStop = false; if (mCompleteNum == mGroupSize) { mListener.onComplete(); @@ -161,13 +161,14 @@ public class DownloadGroupUtil extends AbsGroupUtil implements IUtil { */ private void checkStartFlow() { synchronized (DownloadGroupUtil.class) { - if (mInitFailNum == mGroupSize){ + if (mInitFailNum == mExeMap.size()) { closeTimer(false); mListener.onFail(true); } - if (mInitCompleteNum + mInitFailNum == mGroupSize || !isNeedLoadFileSize) { + if (!isStart && mInitCompleteNum + mInitFailNum == mExeMap.size() || !isNeedLoadFileSize) { startRunningFlow(); updateFileSize(); + isStart = true; } } } diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/HttpFileInfoThread.java b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/HttpFileInfoThread.java index 4a73f1f2..eb3f61c8 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/HttpFileInfoThread.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/HttpFileInfoThread.java @@ -54,7 +54,7 @@ class HttpFileInfoThread implements Runnable { HttpURLConnection conn = null; try { URL url = new URL(CommonUtil.convertUrl(mEntity.getUrl())); - conn = ConnectionHelp.handleConnection(url); + conn = ConnectionHelp.handleConnection(url, mTaskEntity); conn = ConnectionHelp.setConnectParam(mTaskEntity, conn); conn.setRequestProperty("Range", "bytes=" + 0 + "-"); conn.setConnectTimeout(mConnectTimeOut); diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/HttpThreadTask.java b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/HttpThreadTask.java index 77419656..533aff00 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/HttpThreadTask.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/HttpThreadTask.java @@ -65,7 +65,7 @@ final class HttpThreadTask extends AbsThreadTask implements ITarget { - protected String TAG = ""; + protected String TAG ; protected ENTITY mEntity; protected TASK_ENTITY mTaskEntity; protected String mTargetName; @@ -48,6 +49,7 @@ public abstract class AbsTarget extends DbEntity { */ private int code; + @Ignore private Proxy proxy; + public abstract ENTITY getEntity(); /** @@ -135,6 +138,14 @@ public abstract class AbsTaskEntity extends DbEntity { return getEntity().getState(); } + public Proxy getProxy() { + return proxy; + } + + public void setProxy(Proxy proxy) { + this.proxy = proxy; + } + public abstract String getKey(); public abstract void setKey(String key); diff --git a/Aria/src/main/java/com/arialyy/aria/core/inf/IFtpTarget.java b/Aria/src/main/java/com/arialyy/aria/core/inf/IFtpTarget.java index 519b4393..129c70d3 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/inf/IFtpTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/inf/IFtpTarget.java @@ -15,6 +15,8 @@ */ package com.arialyy.aria.core.inf; +import android.support.annotation.CheckResult; + /** * Created by laoyuyu on 2018/3/9. */ @@ -22,6 +24,7 @@ public interface IFtpTarget { /** * 设置字符编码 */ + @CheckResult TARGET charSet(String charSet); /** @@ -30,6 +33,7 @@ public interface IFtpTarget { * @param userName ftp用户名 * @param password ftp用户密码 */ + @CheckResult TARGET login(String userName, String password); /** @@ -39,5 +43,6 @@ public interface IFtpTarget { * @param password ftp用户密码 * @param account ftp账号 */ + @CheckResult TARGET login(String userName, String password, String account); } diff --git a/Aria/src/main/java/com/arialyy/aria/core/inf/IHttpHeaderTarget.java b/Aria/src/main/java/com/arialyy/aria/core/inf/IHttpHeaderTarget.java index 72b5aa47..b68706e2 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/inf/IHttpHeaderTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/inf/IHttpHeaderTarget.java @@ -15,6 +15,7 @@ */ package com.arialyy.aria.core.inf; +import android.support.annotation.CheckResult; import android.support.annotation.NonNull; import com.arialyy.aria.core.common.RequestEnum; import com.arialyy.aria.core.download.DownloadEntity; @@ -33,6 +34,7 @@ public interface IHttpHeaderTarget { * @param key header对应的key * @param value header对应的value */ + @CheckResult TARGET addHeader(@NonNull String key, @NonNull String value); /** @@ -41,6 +43,7 @@ public interface IHttpHeaderTarget { * * @param headers 一组http header数据 */ + @CheckResult TARGET addHeaders(Map headers); /** @@ -48,5 +51,6 @@ public interface IHttpHeaderTarget { * * @param requestEnum {@link RequestEnum} */ + @CheckResult TARGET setRequestMode(RequestEnum requestEnum); } diff --git a/Aria/src/main/java/com/arialyy/aria/core/manager/DGTEFactory.java b/Aria/src/main/java/com/arialyy/aria/core/manager/DGTEFactory.java index 61104545..5dd0f510 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/manager/DGTEFactory.java +++ b/Aria/src/main/java/com/arialyy/aria/core/manager/DGTEFactory.java @@ -23,6 +23,7 @@ import com.arialyy.aria.core.download.wrapper.DGEWrapper; import com.arialyy.aria.core.download.wrapper.DGTEWrapper; import com.arialyy.aria.orm.DbEntity; import com.arialyy.aria.util.CommonUtil; +import java.io.File; import java.util.ArrayList; import java.util.List; @@ -156,10 +157,12 @@ class DGTEFactory implements IGTEFactory createSubTask(String groupName, List urls) { List list = new ArrayList<>(); for (int i = 0, len = urls.size(); i < len; i++) { + String url = urls.get(i); DownloadEntity entity = new DownloadEntity(); - entity.setUrl(urls.get(i)); + entity.setUrl(url); entity.setDownloadPath(groupName + "_" + i); - entity.setFileName(groupName + "_" + i); + int lastIndex = url.lastIndexOf(File.separator); + entity.setFileName(url.substring(lastIndex + 1, url.length())); entity.setGroupName(groupName); entity.setGroupChild(true); list.add(entity); diff --git a/Aria/src/main/java/com/arialyy/aria/core/manager/TEManager.java b/Aria/src/main/java/com/arialyy/aria/core/manager/TEManager.java index 1e8ccad1..49ec3094 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/manager/TEManager.java +++ b/Aria/src/main/java/com/arialyy/aria/core/manager/TEManager.java @@ -165,7 +165,7 @@ public class TEManager { /** * 从缓存中获取单任务实体,如果任务实体不存在,则创建任务实体 * - * @return 创建失败,返回null + * @return 创建失败,返回null;成功返回{@link DownloadTaskEntity}或者{@link UploadTaskEntity} */ public TE getTEntity(Class clazz, String key) { final Lock lock = this.lock; @@ -185,7 +185,7 @@ public class TEManager { /** * 从缓存中获取FTP文件夹任务实体,如果任务实体不存在,则创建任务实体 * - * @return 创建失败,返回null + * @return 创建失败,返回null;成功返回{@link DownloadTaskEntity}, */ public TE getFDTEntity(Class clazz, String key) { final Lock lock = this.lock; @@ -204,9 +204,10 @@ public class TEManager { /** * 从缓存中获取HTTP任务组的任务实体,如果任务实体不存在,则创建任务实体 + * 获取{} * * @param urls HTTP任务组的子任务下载地址列表 - * @return 地址列表为null或创建实体失败,返回null + * @return 地址列表为null或创建实体失败,返回null;成功返回{@link DownloadGroupTaskEntity} */ public TE getGTEntity(Class clazz, List urls) { if (urls == null || urls.isEmpty()) { diff --git a/Aria/src/main/java/com/arialyy/aria/core/queue/AbsTaskQueue.java b/Aria/src/main/java/com/arialyy/aria/core/queue/AbsTaskQueue.java index 76ef5fc5..5744258d 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/queue/AbsTaskQueue.java +++ b/Aria/src/main/java/com/arialyy/aria/core/queue/AbsTaskQueue.java @@ -46,16 +46,6 @@ abstract class AbsTaskQueue * * @param uploadUrl 上传路径 */ + @CheckResult public TARGET setUploadUrl(@NonNull String uploadUrl) { mTempUrl = uploadUrl; return (TARGET) this; diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/FtpUploadTarget.java b/Aria/src/main/java/com/arialyy/aria/core/upload/FtpUploadTarget.java index 4cc6223b..060d6b88 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/FtpUploadTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/FtpUploadTarget.java @@ -15,6 +15,7 @@ */ package com.arialyy.aria.core.upload; +import android.support.annotation.CheckResult; import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.command.normal.NormalCmdFactory; import com.arialyy.aria.core.delegate.FtpDelegate; @@ -69,6 +70,7 @@ public class FtpUploadTarget extends BaseNormalTarget return true; } + @CheckResult @Override public FtpUploadTarget charSet(String charSet) { return mDelegate.charSet(charSet); } diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadReceiver.java b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadReceiver.java index 2a56a287..647a91ec 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadReceiver.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadReceiver.java @@ -15,6 +15,7 @@ */ package com.arialyy.aria.core.upload; +import android.support.annotation.CheckResult; import android.support.annotation.NonNull; import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.command.ICmd; @@ -41,6 +42,7 @@ public class UploadReceiver extends AbsReceiver { * * @param filePath 文件路径 */ + @CheckResult public UploadTarget load(@NonNull String filePath) { CheckUtil.checkUploadPath(filePath); return new UploadTarget(filePath, targetName); @@ -51,6 +53,7 @@ public class UploadReceiver extends AbsReceiver { * * @param filePath 文件路径 */ + @CheckResult public FtpUploadTarget loadFtp(@NonNull String filePath) { CheckUtil.checkUploadPath(filePath); return new FtpUploadTarget(filePath, targetName); @@ -129,13 +132,12 @@ public class UploadReceiver extends AbsReceiver { /** * 将当前类注册到Aria */ - public UploadReceiver register() { + public void register() { String className = obj.getClass().getName(); Set cCounter = ProxyHelper.getInstance().uploadCounter; if (cCounter != null && cCounter.contains(className)) { UploadSchedulers.getInstance().register(obj); } - return this; } /** diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadTarget.java b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadTarget.java index dd9ac48a..a87e1bee 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadTarget.java @@ -15,6 +15,7 @@ */ package com.arialyy.aria.core.upload; +import android.support.annotation.CheckResult; import android.support.annotation.NonNull; import com.arialyy.aria.core.common.RequestEnum; import com.arialyy.aria.core.delegate.HttpHeaderDelegate; @@ -47,6 +48,7 @@ public class UploadTarget extends BaseNormalTarget /** * 设置userAgent */ + @CheckResult public UploadTarget setUserAngent(@NonNull String userAgent) { mTaskEntity.setUserAgent(userAgent); return this; @@ -57,6 +59,7 @@ public class UploadTarget extends BaseNormalTarget * * @param attachment 附件key */ + @CheckResult public UploadTarget setAttachment(@NonNull String attachment) { mTaskEntity.setAttachment(attachment); return this; @@ -67,19 +70,23 @@ public class UploadTarget extends BaseNormalTarget * * @param contentType tip:multipart/form-data */ + @CheckResult public UploadTarget setContentType(String contentType) { mTaskEntity.setContentType(contentType); return this; } + @CheckResult @Override public UploadTarget addHeader(@NonNull String key, @NonNull String value) { return mDelegate.addHeader(key, value); } + @CheckResult @Override public UploadTarget addHeaders(Map headers) { return mDelegate.addHeaders(headers); } + @CheckResult @Override public UploadTarget setRequestMode(RequestEnum requestEnum) { return mDelegate.setRequestMode(requestEnum); } diff --git a/Aria/src/main/java/com/arialyy/aria/orm/AbsDelegate.java b/Aria/src/main/java/com/arialyy/aria/orm/AbsDelegate.java index fa5dd96d..fecf50e9 100644 --- a/Aria/src/main/java/com/arialyy/aria/orm/AbsDelegate.java +++ b/Aria/src/main/java/com/arialyy/aria/orm/AbsDelegate.java @@ -48,7 +48,7 @@ abstract class AbsDelegate { * @param type {@link DelegateWrapper} */ static void print(int type, String sql) { - if (!ALog.DEBUG) { + if (ALog.DEBUG) { return; } String str = ""; diff --git a/Aria/src/main/java/com/arialyy/aria/util/CommonUtil.java b/Aria/src/main/java/com/arialyy/aria/util/CommonUtil.java index 176ad2b6..fda45c05 100644 --- a/Aria/src/main/java/com/arialyy/aria/util/CommonUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/util/CommonUtil.java @@ -23,6 +23,7 @@ import android.net.Uri; import android.os.Environment; import android.text.TextUtils; import android.util.Base64; +import android.util.Log; import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.FtpUrlEntity; import com.arialyy.aria.core.command.ICmd; @@ -33,7 +34,6 @@ import com.arialyy.aria.core.command.normal.NormalCmdFactory; import com.arialyy.aria.core.common.TaskRecord; import com.arialyy.aria.core.download.DownloadEntity; import com.arialyy.aria.core.download.DownloadGroupEntity; -import com.arialyy.aria.core.inf.AbsGroupEntity; import com.arialyy.aria.core.inf.AbsGroupTaskEntity; import com.arialyy.aria.core.inf.AbsNormalEntity; import com.arialyy.aria.core.inf.AbsTaskEntity; @@ -53,17 +53,14 @@ import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.math.BigDecimal; import java.math.BigInteger; -import java.net.URLEncoder; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.util.ArrayList; import java.util.Collections; import java.util.Enumeration; -import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Properties; -import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -378,14 +375,13 @@ public class CommonUtil { * @param removeFile {@code true} 不仅删除任务数据库记录,还会删除已经删除完成的文件 * {@code false}如果任务已经完成,只删除任务数据库记录 */ - public static void delGroupTaskRecord(boolean removeFile, AbsGroupEntity groupEntity) { + public static void delGroupTaskRecord(boolean removeFile, DownloadGroupEntity groupEntity) { if (groupEntity == null) { ALog.e(TAG, "删除下载任务组记录失败,任务组实体为null"); return; } - List records = DbEntity.findDatas(TaskRecord.class, - groupEntity instanceof DownloadGroupEntity ? "dGroupName=?" : "uGroupName=?", - groupEntity.getGroupName()); + List records = + DbEntity.findDatas(TaskRecord.class, "dGroupName=?", groupEntity.getGroupName()); if (records == null || records.isEmpty()) { ALog.w(TAG, "组任务记录删除失败,记录为null"); @@ -395,16 +391,20 @@ public class CommonUtil { } } - File dir = new File(groupEntity.getDirPath()); - if (removeFile) { - if (dir.exists()) { - dir.delete(); - } - } else { - if (!groupEntity.isComplete()) { - dir.delete(); + List subs = groupEntity.getSubEntities(); + if (subs != null) { + for (DownloadEntity sub : subs) { + File file = new File(sub.getDownloadPath()); + Log.d(TAG, "exist == " + file.exists() + ", rf == " + removeFile + ", complete = " + sub.isComplete()); + if (file.exists() && (removeFile || !sub.isComplete())) { + file.delete(); + } } } + File dir = new File(groupEntity.getDirPath()); + if (dir.exists() && (removeFile || !groupEntity.isComplete())) { + dir.delete(); + } groupEntity.deleteData(); } @@ -414,8 +414,7 @@ public class CommonUtil { * @param removeFile {@code true} 不仅删除任务数据库记录,还会删除已经完成的文件 * {@code false}如果任务已经完成,只删除任务数据库记录 */ - public static void delTaskRecord(TaskRecord record, boolean removeFile, - AbsNormalEntity dEntity) { + public static void delTaskRecord(TaskRecord record, boolean removeFile, AbsNormalEntity dEntity) { if (dEntity == null) return; File file; if (dEntity instanceof DownloadEntity) { @@ -426,16 +425,8 @@ public class CommonUtil { ALog.w(TAG, "删除记录失败,未知类型"); return; } - if (removeFile) { - if (file.exists()) { - file.delete(); - } - } else { - if (!dEntity.isComplete()) { - if (file.exists()) { - file.delete(); - } - } + if (file.exists() && (removeFile || !dEntity.isComplete())) { + file.delete(); } if (record != null) { @@ -869,7 +860,9 @@ public class CommonUtil { } TaskRecord record = DbHelper.getTaskRecord(oldPath); if (record == null) { - ALog.w(TAG, "修改任务记录失败,文件【" + oldPath + "】对应的任务记录不存在"); + if (new File(oldPath).exists()) { + ALog.w(TAG, "修改任务记录失败,文件【" + oldPath + "】对应的任务记录不存在"); + } return; } record.filePath = newPath; diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index dd6efcb9..17633b96 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,12 +13,13 @@ android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme.NoActionBar"> - - - + + + + diff --git a/app/src/main/assets/aria_config.xml b/app/src/main/assets/aria_config.xml index cb5efb86..7c37a9b4 100644 --- a/app/src/main/assets/aria_config.xml +++ b/app/src/main/assets/aria_config.xml @@ -25,7 +25,7 @@ - + diff --git a/app/src/main/java/com/arialyy/simple/download/FtpDownloadActivity.java b/app/src/main/java/com/arialyy/simple/download/FtpDownloadActivity.java index 0e6e7b32..515b974c 100644 --- a/app/src/main/java/com/arialyy/simple/download/FtpDownloadActivity.java +++ b/app/src/main/java/com/arialyy/simple/download/FtpDownloadActivity.java @@ -62,10 +62,11 @@ public class FtpDownloadActivity extends BaseActivity { //"http://58.210.9.131/tpk/sipgt//TDLYZTGH.tpk"; //chunked 下载 //"https://static.donguo.me//video/ip/course/pfys_1.mp4"; //"https://www.baidu.com/link?url=_LFCuTPtnzFxVJByJ504QymRywIA1Z_T5xUxe9ZLuxcGM0C_RcdpWyB1eGjbJC-e5wv5wAKM4WmLMAS5KeF6EZJHB8Va3YqZUiaErqK_pxm&wd=&eqid=e8583fe70002d126000000065a99f864"; - "https://d.pcs.baidu.com/file/a02c89a2d479d4fd2756f3313d42491d?fid=4232431903-250528-1114369760340736&dstime=1525491372&rt=sh&sign=FDtAERVY-DCb740ccc5511e5e8fedcff06b081203-3C13vkOkuk4TqXvVYW05zj1K0ao%3D&expires=8h&chkv=1&chkbd=0&chkpc=et&dp-logid=8651730921842106225&dp-callid=0&r=165533013"; - + //"https://d.pcs.baidu.com/file/a02c89a2d479d4fd2756f3313d42491d?fid=4232431903-250528-1114369760340736&dstime=1525491372&rt=sh&sign=FDtAERVY-DCb740ccc5511e5e8fedcff06b081203-3C13vkOkuk4TqXvVYW05zj1K0ao%3D&expires=8h&chkv=1&chkbd=0&chkpc=et&dp-logid=8651730921842106225&dp-callid=0&r=165533013"; + //"http://apk500.bce.baidu-mgame.com/game/67000/67734/20170622040827_oem_5502845.apk?r=1"; + "https://dl.genymotion.com/releases/genymotion-2.12.1/genymotion-2.12.1-vbox.exe"; @Bind(R.id.start) Button mStart; @Bind(R.id.stop) Button mStop; @Bind(R.id.cancel) Button mCancel; @@ -238,8 +239,8 @@ public class SingleTaskActivity extends BaseActivity { //.addHeader("Accept-Encoding", "gzip, deflate") //.addHeader("DNT", "1") //.addHeader("Cookie", "BAIDUID=648E5FF020CC69E8DD6F492D1068AAA9:FG=1; BIDUPSID=648E5FF020CC69E8DD6F492D1068AAA9; PSTM=1519099573; BD_UPN=12314753; locale=zh; BDSVRTM=0") - .useServerFileName(true) - .setRequestMode(RequestEnum.GET) + //.useServerFileName(true) + //.setRequestMode(RequestEnum.GET) .setFilePath(Environment.getExternalStorageDirectory().getPath() + "/ggsg3.apk") //.resetState() .start(); diff --git a/app/src/main/java/com/arialyy/simple/download/multi_download/DownloadAdapter.java b/app/src/main/java/com/arialyy/simple/download/multi_download/DownloadAdapter.java index db4284ac..6d2a96d0 100644 --- a/app/src/main/java/com/arialyy/simple/download/multi_download/DownloadAdapter.java +++ b/app/src/main/java/com/arialyy/simple/download/multi_download/DownloadAdapter.java @@ -297,7 +297,7 @@ public class DownloadAdapter extends AbsRVAdapter { //String URL = "http://static.gaoshouyou.com/d/12/0d/7f120f50c80d2e7b8c4ba24ece4f9cdd.apk"; //String URL = "http://58.213.157.242:8081/sims_file/rest/v1/file/mshd_touchscreen_ms/guideFile/41c33556-dc4a-4d78-bb76-b9f627f94448.mp4/%E5%85%AB%E5%8D%A6%E6%B4%B2%E5%8D%97%E4%BA%AC%E5%86%9C%E4%B8%9A%E5%98%89%E5%B9%B4%E5%8D%8E0511.mp4"; //String URL = "http://d1.showself.com/download/showself_android-s236279_release.apk"; - //String URL = "http://static.gaoshouyou.com/d/22/94/822260b849944492caadd2983f9bb624.apk"; + String URL = "http://static.gaoshouyou.com/d/22/94/822260b849944492caadd2983f9bb624.apk"; //private final String URL = "ftp://192.168.29.140:21/download/AriaPrj.rar"; //String URL = "https://dl.genymotion.com/releases/genymotion-2.12.1/genymotion-2.12.1-vbox.exe"; //String URL = "ftp://192.168.29.140:21/download/SDK_Demo-release.apk"; - String URL = "ftp://z:z@dygod18.com:21211/[电影天堂www.dy2018.com]猩球崛起3:终极之战BD国英双语中英双字.mkv"; + //String URL = "ftp://z:z@dygod18.com:21211/[电影天堂www.dy2018.com]猩球崛起3:终极之战BD国英双语中英双字.mkv"; @Override protected int setLayoutId() { return R.layout.activity_test; @@ -51,8 +51,8 @@ public class AnyRunActivity extends BaseActivity { //} //for (int i = 0; i < 10; i++) { - module.startFtp(URL); - //module.start(URL); + //module.startFtp(URL); + module.start(URL); //} //List list = Aria.download(this).getTotalTaskList(); //ALog.d(TAG, "size ==> " + list.size()); diff --git a/app/src/main/java/com/arialyy/simple/test/AnyRunnModule.java b/app/src/main/java/com/arialyy/simple/test/AnyRunnModule.java index ff23272b..d997ecf4 100644 --- a/app/src/main/java/com/arialyy/simple/test/AnyRunnModule.java +++ b/app/src/main/java/com/arialyy/simple/test/AnyRunnModule.java @@ -10,6 +10,7 @@ import com.arialyy.aria.core.download.DownloadTask; import com.arialyy.aria.util.CommonUtil; import com.arialyy.frame.util.show.L; import java.io.File; +import java.net.Proxy; /** * Created by laoyuyu on 2018/4/13. @@ -68,6 +69,7 @@ public class AnyRunnModule { .load(url) //.addHeader("Accept-Encoding", "gzip") .setRequestMode(RequestEnum.GET) + .setUrlProxy(Proxy.NO_PROXY) .setFilePath(Environment.getExternalStorageDirectory().getPath() + "/abcds.exe") //.resetState() .start(); diff --git a/build.gradle b/build.gradle index 7e6411b6..fdd15da1 100644 --- a/build.gradle +++ b/build.gradle @@ -39,7 +39,7 @@ task clean(type: Delete) { ext { userOrg = 'arialyy' groupId = 'com.arialyy.aria' - publishVersion = '3.4.1' + publishVersion = '3.4.2_dev1' // publishVersion = '1.0.3' //FTP插件 repoName='maven' desc = 'android 下载框架'