pull/330/head
AriaLyy 7 years ago
commit ec1b504309
  1. 3
      Aria/src/main/java/com/arialyy/aria/core/command/normal/ResumeAllCmd.java
  2. 5
      Aria/src/main/java/com/arialyy/aria/core/command/normal/StartCmd.java
  3. 2
      Aria/src/main/java/com/arialyy/aria/core/common/AbsFileer.java
  4. 2
      Aria/src/main/java/com/arialyy/aria/core/common/AbsFtpThreadTask.java
  5. 4
      Aria/src/main/java/com/arialyy/aria/core/download/DownloadEntity.java
  6. 6
      Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupEntity.java
  7. 4
      Aria/src/main/java/com/arialyy/aria/core/download/DownloadGroupTask.java
  8. 39
      Aria/src/main/java/com/arialyy/aria/core/download/DownloadReceiver.java
  9. 2
      Aria/src/main/java/com/arialyy/aria/core/download/FtpDirDownloadTarget.java
  10. 2
      Aria/src/main/java/com/arialyy/aria/core/download/FtpDownloadTarget.java
  11. 6
      Aria/src/main/java/com/arialyy/aria/core/download/downloader/Downloader.java
  12. 2
      Aria/src/main/java/com/arialyy/aria/core/download/downloader/FtpDirDownloadUtil.java
  13. 5
      Aria/src/main/java/com/arialyy/aria/core/download/downloader/FtpThreadTask.java
  14. 8
      Aria/src/main/java/com/arialyy/aria/core/download/downloader/SimpleDownloadUtil.java
  15. 10
      Aria/src/main/java/com/arialyy/aria/core/inf/AbsEntity.java
  16. 27
      Aria/src/main/java/com/arialyy/aria/core/inf/AbsTaskEntity.java
  17. 5
      Aria/src/main/java/com/arialyy/aria/core/inf/AbsUploadTarget.java
  18. 4
      Aria/src/main/java/com/arialyy/aria/core/upload/FtpUploadTarget.java
  19. 7
      Aria/src/main/java/com/arialyy/aria/core/upload/UploadEntity.java
  20. 2
      Aria/src/main/java/com/arialyy/aria/core/upload/UploadTarget.java
  21. 8
      Aria/src/main/java/com/arialyy/aria/core/upload/uploader/FtpThreadTask.java
  22. 5
      Aria/src/main/java/com/arialyy/aria/core/upload/uploader/Uploader.java
  23. 31
      Aria/src/main/java/com/arialyy/aria/util/CheckUtil.java
  24. 5
      README.md
  25. 9
      app/src/main/java/com/arialyy/simple/download/FtpDownloadActivity.java
  26. 60
      app/src/main/java/com/arialyy/simple/download/multi_download/DownloadAdapter.java
  27. 4
      app/src/main/java/com/arialyy/simple/upload/FtpUploadActivity.java
  28. 2
      app/src/main/java/com/arialyy/simple/upload/HttpUploadActivity.java
  29. 2
      build.gradle

@ -1,6 +1,5 @@
package com.arialyy.aria.core.command.normal; package com.arialyy.aria.core.command.normal;
import android.util.Log;
import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.AriaManager;
import com.arialyy.aria.core.download.DownloadGroupTaskEntity; import com.arialyy.aria.core.download.DownloadGroupTaskEntity;
import com.arialyy.aria.core.download.DownloadTaskEntity; import com.arialyy.aria.core.download.DownloadTaskEntity;
@ -124,7 +123,7 @@ final class ResumeAllCmd<T extends AbsTaskEntity> extends AbsNormalCmd<T> {
*/ */
private void resumeEntity(AbsTaskEntity te) { private void resumeEntity(AbsTaskEntity te) {
if (te instanceof DownloadTaskEntity) { if (te instanceof DownloadTaskEntity) {
if (te.requestType == AbsTaskEntity.FTP) { if (te.requestType == AbsTaskEntity.D_FTP || te.requestType == AbsTaskEntity.U_FTP) {
te.urlEntity = CommonUtil.getFtpUrlInfo(te.getEntity().getKey()); te.urlEntity = CommonUtil.getFtpUrlInfo(te.getEntity().getKey());
} }
mQueue = DownloadTaskQueue.getInstance(); mQueue = DownloadTaskQueue.getInstance();

@ -17,7 +17,6 @@
package com.arialyy.aria.core.command.normal; package com.arialyy.aria.core.command.normal;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log;
import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.AriaManager;
import com.arialyy.aria.core.common.QueueMod; import com.arialyy.aria.core.common.QueueMod;
import com.arialyy.aria.core.download.DownloadGroupTaskEntity; import com.arialyy.aria.core.download.DownloadGroupTaskEntity;
@ -130,7 +129,7 @@ class StartCmd<T extends AbsTaskEntity> extends AbsNormalCmd<T> {
break; break;
case 3: case 3:
List<UploadTaskEntity> uEntity = List<UploadTaskEntity> uEntity =
DbEntity.findDatas(UploadTaskEntity.class, "groupName=? and state=?", "", "3"); DbEntity.findDatas(UploadTaskEntity.class, "state=?", "3");
if (uEntity != null && !uEntity.isEmpty()) { if (uEntity != null && !uEntity.isEmpty()) {
waitList.addAll(uEntity); waitList.addAll(uEntity);
} }
@ -143,7 +142,7 @@ class StartCmd<T extends AbsTaskEntity> extends AbsNormalCmd<T> {
for (AbsTaskEntity te : waitList) { for (AbsTaskEntity te : waitList) {
if (te.getEntity() == null) continue; if (te.getEntity() == null) continue;
if (te instanceof DownloadTaskEntity) { if (te instanceof DownloadTaskEntity) {
if (te.requestType == AbsTaskEntity.FTP) { if (te.requestType == AbsTaskEntity.D_FTP || te.requestType == AbsTaskEntity.U_FTP) {
te.urlEntity = CommonUtil.getFtpUrlInfo(te.getEntity().getKey()); te.urlEntity = CommonUtil.getFtpUrlInfo(te.getEntity().getKey());
} }
mQueue = DownloadTaskQueue.getInstance(); mQueue = DownloadTaskQueue.getInstance();

@ -116,7 +116,7 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
* 设置新任务的最大线程数 * 设置新任务的最大线程数
*/ */
protected int getNewTaskThreadNum() { protected int getNewTaskThreadNum() {
return mEntity.getFileSize() <= SUB_LEN || mTaskEntity.requestType == AbsTaskEntity.FTP_DIR ? 1 return mEntity.getFileSize() <= SUB_LEN || mTaskEntity.requestType == AbsTaskEntity.D_FTP_DIR ? 1
: AriaManager.getInstance(mContext).getDownloadConfig().getThreadNum(); : AriaManager.getInstance(mContext).getDownloadConfig().getThreadNum();
} }

@ -37,7 +37,7 @@ public abstract class AbsFtpThreadTask<ENTITY extends AbsNormalEntity, TASK_ENTI
private final String TAG = "AbsFtpThreadTask"; private final String TAG = "AbsFtpThreadTask";
protected String charSet, port; protected String charSet, port;
/** /**
* FTP 服务器编码 * D_FTP 服务器编码
*/ */
public static String SERVER_CHARSET = "ISO-8859-1"; public static String SERVER_CHARSET = "ISO-8859-1";

@ -62,6 +62,10 @@ public class DownloadEntity extends AbsNormalEntity implements Parcelable {
return getUrl(); return getUrl();
} }
@Override public int getTaskType() {
return getUrl().startsWith("ftp") ? AbsTaskEntity.D_FTP : AbsTaskEntity.D_HTTP;
}
public DownloadEntity() { public DownloadEntity() {
} }

@ -17,7 +17,7 @@ package com.arialyy.aria.core.download;
import android.os.Parcel; import android.os.Parcel;
import com.arialyy.aria.core.inf.AbsGroupEntity; 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 com.arialyy.aria.orm.OneToMany;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -58,6 +58,10 @@ public class DownloadGroupEntity extends AbsGroupEntity {
this.groupName = key; this.groupName = key;
} }
@Override public int getTaskType() {
return getKey().startsWith("ftp") ? AbsTaskEntity.D_FTP_DIR : AbsTaskEntity.DG_HTTP;
}
public DownloadGroupEntity() { public DownloadGroupEntity() {
} }

@ -41,10 +41,10 @@ public class DownloadGroupTask extends AbsGroupTask<DownloadGroupTaskEntity> {
mContext = AriaManager.APP; mContext = AriaManager.APP;
mListener = new DownloadGroupListener(this, mOutHandler); mListener = new DownloadGroupListener(this, mOutHandler);
switch (taskEntity.requestType) { switch (taskEntity.requestType) {
case AbsTaskEntity.HTTP: case AbsTaskEntity.D_HTTP:
mUtil = new DownloadGroupUtil(mListener, mTaskEntity); mUtil = new DownloadGroupUtil(mListener, mTaskEntity);
break; break;
case AbsTaskEntity.FTP_DIR: case AbsTaskEntity.D_FTP_DIR:
mUtil = new FtpDirDownloadUtil(mListener, mTaskEntity); mUtil = new FtpDirDownloadUtil(mListener, mTaskEntity);
break; break;
} }

@ -68,12 +68,7 @@ public class DownloadReceiver extends AbsReceiver {
* @param refreshInfo 是否刷新下载信息 * @param refreshInfo 是否刷新下载信息
*/ */
public DownloadTarget load(DownloadEntity entity, boolean refreshInfo) { public DownloadTarget load(DownloadEntity entity, boolean refreshInfo) {
CheckUtil.checkDownloadUrl(entity.getUrl()); CheckUtil.checkDownloadEntity(entity);
if (entity.getUrl().startsWith("ftp")) {
ALog.w(TAG,
"使用实体启动FTP下载,如果你的FTP服务器需要登录,那么你需要调用登录的接口,如:Aria.download(this).load(url).login(user, pw).start()");
return new FtpDownloadTarget(entity, targetName, refreshInfo);
}
return new DownloadTarget(entity, targetName, refreshInfo); return new DownloadTarget(entity, targetName, refreshInfo);
} }
@ -93,7 +88,7 @@ public class DownloadReceiver extends AbsReceiver {
* @param refreshInfo 是否刷新下载信息 * @param refreshInfo 是否刷新下载信息
*/ */
public DownloadTarget load(@NonNull String url, boolean refreshInfo) { public DownloadTarget load(@NonNull String url, boolean refreshInfo) {
CheckUtil.checkDownloadUrl(url); CheckUtil.checkUrl(url);
return new DownloadTarget(url, targetName, refreshInfo); return new DownloadTarget(url, targetName, refreshInfo);
} }
@ -105,6 +100,28 @@ public class DownloadReceiver extends AbsReceiver {
return new DownloadGroupTarget(urls, targetName); 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单任务下载地址 * 加载ftp单任务下载地址
*/ */
@ -118,7 +135,7 @@ public class DownloadReceiver extends AbsReceiver {
* @param refreshInfo 是否刷新下载信息 * @param refreshInfo 是否刷新下载信息
*/ */
public FtpDownloadTarget loadFtp(@NonNull String url, boolean refreshInfo) { public FtpDownloadTarget loadFtp(@NonNull String url, boolean refreshInfo) {
CheckUtil.checkDownloadUrl(url); CheckUtil.checkUrl(url);
return new FtpDownloadTarget(url, targetName, refreshInfo); return new FtpDownloadTarget(url, targetName, refreshInfo);
} }
@ -136,7 +153,7 @@ public class DownloadReceiver extends AbsReceiver {
* 加载ftp文件夹下载地址 * 加载ftp文件夹下载地址
*/ */
public FtpDirDownloadTarget loadFtpDir(@NonNull String dirUrl) { public FtpDirDownloadTarget loadFtpDir(@NonNull String dirUrl) {
CheckUtil.checkDownloadUrl(dirUrl); CheckUtil.checkUrl(dirUrl);
return new FtpDirDownloadTarget(dirUrl, targetName); return new FtpDirDownloadTarget(dirUrl, targetName);
} }
@ -192,7 +209,7 @@ public class DownloadReceiver extends AbsReceiver {
* 通过下载链接获取下载实体 * 通过下载链接获取下载实体
*/ */
public DownloadEntity getDownloadEntity(String downloadUrl) { public DownloadEntity getDownloadEntity(String downloadUrl) {
CheckUtil.checkDownloadUrl(downloadUrl); CheckUtil.checkUrl(downloadUrl);
return DbEntity.findFirst(DownloadEntity.class, "url=? and isGroupChild='false'", downloadUrl); return DbEntity.findFirst(DownloadEntity.class, "url=? and isGroupChild='false'", downloadUrl);
} }
@ -200,7 +217,7 @@ public class DownloadReceiver extends AbsReceiver {
* 通过下载链接获取保存在数据库的下载任务实体 * 通过下载链接获取保存在数据库的下载任务实体
*/ */
public DownloadTaskEntity getDownloadTask(String downloadUrl) { public DownloadTaskEntity getDownloadTask(String downloadUrl) {
CheckUtil.checkDownloadUrl(downloadUrl); CheckUtil.checkUrl(downloadUrl);
DownloadEntity entity = getDownloadEntity(downloadUrl); DownloadEntity entity = getDownloadEntity(downloadUrl);
if (entity == null || TextUtils.isEmpty(entity.getDownloadPath())) return null; if (entity == null || TextUtils.isEmpty(entity.getDownloadPath())) return null;
return DbEntity.findFirst(DownloadTaskEntity.class, "key=? and isGroupTask='false'", return DbEntity.findFirst(DownloadTaskEntity.class, "key=? and isGroupTask='false'",

@ -39,7 +39,7 @@ public class FtpDirDownloadTarget
if (mTaskEntity == null) { if (mTaskEntity == null) {
mTaskEntity = TEManager.getInstance().createTEntity(DownloadGroupTaskEntity.class, key); mTaskEntity = TEManager.getInstance().createTEntity(DownloadGroupTaskEntity.class, key);
} }
mTaskEntity.requestType = AbsTaskEntity.FTP_DIR; mTaskEntity.requestType = AbsTaskEntity.D_FTP_DIR;
mEntity = mTaskEntity.entity; mEntity = mTaskEntity.entity;
} }

@ -48,7 +48,7 @@ public class FtpDownloadTarget extends DownloadTarget {
mEntity.setFileName(url.substring(lastIndex + 1, url.length())); mEntity.setFileName(url.substring(lastIndex + 1, url.length()));
mTaskEntity.urlEntity = CommonUtil.getFtpUrlInfo(url); mTaskEntity.urlEntity = CommonUtil.getFtpUrlInfo(url);
mTaskEntity.refreshInfo = refreshInfo; mTaskEntity.refreshInfo = refreshInfo;
mTaskEntity.requestType = AbsTaskEntity.FTP; mTaskEntity.requestType = AbsTaskEntity.D_FTP;
} }
/** /**

@ -91,10 +91,10 @@ class Downloader extends AbsFileer<DownloadEntity, DownloadTaskEntity> {
@Override protected AbsThreadTask selectThreadTask(SubThreadConfig<DownloadTaskEntity> config) { @Override protected AbsThreadTask selectThreadTask(SubThreadConfig<DownloadTaskEntity> config) {
switch (mTaskEntity.requestType) { switch (mTaskEntity.requestType) {
case AbsTaskEntity.FTP: case AbsTaskEntity.D_FTP:
case AbsTaskEntity.FTP_DIR: case AbsTaskEntity.D_FTP_DIR:
return new FtpThreadTask(mConstance, (IDownloadListener) mListener, config); return new FtpThreadTask(mConstance, (IDownloadListener) mListener, config);
case AbsTaskEntity.HTTP: case AbsTaskEntity.D_HTTP:
return new HttpThreadTask(mConstance, (IDownloadListener) mListener, config); return new HttpThreadTask(mConstance, (IDownloadListener) mListener, config);
} }
return null; return null;

@ -55,7 +55,7 @@ public class FtpDirDownloadUtil extends AbsGroupUtil {
@Override public void onFail(String url, String errorMsg, boolean needRetry) { @Override public void onFail(String url, String errorMsg, boolean needRetry) {
mListener.onFail(needRetry); mListener.onFail(needRetry);
ErrorHelp.saveError("FTP_DIR", mGTEntity.getEntity(), "", errorMsg); ErrorHelp.saveError("D_FTP_DIR", mGTEntity.getEntity(), "", errorMsg);
} }
}).start(); }).start();
} }

@ -76,8 +76,9 @@ class FtpThreadTask extends AbsFtpThreadTask<DownloadEntity, DownloadTaskEntity>
int len; int len;
while ((len = is.read(buffer)) != -1) { while ((len = is.read(buffer)) != -1) {
if (STATE.isCancel) break; if (STATE.isCancel || STATE.isStop){
if (STATE.isStop) break; break;
}
if (mSleepTime > 0) Thread.sleep(mSleepTime); if (mSleepTime > 0) Thread.sleep(mSleepTime);
if (mChildCurrentLocation + len >= mConfig.END_LOCATION) { if (mChildCurrentLocation + len >= mConfig.END_LOCATION) {
len = (int) (mConfig.END_LOCATION - mChildCurrentLocation); len = (int) (mConfig.END_LOCATION - mChildCurrentLocation);

@ -25,7 +25,7 @@ import com.arialyy.aria.util.ErrorHelp;
/** /**
* Created by lyy on 2015/8/25. * Created by lyy on 2015/8/25.
* HTTP\FTP单任务下载工具 * D_HTTP\FTP单任务下载工具
*/ */
public class SimpleDownloadUtil implements IUtil, Runnable { public class SimpleDownloadUtil implements IUtil, Runnable {
private static final String TAG = "SimpleDownloadUtil"; private static final String TAG = "SimpleDownloadUtil";
@ -92,7 +92,7 @@ public class SimpleDownloadUtil implements IUtil, Runnable {
mListener.onPre(); mListener.onPre();
if (mTaskEntity.getEntity().getFileSize() <= 1 if (mTaskEntity.getEntity().getFileSize() <= 1
|| mTaskEntity.refreshInfo || mTaskEntity.refreshInfo
|| mTaskEntity.requestType == AbsTaskEntity.FTP) { || mTaskEntity.requestType == AbsTaskEntity.D_FTP) {
new Thread(createInfoThread()).start(); new Thread(createInfoThread()).start();
} else { } else {
mDownloader.start(); mDownloader.start();
@ -104,7 +104,7 @@ public class SimpleDownloadUtil implements IUtil, Runnable {
*/ */
private Runnable createInfoThread() { private Runnable createInfoThread() {
switch (mTaskEntity.requestType) { switch (mTaskEntity.requestType) {
case AbsTaskEntity.FTP: case AbsTaskEntity.D_FTP:
return new FtpFileInfoThread(mTaskEntity, new OnFileInfoCallback() { return new FtpFileInfoThread(mTaskEntity, new OnFileInfoCallback() {
@Override public void onComplete(String url, int code) { @Override public void onComplete(String url, int code) {
mDownloader.start(); mDownloader.start();
@ -114,7 +114,7 @@ public class SimpleDownloadUtil implements IUtil, Runnable {
failDownload(errorMsg, needRetry); failDownload(errorMsg, needRetry);
} }
}); });
case AbsTaskEntity.HTTP: case AbsTaskEntity.D_HTTP:
return new HttpFileInfoThread(mTaskEntity, new OnFileInfoCallback() { return new HttpFileInfoThread(mTaskEntity, new OnFileInfoCallback() {
@Override public void onComplete(String url, int code) { @Override public void onComplete(String url, int code) {
mDownloader.start(); mDownloader.start();

@ -19,8 +19,6 @@ import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import com.arialyy.aria.orm.DbEntity; import com.arialyy.aria.orm.DbEntity;
import com.arialyy.aria.orm.Ignore; import com.arialyy.aria.orm.Ignore;
import java.util.LinkedList;
import java.util.List;
/** /**
* Created by AriaL on 2017/6/29. * Created by AriaL on 2017/6/29.
@ -162,6 +160,14 @@ public abstract class AbsEntity extends DbEntity implements IEntity, Parcelable
*/ */
public abstract String getKey(); public abstract String getKey();
/**
* 实体驱动的下载任务类型
*
* @return {@link AbsTaskEntity#D_FTP}{@link AbsTaskEntity#D_FTP_DIR}{@link
* AbsTaskEntity#U_HTTP}...
*/
public abstract int getTaskType();
public AbsEntity() { public AbsEntity() {
} }

@ -29,17 +29,30 @@ import java.util.Map;
*/ */
public abstract class AbsTaskEntity<ENTITY extends AbsEntity> extends DbEntity { public abstract class AbsTaskEntity<ENTITY extends AbsEntity> 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文件夹下载为避免登录过多子任务由单线程进行处理 * 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 * Task实体对应的key
@ -68,9 +81,9 @@ public abstract class AbsTaskEntity<ENTITY extends AbsEntity> extends DbEntity {
/** /**
* 请求类型 * 请求类型
* {@link AbsTaskEntity#HTTP}{@link AbsTaskEntity#FTP}{@link AbsTaskEntity#FTP_DIR} * {@link AbsTaskEntity#D_HTTP}{@link AbsTaskEntity#D_FTP}{@link AbsTaskEntity#D_FTP_DIR}
*/ */
public int requestType = HTTP; public int requestType = D_HTTP;
/** /**
* http 请求头 * http 请求头

@ -21,9 +21,6 @@ import com.arialyy.aria.core.upload.UploadEntity;
import com.arialyy.aria.core.upload.UploadTask; import com.arialyy.aria.core.upload.UploadTask;
import com.arialyy.aria.core.upload.UploadTaskEntity; import com.arialyy.aria.core.upload.UploadTaskEntity;
import com.arialyy.aria.util.CheckUtil; import com.arialyy.aria.util.CheckUtil;
import com.arialyy.aria.util.CommonUtil;
import com.arialyy.aria.util.Regular;
import java.util.regex.Pattern;
/** /**
* Created by AriaL on 2017/6/29. * Created by AriaL on 2017/6/29.
@ -38,7 +35,7 @@ public abstract class AbsUploadTarget<TARGET extends AbsUploadTarget, ENTITY ext
* @param uploadUrl 上传路径 * @param uploadUrl 上传路径
*/ */
public TARGET setUploadUrl(@NonNull String uploadUrl) { public TARGET setUploadUrl(@NonNull String uploadUrl) {
CheckUtil.checkDownloadUrl(uploadUrl); CheckUtil.checkUrl(uploadUrl);
if (mEntity.getUrl().equals(uploadUrl)) return (TARGET) this; if (mEntity.getUrl().equals(uploadUrl)) return (TARGET) this;
mEntity.setUrl(uploadUrl); mEntity.setUrl(uploadUrl);
mEntity.update(); mEntity.update();

@ -47,7 +47,7 @@ public class FtpUploadTarget
File file = new File(filePath); File file = new File(filePath);
mEntity.setFileName(file.getName()); mEntity.setFileName(file.getName());
mEntity.setFileSize(file.length()); mEntity.setFileSize(file.length());
mTaskEntity.requestType = AbsTaskEntity.FTP; mTaskEntity.requestType = AbsTaskEntity.U_FTP;
} }
/** /**
@ -56,7 +56,7 @@ public class FtpUploadTarget
* @param uploadUrl 上传路径 * @param uploadUrl 上传路径
*/ */
public FtpUploadTarget setUploadUrl(@NonNull String uploadUrl) { public FtpUploadTarget setUploadUrl(@NonNull String uploadUrl) {
CheckUtil.checkDownloadUrl(uploadUrl); CheckUtil.checkUrl(uploadUrl);
mTaskEntity.urlEntity = CommonUtil.getFtpUrlInfo(uploadUrl); mTaskEntity.urlEntity = CommonUtil.getFtpUrlInfo(uploadUrl);
if (mEntity.getUrl().equals(uploadUrl)) return this; if (mEntity.getUrl().equals(uploadUrl)) return this;
mEntity.setUrl(uploadUrl); mEntity.setUrl(uploadUrl);

@ -19,9 +19,8 @@ import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import com.arialyy.aria.core.inf.AbsNormalEntity; import com.arialyy.aria.core.inf.AbsNormalEntity;
import com.arialyy.aria.orm.Foreign; import com.arialyy.aria.orm.Foreign;
import com.arialyy.aria.orm.Ignore; import com.arialyy.aria.core.inf.AbsTaskEntity;
import com.arialyy.aria.orm.Primary; import com.arialyy.aria.orm.Primary;
import com.arialyy.aria.orm.PrimaryAndForeign;
/** /**
* Created by lyy on 2017/2/9. * Created by lyy on 2017/2/9.
@ -42,6 +41,10 @@ public class UploadEntity extends AbsNormalEntity implements Parcelable {
return filePath; return filePath;
} }
@Override public int getTaskType() {
return getUrl().startsWith("ftp") ? AbsTaskEntity.D_FTP : AbsTaskEntity.D_HTTP;
}
public UploadEntity() { public UploadEntity() {
} }

@ -18,6 +18,7 @@ package com.arialyy.aria.core.upload;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import com.arialyy.aria.core.inf.AbsUploadTarget; import com.arialyy.aria.core.inf.AbsUploadTarget;
import com.arialyy.aria.core.manager.TEManager; import com.arialyy.aria.core.manager.TEManager;
import com.arialyy.aria.core.inf.AbsTaskEntity;
import java.io.File; import java.io.File;
/** /**
@ -42,6 +43,7 @@ public class UploadTarget extends AbsUploadTarget<UploadTarget, UploadEntity, Up
mEntity.setFileSize(file.length()); mEntity.setFileSize(file.length());
//http暂时不支持断点上传 //http暂时不支持断点上传
mTaskEntity.isSupportBP = false; mTaskEntity.isSupportBP = false;
mTaskEntity.requestType = AbsTaskEntity.U_HTTP;
} }
/** /**

@ -101,10 +101,10 @@ class FtpThreadTask extends AbsFtpThreadTask<UploadEntity, UploadTaskEntity> {
} }
private void initPath() throws UnsupportedEncodingException { private void initPath() throws UnsupportedEncodingException {
String url = mEntity.getUrl(); dir = new String(mTaskEntity.urlEntity.remotePath.getBytes(charSet), SERVER_CHARSET);
String temp = url.substring(url.indexOf(port) + port.length(), url.length()); remotePath = new String(
dir = new String(temp.getBytes(charSet), SERVER_CHARSET); (mTaskEntity.urlEntity.remotePath + "/" + mEntity.getFileName()).getBytes(charSet),
remotePath = new String((temp + "/" + mEntity.getFileName()).getBytes(charSet), SERVER_CHARSET); SERVER_CHARSET);
} }
private void upload(final FTPClient client, final BufferedRandomAccessFile bis) private void upload(final FTPClient client, final BufferedRandomAccessFile bis)

@ -72,10 +72,9 @@ class Uploader extends AbsFileer<UploadEntity, UploadTaskEntity> {
@Override protected AbsThreadTask selectThreadTask(SubThreadConfig<UploadTaskEntity> config) { @Override protected AbsThreadTask selectThreadTask(SubThreadConfig<UploadTaskEntity> config) {
switch (mTaskEntity.requestType) { switch (mTaskEntity.requestType) {
case AbsTaskEntity.FTP: case AbsTaskEntity.U_FTP:
case AbsTaskEntity.FTP_DIR:
return new FtpThreadTask(mConstance, mListener, config); return new FtpThreadTask(mConstance, mListener, config);
case AbsTaskEntity.HTTP: case AbsTaskEntity.U_HTTP:
return new HttpThreadTask(mConstance, (IUploadListener) mListener, config); return new HttpThreadTask(mConstance, (IUploadListener) mListener, config);
} }
return null; return null;

@ -71,19 +71,32 @@ public class CheckUtil {
} }
/** /**
* 测下载链接是否为null * 查下载实体
*/ */
public static void checkDownloadUrl(String downloadUrl) { public static void checkDownloadEntity(DownloadEntity entity) {
if (TextUtils.isEmpty(downloadUrl)) throw new IllegalArgumentException("下载链接不能为null"); checkUrl(entity.getUrl());
checkPath(entity.getDownloadPath());
} }
/** /**
* 检测下载链接是否为null * 检测下载链接是否为null
*/ */
public static void checkUploadUrl(String downloadUrl) { public static void checkPath(String path) {
if (TextUtils.isEmpty(downloadUrl)) throw new IllegalArgumentException("上传地址不能为null"); if (TextUtils.isEmpty(path)) {
throw new IllegalArgumentException("保存路径不能为null");
}
} }
/**
* 检测下载链接是否为null
*/
public static void checkUrl(String url) {
if (TextUtils.isEmpty(url)) {
throw new IllegalArgumentException("下载链接不能为null");
} else if (!url.startsWith("http") && !url.startsWith("ftp")) {
throw new IllegalArgumentException("url错误");
}
}
/** /**
* 检测下载链接组是否为null * 检测下载链接组是否为null
@ -107,9 +120,13 @@ public class CheckUtil {
* 检测上传地址是否为null * 检测上传地址是否为null
*/ */
public static void checkUploadPath(String uploadPath) { 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); File file = new File(uploadPath);
if (!file.exists()) throw new IllegalArgumentException("上传文件不存在"); if (!file.exists()) {
throw new IllegalArgumentException("上传文件不存在");
}
} }
/** /**

@ -28,9 +28,10 @@ Aria有以下特点:
[![Download](https://api.bintray.com/packages/arialyy/maven/AriaApi/images/download.svg)](https://bintray.com/arialyy/maven/AriaApi/_latestVersion) [![Download](https://api.bintray.com/packages/arialyy/maven/AriaApi/images/download.svg)](https://bintray.com/arialyy/maven/AriaApi/_latestVersion)
[![Download](https://api.bintray.com/packages/arialyy/maven/AriaCompiler/images/download.svg)](https://bintray.com/arialyy/maven/AriaCompiler/_latestVersion) [![Download](https://api.bintray.com/packages/arialyy/maven/AriaCompiler/images/download.svg)](https://bintray.com/arialyy/maven/AriaCompiler/_latestVersion)
```java ```java
compile 'com.arialyy.aria:aria-core:3.3.5' compile 'com.arialyy.aria:aria-core:3.3.6'
annotationProcessor 'com.arialyy.aria:aria-compiler:3.3.5' annotationProcessor 'com.arialyy.aria:aria-compiler:3.3.6'
``` ```
如果你使用的是kotlin,请使用kotlin官方提供的方法配置apt,[kotlin kapt官方配置传送门](https://www.kotlincn.net/docs/reference/kapt.html)
*** ***
## 使用 ## 使用

@ -38,8 +38,8 @@ public class FtpDownloadActivity extends BaseActivity<ActivityFtpDownloadBinding
//private final String URL = "ftp://192.168.1.9:21/下载/AriaPrj.zip"; //private final String URL = "ftp://192.168.1.9:21/下载/AriaPrj.zip";
//private final String URL = "ftp://192.168.1.9:21/下载/[电影天堂www.dy2018.com]赛车总动员3BD中英双字.mp4"; //private final String URL = "ftp://192.168.1.9:21/下载/[电影天堂www.dy2018.com]赛车总动员3BD中英双字.mp4";
//private final String URL = "ftp://h:h@tv.dl1234.com:2199/付岩洞复仇者们05.mkv"; //private final String URL = "ftp://h:h@tv.dl1234.com:2199/付岩洞复仇者们05.mkv";
//private final String URL = "ftp://z:z@dygod18.com:21211/[电影天堂www.dy2018.com]xd联盟HD高清国粤双语中字.mkv"; private final String URL = "ftp://z:z@dygod18.com:21211/[电影天堂www.dy2018.com]英格丽向西行BD中英双字.mp4";
private final String URL = "ftp://172.18.104.71:21/upload/AS.zip"; //private final String URL = "ftp://172.18.104.71:21/upload/AS.zip";
@Override protected void init(Bundle savedInstanceState) { @Override protected void init(Bundle savedInstanceState) {
super.init(savedInstanceState); super.init(savedInstanceState);
@ -60,9 +60,8 @@ public class FtpDownloadActivity extends BaseActivity<ActivityFtpDownloadBinding
public void onClick(View view) { public void onClick(View view) {
switch (view.getId()) { switch (view.getId()) {
case R.id.start: case R.id.start:
Aria.download(this).loadFtp(URL, true) Aria.download(this).loadFtp(URL, true).charSet("gbk")
//.charSet("GBK") //.login("lao", "123456")
.login("lao", "123456")
.setDownloadPath("/mnt/sdcard/").start(); .setDownloadPath("/mnt/sdcard/").start();
break; break;
case R.id.stop: case R.id.stop:

@ -28,6 +28,7 @@ import com.arialyy.aria.core.Aria;
import com.arialyy.aria.core.download.DownloadEntity; import com.arialyy.aria.core.download.DownloadEntity;
import com.arialyy.aria.core.download.DownloadGroupEntity; import com.arialyy.aria.core.download.DownloadGroupEntity;
import com.arialyy.aria.core.inf.AbsEntity; import com.arialyy.aria.core.inf.AbsEntity;
import com.arialyy.aria.core.inf.AbsTaskEntity;
import com.arialyy.aria.core.inf.IEntity; import com.arialyy.aria.core.inf.IEntity;
import com.arialyy.aria.util.CommonUtil; import com.arialyy.aria.util.CommonUtil;
import com.arialyy.simple.R; import com.arialyy.simple.R;
@ -206,11 +207,7 @@ public class DownloadAdapter extends AbsRVAdapter<AbsEntity, DownloadAdapter.Sim
@Override public void onClick(View v) { @Override public void onClick(View v) {
mData.remove(entity); mData.remove(entity);
notifyDataSetChanged(); notifyDataSetChanged();
if (isSimpleDownload(entity)) { cancel(entity);
Aria.download(getContext()).load((DownloadEntity) entity).cancel(true);
} else {
Aria.download(getContext()).load((DownloadGroupEntity) entity).cancel(true);
}
} }
}); });
//if (holder instanceof GroupHolder){ //if (holder instanceof GroupHolder){
@ -267,21 +264,58 @@ public class DownloadAdapter extends AbsRVAdapter<AbsEntity, DownloadAdapter.Sim
break; break;
} }
} }
}
private void cancel(AbsEntity entity) {
switch (entity.getTaskType()) {
case AbsTaskEntity.D_FTP:
Aria.download(getContext())
.loadFtp((DownloadEntity) entity)
//.login("lao", "123456")
.cancel(true);
break;
case AbsTaskEntity.D_FTP_DIR:
break;
case AbsTaskEntity.D_HTTP:
Aria.download(getContext()).load((DownloadEntity) entity).cancel(true);
break;
case AbsTaskEntity.DG_HTTP:
Aria.download(getContext()).load((DownloadGroupEntity) entity).cancel(true);
break;
}
}
private void start(AbsEntity entity) { private void start(AbsEntity entity) {
if (isSimpleDownload(entity)) { switch (entity.getTaskType()) {
case AbsTaskEntity.D_FTP:
//Aria.download(getContext()).loadFtp((DownloadEntity) entity).login("lao", "123456").start();
Aria.download(getContext()).loadFtp((DownloadEntity) entity).charSet("GBK").start();
break;
case AbsTaskEntity.D_FTP_DIR:
break;
case AbsTaskEntity.D_HTTP:
Aria.download(getContext()).load((DownloadEntity) entity).start(); Aria.download(getContext()).load((DownloadEntity) entity).start();
} else { break;
case AbsTaskEntity.DG_HTTP:
Aria.download(getContext()).load((DownloadGroupEntity) entity).start(); Aria.download(getContext()).load((DownloadGroupEntity) entity).start();
} break;
} }
}
private void stop(AbsEntity entity) { private void stop(AbsEntity entity) {
if (isSimpleDownload(entity)) { switch (entity.getTaskType()) {
case AbsTaskEntity.D_FTP:
//Aria.download(getContext()).loadFtp((DownloadEntity) entity).login("lao", "123456").stop();
Aria.download(getContext()).loadFtp((DownloadEntity) entity).charSet("GBK").stop();
break;
case AbsTaskEntity.D_FTP_DIR:
break;
case AbsTaskEntity.D_HTTP:
Aria.download(getContext()).load((DownloadEntity) entity).stop(); Aria.download(getContext()).load((DownloadEntity) entity).stop();
} else { break;
case AbsTaskEntity.DG_HTTP:
Aria.download(getContext()).load((DownloadGroupEntity) entity).stop(); Aria.download(getContext()).load((DownloadGroupEntity) entity).stop();
} break;
} }
} }

@ -35,10 +35,10 @@ import com.arialyy.simple.databinding.ActivityFtpUploadBinding;
*/ */
public class FtpUploadActivity extends BaseActivity<ActivityFtpUploadBinding> { public class FtpUploadActivity extends BaseActivity<ActivityFtpUploadBinding> {
private final String FILE_PATH = "/mnt/sdcard/Download/me.jpg"; private final String FILE_PATH = "/mnt/sdcard/Download/me.jpg";
private final String URL = "ftp://172.18.104.49:21/upload/测试"; private final String URL = "ftp://172.18.104.65:21/upload/测试";
@Override protected void init(Bundle savedInstanceState) { @Override protected void init(Bundle savedInstanceState) {
setTile("FTP 文件上传"); setTile("D_FTP 文件上传");
super.init(savedInstanceState); super.init(savedInstanceState);
Aria.upload(this).register(); Aria.upload(this).register();
UploadEntity entity = Aria.upload(this).getUploadEntity(FILE_PATH); UploadEntity entity = Aria.upload(this).getUploadEntity(FILE_PATH);

@ -42,7 +42,7 @@ public class HttpUploadActivity extends BaseActivity<ActivityUploadBinding> {
} }
@Override protected void init(Bundle savedInstanceState) { @Override protected void init(Bundle savedInstanceState) {
setTile("HTTP 上传"); setTile("D_HTTP 上传");
super.init(savedInstanceState); super.init(savedInstanceState);
Aria.upload(this).register(); Aria.upload(this).register();
} }

@ -39,7 +39,7 @@ task clean(type: Delete) {
ext { ext {
userOrg = 'arialyy' userOrg = 'arialyy'
groupId = 'com.arialyy.aria' groupId = 'com.arialyy.aria'
publishVersion = '3.3.6_dev_2' publishVersion = '3.3.6'
// publishVersion = '1.0.3' //FTP插件 // publishVersion = '1.0.3' //FTP插件
repoName='maven' repoName='maven'
desc = 'android 下载框架' desc = 'android 下载框架'

Loading…
Cancel
Save