任务组增加文件大小设置api
This commit is contained in:
@ -16,6 +16,7 @@
|
|||||||
package com.arialyy.aria.core.download;
|
package com.arialyy.aria.core.download;
|
||||||
|
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
import android.util.Log;
|
||||||
import com.arialyy.aria.orm.DbEntity;
|
import com.arialyy.aria.orm.DbEntity;
|
||||||
import com.arialyy.aria.util.CheckUtil;
|
import com.arialyy.aria.util.CheckUtil;
|
||||||
import com.arialyy.aria.util.CommonUtil;
|
import com.arialyy.aria.util.CommonUtil;
|
||||||
@ -59,6 +60,26 @@ public class DownloadGroupTarget
|
|||||||
mEntity = mTaskEntity.entity;
|
mEntity = mTaskEntity.entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 任务组总任务大小,任务组是一个抽象的概念,没有真实的数据实体,任务组的大小是Aria动态获取子任务大小相加而得到的,
|
||||||
|
* 如果你知道当前任务组总大小,你也可以调用该方法给任务组设置大小
|
||||||
|
*
|
||||||
|
* 为了更好的用户体验,建议直接设置任务组文件大小
|
||||||
|
*
|
||||||
|
* @param fileSize 任务组总大小
|
||||||
|
*/
|
||||||
|
public DownloadGroupTarget setFileSize(long fileSize) {
|
||||||
|
if (fileSize <= 0) {
|
||||||
|
Log.w(TAG, "文件大小不能小于 0");
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
if (mEntity.getFileSize() <= 1 || mEntity.getFileSize() != fileSize) {
|
||||||
|
mEntity.setFileSize(fileSize);
|
||||||
|
mEntity.update();
|
||||||
|
}
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 如果你是使用{@link DownloadReceiver#load(DownloadGroupEntity)}进行下载操作,那么你需要设置任务组的下载地址
|
* 如果你是使用{@link DownloadReceiver#load(DownloadGroupEntity)}进行下载操作,那么你需要设置任务组的下载地址
|
||||||
*/
|
*/
|
||||||
|
@ -44,7 +44,7 @@ abstract class AbsGroupUtil implements IUtil {
|
|||||||
* 任务组所有任务总大小
|
* 任务组所有任务总大小
|
||||||
*/
|
*/
|
||||||
long mTotalSize = 0;
|
long mTotalSize = 0;
|
||||||
protected long mCurrentLocation = 0;
|
long mCurrentLocation = 0;
|
||||||
private ExecutorService mExePool;
|
private ExecutorService mExePool;
|
||||||
protected IDownloadGroupListener mListener;
|
protected IDownloadGroupListener mListener;
|
||||||
protected DownloadGroupTaskEntity mTaskEntity;
|
protected DownloadGroupTaskEntity mTaskEntity;
|
||||||
@ -83,6 +83,10 @@ abstract class AbsGroupUtil implements IUtil {
|
|||||||
private int mFailNum = 0;
|
private int mFailNum = 0;
|
||||||
//实际的下载任务数
|
//实际的下载任务数
|
||||||
int mActualTaskNum = 0;
|
int mActualTaskNum = 0;
|
||||||
|
/**
|
||||||
|
* 是否需要读取文件长度,{@code true}需要
|
||||||
|
*/
|
||||||
|
boolean isNeedLoadFileSize = true;
|
||||||
|
|
||||||
AbsGroupUtil(IDownloadGroupListener listener, DownloadGroupTaskEntity taskEntity) {
|
AbsGroupUtil(IDownloadGroupListener listener, DownloadGroupTaskEntity taskEntity) {
|
||||||
mListener = listener;
|
mListener = listener;
|
||||||
@ -95,6 +99,8 @@ abstract class AbsGroupUtil implements IUtil {
|
|||||||
mTasksMap.put(te.getEntity().getUrl(), te);
|
mTasksMap.put(te.getEntity().getUrl(), te);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
mTotalSize = taskEntity.getEntity().getFileSize();
|
||||||
|
isNeedLoadFileSize = mTotalSize <= 1;
|
||||||
for (DownloadEntity entity : mTaskEntity.entity.getSubTask()) {
|
for (DownloadEntity entity : mTaskEntity.entity.getSubTask()) {
|
||||||
File file = new File(entity.getDownloadPath());
|
File file = new File(entity.getDownloadPath());
|
||||||
if (entity.getState() == IEntity.STATE_COMPLETE && file.exists()) {
|
if (entity.getState() == IEntity.STATE_COMPLETE && file.exists()) {
|
||||||
@ -106,7 +112,17 @@ abstract class AbsGroupUtil implements IUtil {
|
|||||||
mCurrentLocation += file.exists() ? entity.getCurrentProgress() : 0;
|
mCurrentLocation += file.exists() ? entity.getCurrentProgress() : 0;
|
||||||
mActualTaskNum++;
|
mActualTaskNum++;
|
||||||
}
|
}
|
||||||
mTotalSize += entity.getFileSize();
|
if (isNeedLoadFileSize) {
|
||||||
|
mTotalSize += entity.getFileSize();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
updateFileSize();
|
||||||
|
}
|
||||||
|
|
||||||
|
void updateFileSize() {
|
||||||
|
if (isNeedLoadFileSize) {
|
||||||
|
mTaskEntity.getEntity().setFileSize(mTotalSize);
|
||||||
|
mTaskEntity.getEntity().update();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,12 +91,16 @@ public class DownloadGroupUtil extends AbsGroupUtil implements IUtil {
|
|||||||
@Override public void onComplete(String url, int code) {
|
@Override public void onComplete(String url, int code) {
|
||||||
DownloadTaskEntity te = mExeMap.get(url);
|
DownloadTaskEntity te = mExeMap.get(url);
|
||||||
if (te != null) {
|
if (te != null) {
|
||||||
mTotalSize += te.getEntity().getFileSize();
|
if (isNeedLoadFileSize) {
|
||||||
|
mTotalSize += te.getEntity().getFileSize();
|
||||||
|
}
|
||||||
startChildDownload(te);
|
startChildDownload(te);
|
||||||
}
|
}
|
||||||
mInitNum++;
|
mInitNum++;
|
||||||
if (mInitNum + mInitFailNum >= mTaskEntity.getEntity().getSubTask().size()) {
|
if (mInitNum + mInitFailNum >= mTaskEntity.getEntity().getSubTask().size()
|
||||||
|
|| !isNeedLoadFileSize) {
|
||||||
startRunningFlow();
|
startRunningFlow();
|
||||||
|
updateFileSize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -116,8 +120,10 @@ public class DownloadGroupUtil extends AbsGroupUtil implements IUtil {
|
|||||||
if (mActualTaskNum < 0) mActualTaskNum = 0;
|
if (mActualTaskNum < 0) mActualTaskNum = 0;
|
||||||
}
|
}
|
||||||
failNum++;
|
failNum++;
|
||||||
if (mInitNum + mInitFailNum >= mTaskEntity.getEntity().getSubTask().size()) {
|
if (mInitNum + mInitFailNum >= mTaskEntity.getEntity().getSubTask().size()
|
||||||
|
|| !isNeedLoadFileSize) {
|
||||||
startRunningFlow();
|
startRunningFlow();
|
||||||
|
updateFileSize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -37,7 +37,6 @@ public class FtpDirDownloadUtil extends AbsGroupUtil {
|
|||||||
new FtpDirInfoThread(mTaskEntity, new OnFileInfoCallback() {
|
new FtpDirInfoThread(mTaskEntity, new OnFileInfoCallback() {
|
||||||
@Override public void onComplete(String url, int code) {
|
@Override public void onComplete(String url, int code) {
|
||||||
if (code >= 200 && code < 300) {
|
if (code >= 200 && code < 300) {
|
||||||
mTotalSize = mTaskEntity.getEntity().getFileSize();
|
|
||||||
for (DownloadEntity entity : mTaskEntity.entity.getSubTask()) {
|
for (DownloadEntity entity : mTaskEntity.entity.getSubTask()) {
|
||||||
mExeMap.put(entity.getUrl(), createChildDownloadTask(entity));
|
mExeMap.put(entity.getUrl(), createChildDownloadTask(entity));
|
||||||
}
|
}
|
||||||
|
@ -74,7 +74,8 @@ public class DownloadGroupActivity extends BaseActivity<ActivityDownloadGroupBin
|
|||||||
.setDownloadDirPath(
|
.setDownloadDirPath(
|
||||||
Environment.getExternalStorageDirectory().getPath() + "/Download/group_test_3")
|
Environment.getExternalStorageDirectory().getPath() + "/Download/group_test_3")
|
||||||
.setGroupAlias("任务组测试")
|
.setGroupAlias("任务组测试")
|
||||||
.setSubTaskFileName(getModule(GroupModule.class).getSubName())
|
.setSubFileName(getModule(GroupModule.class).getSubName())
|
||||||
|
.setFileSize(32895492)
|
||||||
.start();
|
.start();
|
||||||
break;
|
break;
|
||||||
case R.id.stop:
|
case R.id.stop:
|
||||||
|
@ -37,7 +37,7 @@ task clean(type: Delete) {
|
|||||||
ext {
|
ext {
|
||||||
userOrg = 'arialyy'
|
userOrg = 'arialyy'
|
||||||
groupId = 'com.arialyy.aria'
|
groupId = 'com.arialyy.aria'
|
||||||
publishVersion = '3.2.20'
|
publishVersion = '3.2.21_dev_2'
|
||||||
repoName='maven'
|
repoName='maven'
|
||||||
desc = 'android 下载框架'
|
desc = 'android 下载框架'
|
||||||
website = 'https://github.com/AriaLyy/Aria'
|
website = 'https://github.com/AriaLyy/Aria'
|
||||||
|
Reference in New Issue
Block a user