From 554b5bf63e09610e524a6f5a6d2807f7b706123c Mon Sep 17 00:00:00 2001 From: laoyuyu <511455842@qq.com> Date: Fri, 27 Apr 2018 21:49:42 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=A4=A7=E9=87=8F=E4=BB=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/arialyy/aria/core/ConfigHelper.java | 2 +- .../com/arialyy/aria/core/FtpUrlEntity.java | 9 +- .../aria/core/command/normal/CancelCmd.java | 2 +- .../core/command/normal/ResumeAllCmd.java | 4 +- .../aria/core/command/normal/StartCmd.java | 4 +- .../arialyy/aria/core/common/AbsFileer.java | 14 +- .../aria/core/common/AbsFtpInfoThread.java | 16 +-- .../aria/core/common/AbsFtpThreadTask.java | 8 +- .../aria/core/delegate/FtpDelegate.java | 10 +- .../core/delegate/HttpHeaderDelegate.java | 24 ++-- .../aria/core/download/BaseDListener.java | 2 +- .../aria/core/download/BaseGroupTarget.java | 2 +- .../aria/core/download/BaseNormalTarget.java | 8 +- .../core/download/DownloadGroupEntity.java | 3 + .../core/download/DownloadGroupTarget.java | 2 +- .../aria/core/download/DownloadGroupTask.java | 2 +- .../aria/core/download/DownloadReceiver.java | 1 + .../aria/core/download/DownloadTarget.java | 2 +- .../core/download/DownloadTaskEntity.java | 54 ++++++- .../core/download/FtpDirDownloadTarget.java | 10 +- .../aria/core/download/FtpDownloadTarget.java | 6 +- .../download/downloader/AbsGroupUtil.java | 10 +- .../download/downloader/ConnectionHelp.java | 8 +- .../core/download/downloader/Downloader.java | 8 +- .../download/downloader/FtpDirInfoThread.java | 20 +-- .../downloader/FtpFileInfoThread.java | 4 +- .../download/downloader/FtpThreadTask.java | 2 +- .../downloader/HttpFileInfoThread.java | 27 ++-- .../download/downloader/HttpThreadTask.java | 2 +- .../downloader/SimpleDownloadUtil.java | 6 +- .../core/download/wrapper/DGTEWrapper.java | 4 +- .../core/download/wrapper/DTEWrapper.java | 2 +- .../com/arialyy/aria/core/inf/AbsTarget.java | 2 +- .../arialyy/aria/core/inf/AbsTaskEntity.java | 135 +++++++++++++++--- .../com/arialyy/aria/core/inf/IEntity.java | 4 +- .../aria/core/manager/DGTEFactory.java | 12 +- .../arialyy/aria/core/manager/DTEFactory.java | 10 +- .../arialyy/aria/core/manager/UTEFactory.java | 10 +- .../aria/core/queue/DownloadTaskQueue.java | 2 +- .../aria/core/queue/UploadTaskQueue.java | 2 +- .../aria/core/upload/BaseNormalTarget.java | 2 +- .../aria/core/upload/BaseUListener.java | 2 +- .../aria/core/upload/FtpUploadTarget.java | 12 +- .../aria/core/upload/UploadReceiver.java | 23 +++ .../aria/core/upload/UploadTarget.java | 10 +- .../upload/uploader/FtpFileInfoThread.java | 5 +- .../core/upload/uploader/FtpThreadTask.java | 4 +- .../core/upload/uploader/HttpThreadTask.java | 20 +-- .../upload/uploader/SimpleUploadUtil.java | 2 +- .../aria/core/upload/uploader/Uploader.java | 4 +- .../aria/core/upload/wrapper/UTEWrapper.java | 2 +- .../java/com/arialyy/aria/orm/DBConfig.java | 5 + .../java/com/arialyy/aria/orm/SqlHelper.java | 45 +++++- .../main/java/com/arialyy/aria/util/ALog.java | 4 +- .../arialyy/aria/util/AriaCrashHandler.java | 1 + .../java/com/arialyy/aria/util/ErrorHelp.java | 11 +- app/build.gradle | 4 +- app/src/main/AndroidManifest.xml | 4 +- .../download/group/DownloadGroupActivity.java | 2 +- .../arialyy/simple/test/AnyRunActivity.java | 2 +- .../arialyy/simple/test/AnyRunnModule.java | 20 +-- .../com/arialyy/simple/test/TestActivity.java | 1 + .../com/arialyy/aria/core/Configuration.java | 32 ++++- .../aria/core/upload/UploadTaskEntity.java | 62 +++++++- 64 files changed, 503 insertions(+), 231 deletions(-) diff --git a/Aria/src/main/java/com/arialyy/aria/core/ConfigHelper.java b/Aria/src/main/java/com/arialyy/aria/core/ConfigHelper.java index 81eb2128..74374242 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/ConfigHelper.java +++ b/Aria/src/main/java/com/arialyy/aria/core/ConfigHelper.java @@ -129,9 +129,9 @@ class ConfigHelper extends DefaultHandler { private void loadUseAriaCrashHandler(String value) { if (checkBoolean(value)) { - ALog.w(TAG, "useAriaCrashHandler【" + value + "】错误"); mAppConfig.useAriaCrashHandler = Boolean.parseBoolean(value); } else { + ALog.w(TAG, "useAriaCrashHandler【" + value + "】错误"); mAppConfig.useAriaCrashHandler = true; } } diff --git a/Aria/src/main/java/com/arialyy/aria/core/FtpUrlEntity.java b/Aria/src/main/java/com/arialyy/aria/core/FtpUrlEntity.java index a684e810..da821979 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/FtpUrlEntity.java +++ b/Aria/src/main/java/com/arialyy/aria/core/FtpUrlEntity.java @@ -24,7 +24,10 @@ import java.net.InetAddress; * ftp url 信息链接实体 */ public class FtpUrlEntity implements Cloneable { - + /** + * 如:ftp://127.0.0.1:21/download/AriaPrj.zip + * remotePath便是:download/AriaPrj.zip + */ public String remotePath; public String account; @@ -35,12 +38,12 @@ public class FtpUrlEntity implements Cloneable { public String url; /** - * ftp协议 + * ftp协议:ftp */ public String protocol; /** - * 用户 + * 登录的用户名 */ public String user; /** diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/normal/CancelCmd.java b/Aria/src/main/java/com/arialyy/aria/core/command/normal/CancelCmd.java index 31db4cdf..57ab73d1 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/command/normal/CancelCmd.java +++ b/Aria/src/main/java/com/arialyy/aria/core/command/normal/CancelCmd.java @@ -42,7 +42,7 @@ public class CancelCmd extends AbsNormalCmd { task = createTask(); } if (task != null) { - mTaskEntity.removeFile = removeFile; + mTaskEntity.setRemoveFile(removeFile); if (!TextUtils.isEmpty(mTargetName)) { task.setTargetName(mTargetName); } 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 fd79a6a0..ecdc37df 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 @@ -129,8 +129,8 @@ final class ResumeAllCmd extends AbsNormalCmd { */ private void resumeEntity(AbsTaskEntity te) { if (te instanceof DownloadTaskEntity) { - if (te.requestType == AbsTaskEntity.D_FTP || te.requestType == AbsTaskEntity.U_FTP) { - te.urlEntity = CommonUtil.getFtpUrlInfo(te.getEntity().getKey()); + if (te.getRequestType() == AbsTaskEntity.D_FTP || te.getRequestType() == AbsTaskEntity.U_FTP) { + te.setUrlEntity(CommonUtil.getFtpUrlInfo(te.getEntity().getKey())); } mQueue = DownloadTaskQueue.getInstance(); } else if (te instanceof UploadTaskEntity) { 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 1d3749c0..680245a0 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 @@ -151,8 +151,8 @@ class StartCmd extends AbsNormalCmd { AbsTask task = getTask(te.getEntity()); if (task != null) continue; if (te instanceof DownloadTaskEntity) { - if (te.requestType == AbsTaskEntity.D_FTP || te.requestType == AbsTaskEntity.U_FTP) { - te.urlEntity = CommonUtil.getFtpUrlInfo(te.getEntity().getKey()); + if (te.getRequestType() == AbsTaskEntity.D_FTP || te.getRequestType() == AbsTaskEntity.U_FTP) { + te.setUrlEntity(CommonUtil.getFtpUrlInfo(te.getEntity().getKey())); } mQueue = DownloadTaskQueue.getInstance(); } else if (te instanceof UploadTaskEntity) { 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 999b3f1b..521284f5 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 @@ -79,7 +79,7 @@ public abstract class AbsFileer keys = mTaskEntity.headers.keySet(); + Set keys = mTaskEntity.getHeaders().keySet(); for (String key : keys) { if (headers.containsKey(key)) { i++; @@ -98,9 +98,9 @@ public class HttpHeaderDelegate values = mTaskEntity.headers.values(); + Collection values = mTaskEntity.getHeaders().values(); for (String value : values) { if (headers.containsValue(value)) { j++; @@ -108,17 +108,17 @@ public class HttpHeaderDelegate keys = headers.keySet(); for (String key : keys) { - mTaskEntity.headers.put(key, headers.get(key)); + mTaskEntity.getHeaders().put(key, headers.get(key)); } } @@ -133,7 +133,7 @@ public class HttpHeaderDelegate file.renameTo(new File(newPath)); } de.setDownloadPath(newPath); - dte.key = newPath; + dte.setKey(newPath); de.save(); dte.save(); } diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/BaseNormalTarget.java b/Aria/src/main/java/com/arialyy/aria/core/download/BaseNormalTarget.java index 70074b82..de43b670 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/BaseNormalTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/BaseNormalTarget.java @@ -41,8 +41,8 @@ abstract class BaseNormalTarget this.url = url; mTargetName = targetName; mTaskEntity = TEManager.getInstance().getTEntity(DownloadTaskEntity.class, url); - mEntity = mTaskEntity.entity; - mTaskEntity.refreshInfo = refreshInfo; + mEntity = mTaskEntity.getEntity(); + mTaskEntity.setRefreshInfo(refreshInfo); if (mEntity != null) { mTempFilePath = mEntity.getDownloadPath(); } @@ -141,7 +141,7 @@ abstract class BaseNormalTarget //设置文件保存路径,如果新文件路径和就文件路径不同,则修改路径 if (!filePath.equals(mEntity.getDownloadPath())) { - if (!mTaskEntity.refreshInfo && DbEntity.checkDataExist(DownloadEntity.class, + if (!mTaskEntity.isRefreshInfo() && DbEntity.checkDataExist(DownloadEntity.class, "downloadPath=?", filePath)) { ALog.e(TAG, "下载失败,保存路径【" + filePath + "】已经被其它任务占用,请设置其它保存路径"); return false; @@ -150,7 +150,7 @@ abstract class BaseNormalTarget File newFile = new File(filePath); mEntity.setDownloadPath(filePath); mEntity.setFileName(newFile.getName()); - mTaskEntity.key = filePath; + mTaskEntity.setKey(filePath); //mTaskEntity.update(); if (oldFile.exists()) { oldFile.renameTo(newFile); diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupEntity.java b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupEntity.java index e061c009..800a5974 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupEntity.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupEntity.java @@ -36,6 +36,9 @@ public class DownloadGroupEntity extends AbsGroupEntity { */ private String dirPath; + /** + * 子任务实体列表 + */ public List getSubEntities() { return subEntities; } 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 4b5fba95..7de286cb 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 @@ -226,7 +226,7 @@ public class DownloadGroupTarget extends BaseGroupTarget { } CommonUtil.renameDownloadConfig(oldFile.getName(), newName); entity.setDownloadPath(newPath); - taskEntity.key = newPath; + taskEntity.setKey(newPath); entity.setFileName(newName); entity.update(); } diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTask.java b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTask.java index f522e2ae..6977202a 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTask.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTask.java @@ -41,7 +41,7 @@ public class DownloadGroupTask extends AbsGroupTask { mOutHandler = outHandler; mContext = AriaManager.APP; mListener = new DownloadGroupListener(this, mOutHandler); - switch (taskEntity.requestType) { + switch (taskEntity.getRequestType()) { case AbsTaskEntity.D_HTTP: mUtil = new DownloadGroupUtil(mListener, mTaskEntity); break; 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 bc8a0b55..d97be189 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 @@ -117,6 +117,7 @@ public class DownloadReceiver extends AbsReceiver { * 加载下载地址,如果任务组的中的下载地址改变了,则任务从新的一个任务组 * * @param urls 任务组子任务下载地址列表 + * @deprecated {@link #loadGroup(DownloadGroupEntity)} */ @Deprecated public DownloadGroupTarget load(List urls) { 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 e7bd9b0f..f9b371a1 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 @@ -54,7 +54,7 @@ public class DownloadTarget extends BaseNormalTarget * @param use {@code true} 使用 */ @Deprecated public DownloadTarget useServerFileName(boolean use) { - mTaskEntity.useServerFileName = use; + mTaskEntity.setUseServerFileName(use); return this; } diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTaskEntity.java b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTaskEntity.java index 8bdff9a6..9803d604 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTaskEntity.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTaskEntity.java @@ -28,29 +28,29 @@ import com.arialyy.aria.orm.annotation.Primary; */ public class DownloadTaskEntity extends AbsNormalTaskEntity { - @Ignore public DownloadEntity entity; + @Ignore private DownloadEntity entity; /** * 任务的url */ - @NoNull public String url = ""; + @NoNull private String url; /** * 所属的任务组组名,如果不属于任务组,则为null */ @Foreign(parent = DownloadGroupTaskEntity.class, column = "key", onUpdate = ActionPolicy.CASCADE, onDelete = ActionPolicy.CASCADE) - public String groupName; + private String groupName; /** * 是否是chunk模式 */ - public boolean isChunked = false; + private boolean isChunked = false; /** * 该任务是否属于任务组 */ - public boolean isGroupTask = false; + private boolean isGroupTask = false; /** * Task实体对应的key @@ -58,7 +58,9 @@ public class DownloadTaskEntity extends AbsNormalTaskEntity { @Primary @Foreign(parent = DownloadEntity.class, column = "downloadPath", onUpdate = ActionPolicy.CASCADE, onDelete = ActionPolicy.CASCADE) - public String key; + private String key; + + public DownloadTaskEntity() { } @@ -70,4 +72,44 @@ public class DownloadTaskEntity extends AbsNormalTaskEntity { @Override public String getKey() { return key; } + + public String getUrl() { + return url; + } + + public String getGroupName() { + return groupName; + } + + public boolean isChunked() { + return isChunked; + } + + public boolean isGroupTask() { + return isGroupTask; + } + + public void setEntity(DownloadEntity entity) { + this.entity = entity; + } + + public void setUrl(String url) { + this.url = url; + } + + public void setGroupName(String groupName) { + this.groupName = groupName; + } + + public void setChunked(boolean chunked) { + isChunked = chunked; + } + + public void setGroupTask(boolean groupTask) { + isGroupTask = groupTask; + } + + public void setKey(String key) { + this.key = key; + } } 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 82863d1c..60f99319 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 @@ -38,7 +38,7 @@ public class FtpDirDownloadTarget extends BaseGroupTarget private void init(String key) { mGroupName = key; mTaskEntity = TEManager.getInstance().getFDTEntity(DownloadGroupTaskEntity.class, key); - mTaskEntity.requestType = AbsTaskEntity.D_FTP_DIR; + mTaskEntity.setRequestType(AbsTaskEntity.D_FTP_DIR); mEntity = mTaskEntity.getEntity(); if (mEntity != null) { mDirPathTemp = mEntity.getDirPath(); @@ -58,10 +58,10 @@ public class FtpDirDownloadTarget extends BaseGroupTarget if (mTaskEntity.getSubTaskEntities() != null) { //初始化子项的登录信息 for (DownloadTaskEntity entity : mTaskEntity.getSubTaskEntities()) { - entity.urlEntity.needLogin = mTaskEntity.urlEntity.needLogin; - entity.urlEntity.account = mTaskEntity.urlEntity.account; - entity.urlEntity.user = mTaskEntity.urlEntity.user; - entity.urlEntity.password = mTaskEntity.urlEntity.password; + entity.getUrlEntity().needLogin = mTaskEntity.getUrlEntity().needLogin; + entity.getUrlEntity().account = mTaskEntity.getUrlEntity().account; + entity.getUrlEntity().user = mTaskEntity.getUrlEntity().user; + entity.getUrlEntity().password = mTaskEntity.getUrlEntity().password; } } } 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 3b1e5b54..81ae6413 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 @@ -45,9 +45,9 @@ public class FtpDownloadTarget extends BaseNormalTarget private void init(boolean refreshInfo) { int lastIndex = url.lastIndexOf("/"); mEntity.setFileName(url.substring(lastIndex + 1, url.length())); - mTaskEntity.urlEntity = CommonUtil.getFtpUrlInfo(url); - mTaskEntity.refreshInfo = refreshInfo; - mTaskEntity.requestType = AbsTaskEntity.D_FTP; + mTaskEntity.setUrlEntity(CommonUtil.getFtpUrlInfo(url)); + mTaskEntity.setRefreshInfo(refreshInfo); + mTaskEntity.setRequestType(AbsTaskEntity.D_FTP); mDelegate = new FtpDelegate<>(this, mTaskEntity); } 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 742bec2e..8880a09d 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 @@ -234,7 +234,7 @@ public abstract class AbsGroupUtil implements IUtil { } } clearState(); - CommonUtil.delDownloadGroupTaskConfig(mGTEntity.removeFile, mGTEntity.getEntity()); + CommonUtil.delDownloadGroupTaskConfig(mGTEntity.isRemoveFile(), mGTEntity.getEntity()); mListener.onCancel(); } @@ -277,13 +277,13 @@ public abstract class AbsGroupUtil implements IUtil { mCompleteNum++; mCurrentLocation += te.getEntity().getFileSize(); } else { - mExeMap.put(te.url, te); + mExeMap.put(te.getUrl(), te); mCurrentLocation += file.exists() ? te.getEntity().getCurrentProgress() : 0; } if (isNeedLoadFileSize) { mTotalLen += te.getEntity().getFileSize(); } - mTasksMap.put(te.url, te); + mTasksMap.put(te.getUrl(), te); } updateFileSize(); } @@ -473,7 +473,7 @@ public abstract class AbsGroupUtil implements IUtil { if (subEntity.getFailNum() < 5 && needRetry && NetUtils.isConnected(AriaManager.APP)) { reStartTask(); } else { - mFailMap.put(subTaskEntity.url, subTaskEntity); + mFailMap.put(subTaskEntity.getUrl(), subTaskEntity); mListener.onSubFail(subEntity); //如果失败的任务数大于实际的下载任务数,任务组停止下载 if (mFailMap.size() >= mExeMap.size()) { @@ -506,7 +506,7 @@ public abstract class AbsGroupUtil implements IUtil { } private void saveData(int state, long location) { - subTaskEntity.state = state; + subTaskEntity.setState(state); subEntity.setState(state); subEntity.setComplete(state == IEntity.STATE_COMPLETE); if (state == IEntity.STATE_CANCEL) { 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 5929ec66..f7a42a4f 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 @@ -66,12 +66,12 @@ class ConnectionHelp { */ static HttpURLConnection setConnectParam(DownloadTaskEntity entity, HttpURLConnection conn) throws ProtocolException { - conn.setRequestMethod(entity.requestEnum.name); + conn.setRequestMethod(entity.getRequestEnum().name); Set keys = null; - if (entity.headers != null && entity.headers.size() > 0) { - keys = entity.headers.keySet(); + if (entity.getHeaders() != null && entity.getHeaders().size() > 0) { + keys = entity.getHeaders().keySet(); for (String key : keys) { - conn.setRequestProperty(key, entity.headers.get(key)); + conn.setRequestProperty(key, entity.getHeaders().get(key)); } } if (keys == null || !keys.contains("Charset")) { diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/Downloader.java b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/Downloader.java index 89bc60dd..de1780e1 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/Downloader.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/Downloader.java @@ -45,7 +45,7 @@ class Downloader extends AbsFileer { } @Override protected int setNewTaskThreadNum() { - return mEntity.getFileSize() <= SUB_LEN || mTaskEntity.requestType == AbsTaskEntity.D_FTP_DIR + return mEntity.getFileSize() <= SUB_LEN || mTaskEntity.getRequestType() == AbsTaskEntity.D_FTP_DIR ? 1 : AriaManager.getInstance(mContext).getDownloadConfig().getThreadNum(); } @@ -53,11 +53,11 @@ class Downloader extends AbsFileer { @Override protected void checkTask() { mConfigFile = new File(CommonUtil.getFileConfigPath(true, mEntity.getFileName())); mTempFile = new File(mEntity.getDownloadPath()); - if (!mTaskEntity.isSupportBP) { + if (!mTaskEntity.isSupportBP()) { isNewTask = true; return; } - if (mTaskEntity.isNewTask) { + if (mTaskEntity.isNewTask()) { isNewTask = true; return; } @@ -101,7 +101,7 @@ class Downloader extends AbsFileer { } @Override protected AbsThreadTask selectThreadTask(SubThreadConfig config) { - switch (mTaskEntity.requestType) { + switch (mTaskEntity.getRequestType()) { case AbsTaskEntity.D_FTP: case AbsTaskEntity.D_FTP_DIR: return new FtpThreadTask(mConstance, (IDownloadListener) mListener, config); diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/FtpDirInfoThread.java b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/FtpDirInfoThread.java index 2a03ead9..7c6ab6eb 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/FtpDirInfoThread.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/FtpDirInfoThread.java @@ -40,7 +40,7 @@ class FtpDirInfoThread extends AbsFtpInfoThread return; } String remotePath = - new String(mTaskEntity.urlEntity.remotePath.getBytes(charSet), SERVER_CHARSET); + new String(mTaskEntity.getUrlEntity().remotePath.getBytes(charSet), SERVER_CHARSET); ALog.i(TAG, "remotePath【" + remotePath + "】"); is = client.retrieveFileStream(remotePath); reply = client.getReplyCode(); 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 7b4ca45a..ab205ef1 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 @@ -105,41 +105,46 @@ class HttpFileInfoThread implements Runnable { String disposition = conn.getHeaderField("Content-Disposition"); if (!TextUtils.isEmpty(disposition)) { mEntity.setDisposition(CommonUtil.encryptBASE64(disposition)); - if (disposition.contains(mTaskEntity.dispositionFileKey)) { - String[] infos = disposition.split("="); - mEntity.setServerFileName(URLDecoder.decode(infos[1], "utf-8")); + if (disposition.contains(";")) { + String[] infos = disposition.split(";"); + for (String info : infos) { + if (info.startsWith("filename") && info.contains("=")) { + String[] temp = info.split("="); + mEntity.setServerFileName(URLDecoder.decode(temp[1], "utf-8")); + } + } } } - mTaskEntity.code = code; + mTaskEntity.setCode(code); if (code == HttpURLConnection.HTTP_PARTIAL) { if (!checkLen(len) && !isChunked) { return; } mEntity.setFileSize(len); - mTaskEntity.isSupportBP = true; + mTaskEntity.setSupportBP(true); isComplete = true; } else if (code == HttpURLConnection.HTTP_OK) { if (!checkLen(len) && !isChunked) { return; } mEntity.setFileSize(len); - mTaskEntity.isSupportBP = false; + mTaskEntity.setSupportBP(false); isComplete = true; } else if (code == HttpURLConnection.HTTP_NOT_FOUND) { failDownload("任务【" + mEntity.getUrl() + "】下载失败,错误码:404", true); } else if (code == HttpURLConnection.HTTP_MOVED_TEMP || code == HttpURLConnection.HTTP_MOVED_PERM || code == HttpURLConnection.HTTP_SEE_OTHER) { - mTaskEntity.redirectUrl = conn.getHeaderField("Location"); + mTaskEntity.setRedirectUrl(conn.getHeaderField("Location")); mEntity.setRedirect(true); - mEntity.setRedirectUrl(mTaskEntity.redirectUrl); - handle302Turn(conn, mTaskEntity.redirectUrl); + mEntity.setRedirectUrl(mTaskEntity.getRedirectUrl()); + handle302Turn(conn, mTaskEntity.getRedirectUrl()); } else { failDownload("任务【" + mEntity.getUrl() + "】下载失败,错误码:" + code, true); } if (isComplete) { - mTaskEntity.isChunked = isChunked; + mTaskEntity.setChunked(isChunked); mTaskEntity.update(); if (onFileInfoListener != null) { CompleteInfo info = new CompleteInfo(code); @@ -183,7 +188,7 @@ class HttpFileInfoThread implements Runnable { */ private boolean checkLen(long len) { if (len != mEntity.getFileSize()) { - mTaskEntity.isNewTask = true; + mTaskEntity.setNewTask(true); } if (len < 0) { failDownload("任务【" + mEntity.getUrl() + "】下载失败,文件长度小于0", true); 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 fba3fca2..ba0b8eca 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 @@ -81,7 +81,7 @@ final class HttpThreadTask extends AbsThreadTask temp = new ArrayList<>(); for (DTEWrapper dw : subWrappers) { - if (dw.taskEntity.requestType == AbsTaskEntity.D_FTP) { - dw.taskEntity.urlEntity = CommonUtil.getFtpUrlInfo(dw.taskEntity.url); + if (dw.taskEntity.getRequestType() == AbsTaskEntity.D_FTP) { + dw.taskEntity.setUrlEntity(CommonUtil.getFtpUrlInfo(dw.taskEntity.getUrl())); } temp.add(dw.taskEntity); } diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/wrapper/DTEWrapper.java b/Aria/src/main/java/com/arialyy/aria/core/download/wrapper/DTEWrapper.java index 97d099dc..d2062f98 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/wrapper/DTEWrapper.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/wrapper/DTEWrapper.java @@ -40,7 +40,7 @@ public class DTEWrapper extends AbsWrapper { @Override public void handleConvert() { taskEntity = (taskEntitys == null || taskEntitys.isEmpty()) ? null : taskEntitys.get(0); if (taskEntity != null) { - taskEntity.entity = entity; + taskEntity.setEntity(entity); } } } diff --git a/Aria/src/main/java/com/arialyy/aria/core/inf/AbsTarget.java b/Aria/src/main/java/com/arialyy/aria/core/inf/AbsTarget.java index 11f35e88..1a27a943 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/inf/AbsTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/inf/AbsTarget.java @@ -50,7 +50,7 @@ public abstract class AbsTarget extends DbEntity { /** * 账号和密码 */ - @Ignore public FtpUrlEntity urlEntity; + @Ignore private FtpUrlEntity urlEntity; /** * 刷新信息 {@code true} 重新刷新下载信息 */ - @Ignore public boolean refreshInfo = false; + @Ignore private boolean refreshInfo = false; /** * 是否是新任务,{@code true} 新任务 */ - @Ignore public boolean isNewTask = false; + @Ignore private boolean isNewTask = false; /** * 任务状态,和Entity的state同步 */ - public int state = IEntity.STATE_WAIT; + private int state = IEntity.STATE_WAIT; /** * 请求类型 * {@link AbsTaskEntity#D_HTTP}、{@link AbsTaskEntity#D_FTP}、{@link AbsTaskEntity#D_FTP_DIR}。。。 */ - public int requestType = D_HTTP; + private int requestType = D_HTTP; /** * http 请求头 */ - public Map headers = new HashMap<>(); + private Map headers = new HashMap<>(); /** * 字符编码,默认为"utf-8" */ - public String charSet = "utf-8"; + private String charSet = "utf-8"; /** * 网络请求类型 */ - public RequestEnum requestEnum = RequestEnum.GET; + private RequestEnum requestEnum = RequestEnum.GET; /** - * 是否使用服务器通过content-disposition传递的文件名,内容格式{@code attachment;filename=***} + * 是否使用服务器通过content-disposition传递的文件名,内容格式{@code attachment; filename="filename.jpg"} * {@code true} 使用 */ - public boolean useServerFileName = false; - - /** - * 从Disposition获取的文件名说需要的key - */ - public String dispositionFileKey = "attachment;filename"; + private boolean useServerFileName = false; /** * 重定向链接 */ - public String redirectUrl = ""; + private String redirectUrl = ""; /** + * 删除任务时,是否删除已下载完成的文件 + * 未完成的任务,不管true还是false,都会删除文件 * {@code true} 删除任务数据库记录,并且删除已经下载完成的文件 * {@code false} 如果任务已经完成,只删除任务数据库记录 */ - @Ignore public boolean removeFile = false; + @Ignore private boolean removeFile = false; /** * 是否支持断点, {@code true} 为支持断点 */ - public boolean isSupportBP = true; + private boolean isSupportBP = true; /** * 状态码 */ - public int code; + private int code; public abstract ENTITY getEntity(); @@ -146,4 +143,104 @@ public abstract class AbsTaskEntity extends DbEntity { } super.update(); } + + public FtpUrlEntity getUrlEntity() { + return urlEntity; + } + + public void setUrlEntity(FtpUrlEntity urlEntity) { + this.urlEntity = urlEntity; + } + + public boolean isRefreshInfo() { + return refreshInfo; + } + + public void setRefreshInfo(boolean refreshInfo) { + this.refreshInfo = refreshInfo; + } + + public boolean isNewTask() { + return isNewTask; + } + + public void setNewTask(boolean newTask) { + isNewTask = newTask; + } + + public void setState(int state) { + this.state = state; + } + + public int getRequestType() { + return requestType; + } + + public void setRequestType(int requestType) { + this.requestType = requestType; + } + + public Map getHeaders() { + return headers; + } + + public void setHeaders(Map headers) { + this.headers = headers; + } + + public String getCharSet() { + return charSet; + } + + public void setCharSet(String charSet) { + this.charSet = charSet; + } + + public RequestEnum getRequestEnum() { + return requestEnum; + } + + public void setRequestEnum(RequestEnum requestEnum) { + this.requestEnum = requestEnum; + } + + public boolean isUseServerFileName() { + return useServerFileName; + } + + public void setUseServerFileName(boolean useServerFileName) { + this.useServerFileName = useServerFileName; + } + + public String getRedirectUrl() { + return redirectUrl; + } + + public void setRedirectUrl(String redirectUrl) { + this.redirectUrl = redirectUrl; + } + + public boolean isRemoveFile() { + return removeFile; + } + + public void setRemoveFile(boolean removeFile) { + this.removeFile = removeFile; + } + + public boolean isSupportBP() { + return isSupportBP; + } + + public void setSupportBP(boolean supportBP) { + isSupportBP = supportBP; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } } diff --git a/Aria/src/main/java/com/arialyy/aria/core/inf/IEntity.java b/Aria/src/main/java/com/arialyy/aria/core/inf/IEntity.java index 8ad7c7d1..5fdfe079 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/inf/IEntity.java +++ b/Aria/src/main/java/com/arialyy/aria/core/inf/IEntity.java @@ -42,7 +42,7 @@ public interface IEntity { */ @Ignore int STATE_WAIT = 3; /** - * 下载中 + * 正在执行 */ @Ignore int STATE_RUNNING = 4; /** @@ -54,7 +54,7 @@ public interface IEntity { */ @Ignore int STATE_POST_PRE = 6; /** - * 取消下载 + * 删除任务 */ @Ignore int STATE_CANCEL = 7; } 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 da64cb11..61104545 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 @@ -98,7 +98,7 @@ class DGTEFactory implements IGTEFactory()); @@ -116,11 +116,11 @@ class DGTEFactory implements IGTEFactory list = new ArrayList<>(); for (DownloadEntity entity : dge.getSubEntities()) { DownloadTaskEntity taskEntity = new DownloadTaskEntity(); - taskEntity.entity = entity; - taskEntity.key = entity.getDownloadPath(); - taskEntity.groupName = dge.getKey(); - taskEntity.isGroupTask = true; - taskEntity.url = entity.getUrl(); + taskEntity.setEntity(entity); + taskEntity.setKey(entity.getDownloadPath()); + taskEntity.setGroupName(dge.getKey()); + taskEntity.setGroupTask(true); + taskEntity.setUrl(entity.getUrl()); list.add(taskEntity); } return list; diff --git a/Aria/src/main/java/com/arialyy/aria/core/manager/DTEFactory.java b/Aria/src/main/java/com/arialyy/aria/core/manager/DTEFactory.java index 082fe2c1..16a5c84d 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/manager/DTEFactory.java +++ b/Aria/src/main/java/com/arialyy/aria/core/manager/DTEFactory.java @@ -57,15 +57,15 @@ class DTEFactory implements INormalTEFactory taskEntity = wrapper.get(0).taskEntity; if (taskEntity == null) { taskEntity = new DownloadTaskEntity(); - } else if (taskEntity.entity == null || TextUtils.isEmpty(taskEntity.entity.getUrl())) { - taskEntity.entity = entity; + } else if (taskEntity.getEntity() == null || TextUtils.isEmpty(taskEntity.getEntity().getUrl())) { + taskEntity.setEntity(entity); } } else { taskEntity = new DownloadTaskEntity(); } - taskEntity.key = entity.getDownloadPath(); - taskEntity.url = entity.getUrl(); - taskEntity.entity = entity; + taskEntity.setKey(entity.getDownloadPath()); + taskEntity.setUrl(entity.getUrl()); + taskEntity.setEntity(entity); return taskEntity; } diff --git a/Aria/src/main/java/com/arialyy/aria/core/manager/UTEFactory.java b/Aria/src/main/java/com/arialyy/aria/core/manager/UTEFactory.java index f0437b9e..759b2dbd 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/manager/UTEFactory.java +++ b/Aria/src/main/java/com/arialyy/aria/core/manager/UTEFactory.java @@ -53,15 +53,15 @@ class UTEFactory implements INormalTEFactory { UploadTaskEntity uTaskEntity = wrapper.get(0).taskEntity; if (uTaskEntity == null) { uTaskEntity = new UploadTaskEntity(); - uTaskEntity.entity = entity; - } else if (uTaskEntity.entity == null || TextUtils.isEmpty( - uTaskEntity.entity.getFilePath())) { - uTaskEntity.entity = entity; + uTaskEntity.setEntity(entity); + } else if (uTaskEntity.getEntity() == null || TextUtils.isEmpty( + uTaskEntity.getEntity().getFilePath())) { + uTaskEntity.setEntity(entity); } return uTaskEntity; } else { UploadTaskEntity uTaskEntity = new UploadTaskEntity(); - uTaskEntity.entity = entity; + uTaskEntity.setEntity(entity); return uTaskEntity; } } diff --git a/Aria/src/main/java/com/arialyy/aria/core/queue/DownloadTaskQueue.java b/Aria/src/main/java/com/arialyy/aria/core/queue/DownloadTaskQueue.java index d6d7818c..4da7b16f 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/queue/DownloadTaskQueue.java +++ b/Aria/src/main/java/com/arialyy/aria/core/queue/DownloadTaskQueue.java @@ -123,7 +123,7 @@ public class DownloadTaskQueue extends AbsTaskQueue && mExecutePool.getTask(entity.getEntity().getKey()) == null) { task = (UploadTask) TaskFactory.getInstance() .createTask(targetName, entity, UploadSchedulers.getInstance()); - entity.key = entity.getEntity().getFilePath(); + entity.setKey(entity.getEntity().getFilePath()); mCachePool.putTask(task); } else { ALog.w(TAG, "任务已存在"); diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/BaseNormalTarget.java b/Aria/src/main/java/com/arialyy/aria/core/upload/BaseNormalTarget.java index 54b20375..ad08ddb8 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/BaseNormalTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/BaseNormalTarget.java @@ -32,7 +32,7 @@ abstract class BaseNormalTarget void initTarget(String filePath) { mTaskEntity = TEManager.getInstance().getTEntity(UploadTaskEntity.class, filePath); - mEntity = mTaskEntity.entity; + mEntity = mTaskEntity.getEntity(); File file = new File(filePath); mEntity.setFileName(file.getName()); mEntity.setFileSize(file.length()); diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/BaseUListener.java b/Aria/src/main/java/com/arialyy/aria/core/upload/BaseUListener.java index eeb07b4f..fcb7ad05 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/BaseUListener.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/BaseUListener.java @@ -136,7 +136,7 @@ class BaseUListener private void initTask(String filePath) { initTarget(filePath); - mTaskEntity.requestType = AbsTaskEntity.U_FTP; + mTaskEntity.setRequestType(AbsTaskEntity.U_FTP); mDelegate = new FtpDelegate<>(this, mTaskEntity); } @@ -61,11 +61,11 @@ public class FtpUploadTarget extends BaseNormalTarget if (!b) { return false; } - mTaskEntity.urlEntity = CommonUtil.getFtpUrlInfo(mTempUrl); - mTaskEntity.urlEntity.account = mAccount; - mTaskEntity.urlEntity.user = mUser; - mTaskEntity.urlEntity.password = mPw; - mTaskEntity.urlEntity.needLogin = needLogin; + mTaskEntity.setUrlEntity(CommonUtil.getFtpUrlInfo(mTempUrl)); + mTaskEntity.getUrlEntity().account = mAccount; + mTaskEntity.getUrlEntity().user = mUser; + mTaskEntity.getUrlEntity().password = mPw; + mTaskEntity.getUrlEntity().needLogin = needLogin; return true; } 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 134d1b23..2a56a287 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 @@ -20,6 +20,7 @@ import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.command.ICmd; import com.arialyy.aria.core.command.normal.NormalCmdFactory; import com.arialyy.aria.core.common.ProxyHelper; +import com.arialyy.aria.core.download.DownloadEntity; import com.arialyy.aria.core.inf.AbsReceiver; import com.arialyy.aria.core.scheduler.UploadSchedulers; import com.arialyy.aria.orm.DbEntity; @@ -69,10 +70,32 @@ public class UploadReceiver extends AbsReceiver { return DbEntity.findFirst(UploadEntity.class, "filePath=?", filePath) != null; } + /** + * 获取所有普通上传任务 + * 获取未完成的普通任务列表{@link #getAllNotCompletTask()} + * 获取已经完成的普通任务列表{@link #getAllCompleteTask()} + */ @Override public List getTaskList() { return DbEntity.findAllData(UploadEntity.class); } + /** + * 获取所有未完成的普通上传任务 + */ + public List getAllNotCompletTask() { + return UploadEntity.findDatas(UploadEntity.class, + "isGroupChild=? and isComplete=?", "false", "false"); + } + + /** + * 获取所有已经完成的普通任务 + */ + public List getAllCompleteTask() { + return UploadEntity.findDatas(UploadEntity.class, + "isGroupChild=? and isComplete=?", "false", "true"); + } + + @Override public void stopAllTask() { AriaManager.getInstance(AriaManager.APP) .setCmd(NormalCmdFactory.getInstance() 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 86c0b055..dd9ac48a 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 @@ -39,8 +39,8 @@ public class UploadTarget extends BaseNormalTarget initTarget(filePath); //http暂时不支持断点上传 - mTaskEntity.isSupportBP = false; - mTaskEntity.requestType = AbsTaskEntity.U_HTTP; + mTaskEntity.setSupportBP(false); + mTaskEntity.setRequestType(AbsTaskEntity.U_HTTP); mDelegate = new HttpHeaderDelegate<>(this, mTaskEntity); } @@ -48,7 +48,7 @@ public class UploadTarget extends BaseNormalTarget * 设置userAgent */ public UploadTarget setUserAngent(@NonNull String userAgent) { - mTaskEntity.userAgent = userAgent; + mTaskEntity.setUserAgent(userAgent); return this; } @@ -58,7 +58,7 @@ public class UploadTarget extends BaseNormalTarget * @param attachment 附件key */ public UploadTarget setAttachment(@NonNull String attachment) { - mTaskEntity.attachment = attachment; + mTaskEntity.setAttachment(attachment); return this; } @@ -68,7 +68,7 @@ public class UploadTarget extends BaseNormalTarget * @param contentType tip:multipart/form-data */ public UploadTarget setContentType(String contentType) { - mTaskEntity.contentType = contentType; + mTaskEntity.setContentType(contentType); return this; } diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/FtpFileInfoThread.java b/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/FtpFileInfoThread.java index 1db2974d..f0a5e0f5 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/FtpFileInfoThread.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/FtpFileInfoThread.java @@ -40,8 +40,7 @@ class FtpFileInfoThread extends AbsFtpInfoThread } @Override protected String setRemotePath() { - String url = mEntity.getUrl(); - return mTaskEntity.urlEntity.remotePath + "/" + mEntity.getFileName(); + return mTaskEntity.getUrlEntity().remotePath + "/" + mEntity.getFileName(); } /** @@ -71,7 +70,7 @@ class FtpFileInfoThread extends AbsFtpInfoThread File configFile = new File(CommonUtil.getFileConfigPath(false, mEntity.getFileName())); Properties pro = CommonUtil.loadConfig(configFile); String key = mEntity.getFileName() + "_record_" + 0; - mTaskEntity.isNewTask = false; + mTaskEntity.setNewTask(false); long oldRecord = Long.parseLong(pro.getProperty(key, "0")); if (oldRecord == 0 || oldRecord != ftpFile.getSize()) { //修改本地保存的停止地址为服务器上对应文件的大小 diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/FtpThreadTask.java b/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/FtpThreadTask.java index a626fbb0..c6d7c497 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/FtpThreadTask.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/FtpThreadTask.java @@ -112,9 +112,9 @@ class FtpThreadTask extends AbsFtpThreadTask { } private void initPath() throws UnsupportedEncodingException { - dir = new String(mTaskEntity.urlEntity.remotePath.getBytes(charSet), SERVER_CHARSET); + dir = new String(mTaskEntity.getUrlEntity().remotePath.getBytes(charSet), SERVER_CHARSET); remotePath = new String( - ("/" + mTaskEntity.urlEntity.remotePath + "/" + mEntity.getFileName()).getBytes(charSet), + ("/" + mTaskEntity.getUrlEntity().remotePath + "/" + mEntity.getFileName()).getBytes(charSet), SERVER_CHARSET); } diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/HttpThreadTask.java b/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/HttpThreadTask.java index 833b28bd..6457da57 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/HttpThreadTask.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/HttpThreadTask.java @@ -66,33 +66,33 @@ class HttpThreadTask extends AbsThreadTask { try { url = new URL(mEntity.getUrl()); mHttpConn = (HttpURLConnection) url.openConnection(); - mHttpConn.setRequestMethod(mTaskEntity.requestEnum.name); + mHttpConn.setRequestMethod(mTaskEntity.getRequestEnum().name); mHttpConn.setUseCaches(false); mHttpConn.setDoOutput(true); mHttpConn.setDoInput(true); mHttpConn.setRequestProperty("Connection", "Keep-Alive"); mHttpConn.setRequestProperty("Content-Type", - mTaskEntity.contentType + "; boundary=" + BOUNDARY); - mHttpConn.setRequestProperty("User-Agent", mTaskEntity.userAgent); + mTaskEntity.getContentType() + "; boundary=" + BOUNDARY); + mHttpConn.setRequestProperty("User-Agent", mTaskEntity.getUserAgent()); mHttpConn.setConnectTimeout(5000); //mHttpConn.setRequestProperty("Range", "bytes=" + 0 + "-" + "100"); //内部缓冲区---分段上传防止oom mHttpConn.setChunkedStreamingMode(1024); //添加Http请求头部 - Set keys = mTaskEntity.headers.keySet(); + Set keys = mTaskEntity.getHeaders().keySet(); for (String key : keys) { - mHttpConn.setRequestProperty(key, mTaskEntity.headers.get(key)); + mHttpConn.setRequestProperty(key, mTaskEntity.getHeaders().get(key)); } mOutputStream = mHttpConn.getOutputStream(); PrintWriter writer = - new PrintWriter(new OutputStreamWriter(mOutputStream, mTaskEntity.charSet), true); + new PrintWriter(new OutputStreamWriter(mOutputStream, mTaskEntity.getCharSet()), true); //添加文件上传表单字段 - keys = mTaskEntity.formFields.keySet(); + keys = mTaskEntity.getFormFields().keySet(); for (String key : keys) { - addFormField(writer, key, mTaskEntity.formFields.get(key)); + addFormField(writer, key, mTaskEntity.getFormFields().get(key)); } - uploadFile(writer, mTaskEntity.attachment, uploadFile); + uploadFile(writer, mTaskEntity.getAttachment(), uploadFile); mTaskEntity.getEntity().setResponseStr(finish(writer)); mListener.onComplete(); } catch (Exception e) { @@ -123,7 +123,7 @@ class HttpThreadTask extends AbsThreadTask { .append("\"") .append(LINE_END); writer.append("Content-Type: text/plain; charset=") - .append(mTaskEntity.charSet) + .append(mTaskEntity.getCharSet()) .append(LINE_END); writer.append(LINE_END); writer.append(value).append(LINE_END); diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/SimpleUploadUtil.java b/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/SimpleUploadUtil.java index 423237a5..9f4d1c1c 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/SimpleUploadUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/SimpleUploadUtil.java @@ -49,7 +49,7 @@ public class SimpleUploadUtil implements IUtil, Runnable { @Override public void run() { mListener.onPre(); - switch (mTaskEntity.requestType) { + switch (mTaskEntity.getRequestType()) { case AbsTaskEntity.U_FTP: new FtpFileInfoThread(mTaskEntity, new OnFileInfoCallback() { @Override public void onComplete(String url, CompleteInfo info) { diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/Uploader.java b/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/Uploader.java index 6e89b915..48c7aa3b 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/Uploader.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/uploader/Uploader.java @@ -50,7 +50,7 @@ class Uploader extends AbsFileer { */ protected void checkTask() { mConfigFile = new File(CommonUtil.getFileConfigPath(false, mEntity.getFileName())); - if (!mTaskEntity.isSupportBP) { + if (!mTaskEntity.isSupportBP()) { isNewTask = true; return; } @@ -74,7 +74,7 @@ class Uploader extends AbsFileer { } @Override protected AbsThreadTask selectThreadTask(SubThreadConfig config) { - switch (mTaskEntity.requestType) { + switch (mTaskEntity.getRequestType()) { case AbsTaskEntity.U_FTP: return new FtpThreadTask(mConstance, mListener, config); case AbsTaskEntity.U_HTTP: diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/wrapper/UTEWrapper.java b/Aria/src/main/java/com/arialyy/aria/core/upload/wrapper/UTEWrapper.java index b5dcede1..e94de626 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/wrapper/UTEWrapper.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/wrapper/UTEWrapper.java @@ -41,7 +41,7 @@ public class UTEWrapper extends AbsWrapper { //taskEntity.entity = (tEntity == null || tEntity.isEmpty()) ? null : tEntity.get(0); taskEntity = (taskEntitys == null || taskEntitys.isEmpty()) ? null : taskEntitys.get(0); if (taskEntity != null) { - taskEntity.entity = entity; + taskEntity.setEntity(entity); } } } diff --git a/Aria/src/main/java/com/arialyy/aria/orm/DBConfig.java b/Aria/src/main/java/com/arialyy/aria/orm/DBConfig.java index c33d71a3..8d9fb2ac 100644 --- a/Aria/src/main/java/com/arialyy/aria/orm/DBConfig.java +++ b/Aria/src/main/java/com/arialyy/aria/orm/DBConfig.java @@ -35,6 +35,11 @@ class DBConfig { static String DB_NAME; static int VERSION = 31; + /** + * 是否将数据库保存在Sd卡,{@code true} 是 + */ + static final boolean SAVE_IN_SDCARD = false; + static { if (TextUtils.isEmpty(DB_NAME)) { DB_NAME = "AriaLyyDb"; diff --git a/Aria/src/main/java/com/arialyy/aria/orm/SqlHelper.java b/Aria/src/main/java/com/arialyy/aria/orm/SqlHelper.java index 3ddcfdbd..fa633970 100644 --- a/Aria/src/main/java/com/arialyy/aria/orm/SqlHelper.java +++ b/Aria/src/main/java/com/arialyy/aria/orm/SqlHelper.java @@ -21,9 +21,18 @@ import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.text.TextUtils; +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.upload.UploadEntity; +import com.arialyy.aria.core.upload.UploadTaskEntity; import com.arialyy.aria.util.ALog; import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.Set; /** @@ -32,11 +41,6 @@ import java.util.Set; */ final class SqlHelper extends SQLiteOpenHelper { private static final String TAG = "SqlHelper"; - /** - * 是否将数据库保存在Sd卡,{@code true} 是 - */ - private static final boolean SAVE_IN_SDCARD = true; - static volatile SqlHelper INSTANCE = null; private DelegateCommon mDelegate; @@ -68,7 +72,7 @@ final class SqlHelper extends SQLiteOpenHelper { } private SqlHelper(Context context, DelegateCommon delegate) { - super(SAVE_IN_SDCARD ? new DatabaseContext(context) : context, DBConfig.DB_NAME, null, + super(DBConfig.SAVE_IN_SDCARD ? new DatabaseContext(context) : context, DBConfig.DB_NAME, null, DBConfig.VERSION); mDelegate = delegate; } @@ -148,6 +152,7 @@ final class SqlHelper extends SQLiteOpenHelper { */ private void handle314AriaUpdate(SQLiteDatabase db) { Set tables = DBConfig.mapping.keySet(); + Map> map = new HashMap<>(); for (String tableName : tables) { Class clazz = DBConfig.mapping.get(tableName); @@ -178,6 +183,8 @@ final class SqlHelper extends SQLiteOpenHelper { List list = DelegateManager.getInstance().getDelegate(DelegateFind.class).findAllData(db, clazz); + map.put(tableName, list); + //修改表名为中介表名 String alertSql = "ALTER TABLE " + tableName + " RENAME TO " + tableName + "_temp"; db.execSQL(alertSql); @@ -189,7 +196,29 @@ final class SqlHelper extends SQLiteOpenHelper { DelegateUpdate update = DelegateManager.getInstance().getDelegate(DelegateUpdate.class); try { for (DbEntity entity : list) { - update.insertData(db, entity); + if (entity instanceof DownloadTaskEntity && ((DownloadTaskEntity) entity).isGroupTask()) { + if (TextUtils.isEmpty(((DownloadTaskEntity) entity).getKey())) { + ALog.w(TAG, "DownloadTaskEntity的key为空,将忽略该条数据"); + continue; + } + if (TextUtils.isEmpty(((DownloadTaskEntity) entity).getUrl())) { + List temp = map.get("DownloadEntity"); + boolean isRefresh = false; + for (DbEntity dbEntity : temp) { + if (((DownloadEntity) dbEntity).getDownloadPath() + .equals(((DownloadTaskEntity) entity).getKey())) { + ((DownloadTaskEntity) entity).setUrl(((DownloadEntity) dbEntity).getUrl()); + isRefresh = true; + break; + } + } + if (isRefresh) { + update.insertData(db, entity); + } + } + } else { + update.insertData(db, entity); + } } } catch (Exception e) { ALog.e(TAG, ALog.getExceptionString(e)); @@ -201,5 +230,7 @@ final class SqlHelper extends SQLiteOpenHelper { mDelegate.close(db); } + + map.clear(); } } \ No newline at end of file diff --git a/Aria/src/main/java/com/arialyy/aria/util/ALog.java b/Aria/src/main/java/com/arialyy/aria/util/ALog.java index d7c7081f..d4b2dc96 100644 --- a/Aria/src/main/java/com/arialyy/aria/util/ALog.java +++ b/Aria/src/main/java/com/arialyy/aria/util/ALog.java @@ -64,7 +64,9 @@ public class ALog { } public static int e(String tag, Throwable e) { - return println(Log.ERROR, tag, getExceptionString(e)); + String msg = getExceptionString(e); + ErrorHelp.saveError(tag, "", msg); + return println(Log.ERROR, tag, msg); } /** diff --git a/Aria/src/main/java/com/arialyy/aria/util/AriaCrashHandler.java b/Aria/src/main/java/com/arialyy/aria/util/AriaCrashHandler.java index f6b30f82..0684cd72 100644 --- a/Aria/src/main/java/com/arialyy/aria/util/AriaCrashHandler.java +++ b/Aria/src/main/java/com/arialyy/aria/util/AriaCrashHandler.java @@ -17,6 +17,7 @@ */ package com.arialyy.aria.util; +import android.util.Log; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; diff --git a/Aria/src/main/java/com/arialyy/aria/util/ErrorHelp.java b/Aria/src/main/java/com/arialyy/aria/util/ErrorHelp.java index efd41da1..8f53fc75 100644 --- a/Aria/src/main/java/com/arialyy/aria/util/ErrorHelp.java +++ b/Aria/src/main/java/com/arialyy/aria/util/ErrorHelp.java @@ -16,6 +16,7 @@ package com.arialyy.aria.util; import android.annotation.SuppressLint; +import android.util.Log; import com.arialyy.aria.core.AriaManager; import java.io.File; import java.io.FileWriter; @@ -37,7 +38,7 @@ public class ErrorHelp { * @param ex 异常 */ public static void saveError(String tag, String msg, String ex) { - String message = "msg【" + msg + "】\nException:" + ex; + String message = "\nmsg【" + msg + "】\nException:" + ex; writeLogToFile(tag, message); } @@ -47,11 +48,9 @@ public class ErrorHelp { * @return "/mnt/sdcard/Android/data/{package_name}/files/log/*" */ private static String getLogPath() { - String path = android.os.Environment.getExternalStorageDirectory().getPath() - + "/" - + CommonUtil.getAppPath(AriaManager.APP) - + "/log/AriaCrash_" - + getData("yyyy-MM-dd") + String path = CommonUtil.getAppPath(AriaManager.APP) + + "log/AriaCrash_" + + getData("yyyy-MM-dd_HH:mm:ss") + ".log"; File log = new File(path); diff --git a/app/build.gradle b/app/build.gradle index f7b3c632..c966701e 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -53,8 +53,8 @@ dependencies { compile project(':Aria') compile project(':AriaCompiler') // compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" - // compile 'com.arialyy.aria:aria-core:3.2.13' -// annotationProcessor 'com.arialyy.aria:aria-compiler:3.2.13' +// compile 'com.arialyy.aria:aria-core:3.3.16' +// annotationProcessor 'com.arialyy.aria:aria-compiler:3.3.16' } repositories { mavenCentral() diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index bf4f2dc0..4696e5dd 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,10 +15,10 @@ android:supportsRtl="true" android:theme="@style/AppTheme.NoActionBar"> + - diff --git a/app/src/main/java/com/arialyy/simple/download/group/DownloadGroupActivity.java b/app/src/main/java/com/arialyy/simple/download/group/DownloadGroupActivity.java index fab70aaf..dc18256b 100644 --- a/app/src/main/java/com/arialyy/simple/download/group/DownloadGroupActivity.java +++ b/app/src/main/java/com/arialyy/simple/download/group/DownloadGroupActivity.java @@ -80,7 +80,7 @@ public class DownloadGroupActivity extends BaseActivity { @Override protected void onDestroy() { super.onDestroy(); - module.unRegist(); + module.unRegister(); } } 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 136b1984..cceb8f91 100644 --- a/app/src/main/java/com/arialyy/simple/test/AnyRunnModule.java +++ b/app/src/main/java/com/arialyy/simple/test/AnyRunnModule.java @@ -16,9 +16,9 @@ import java.io.File; */ public class AnyRunnModule { - String TAG = "TestActivity"; - String URL = "http://58.210.9.131/tpk/sipgt//TDLYZTGH.tpk"; //chunked 下载 + String TAG = "AnyRunnModule"; private Context mContext; + private String mUrl; public AnyRunnModule(Context context) { Aria.download(this).register(); @@ -62,17 +62,9 @@ public class AnyRunnModule { L.d(TAG, "md5Code ==> " + CommonUtil.getFileMD5(new File(task.getDownloadPath()))); } - void start() { - Aria.download(this) - .load(URL) - .addHeader("Accept-Encoding", "gzip, deflate") - .setRequestMode(RequestEnum.GET) - .setFilePath(Environment.getExternalStorageDirectory().getPath() + "/ggsg1.apk") - .resetState() - .start(); - } void start(String url) { + mUrl = url; Aria.download(this) .load(url) .addHeader("Accept-Encoding", "gzip, deflate") @@ -83,14 +75,14 @@ public class AnyRunnModule { } void stop() { - Aria.download(this).load(URL).stop(); + Aria.download(this).load(mUrl).stop(); } void cancel() { - Aria.download(this).load(URL).cancel(); + Aria.download(this).load(mUrl).cancel(); } - void unRegist() { + void unRegister() { Aria.download(this).unRegister(); } } diff --git a/app/src/main/java/com/arialyy/simple/test/TestActivity.java b/app/src/main/java/com/arialyy/simple/test/TestActivity.java index cb786642..01db7974 100644 --- a/app/src/main/java/com/arialyy/simple/test/TestActivity.java +++ b/app/src/main/java/com/arialyy/simple/test/TestActivity.java @@ -33,6 +33,7 @@ public class TestActivity extends BaseActivity { super.init(savedInstanceState); mBar.setVisibility(View.GONE); Aria.upload(this).register(); + } @Upload.onWait void onWait(UploadTask task) { diff --git a/aria/src/main/java/com/arialyy/aria/core/Configuration.java b/aria/src/main/java/com/arialyy/aria/core/Configuration.java index f8f46bff..7223cd67 100644 --- a/aria/src/main/java/com/arialyy/aria/core/Configuration.java +++ b/aria/src/main/java/com/arialyy/aria/core/Configuration.java @@ -130,10 +130,20 @@ class Configuration { * 保存key */ void saveKey(String key, String value) { - boolean isDownload = this instanceof DownloadConfig; + String path = null; + switch (getType()) { + case TYPE_DOWNLOAD: + path = DOWNLOAD_CONFIG_FILE; + break; + case TYPE_UPLOAD: + path = UPLOAD_CONFIG_FILE; + break; + case TYPE_APP: + path = APP_CONFIG_FILE; + break; + } File file = new File( - AriaManager.APP.getFilesDir().getPath() + (isDownload ? DOWNLOAD_CONFIG_FILE - : UPLOAD_CONFIG_FILE)); + AriaManager.APP.getFilesDir().getPath() + path); if (file.exists()) { Properties properties = CommonUtil.loadConfig(file); properties.setProperty(key, value); @@ -146,11 +156,21 @@ class Configuration { */ void saveAll() { List fields = CommonUtil.getAllFields(getClass()); - boolean isDownload = this instanceof DownloadConfig; try { + String path = null; + switch (getType()) { + case TYPE_DOWNLOAD: + path = DOWNLOAD_CONFIG_FILE; + break; + case TYPE_UPLOAD: + path = UPLOAD_CONFIG_FILE; + break; + case TYPE_APP: + path = APP_CONFIG_FILE; + break; + } File file = new File( - AriaManager.APP.getFilesDir().getPath() + (isDownload ? DOWNLOAD_CONFIG_FILE - : UPLOAD_CONFIG_FILE)); + AriaManager.APP.getFilesDir().getPath() + path); Properties properties = CommonUtil.loadConfig(file); for (Field field : fields) { int m = field.getModifiers(); diff --git a/aria/src/main/java/com/arialyy/aria/core/upload/UploadTaskEntity.java b/aria/src/main/java/com/arialyy/aria/core/upload/UploadTaskEntity.java index e12fb353..09fc362f 100644 --- a/aria/src/main/java/com/arialyy/aria/core/upload/UploadTaskEntity.java +++ b/aria/src/main/java/com/arialyy/aria/core/upload/UploadTaskEntity.java @@ -28,23 +28,23 @@ import java.util.Map; * 上传任务实体 */ public class UploadTaskEntity extends AbsNormalTaskEntity { - public String attachment; //文件上传需要的key - public String contentType = "multipart/form-data"; //上传的文件类型 - public String userAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)"; + private String attachment; //文件上传需要的key + private String contentType = "multipart/form-data"; //上传的文件类型 + private String userAgent = "Mozilla/5.0 (Windows; U; Windows NT 6.1; zh-CN; rv:1.9.2.6)"; - @Ignore public UploadEntity entity; + @Ignore private UploadEntity entity; - public String filePath = ""; + private String filePath; @Primary @Foreign(parent = UploadEntity.class, column = "filePath", onUpdate = ActionPolicy.CASCADE, onDelete = ActionPolicy.CASCADE) - public String key; + private String key; /** * 文件上传表单 */ - public Map formFields = new HashMap<>(); + private Map formFields = new HashMap<>(); public UploadTaskEntity() { } @@ -56,4 +56,52 @@ public class UploadTaskEntity extends AbsNormalTaskEntity { @Override public String getKey() { return key; } + + public void setEntity(UploadEntity entity) { + this.entity = entity; + } + + public String getFilePath() { + return filePath; + } + + public void setFilePath(String filePath) { + this.filePath = filePath; + } + + public void setKey(String key) { + this.key = key; + } + + public Map getFormFields() { + return formFields; + } + + public void setFormFields(Map formFields) { + this.formFields = formFields; + } + + public String getAttachment() { + return attachment; + } + + public void setAttachment(String attachment) { + this.attachment = attachment; + } + + public String getContentType() { + return contentType; + } + + public void setContentType(String contentType) { + this.contentType = contentType; + } + + public String getUserAgent() { + return userAgent; + } + + public void setUserAgent(String userAgent) { + this.userAgent = userAgent; + } }