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 af0a580d..37434328 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 @@ -116,7 +116,7 @@ public abstract class AbsFileer { protected String charSet, serverIp, port; /** - * FTP 服务器编码 + * D_FTP 服务器编码 */ public static String SERVER_CHARSET = "ISO-8859-1"; diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadEntity.java b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadEntity.java index ef4769eb..22658d46 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadEntity.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadEntity.java @@ -56,6 +56,10 @@ public class DownloadEntity extends AbsNormalEntity implements Parcelable { return getUrl(); } + @Override public int getTaskType() { + return getUrl().startsWith("ftp") ? AbsTaskEntity.D_FTP : AbsTaskEntity.D_HTTP; + } + public DownloadEntity() { } 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 446171c3..510cfb0f 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 @@ -17,7 +17,7 @@ package com.arialyy.aria.core.download; import android.os.Parcel; import com.arialyy.aria.core.inf.AbsGroupEntity; -import com.arialyy.aria.orm.NormalList; +import com.arialyy.aria.core.inf.AbsTaskEntity; import com.arialyy.aria.orm.OneToMany; import java.util.ArrayList; import java.util.List; @@ -58,6 +58,10 @@ public class DownloadGroupEntity extends AbsGroupEntity { this.groupName = key; } + @Override public int getTaskType() { + return getKey().startsWith("ftp") ? AbsTaskEntity.D_FTP_DIR : AbsTaskEntity.DG_HTTP; + } + public DownloadGroupEntity() { } 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 3aba90b7..2d82526e 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 @@ -40,10 +40,10 @@ public class DownloadGroupTask extends AbsGroupTask { mContext = AriaManager.APP; mListener = new DownloadGroupListener(this, mOutHandler); switch (taskEntity.requestType) { - case AbsTaskEntity.HTTP: + case AbsTaskEntity.D_HTTP: mUtil = new DownloadGroupUtil(mListener, mTaskEntity); break; - case AbsTaskEntity.FTP_DIR: + case AbsTaskEntity.D_FTP_DIR: mUtil = new FtpDirDownloadUtil(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 24ecb16d..65943cf6 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 @@ -67,6 +67,7 @@ public class DownloadReceiver extends AbsReceiver { * @param refreshInfo 是否刷新下载信息 */ public DownloadTarget load(DownloadEntity entity, boolean refreshInfo) { + CheckUtil.checkDownloadEntity(entity); return new DownloadTarget(entity, targetName, refreshInfo); } @@ -86,7 +87,7 @@ public class DownloadReceiver extends AbsReceiver { * @param refreshInfo 是否刷新下载信息 */ public DownloadTarget load(@NonNull String url, boolean refreshInfo) { - CheckUtil.checkDownloadUrl(url); + CheckUtil.checkUrl(url); return new DownloadTarget(url, targetName, refreshInfo); } @@ -98,6 +99,28 @@ public class DownloadReceiver extends AbsReceiver { return new DownloadGroupTarget(urls, targetName); } + /** + * 使用下载实体执行FTP下载操作 + * + * @param entity 下载实体 + */ + public FtpDownloadTarget loadFtp(DownloadEntity entity) { + return loadFtp(entity, false); + } + + /** + * 使用下载实体执行下载操作 + * + * @param refreshInfo 是否刷新下载信息 + */ + public FtpDownloadTarget loadFtp(DownloadEntity entity, boolean refreshInfo) { + CheckUtil.checkDownloadEntity(entity); + if (!entity.getUrl().startsWith("ftp")) { + throw new IllegalArgumentException("非FTP请求不能使用该方法"); + } + return new FtpDownloadTarget(entity, targetName, refreshInfo); + } + /** * 加载ftp单任务下载地址 */ @@ -111,7 +134,7 @@ public class DownloadReceiver extends AbsReceiver { * @param refreshInfo 是否刷新下载信息 */ public FtpDownloadTarget loadFtp(@NonNull String url, boolean refreshInfo) { - CheckUtil.checkDownloadUrl(url); + CheckUtil.checkUrl(url); return new FtpDownloadTarget(url, targetName, refreshInfo); } @@ -129,7 +152,7 @@ public class DownloadReceiver extends AbsReceiver { * 加载ftp文件夹下载地址 */ public FtpDirDownloadTarget loadFtpDir(@NonNull String dirUrl) { - CheckUtil.checkDownloadUrl(dirUrl); + CheckUtil.checkUrl(dirUrl); return new FtpDirDownloadTarget(dirUrl, targetName); } @@ -180,7 +203,7 @@ public class DownloadReceiver extends AbsReceiver { * 通过下载链接获取下载实体 */ public DownloadEntity getDownloadEntity(String downloadUrl) { - CheckUtil.checkDownloadUrl(downloadUrl); + CheckUtil.checkUrl(downloadUrl); return DbEntity.findFirst(DownloadEntity.class, "url=? and isGroupChild='false'", downloadUrl); } @@ -188,7 +211,7 @@ public class DownloadReceiver extends AbsReceiver { * 通过下载链接获取保存在数据库的下载任务实体 */ public DownloadTaskEntity getDownloadTask(String downloadUrl) { - CheckUtil.checkDownloadUrl(downloadUrl); + CheckUtil.checkUrl(downloadUrl); DownloadEntity entity = getDownloadEntity(downloadUrl); if (entity == null || TextUtils.isEmpty(entity.getDownloadPath())) return null; return DbEntity.findFirst(DownloadTaskEntity.class, "key=? and isGroupTask='false'", 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 2fcca589..322644a2 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 @@ -36,7 +36,7 @@ public class FtpDirDownloadTarget mTargetName = targetName; serverIp = pp[0]; port = Integer.parseInt(pp[1]); - mTaskEntity.requestType = AbsTaskEntity.FTP_DIR; + mTaskEntity.requestType = AbsTaskEntity.D_FTP_DIR; mTaskEntity.serverIp = serverIp; mTaskEntity.port = port; remotePath = url.substring(url.indexOf(pp[1]) + pp[1].length(), url.length()); 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 210528d5..cfc5069f 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 @@ -35,12 +35,21 @@ public class FtpDownloadTarget extends DownloadTarget { this(url, targetName, false); } + FtpDownloadTarget(DownloadEntity entity, String targetName, boolean refreshInfo) { + super(entity, targetName); + init(refreshInfo); + } + FtpDownloadTarget(String url, String targetName, boolean refreshInfo) { super(url, targetName); + init(refreshInfo); + } + + private void init(boolean refreshInfo) { String[] pp = url.split("/")[2].split(":"); this.serverIp = pp[0]; this.port = Integer.parseInt(pp[1]); - mTaskEntity.requestType = AbsTaskEntity.FTP; + mTaskEntity.requestType = AbsTaskEntity.D_FTP; remotePath = url.substring(url.indexOf(pp[1]) + pp[1].length(), url.length()); if (TextUtils.isEmpty(remotePath)) { throw new NullPointerException("ftp服务器地址不能为null"); 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 f12b6ef4..1dce034a 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 @@ -91,10 +91,10 @@ class Downloader extends AbsFileer { @Override protected AbsThreadTask selectThreadTask(SubThreadConfig config) { switch (mTaskEntity.requestType) { - case AbsTaskEntity.FTP: - case AbsTaskEntity.FTP_DIR: + case AbsTaskEntity.D_FTP: + case AbsTaskEntity.D_FTP_DIR: return new FtpThreadTask(mConstance, (IDownloadListener) mListener, config); - case AbsTaskEntity.HTTP: + case AbsTaskEntity.D_HTTP: return new HttpThreadTask(mConstance, (IDownloadListener) mListener, config); } return null; diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/FtpDirDownloadUtil.java b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/FtpDirDownloadUtil.java index a730eb57..7b98d554 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/FtpDirDownloadUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/FtpDirDownloadUtil.java @@ -51,7 +51,7 @@ public class FtpDirDownloadUtil extends AbsGroupUtil { @Override public void onFail(String url, String errorMsg) { mListener.onFail(true); - ErrorHelp.saveError("FTP_DIR", mTaskEntity.getEntity(), "", errorMsg); + ErrorHelp.saveError("D_FTP_DIR", mTaskEntity.getEntity(), "", errorMsg); } }).start(); } diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/SimpleDownloadUtil.java b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/SimpleDownloadUtil.java index 6ea8f4fd..e3f8e30b 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/downloader/SimpleDownloadUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/downloader/SimpleDownloadUtil.java @@ -25,7 +25,7 @@ import com.arialyy.aria.util.ErrorHelp; /** * Created by lyy on 2015/8/25. - * HTTP\FTP单任务下载工具 + * D_HTTP\FTP单任务下载工具 */ public class SimpleDownloadUtil implements IUtil, Runnable { private static final String TAG = "SimpleDownloadUtil"; @@ -102,7 +102,7 @@ public class SimpleDownloadUtil implements IUtil, Runnable { */ private Runnable createInfoThread() { switch (mTaskEntity.requestType) { - case AbsTaskEntity.FTP: + case AbsTaskEntity.D_FTP: return new FtpFileInfoThread(mTaskEntity, new OnFileInfoCallback() { @Override public void onComplete(String url, int code) { mDownloader.start(); @@ -112,7 +112,7 @@ public class SimpleDownloadUtil implements IUtil, Runnable { failDownload(errorMsg); } }); - case AbsTaskEntity.HTTP: + case AbsTaskEntity.D_HTTP: return new HttpFileInfoThread(mTaskEntity, new OnFileInfoCallback() { @Override public void onComplete(String url, int code) { mDownloader.start(); diff --git a/Aria/src/main/java/com/arialyy/aria/core/inf/AbsEntity.java b/Aria/src/main/java/com/arialyy/aria/core/inf/AbsEntity.java index 8d0a9a21..679d0580 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/inf/AbsEntity.java +++ b/Aria/src/main/java/com/arialyy/aria/core/inf/AbsEntity.java @@ -19,8 +19,6 @@ import android.os.Parcel; import android.os.Parcelable; import com.arialyy.aria.orm.DbEntity; import com.arialyy.aria.orm.Ignore; -import java.util.LinkedList; -import java.util.List; /** * Created by AriaL on 2017/6/29. @@ -162,6 +160,12 @@ public abstract class AbsEntity extends DbEntity implements IEntity, Parcelable */ public abstract String getKey(); + /** + * 实体驱动的下载任务类型 + * @return {@link AbsTaskEntity#D_FTP}、{@link AbsTaskEntity#D_FTP_DIR}、{@link AbsTaskEntity#} + */ + public abstract int getTaskType(); + public AbsEntity() { } diff --git a/Aria/src/main/java/com/arialyy/aria/core/inf/AbsTaskEntity.java b/Aria/src/main/java/com/arialyy/aria/core/inf/AbsTaskEntity.java index 8819c4ff..8e1e4c4d 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/inf/AbsTaskEntity.java +++ b/Aria/src/main/java/com/arialyy/aria/core/inf/AbsTaskEntity.java @@ -28,17 +28,30 @@ import java.util.Map; */ public abstract class AbsTaskEntity extends DbEntity { /** - * HTTP下载 + * HTTP单任务载 */ - public static final int HTTP = 0x11; + public static final int D_HTTP = 0x11; /** - * FTP当文件下载 + * HTTP任务组下载 */ - public static final int FTP = 0x12; + public static final int DG_HTTP = 0x12; + /** + * HTTP单文件上传 + */ + public static final int U_HTTP = 0xA1; + + /** + * FTP单文件下载 + */ + public static final int D_FTP = 0x13; /** * FTP文件夹下载,为避免登录过多,子任务由单线程进行处理 */ - public static final int FTP_DIR = 0x13; + public static final int D_FTP_DIR = 0x14; + /** + * FTP单文件上传 + */ + public static final int U_FTP = 0xA2; /** * Task实体对应的key @@ -68,9 +81,9 @@ public abstract class AbsTaskEntity extends DbEntity { /** * 请求类型 - * {@link AbsTaskEntity#HTTP}、{@link AbsTaskEntity#FTP} + * {@link AbsTaskEntity#D_HTTP}、{@link AbsTaskEntity#D_FTP} */ - public int requestType = HTTP; + public int requestType = D_HTTP; /** * http 请求头 diff --git a/Aria/src/main/java/com/arialyy/aria/core/inf/AbsUploadTarget.java b/Aria/src/main/java/com/arialyy/aria/core/inf/AbsUploadTarget.java index 552a8068..7af00769 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/inf/AbsUploadTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/inf/AbsUploadTarget.java @@ -21,7 +21,6 @@ import com.arialyy.aria.core.upload.UploadEntity; import com.arialyy.aria.core.upload.UploadTask; import com.arialyy.aria.core.upload.UploadTaskEntity; import com.arialyy.aria.util.CheckUtil; -import com.arialyy.aria.util.CommonUtil; import java.util.regex.Pattern; /** @@ -37,7 +36,7 @@ public abstract class AbsUploadTarget { @Override protected AbsThreadTask selectThreadTask(SubThreadConfig config) { switch (mTaskEntity.requestType) { - case AbsTaskEntity.FTP: - case AbsTaskEntity.FTP_DIR: + case AbsTaskEntity.U_FTP: return new FtpThreadTask(mConstance, mListener, config); - case AbsTaskEntity.HTTP: + case AbsTaskEntity.U_HTTP: return new HttpThreadTask(mConstance, (IUploadListener) mListener, config); } return null; diff --git a/Aria/src/main/java/com/arialyy/aria/util/CheckUtil.java b/Aria/src/main/java/com/arialyy/aria/util/CheckUtil.java index 745d2826..14915661 100644 --- a/Aria/src/main/java/com/arialyy/aria/util/CheckUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/util/CheckUtil.java @@ -72,19 +72,33 @@ public class CheckUtil { } /** - * 检测下载链接是否为null + * 检查下载实体 */ - public static void checkDownloadUrl(String downloadUrl) { - if (TextUtils.isEmpty(downloadUrl)) throw new IllegalArgumentException("下载链接不能为null"); + public static void checkDownloadEntity(DownloadEntity entity) { + checkUrl(entity.getUrl()); + checkPath(entity.getDownloadPath()); } /** * 检测下载链接是否为null */ - public static void checkUploadUrl(String downloadUrl) { - if (TextUtils.isEmpty(downloadUrl)) throw new IllegalArgumentException("上传地址不能为null"); + public static void checkPath(String path) { + if (TextUtils.isEmpty(path)) { + throw new IllegalArgumentException("保存路径不能为null"); + } } + /** + * 检测下载链接是否为null + */ + public static void checkUrl(String url) { + Log.d(TAG, url.startsWith("http") + ""); + if (TextUtils.isEmpty(url)) { + throw new IllegalArgumentException("下载链接不能为null"); + } else if (!url.startsWith("http") && !url.startsWith("ftp")) { + throw new IllegalArgumentException("url错误"); + } + } /** * 检测下载链接组是否为null @@ -108,9 +122,13 @@ public class CheckUtil { * 检测上传地址是否为null */ public static void checkUploadPath(String uploadPath) { - if (TextUtils.isEmpty(uploadPath)) throw new IllegalArgumentException("上传地址不能为null"); + if (TextUtils.isEmpty(uploadPath)) { + throw new IllegalArgumentException("上传地址不能为null"); + } File file = new File(uploadPath); - if (!file.exists()) throw new IllegalArgumentException("上传文件不存在"); + if (!file.exists()) { + throw new IllegalArgumentException("上传文件不存在"); + } } /** 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 736ca01a..85204ccc 100644 --- a/app/src/main/java/com/arialyy/simple/download/FtpDownloadActivity.java +++ b/app/src/main/java/com/arialyy/simple/download/FtpDownloadActivity.java @@ -35,7 +35,8 @@ import java.io.File; * Ftp下载测试 */ public class FtpDownloadActivity extends BaseActivity { - private final String URL = "ftp://172.18.104.229:21/haha/测试ss123/ftp_test.apk"; + //private final String URL = "ftp://172.18.104.229:21/haha/测试ss123/ftp_test.apk"; + private final String URL = "ftp://ygdy8:ygdy8@yg72.dydytt.net:8073/[阳光电影www.ygdy8.com].杀人者的记忆法.HD.720p.韩语中字.rmvb"; @Override protected void init(Bundle savedInstanceState) { super.init(savedInstanceState); @@ -58,7 +59,8 @@ public class FtpDownloadActivity extends BaseActivity { private final String URL = "ftp://172.18.104.49:21/upload/测试"; @Override protected void init(Bundle savedInstanceState) { - setTile("FTP 文件上传"); + setTile("D_FTP 文件上传"); super.init(savedInstanceState); Aria.upload(this).register(); UploadEntity entity = Aria.upload(this).getUploadEntity(FILE_PATH); diff --git a/app/src/main/java/com/arialyy/simple/upload/HttpUploadActivity.java b/app/src/main/java/com/arialyy/simple/upload/HttpUploadActivity.java index 73d782db..6485ed54 100644 --- a/app/src/main/java/com/arialyy/simple/upload/HttpUploadActivity.java +++ b/app/src/main/java/com/arialyy/simple/upload/HttpUploadActivity.java @@ -42,7 +42,7 @@ public class HttpUploadActivity extends BaseActivity { } @Override protected void init(Bundle savedInstanceState) { - setTile("HTTP 上传"); + setTile("D_HTTP 上传"); super.init(savedInstanceState); Aria.upload(this).register(); }