优化代码,删除一些无用的api

Change-Id: If9c79ebd7ddec2cb0f01539f4d38555608e14bea
pull/330/head
laoyuyu 7 years ago
parent fbe3b137e1
commit 277ac8f4c5
  1. 34
      Aria/src/main/java/com/arialyy/aria/core/common/AbsFileer.java
  2. 18
      Aria/src/main/java/com/arialyy/aria/core/common/IUtil.java
  3. 63
      Aria/src/main/java/com/arialyy/aria/core/delegate/HttpHeaderDelegate.java
  4. 35
      Aria/src/main/java/com/arialyy/aria/core/delegate/ParamContainer.java
  5. 13
      Aria/src/main/java/com/arialyy/aria/core/download/AbsDownloadTarget.java
  6. 17
      Aria/src/main/java/com/arialyy/aria/core/download/BaseNormalTarget.java
  7. 6
      Aria/src/main/java/com/arialyy/aria/core/download/DownloadEntity.java
  8. 2
      Aria/src/main/java/com/arialyy/aria/core/download/DownloadReceiver.java
  9. 23
      Aria/src/main/java/com/arialyy/aria/core/download/DownloadTarget.java
  10. 12
      Aria/src/main/java/com/arialyy/aria/core/download/DownloadTask.java
  11. 3
      Aria/src/main/java/com/arialyy/aria/core/download/FtpDownloadTarget.java
  12. 3
      Aria/src/main/java/com/arialyy/aria/core/download/downloader/AbsGroupUtil.java
  13. 44
      Aria/src/main/java/com/arialyy/aria/core/download/downloader/ConnectionHelp.java
  14. 6
      Aria/src/main/java/com/arialyy/aria/core/download/downloader/Downloader.java
  15. 17
      Aria/src/main/java/com/arialyy/aria/core/download/downloader/HttpFileInfoThread.java
  16. 20
      Aria/src/main/java/com/arialyy/aria/core/inf/AbsTaskEntity.java
  17. 27
      Aria/src/main/java/com/arialyy/aria/core/inf/IHttpHeaderTarget.java
  18. 4
      Aria/src/main/java/com/arialyy/aria/core/scheduler/AbsSchedulers.java
  19. 16
      Aria/src/main/java/com/arialyy/aria/core/upload/UploadTarget.java
  20. 2
      Aria/src/main/java/com/arialyy/aria/core/upload/uploader/Uploader.java
  21. 2
      Aria/src/main/java/com/arialyy/aria/orm/DBConfig.java
  22. 2
      app/src/main/java/com/arialyy/simple/download/SingleTaskActivity.java

@ -36,12 +36,13 @@ import java.util.concurrent.Executors;
/** /**
* Created by AriaL on 2017/7/1. * Created by AriaL on 2017/7/1.
* 文件下载 * 任务处理
*/ */
public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY extends AbsTaskEntity<ENTITY>> public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY extends AbsTaskEntity<ENTITY>>
implements Runnable, IUtil { implements Runnable, IUtil {
public static final String STATE = "_state_"; public static final String STATE = "_state_";
public static final String RECORD = "_record_"; public static final String RECORD = "_record_";
protected static final long SUB_LEN = 1024 * 1024;
private final String TAG = "AbsFileer"; private final String TAG = "AbsFileer";
protected IEventListener mListener; protected IEventListener mListener;
@ -49,7 +50,7 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
protected ENTITY mEntity; protected ENTITY mEntity;
protected File mConfigFile;//信息配置文件 protected File mConfigFile;//信息配置文件
protected Context mContext; protected Context mContext;
protected File mTempFile; //下载的文件 protected File mTempFile; //文件
protected boolean isNewTask = true; protected boolean isNewTask = true;
protected StateConstance mConstance; protected StateConstance mConstance;
private ExecutorService mFixedThreadPool; private ExecutorService mFixedThreadPool;
@ -64,7 +65,6 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
/** /**
* 小于1m的文件不启用多线程 * 小于1m的文件不启用多线程
*/ */
private static final long SUB_LEN = 1024 * 1024;
private Timer mTimer; private Timer mTimer;
private long mUpdateInterval = 1000; private long mUpdateInterval = 1000;
@ -89,9 +89,6 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
} }
} }
public StateConstance getConstance() {
return mConstance;
}
@Override public void run() { @Override public void run() {
if (mConstance.isRunning) { if (mConstance.isRunning) {
@ -101,7 +98,7 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
} }
/** /**
* 开始下载流程 * 开始流程
*/ */
private void startFlow() { private void startFlow() {
mConstance.resetState(); mConstance.resetState();
@ -115,7 +112,7 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
mConstance.THREAD_NUM = mTotalThreadNum; mConstance.THREAD_NUM = mTotalThreadNum;
handleNoSupportBP(); handleNoSupportBP();
} else { } else {
mTotalThreadNum = isNewTask ? (getNewTaskThreadNum()) : mStartThreadNum; mTotalThreadNum = isNewTask ? (mStartThreadNum = setNewTaskThreadNum()) : mStartThreadNum;
mConstance.THREAD_NUM = mTotalThreadNum; mConstance.THREAD_NUM = mTotalThreadNum;
handleBreakpoint(); handleBreakpoint();
} }
@ -125,13 +122,7 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
/** /**
* 设置新任务的最大线程数 * 设置新任务的最大线程数
*/ */
protected int getNewTaskThreadNum() { protected abstract int setNewTaskThreadNum();
final int num =
mEntity.getFileSize() <= SUB_LEN || mTaskEntity.requestType == AbsTaskEntity.D_FTP_DIR ? 1
: AriaManager.getInstance(mContext).getDownloadConfig().getThreadNum();
mStartThreadNum = num;
return num;
}
/** /**
* 启动进度获取定时器 * 启动进度获取定时器
@ -165,13 +156,12 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
* *
* @param interval 单位毫秒不能小于0 * @param interval 单位毫秒不能小于0
*/ */
protected long setUpdateInterval(long interval) { protected void setUpdateInterval(long interval) {
if (interval < 0) { if (interval < 0) {
ALog.w(TAG, "更新间隔不能小于0,默认为1000毫秒"); ALog.w(TAG, "更新间隔不能小于0,默认为1000毫秒");
return 1000; return;
} }
mUpdateInterval = interval; mUpdateInterval = interval;
return interval;
} }
@Override public long getFileSize() { @Override public long getFileSize() {
@ -236,12 +226,6 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
start(); start();
} }
/**
* 返回该下载器的
*/
public IEventListener getListener() {
return mListener;
}
/** /**
* 检查任务是否是新任务新任务条件 * 检查任务是否是新任务新任务条件
@ -296,7 +280,7 @@ public abstract class AbsFileer<ENTITY extends AbsNormalEntity, TASK_ENTITY exte
/** /**
* 恢复记录地址 * 恢复记录地址
* *
* @return true 表示下载完成 * @return {@code true}任务已完成
*/ */
private boolean resumeRecordLocation(int i, long startL, long endL) { private boolean resumeRecordLocation(int i, long startL, long endL) {
mConstance.CURRENT_LOCATION += endL - startL; mConstance.CURRENT_LOCATION += endL - startL;

@ -18,7 +18,7 @@ package com.arialyy.aria.core.common;
/** /**
* Created by lyy on 2016/10/31. * Created by lyy on 2016/10/31.
* 抽象的下载接口 * 任务功能接口
*/ */
public interface IUtil { public interface IUtil {
@ -28,39 +28,39 @@ public interface IUtil {
long getFileSize(); long getFileSize();
/** /**
* 获取当前下载位置 * 获取当前位置
*/ */
long getCurrentLocation(); long getCurrentLocation();
/** /**
* 是否正在下载 * 任务是否正在执行
* *
* @return true, 正在下载 * @return {@code true} 任务正在执行
*/ */
boolean isRunning(); boolean isRunning();
/** /**
* 取消下载 * 取消
*/ */
void cancel(); void cancel();
/** /**
* 停止下载 * 停止
*/ */
void stop(); void stop();
/** /**
* 开始下载 * 开始
*/ */
void start(); void start();
/** /**
* 从上次断点恢复下载 * 从上次断点恢复
*/ */
void resume(); void resume();
/** /**
* 设置最大下载速度 * 设置最大速度
*/ */
void setMaxSpeed(double maxSpeed); void setMaxSpeed(double maxSpeed);
} }

@ -18,7 +18,6 @@ package com.arialyy.aria.core.delegate;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import android.text.TextUtils; import android.text.TextUtils;
import com.arialyy.aria.core.common.RequestEnum; import com.arialyy.aria.core.common.RequestEnum;
import com.arialyy.aria.core.download.DownloadEntity;
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.AbsTaskEntity;
import com.arialyy.aria.core.inf.IHttpHeaderTarget; import com.arialyy.aria.core.inf.IHttpHeaderTarget;
@ -140,66 +139,4 @@ public class HttpHeaderDelegate<TARGET extends ITarget, ENTITY extends AbsEntity
mTaskEntity.requestEnum = requestEnum; mTaskEntity.requestEnum = requestEnum;
return mTarget; return mTarget;
} }
/**
* 如果你的下载链接的header中含有md5码信息那么你可以通过设置key来获取从header获取该md5码信息
* key默认值为Content-MD5
* 获取md5信息{@link DownloadEntity#getMd5Code()}
*/
@Override
public TARGET setHeaderMd5Key(String md5Key) {
if (TextUtils.isEmpty(md5Key)) return mTarget;
mTaskEntity.md5Key = md5Key;
if (TextUtils.isEmpty(mTaskEntity.md5Key) || !mTaskEntity.md5Key.equals(md5Key)) {
mTaskEntity.update();
}
return mTarget;
}
/**
* 如果你的文件长度是放在header中那么你需要配置key来让Aria知道正确的文件长度
* key默认值为Content-Length
*/
@Override
public TARGET setHeaderContentLengthKey(String contentLength) {
if (TextUtils.isEmpty(contentLength)) return mTarget;
mTaskEntity.contentLength = contentLength;
if (TextUtils.isEmpty(mTaskEntity.contentLength) || !mTaskEntity.contentLength.equals(
contentLength)) {
mTaskEntity.update();
}
return mTarget;
}
/**
* 如果你的下载链接的header中含有文件描述信息那么你可以通过设置key来获取从header获取该文件描述信息
* key默认值为Content-Disposition
* 获取文件描述信息{@link DownloadEntity#getDisposition()}
*/
@Override
public TARGET setHeaderDispositionKey(String dispositionKey) {
if (TextUtils.isEmpty(dispositionKey)) return mTarget;
mTaskEntity.dispositionKey = dispositionKey;
if (TextUtils.isEmpty(mTaskEntity.dispositionKey) || !mTaskEntity.dispositionKey.equals(
dispositionKey)) {
mTaskEntity.update();
}
return mTarget;
}
/**
* 从文件描述信息{@link #setHeaderDispositionKey(String)}中含有文件名信息你可以通过设置key来获取header中的文件名
* key默认值为attachment;filename
* 获取文件名信息{@link DownloadEntity#getServerFileName()}
*/
@Override
public TARGET setHeaderDispositionFileKey(String dispositionFileKey) {
if (TextUtils.isEmpty(dispositionFileKey)) return mTarget;
mTaskEntity.dispositionFileKey = dispositionFileKey;
if (TextUtils.isEmpty(mTaskEntity.dispositionFileKey) || !mTaskEntity.dispositionFileKey.equals(
dispositionFileKey)) {
mTaskEntity.update();
}
return mTarget;
}
} }

@ -1,35 +0,0 @@
/*
* Copyright (C) 2016 AriaLyy(https://github.com/AriaLyy/Aria)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.arialyy.aria.core.delegate;
import java.util.HashMap;
import java.util.Map;
/**
* Created by AriaL on 2018/3/17.
* 参数容器用来临时存储链式命令的需要的参数
*/
public class ParamContainer {
public String url;
public String filePath;
public String charSet;
public Map<String, String> header = new HashMap<>();
// ftp 相关的
public String userName, userPw, userAccount;
public boolean needLogin;
}

@ -15,13 +15,11 @@
*/ */
package com.arialyy.aria.core.download; package com.arialyy.aria.core.download;
import android.text.TextUtils;
import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.AriaManager;
import com.arialyy.aria.core.command.normal.NormalCmdFactory; import com.arialyy.aria.core.command.normal.NormalCmdFactory;
import com.arialyy.aria.core.inf.AbsEntity; import com.arialyy.aria.core.inf.AbsEntity;
import com.arialyy.aria.core.inf.AbsTarget; import com.arialyy.aria.core.inf.AbsTarget;
import com.arialyy.aria.core.inf.AbsTaskEntity; import com.arialyy.aria.core.inf.AbsTaskEntity;
import com.arialyy.aria.util.ALog;
import com.arialyy.aria.util.CommonUtil; import com.arialyy.aria.util.CommonUtil;
/** /**
@ -72,17 +70,6 @@ abstract class AbsDownloadTarget<TARGET extends AbsTarget, ENTITY extends AbsEnt
} }
} }
/**
* 重定向后新url的key默认为location
*/
public void setRedirectUrlKey(String redirectUrlKey) {
if (TextUtils.isEmpty(redirectUrlKey)) {
ALog.e("AbsDownloadTarget", "重定向后,新url的key不能为null");
return;
}
mTaskEntity.redirectUrlKey = redirectUrlKey;
}
/** /**
* 获取任务文件大小 * 获取任务文件大小
* *

@ -35,23 +35,6 @@ abstract class BaseNormalTarget<TARGET extends BaseNormalTarget>
*/ */
protected String url; protected String url;
/**
* 通过实体初始化target
*/
void initTarget(DownloadEntity entity, String targetName, boolean refreshInfo) {
this.url = entity.getUrl();
mTargetName = targetName;
mTaskEntity = TEManager.getInstance().getTEntity(DownloadTaskEntity.class, url);
if (mTaskEntity == null) {
mTaskEntity = TEManager.getInstance().createTEntity(DownloadTaskEntity.class, entity);
}
mEntity = mTaskEntity.entity;
mTaskEntity.refreshInfo = refreshInfo;
if (mEntity != null) {
mTempFilePath = mEntity.getDownloadPath();
}
}
/** /**
* 通过地址初始化target * 通过地址初始化target
*/ */

@ -43,13 +43,13 @@ public class DownloadEntity extends AbsNormalEntity implements Parcelable {
@Foreign(table = DownloadTaskEntity.class, column = "key") private String taskKey = ""; @Foreign(table = DownloadTaskEntity.class, column = "key") private String taskKey = "";
/** /**
* 通过{@link AbsTaskEntity#md5Key}从服务器的返回信息中获取的文件md5信息如果服务器没有返回则不会设置该信息 * 从服务器的返回信息中获取的文件md5信息如果服务器没有返回则不会设置该信息
* 如果你已经设置了该任务的MD5信息Aria也不会从服务器返回的信息中获取该信息 * 如果你已经设置了该任务的MD5信息Aria也不会从服务器返回的信息中获取该信息
*/ */
private String md5Code = ""; private String md5Code = "";
/** /**
* 通过{@link AbsTaskEntity#dispositionKey}从服务器的返回信息中获取的文件描述信息 * 从服务器的返回信息中获取的文件描述信息
*/ */
private String disposition = ""; private String disposition = "";
@ -117,8 +117,6 @@ public class DownloadEntity extends AbsNormalEntity implements Parcelable {
return this; return this;
} }
@Override public DownloadEntity clone() throws CloneNotSupportedException { @Override public DownloadEntity clone() throws CloneNotSupportedException {
return (DownloadEntity) super.clone(); return (DownloadEntity) super.clone();
} }

@ -182,7 +182,7 @@ public class DownloadReceiver extends AbsReceiver {
* *
* @param groupEntity 如果加载的任务实体没有子项的下载地址 * @param groupEntity 如果加载的任务实体没有子项的下载地址
* 那么你需要使用{@link DownloadGroupTarget#setGroupUrl(List)}设置子项的下载地址 * 那么你需要使用{@link DownloadGroupTarget#setGroupUrl(List)}设置子项的下载地址
* @deprecated {@link #loadGroup(DownloadGroupEntity)} * @deprecated 请使用 {@link #loadGroup(DownloadGroupEntity)}
*/ */
@Deprecated @Deprecated
public DownloadGroupTarget load(DownloadGroupEntity groupEntity) { public DownloadGroupTarget load(DownloadGroupEntity groupEntity) {

@ -35,8 +35,7 @@ public class DownloadTarget extends BaseNormalTarget<DownloadTarget>
} }
DownloadTarget(DownloadEntity entity, String targetName, boolean refreshInfo) { DownloadTarget(DownloadEntity entity, String targetName, boolean refreshInfo) {
initTarget(entity, targetName, refreshInfo); this(entity.getUrl(), targetName, refreshInfo);
initTHis();
} }
DownloadTarget(String url, String targetName) { DownloadTarget(String url, String targetName) {
@ -45,10 +44,6 @@ public class DownloadTarget extends BaseNormalTarget<DownloadTarget>
DownloadTarget(String url, String targetName, boolean refreshInfo) { DownloadTarget(String url, String targetName, boolean refreshInfo) {
initTarget(url, targetName, refreshInfo); initTarget(url, targetName, refreshInfo);
initTHis();
}
private void initTHis() {
mDelegate = new HttpHeaderDelegate<>(this, mTaskEntity); mDelegate = new HttpHeaderDelegate<>(this, mTaskEntity);
} }
@ -110,20 +105,4 @@ public class DownloadTarget extends BaseNormalTarget<DownloadTarget>
@Override public DownloadTarget setRequestMode(RequestEnum requestEnum) { @Override public DownloadTarget setRequestMode(RequestEnum requestEnum) {
return mDelegate.setRequestMode(requestEnum); return mDelegate.setRequestMode(requestEnum);
} }
@Override public DownloadTarget setHeaderMd5Key(String md5Key) {
return mDelegate.setHeaderMd5Key(md5Key);
}
@Override public DownloadTarget setHeaderContentLengthKey(String contentLength) {
return mDelegate.setHeaderContentLengthKey(contentLength);
}
@Override public DownloadTarget setHeaderDispositionKey(String dispositionKey) {
return mDelegate.setHeaderDispositionKey(dispositionKey);
}
@Override public DownloadTarget setHeaderDispositionFileKey(String dispositionFileKey) {
return mDelegate.setHeaderDispositionFileKey(dispositionFileKey);
}
} }

@ -18,7 +18,6 @@ package com.arialyy.aria.core.download;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import android.util.Log;
import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.AriaManager;
import com.arialyy.aria.core.common.IUtil; import com.arialyy.aria.core.common.IUtil;
import com.arialyy.aria.core.download.downloader.SimpleDownloadUtil; import com.arialyy.aria.core.download.downloader.SimpleDownloadUtil;
@ -78,16 +77,11 @@ public class DownloadTask extends AbsNormalTask<DownloadTaskEntity> {
} }
/** /**
* 任务下载状态 * 是否真正下载
* * @return {@code true} 真正下载
* @see DownloadTask#isRunning()
*/ */
@Deprecated public boolean isDownloading() {
return mUtil.isRunning();
}
@Override public boolean isRunning() { @Override public boolean isRunning() {
return isDownloading(); return mUtil.isRunning();
} }
public DownloadEntity getDownloadEntity() { public DownloadEntity getDownloadEntity() {

@ -31,8 +31,7 @@ public class FtpDownloadTarget extends BaseNormalTarget<FtpDownloadTarget>
private FtpDelegate<FtpDownloadTarget, DownloadEntity, DownloadTaskEntity> mDelegate; private FtpDelegate<FtpDownloadTarget, DownloadEntity, DownloadTaskEntity> mDelegate;
FtpDownloadTarget(DownloadEntity entity, String targetName, boolean refreshInfo) { FtpDownloadTarget(DownloadEntity entity, String targetName, boolean refreshInfo) {
initTarget(entity, targetName, refreshInfo); this(entity.getUrl(), targetName, refreshInfo);
init(refreshInfo);
} }
FtpDownloadTarget(String url, String targetName) { FtpDownloadTarget(String url, String targetName) {

@ -389,7 +389,7 @@ public abstract class AbsGroupUtil implements IUtil {
* *
* @param start 是否启动下载 * @param start 是否启动下载
*/ */
Downloader createChildDownload(DownloadTaskEntity taskEntity, boolean start) { private Downloader createChildDownload(DownloadTaskEntity taskEntity, boolean start) {
ChildDownloadListener listener = new ChildDownloadListener(taskEntity); ChildDownloadListener listener = new ChildDownloadListener(taskEntity);
Downloader dt = new Downloader(listener, taskEntity); Downloader dt = new Downloader(listener, taskEntity);
mDownloaderMap.put(taskEntity.getEntity().getUrl(), dt); mDownloaderMap.put(taskEntity.getEntity().getUrl(), dt);
@ -417,7 +417,6 @@ public abstract class AbsGroupUtil implements IUtil {
taskEntity.entity = entity; taskEntity.entity = entity;
taskEntity.headers = mGTEntity.headers; taskEntity.headers = mGTEntity.headers;
taskEntity.requestEnum = mGTEntity.requestEnum; taskEntity.requestEnum = mGTEntity.requestEnum;
taskEntity.redirectUrlKey = mGTEntity.redirectUrlKey;
taskEntity.removeFile = mGTEntity.removeFile; taskEntity.removeFile = mGTEntity.removeFile;
taskEntity.groupName = mGTEntity.key; taskEntity.groupName = mGTEntity.key;
taskEntity.isGroupTask = true; taskEntity.isGroupTask = true;

@ -81,28 +81,28 @@ class ConnectionHelp {
conn.setRequestProperty("User-Agent", conn.setRequestProperty("User-Agent",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"); "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36");
} }
//if (keys == null || !keys.contains("Accept")) { if (keys == null || !keys.contains("Accept")) {
// StringBuilder accept = new StringBuilder(); StringBuilder accept = new StringBuilder();
// accept.append("image/gif, ") accept.append("image/gif, ")
// .append("image/jpeg, ") .append("image/jpeg, ")
// .append("image/pjpeg, ") .append("image/pjpeg, ")
// .append("image/webp, ") .append("image/webp, ")
// .append("image/apng, ") .append("image/apng, ")
// .append("application/xml, ") .append("application/xml, ")
// .append("application/xaml+xml, ") .append("application/xaml+xml, ")
// .append("application/xhtml+xml, ") .append("application/xhtml+xml, ")
// .append("application/x-shockwave-flash, ") .append("application/x-shockwave-flash, ")
// .append("application/x-ms-xbap, ") .append("application/x-ms-xbap, ")
// .append("application/x-ms-application, ") .append("application/x-ms-application, ")
// .append("application/msword, ") .append("application/msword, ")
// .append("application/vnd.ms-excel, ") .append("application/vnd.ms-excel, ")
// .append("application/vnd.ms-xpsdocument, ") .append("application/vnd.ms-xpsdocument, ")
// .append("application/vnd.ms-powerpoint, ") .append("application/vnd.ms-powerpoint, ")
// .append("text/plain, ") .append("text/plain, ")
// .append("text/html, ") .append("text/html, ")
// .append("*/*"); .append("*/*");
// conn.setRequestProperty("Accept", accept.toString()); conn.setRequestProperty("Accept", accept.toString());
//} }
if (keys == null || !keys.contains("Accept-Encoding")) { if (keys == null || !keys.contains("Accept-Encoding")) {
conn.setRequestProperty("Accept-Encoding", "identity"); conn.setRequestProperty("Accept-Encoding", "identity");
} }

@ -44,6 +44,12 @@ class Downloader extends AbsFileer<DownloadEntity, DownloadTaskEntity> {
AriaManager.getInstance(AriaManager.APP).getDownloadConfig().getUpdateInterval()); AriaManager.getInstance(AriaManager.APP).getDownloadConfig().getUpdateInterval());
} }
@Override protected int setNewTaskThreadNum() {
return mEntity.getFileSize() <= SUB_LEN || mTaskEntity.requestType == AbsTaskEntity.D_FTP_DIR
? 1
: AriaManager.getInstance(mContext).getDownloadConfig().getThreadNum();
}
@Override protected void checkTask() { @Override protected void checkTask() {
mConfigFile = new File(CommonUtil.getFileConfigPath(true, mEntity.getFileName())); mConfigFile = new File(CommonUtil.getFileConfigPath(true, mEntity.getFileName()));
mTempFile = new File(mEntity.getDownloadPath()); mTempFile = new File(mEntity.getDownloadPath());

@ -28,8 +28,6 @@ import java.io.IOException;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.net.URLDecoder; import java.net.URLDecoder;
import java.util.List;
import java.util.Map;
/** /**
* 下载文件信息获取 * 下载文件信息获取
@ -77,7 +75,7 @@ class HttpFileInfoThread implements Runnable {
private void handleConnect(HttpURLConnection conn) throws IOException { private void handleConnect(HttpURLConnection conn) throws IOException {
long len = conn.getContentLength(); long len = conn.getContentLength();
if (len < 0) { if (len < 0) {
String temp = conn.getHeaderField(mTaskEntity.contentLength); String temp = conn.getHeaderField("Content-Length");
len = TextUtils.isEmpty(temp) ? -1 : Long.parseLong(temp); len = TextUtils.isEmpty(temp) ? -1 : Long.parseLong(temp);
// 某些服务,如果设置了conn.setRequestProperty("Range", "bytes=" + 0 + "-"); // 某些服务,如果设置了conn.setRequestProperty("Range", "bytes=" + 0 + "-");
// 会返回 Content-Range: bytes 0-225427911/225427913 // 会返回 Content-Range: bytes 0-225427911/225427913
@ -94,7 +92,7 @@ class HttpFileInfoThread implements Runnable {
int code = conn.getResponseCode(); int code = conn.getResponseCode();
boolean isComplete = false; boolean isComplete = false;
if (TextUtils.isEmpty(mEntity.getMd5Code())) { if (TextUtils.isEmpty(mEntity.getMd5Code())) {
String md5Code = conn.getHeaderField(mTaskEntity.md5Key); String md5Code = conn.getHeaderField("Content-MD5");
mEntity.setMd5Code(md5Code); mEntity.setMd5Code(md5Code);
} }
@ -104,7 +102,7 @@ class HttpFileInfoThread implements Runnable {
if (!TextUtils.isEmpty(str) && str.equals("chunked")) { if (!TextUtils.isEmpty(str) && str.equals("chunked")) {
isChunked = true; isChunked = true;
} }
String disposition = conn.getHeaderField(mTaskEntity.dispositionKey); String disposition = conn.getHeaderField("Content-Disposition");
if (!TextUtils.isEmpty(disposition)) { if (!TextUtils.isEmpty(disposition)) {
mEntity.setDisposition(CommonUtil.encryptBASE64(disposition)); mEntity.setDisposition(CommonUtil.encryptBASE64(disposition));
if (disposition.contains(mTaskEntity.dispositionFileKey)) { if (disposition.contains(mTaskEntity.dispositionFileKey)) {
@ -133,10 +131,10 @@ class HttpFileInfoThread implements Runnable {
} else if (code == HttpURLConnection.HTTP_MOVED_TEMP } else if (code == HttpURLConnection.HTTP_MOVED_TEMP
|| code == HttpURLConnection.HTTP_MOVED_PERM || code == HttpURLConnection.HTTP_MOVED_PERM
|| code == HttpURLConnection.HTTP_SEE_OTHER) { || code == HttpURLConnection.HTTP_SEE_OTHER) {
mTaskEntity.redirectUrl = conn.getHeaderField(mTaskEntity.redirectUrlKey); mTaskEntity.redirectUrl = conn.getHeaderField("Location");
mEntity.setRedirect(true); mEntity.setRedirect(true);
mEntity.setRedirectUrl(mTaskEntity.redirectUrl); mEntity.setRedirectUrl(mTaskEntity.redirectUrl);
handle302Turn(conn); handle302Turn(conn, mTaskEntity.redirectUrl);
} else { } else {
failDownload("任务【" + mEntity.getUrl() + "】下载失败,错误码:" + code, true); failDownload("任务【" + mEntity.getUrl() + "】下载失败,错误码:" + code, true);
} }
@ -153,9 +151,8 @@ class HttpFileInfoThread implements Runnable {
/** /**
* 处理30x跳转 * 处理30x跳转
*/ */
private void handle302Turn(HttpURLConnection conn) throws IOException { private void handle302Turn(HttpURLConnection conn, String newUrl) throws IOException {
String newUrl = conn.getHeaderField(mTaskEntity.redirectUrlKey); ALog.d(TAG, "30x跳转,新url为【" + newUrl + "】");
ALog.d(TAG, "30x跳转,location【 " + mTaskEntity.redirectUrlKey + "】" + "新url为【" + newUrl + "】");
if (TextUtils.isEmpty(newUrl) || newUrl.equalsIgnoreCase("null") || !newUrl.startsWith( if (TextUtils.isEmpty(newUrl) || newUrl.equalsIgnoreCase("null") || !newUrl.startsWith(
"http")) { "http")) {
if (onFileInfoListener != null) { if (onFileInfoListener != null) {

@ -101,37 +101,17 @@ public abstract class AbsTaskEntity<ENTITY extends AbsEntity> extends DbEntity {
*/ */
public RequestEnum requestEnum = RequestEnum.GET; public RequestEnum requestEnum = RequestEnum.GET;
/**
* 从header中含有的文件md5码信息所需要的key
*/
public String md5Key = "Content-MD5";
/** /**
* 是否使用服务器通过content-disposition传递的文件名内容格式{@code attachment;filename=***} * 是否使用服务器通过content-disposition传递的文件名内容格式{@code attachment;filename=***}
* {@code true} 使用 * {@code true} 使用
*/ */
public boolean useServerFileName = false; public boolean useServerFileName = false;
/**
* 从header中获取文件描述信息所需要的key
*/
public String dispositionKey = "Content-Disposition";
/**
* 重定向后从header中获取新url所需要的key
*/
public String redirectUrlKey = "location";
/** /**
* 从Disposition获取的文件名说需要的key * 从Disposition获取的文件名说需要的key
*/ */
public String dispositionFileKey = "attachment;filename"; public String dispositionFileKey = "attachment;filename";
/**
* 从header中含有的文件长度信息所需要的key
*/
public String contentLength = "Content-Length";
/** /**
* 重定向链接 * 重定向链接
*/ */

@ -49,31 +49,4 @@ public interface IHttpHeaderTarget<TARGET extends ITarget> {
* @param requestEnum {@link RequestEnum} * @param requestEnum {@link RequestEnum}
*/ */
TARGET setRequestMode(RequestEnum requestEnum); TARGET setRequestMode(RequestEnum requestEnum);
/**
* 如果你的下载链接的header中含有md5码信息那么你可以通过设置key来获取从header获取该md5码信息
* key默认值为Content-MD5
* 获取md5信息{@link DownloadEntity#getMd5Code()}
*/
TARGET setHeaderMd5Key(String md5Key);
/**
* 如果你的文件长度是放在header中那么你需要配置key来让Aria知道正确的文件长度
* key默认值为Content-Length
*/
TARGET setHeaderContentLengthKey(String contentLength);
/**
* 如果你的下载链接的header中含有文件描述信息那么你可以通过设置key来获取从header获取该文件描述信息
* key默认值为Content-Disposition
* 获取文件描述信息{@link DownloadEntity#getDisposition()}
*/
TARGET setHeaderDispositionKey(String dispositionKey);
/**
* 从文件描述信息{@link #setHeaderDispositionKey(String)}中含有文件名信息你可以通过设置key来获取header中的文件名
* key默认值为attachment;filename
* 获取文件名信息{@link DownloadEntity#getServerFileName()}
*/
TARGET setHeaderDispositionFileKey(String dispositionFileKey);
} }

@ -38,8 +38,8 @@ import java.util.concurrent.ConcurrentHashMap;
* Created by lyy on 2017/6/4. * Created by lyy on 2017/6/4.
* 事件调度器用于处理任务状态的调度 * 事件调度器用于处理任务状态的调度
*/ */
abstract class AbsSchedulers<TASK_ENTITY extends AbsTaskEntity, TASK extends AbsTask<TASK_ENTITY>, QUEUE extends ITaskQueue<TASK, TASK_ENTITY>> abstract class AbsSchedulers<TASK_ENTITY extends AbsTaskEntity, TASK extends AbsTask<TASK_ENTITY>,
implements ISchedulers<TASK> { QUEUE extends ITaskQueue<TASK, TASK_ENTITY>> implements ISchedulers<TASK> {
private final String TAG = "AbsSchedulers"; private final String TAG = "AbsSchedulers";
protected QUEUE mQueue; protected QUEUE mQueue;

@ -95,20 +95,4 @@ public class UploadTarget extends BaseNormalTarget<UploadTarget>
@Override public UploadTarget setRequestMode(RequestEnum requestEnum) { @Override public UploadTarget setRequestMode(RequestEnum requestEnum) {
return mDelegate.setRequestMode(requestEnum); return mDelegate.setRequestMode(requestEnum);
} }
@Override public UploadTarget setHeaderMd5Key(String md5Key) {
return mDelegate.setHeaderMd5Key(md5Key);
}
@Override public UploadTarget setHeaderContentLengthKey(String contentLength) {
return mDelegate.setHeaderContentLengthKey(contentLength);
}
@Override public UploadTarget setHeaderDispositionKey(String dispositionKey) {
return mDelegate.setHeaderDispositionKey(dispositionKey);
}
@Override public UploadTarget setHeaderDispositionFileKey(String dispositionFileKey) {
return mDelegate.setHeaderDispositionFileKey(dispositionFileKey);
}
} }

@ -69,7 +69,7 @@ class Uploader extends AbsFileer<UploadEntity, UploadTaskEntity> {
} }
@Override protected int getNewTaskThreadNum() { @Override protected int setNewTaskThreadNum() {
return 1; return 1;
} }

@ -34,7 +34,7 @@ import java.util.Map;
class DBConfig { class DBConfig {
static Map<String, Class> mapping = new HashMap<>(); static Map<String, Class> mapping = new HashMap<>();
static String DB_NAME; static String DB_NAME;
static int VERSION = 24; static int VERSION = 25;
static { static {
if (TextUtils.isEmpty(DB_NAME)) { if (TextUtils.isEmpty(DB_NAME)) {

@ -218,7 +218,7 @@ public class SingleTaskActivity extends BaseActivity<ActivitySingleBinding> {
//.addHeader("Cookie", "BAIDUID=648E5FF020CC69E8DD6F492D1068AAA9:FG=1; BIDUPSID=648E5FF020CC69E8DD6F492D1068AAA9; PSTM=1519099573; BD_UPN=12314753; locale=zh; BDSVRTM=0") //.addHeader("Cookie", "BAIDUID=648E5FF020CC69E8DD6F492D1068AAA9:FG=1; BIDUPSID=648E5FF020CC69E8DD6F492D1068AAA9; PSTM=1519099573; BD_UPN=12314753; locale=zh; BDSVRTM=0")
.setRequestMode(RequestEnum.GET) .setRequestMode(RequestEnum.GET)
.setFilePath(Environment.getExternalStorageDirectory().getPath() + "/ggsg1.apk") .setFilePath(Environment.getExternalStorageDirectory().getPath() + "/ggsg1.apk")
//.resetState() .resetState()
.start(); .start();
//.add(); //.add();
} }

Loading…
Cancel
Save