3.5
This commit is contained in:
@@ -0,0 +1,139 @@
|
||||
/*
|
||||
* 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.common;
|
||||
|
||||
import android.os.Handler;
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.inf.AbsEntity;
|
||||
import com.arialyy.aria.core.inf.AbsTask;
|
||||
import com.arialyy.aria.core.inf.AbsTaskEntity;
|
||||
import com.arialyy.aria.core.inf.IEntity;
|
||||
import com.arialyy.aria.core.inf.IEventListener;
|
||||
import com.arialyy.aria.core.inf.TaskSchedulerType;
|
||||
import com.arialyy.aria.core.scheduler.ISchedulers;
|
||||
import com.arialyy.aria.util.CommonUtil;
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
public abstract class BaseListener<ENTITY extends AbsEntity, TASK_ENTITY extends AbsTaskEntity<ENTITY>, TASK extends AbsTask<ENTITY, TASK_ENTITY>>
|
||||
implements IEventListener {
|
||||
private static final String TAG = "BaseListener";
|
||||
protected WeakReference<Handler> outHandler;
|
||||
private int RUN_SAVE_INTERVAL = 5 * 1000; //5s保存一次下载中的进度
|
||||
private long mLastLen; //上一次发送长度
|
||||
private boolean isFirst = true;
|
||||
private TASK mTask;
|
||||
private long mLastSaveTime;
|
||||
protected ENTITY mEntity;
|
||||
protected TASK_ENTITY mTaskEntity;
|
||||
protected boolean isConvertSpeed;
|
||||
protected long mUpdateInterval;
|
||||
protected AriaManager manager;
|
||||
|
||||
protected BaseListener(TASK task, Handler outHandler) {
|
||||
this.outHandler = new WeakReference<>(outHandler);
|
||||
this.mTask = new WeakReference<>(task).get();
|
||||
this.mEntity = mTask.getTaskEntity().getEntity();
|
||||
this.mTaskEntity = mTask.getTaskEntity();
|
||||
manager = AriaManager.getInstance(AriaManager.APP);
|
||||
mLastLen = mEntity.getCurrentProgress();
|
||||
mLastSaveTime = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
@Override public void onPre() {
|
||||
saveData(IEntity.STATE_PRE, -1);
|
||||
sendInState2Target(ISchedulers.PRE);
|
||||
}
|
||||
|
||||
@Override public void onStart(long startLocation) {
|
||||
saveData(IEntity.STATE_RUNNING, startLocation);
|
||||
sendInState2Target(ISchedulers.START);
|
||||
}
|
||||
|
||||
@Override public void onResume(long resumeLocation) {
|
||||
saveData(IEntity.STATE_RUNNING, resumeLocation);
|
||||
sendInState2Target(ISchedulers.RESUME);
|
||||
}
|
||||
|
||||
@Override public void onProgress(long currentLocation) {
|
||||
mEntity.setCurrentProgress(currentLocation);
|
||||
long speed = currentLocation - mLastLen;
|
||||
if (isFirst) {
|
||||
speed = 0;
|
||||
isFirst = false;
|
||||
}
|
||||
handleSpeed(speed);
|
||||
sendInState2Target(ISchedulers.RUNNING);
|
||||
if (System.currentTimeMillis() - mLastSaveTime >= RUN_SAVE_INTERVAL) {
|
||||
saveData(IEntity.STATE_RUNNING, currentLocation);
|
||||
mLastSaveTime = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
mLastLen = currentLocation;
|
||||
}
|
||||
|
||||
@Override public void onStop(long stopLocation) {
|
||||
saveData(mTask.getSchedulerType() == TaskSchedulerType.TYPE_STOP_AND_WAIT ? IEntity.STATE_WAIT
|
||||
: IEntity.STATE_STOP, stopLocation);
|
||||
handleSpeed(0);
|
||||
sendInState2Target(ISchedulers.STOP);
|
||||
}
|
||||
|
||||
@Override public void onComplete() {
|
||||
saveData(IEntity.STATE_COMPLETE, mEntity.getFileSize());
|
||||
handleSpeed(0);
|
||||
sendInState2Target(ISchedulers.COMPLETE);
|
||||
}
|
||||
|
||||
@Override public void onCancel() {
|
||||
saveData(IEntity.STATE_CANCEL, -1);
|
||||
handleSpeed(0);
|
||||
sendInState2Target(ISchedulers.CANCEL);
|
||||
}
|
||||
|
||||
@Override public void onFail(boolean needRetry) {
|
||||
mEntity.setFailNum(mEntity.getFailNum() + 1);
|
||||
saveData(IEntity.STATE_FAIL, mEntity.getCurrentProgress());
|
||||
handleSpeed(0);
|
||||
mTask.needRetry = needRetry;
|
||||
sendInState2Target(ISchedulers.FAIL);
|
||||
}
|
||||
|
||||
private void handleSpeed(long speed) {
|
||||
if (mUpdateInterval != 1000) {
|
||||
speed = speed * 1000 / mUpdateInterval;
|
||||
}
|
||||
if (isConvertSpeed) {
|
||||
mEntity.setConvertSpeed(CommonUtil.formatFileSize(speed < 0 ? 0 : speed) + "/s");
|
||||
}
|
||||
mEntity.setSpeed(speed < 0 ? 0 : speed);
|
||||
|
||||
mEntity.setPercent((int) (mEntity.getFileSize() <= 0 ? 0
|
||||
: mEntity.getCurrentProgress() * 100 / mEntity.getFileSize()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 将任务状态发送给下载器
|
||||
*
|
||||
* @param state {@link ISchedulers#START}
|
||||
*/
|
||||
protected void sendInState2Target(int state) {
|
||||
if (outHandler.get() != null) {
|
||||
outHandler.get().obtainMessage(state, mTask).sendToTarget();
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract void saveData(int state, long location);
|
||||
}
|
||||
@@ -16,53 +16,27 @@
|
||||
package com.arialyy.aria.core.download;
|
||||
|
||||
import android.os.Handler;
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.common.BaseListener;
|
||||
import com.arialyy.aria.core.common.TaskRecord;
|
||||
import com.arialyy.aria.core.inf.AbsEntity;
|
||||
import com.arialyy.aria.core.inf.AbsTask;
|
||||
import com.arialyy.aria.core.inf.AbsTaskEntity;
|
||||
import com.arialyy.aria.core.inf.IDownloadListener;
|
||||
import com.arialyy.aria.core.inf.IEntity;
|
||||
import com.arialyy.aria.core.inf.TaskSchedulerType;
|
||||
import com.arialyy.aria.core.scheduler.ISchedulers;
|
||||
import com.arialyy.aria.orm.DbEntity;
|
||||
import com.arialyy.aria.util.CommonUtil;
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
/**
|
||||
* 下载监听类
|
||||
*/
|
||||
class BaseDListener<ENTITY extends AbsEntity, TASK_ENTITY extends AbsTaskEntity<ENTITY>, TASK extends AbsTask<ENTITY, TASK_ENTITY>>
|
||||
class BaseDListener extends BaseListener<DownloadEntity, DownloadTaskEntity, DownloadTask>
|
||||
implements IDownloadListener {
|
||||
private static final String TAG = "BaseDListener";
|
||||
WeakReference<Handler> outHandler;
|
||||
private int RUN_SAVE_INTERVAL = 5 * 1000; //5s保存一次下载中的进度
|
||||
private long mLastLen; //上一次发送长度
|
||||
private boolean isFirst = true;
|
||||
protected ENTITY mEntity;
|
||||
protected TASK_ENTITY mTaskEntity;
|
||||
private TASK mTask;
|
||||
private boolean isConvertSpeed;
|
||||
private long mLastSaveTime;
|
||||
private long mUpdateInterval;
|
||||
|
||||
BaseDListener(TASK task, Handler outHandler) {
|
||||
this.outHandler = new WeakReference<>(outHandler);
|
||||
this.mTask = new WeakReference<>(task).get();
|
||||
this.mEntity = mTask.getTaskEntity().getEntity();
|
||||
this.mTaskEntity = mTask.getTaskEntity();
|
||||
final AriaManager manager = AriaManager.getInstance(AriaManager.APP);
|
||||
BaseDListener(DownloadTask task, Handler outHandler) {
|
||||
super(task, outHandler);
|
||||
isConvertSpeed = manager.getDownloadConfig().isConvertSpeed();
|
||||
mLastLen = mEntity.getCurrentProgress();
|
||||
mLastSaveTime = System.currentTimeMillis();
|
||||
mUpdateInterval = manager.getDownloadConfig().getUpdateInterval();
|
||||
}
|
||||
|
||||
@Override public void onPre() {
|
||||
saveData(IEntity.STATE_PRE, -1);
|
||||
sendInState2Target(ISchedulers.PRE);
|
||||
}
|
||||
|
||||
@Override public void onPostPre(long fileSize) {
|
||||
mEntity.setFileSize(fileSize);
|
||||
mEntity.setConvertFileSize(CommonUtil.formatFileSize(fileSize));
|
||||
@@ -74,84 +48,8 @@ class BaseDListener<ENTITY extends AbsEntity, TASK_ENTITY extends AbsTaskEntity<
|
||||
|
||||
}
|
||||
|
||||
@Override public void onStart(long startLocation) {
|
||||
saveData(IEntity.STATE_RUNNING, startLocation);
|
||||
sendInState2Target(ISchedulers.START);
|
||||
}
|
||||
|
||||
@Override public void onResume(long resumeLocation) {
|
||||
saveData(IEntity.STATE_RUNNING, resumeLocation);
|
||||
sendInState2Target(ISchedulers.RESUME);
|
||||
}
|
||||
|
||||
@Override public void onProgress(long currentLocation) {
|
||||
mEntity.setCurrentProgress(currentLocation);
|
||||
long speed = currentLocation - mLastLen;
|
||||
if (isFirst) {
|
||||
speed = 0;
|
||||
isFirst = false;
|
||||
}
|
||||
handleSpeed(speed);
|
||||
sendInState2Target(ISchedulers.RUNNING);
|
||||
if (System.currentTimeMillis() - mLastSaveTime >= RUN_SAVE_INTERVAL) {
|
||||
saveData(IEntity.STATE_RUNNING, currentLocation);
|
||||
mLastSaveTime = System.currentTimeMillis();
|
||||
}
|
||||
|
||||
mLastLen = currentLocation;
|
||||
}
|
||||
|
||||
@Override public void onStop(long stopLocation) {
|
||||
saveData(mTask.getSchedulerType() == TaskSchedulerType.TYPE_STOP_AND_WAIT ? IEntity.STATE_WAIT : IEntity.STATE_STOP, stopLocation);
|
||||
handleSpeed(0);
|
||||
sendInState2Target(ISchedulers.STOP);
|
||||
}
|
||||
|
||||
@Override public void onCancel() {
|
||||
saveData(IEntity.STATE_CANCEL, -1);
|
||||
handleSpeed(0);
|
||||
sendInState2Target(ISchedulers.CANCEL);
|
||||
}
|
||||
|
||||
@Override public void onComplete() {
|
||||
saveData(IEntity.STATE_COMPLETE, mEntity.getFileSize());
|
||||
handleSpeed(0);
|
||||
sendInState2Target(ISchedulers.COMPLETE);
|
||||
}
|
||||
|
||||
@Override public void onFail(boolean needRetry) {
|
||||
mEntity.setFailNum(mEntity.getFailNum() + 1);
|
||||
saveData(IEntity.STATE_FAIL, mEntity.getCurrentProgress());
|
||||
handleSpeed(0);
|
||||
mTask.needRetry = needRetry;
|
||||
sendInState2Target(ISchedulers.FAIL);
|
||||
}
|
||||
|
||||
private void handleSpeed(long speed) {
|
||||
if (mUpdateInterval != 1000) {
|
||||
speed = speed * 1000 / mUpdateInterval;
|
||||
}
|
||||
if (isConvertSpeed) {
|
||||
mEntity.setConvertSpeed(CommonUtil.formatFileSize(speed < 0 ? 0 : speed) + "/s");
|
||||
}
|
||||
mEntity.setSpeed(speed < 0 ? 0 : speed);
|
||||
|
||||
mEntity.setPercent((int) (mEntity.getFileSize() <= 0 ? 0
|
||||
: mEntity.getCurrentProgress() * 100 / mEntity.getFileSize()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 将任务状态发送给下载器
|
||||
*
|
||||
* @param state {@link ISchedulers#START}
|
||||
*/
|
||||
private void sendInState2Target(int state) {
|
||||
if (outHandler.get() != null) {
|
||||
outHandler.get().obtainMessage(state, mTask).sendToTarget();
|
||||
}
|
||||
}
|
||||
|
||||
private void saveData(int state, long location) {
|
||||
@Override
|
||||
protected void saveData(int state, long location) {
|
||||
mTaskEntity.setState(state);
|
||||
mEntity.setState(state);
|
||||
mEntity.setComplete(state == IEntity.STATE_COMPLETE);
|
||||
@@ -160,14 +58,11 @@ class BaseDListener<ENTITY extends AbsEntity, TASK_ENTITY extends AbsTaskEntity<
|
||||
TaskRecord record =
|
||||
DbEntity.findFirst(TaskRecord.class, "TaskRecord.filePath=?", mTaskEntity.getKey());
|
||||
if (record != null) {
|
||||
CommonUtil.delTaskRecord(record, mTaskEntity.isRemoveFile(), (DownloadEntity) mEntity);
|
||||
CommonUtil.delTaskRecord(record, mTaskEntity.isRemoveFile(), mEntity);
|
||||
} else {
|
||||
mEntity.deleteData();
|
||||
}
|
||||
} else if (mEntity instanceof DownloadGroupEntity) {
|
||||
CommonUtil.delGroupTaskRecord(mTaskEntity.isRemoveFile(), ((DownloadGroupEntity) mEntity));
|
||||
}
|
||||
//mEntity.deleteData();
|
||||
return;
|
||||
} else if (state == IEntity.STATE_STOP) {
|
||||
mEntity.setStopTime(System.currentTimeMillis());
|
||||
|
||||
@@ -25,7 +25,7 @@ import java.io.File;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/7/26.
|
||||
* Created by lyy on 2017/7/26.
|
||||
*/
|
||||
abstract class BaseGroupTarget<TARGET extends BaseGroupTarget>
|
||||
extends AbsDownloadTarget<TARGET, DownloadGroupEntity, DownloadGroupTaskEntity> {
|
||||
|
||||
@@ -16,17 +16,20 @@
|
||||
package com.arialyy.aria.core.download;
|
||||
|
||||
import android.os.Handler;
|
||||
import com.arialyy.aria.core.common.BaseListener;
|
||||
import com.arialyy.aria.core.download.downloader.IDownloadGroupListener;
|
||||
import com.arialyy.aria.core.inf.GroupSendParams;
|
||||
import com.arialyy.aria.core.inf.IEntity;
|
||||
import com.arialyy.aria.core.scheduler.ISchedulers;
|
||||
import com.arialyy.aria.util.ALog;
|
||||
import com.arialyy.aria.util.CommonUtil;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/7/20.
|
||||
* 任务组下载事件
|
||||
*/
|
||||
class DownloadGroupListener
|
||||
extends BaseDListener<DownloadGroupEntity, DownloadGroupTaskEntity, DownloadGroupTask>
|
||||
extends BaseListener<DownloadGroupEntity, DownloadGroupTaskEntity, DownloadGroupTask>
|
||||
implements IDownloadGroupListener {
|
||||
private final String TAG = "DownloadGroupListener";
|
||||
private GroupSendParams<DownloadGroupTask, DownloadEntity> mSeedEntity;
|
||||
@@ -35,6 +38,8 @@ class DownloadGroupListener
|
||||
super(task, outHandler);
|
||||
mSeedEntity = new GroupSendParams<>();
|
||||
mSeedEntity.groupTask = task;
|
||||
isConvertSpeed = manager.getDownloadConfig().isConvertSpeed();
|
||||
mUpdateInterval = manager.getDownloadConfig().getUpdateInterval();
|
||||
}
|
||||
|
||||
@Override public void onSubPre(DownloadEntity subEntity) {
|
||||
@@ -100,4 +105,36 @@ class DownloadGroupListener
|
||||
mEntity.setCurrentProgress(location);
|
||||
mEntity.update();
|
||||
}
|
||||
|
||||
@Override public void onPostPre(long fileSize) {
|
||||
mEntity.setFileSize(fileSize);
|
||||
mEntity.setConvertFileSize(CommonUtil.formatFileSize(fileSize));
|
||||
saveData(IEntity.STATE_POST_PRE, -1);
|
||||
sendInState2Target(ISchedulers.POST_PRE);
|
||||
}
|
||||
|
||||
@Override public void supportBreakpoint(boolean support) {
|
||||
|
||||
}
|
||||
|
||||
@Override protected void saveData(int state, long location) {
|
||||
mTaskEntity.setState(state);
|
||||
mEntity.setState(state);
|
||||
mEntity.setComplete(state == IEntity.STATE_COMPLETE);
|
||||
if (state == IEntity.STATE_CANCEL) {
|
||||
if (mEntity instanceof DownloadGroupEntity) {
|
||||
CommonUtil.delGroupTaskRecord(mTaskEntity.isRemoveFile(), mEntity);
|
||||
}
|
||||
return;
|
||||
} else if (state == IEntity.STATE_STOP) {
|
||||
mEntity.setStopTime(System.currentTimeMillis());
|
||||
} else if (mEntity.isComplete()) {
|
||||
mEntity.setCompleteTime(System.currentTimeMillis());
|
||||
mEntity.setCurrentProgress(mEntity.getFileSize());
|
||||
}
|
||||
if (location > 0) {
|
||||
mEntity.setCurrentProgress(location);
|
||||
}
|
||||
mTaskEntity.update();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -262,15 +262,16 @@ public class DownloadGroupTarget extends BaseGroupTarget<DownloadGroupTarget> im
|
||||
if (!newName.equals(entity.getFileName())) {
|
||||
String oldPath = mEntity.getDirPath() + "/" + entity.getFileName();
|
||||
String newPath = mEntity.getDirPath() + "/" + newName;
|
||||
File oldFile = new File(oldPath);
|
||||
if (oldFile.exists()) {
|
||||
oldFile.renameTo(new File(newPath));
|
||||
}
|
||||
if (DbEntity.checkDataExist(DownloadEntity.class, "downloadPath=? or isComplete='true'", newPath)) {
|
||||
ALog.w(TAG, String.format("更新文件名失败,路径【%s】已存在或文件已下载", newPath));
|
||||
return;
|
||||
}
|
||||
|
||||
File oldFile = new File(oldPath);
|
||||
if (oldFile.exists()) {
|
||||
oldFile.renameTo(new File(newPath));
|
||||
}
|
||||
|
||||
CommonUtil.modifyTaskRecord(oldFile.getPath(), newPath);
|
||||
entity.setDownloadPath(newPath);
|
||||
taskEntity.setKey(newPath);
|
||||
|
||||
@@ -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.download;
|
||||
|
||||
import android.os.Handler;
|
||||
import com.arialyy.aria.core.inf.IDownloadListener;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/7/20.
|
||||
* 普通任务下载的事件监听器
|
||||
*/
|
||||
class DownloadListener extends BaseDListener<DownloadEntity, DownloadTaskEntity, DownloadTask>
|
||||
implements IDownloadListener {
|
||||
DownloadListener(DownloadTask task, Handler outHandler) {
|
||||
super(task, outHandler);
|
||||
}
|
||||
|
||||
@Override public void supportBreakpoint(boolean support) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -37,7 +37,7 @@ public class DownloadTask extends AbsNormalTask<DownloadEntity, DownloadTaskEnti
|
||||
mTaskEntity = taskEntity;
|
||||
mOutHandler = outHandler;
|
||||
mContext = AriaManager.APP;
|
||||
mListener = new DownloadListener(this, mOutHandler);
|
||||
mListener = new BaseDListener(this, mOutHandler);
|
||||
mUtil = new SimpleDownloadUtil(taskEntity, (IDownloadListener) mListener);
|
||||
mEntity = taskEntity.getEntity();
|
||||
}
|
||||
|
||||
@@ -16,129 +16,27 @@
|
||||
package com.arialyy.aria.core.upload;
|
||||
|
||||
import android.os.Handler;
|
||||
import com.arialyy.aria.core.AriaManager;
|
||||
import com.arialyy.aria.core.common.BaseListener;
|
||||
import com.arialyy.aria.core.common.TaskRecord;
|
||||
import com.arialyy.aria.core.inf.AbsEntity;
|
||||
import com.arialyy.aria.core.inf.AbsTask;
|
||||
import com.arialyy.aria.core.inf.AbsTaskEntity;
|
||||
import com.arialyy.aria.core.inf.IEntity;
|
||||
import com.arialyy.aria.core.inf.IUploadListener;
|
||||
import com.arialyy.aria.core.inf.TaskSchedulerType;
|
||||
import com.arialyy.aria.core.scheduler.ISchedulers;
|
||||
import com.arialyy.aria.orm.DbEntity;
|
||||
import com.arialyy.aria.util.CommonUtil;
|
||||
import java.lang.ref.WeakReference;
|
||||
|
||||
/**
|
||||
* 下载监听类
|
||||
*/
|
||||
class BaseUListener<ENTITY extends AbsEntity, TASK_ENTITY extends AbsTaskEntity<ENTITY>, TASK extends AbsTask<ENTITY, TASK_ENTITY>>
|
||||
class BaseUListener extends BaseListener<UploadEntity, UploadTaskEntity, UploadTask>
|
||||
implements IUploadListener {
|
||||
private WeakReference<Handler> outHandler;
|
||||
private int RUN_SAVE_INTERVAL = 5 * 1000; //5s保存一次下载中的进度
|
||||
private long mLastLen = 0; //上一次发送长度
|
||||
private boolean isFirst = true;
|
||||
protected ENTITY mEntity;
|
||||
protected TASK_ENTITY mTaskEntity;
|
||||
protected TASK mTask;
|
||||
private boolean isConvertSpeed = false;
|
||||
private long mLastSaveTime;
|
||||
private long mUpdateInterval;
|
||||
|
||||
BaseUListener(TASK task, Handler outHandler) {
|
||||
this.outHandler = new WeakReference<>(outHandler);
|
||||
this.mTask = new WeakReference<>(task).get();
|
||||
this.mEntity = this.mTask.getTaskEntity().getEntity();
|
||||
this.mTaskEntity = this.mTask.getTaskEntity();
|
||||
final AriaManager manager = AriaManager.getInstance(AriaManager.APP);
|
||||
isConvertSpeed = manager.getDownloadConfig().isConvertSpeed();
|
||||
mLastLen = mEntity.getCurrentProgress();
|
||||
mLastSaveTime = System.currentTimeMillis();
|
||||
BaseUListener(UploadTask task, Handler outHandler) {
|
||||
super(task, outHandler);
|
||||
isConvertSpeed = manager.getUploadConfig().isConvertSpeed();
|
||||
mUpdateInterval = manager.getUploadConfig().getUpdateInterval();
|
||||
}
|
||||
|
||||
@Override public void onPre() {
|
||||
saveData(IEntity.STATE_PRE, -1);
|
||||
sendInState2Target(ISchedulers.PRE);
|
||||
}
|
||||
|
||||
@Override public void onStart(long startLocation) {
|
||||
saveData(IEntity.STATE_RUNNING, startLocation);
|
||||
sendInState2Target(ISchedulers.START);
|
||||
}
|
||||
|
||||
@Override public void onResume(long resumeLocation) {
|
||||
saveData(IEntity.STATE_RUNNING, resumeLocation);
|
||||
sendInState2Target(ISchedulers.RESUME);
|
||||
}
|
||||
|
||||
@Override public void onProgress(long currentLocation) {
|
||||
mEntity.setCurrentProgress(currentLocation);
|
||||
long speed = currentLocation - mLastLen;
|
||||
if (isFirst) {
|
||||
speed = 0;
|
||||
isFirst = false;
|
||||
}
|
||||
handleSpeed(speed);
|
||||
sendInState2Target(ISchedulers.RUNNING);
|
||||
if (System.currentTimeMillis() - mLastSaveTime >= RUN_SAVE_INTERVAL) {
|
||||
saveData(IEntity.STATE_RUNNING, currentLocation);
|
||||
mLastSaveTime = System.currentTimeMillis();
|
||||
}
|
||||
mLastLen = currentLocation;
|
||||
}
|
||||
|
||||
@Override public void onStop(long stopLocation) {
|
||||
saveData(mTask.getSchedulerType() == TaskSchedulerType.TYPE_STOP_AND_WAIT ? IEntity.STATE_WAIT
|
||||
: IEntity.STATE_STOP, stopLocation);
|
||||
handleSpeed(0);
|
||||
sendInState2Target(ISchedulers.STOP);
|
||||
}
|
||||
|
||||
@Override public void onCancel() {
|
||||
saveData(IEntity.STATE_CANCEL, -1);
|
||||
handleSpeed(0);
|
||||
sendInState2Target(ISchedulers.CANCEL);
|
||||
}
|
||||
|
||||
@Override public void onComplete() {
|
||||
saveData(IEntity.STATE_COMPLETE, mEntity.getFileSize());
|
||||
handleSpeed(0);
|
||||
sendInState2Target(ISchedulers.COMPLETE);
|
||||
}
|
||||
|
||||
@Override public void onFail(boolean needRetry) {
|
||||
mEntity.setFailNum(mEntity.getFailNum() + 1);
|
||||
saveData(IEntity.STATE_FAIL, mEntity.getCurrentProgress());
|
||||
handleSpeed(0);
|
||||
mTask.needRetry = needRetry;
|
||||
sendInState2Target(ISchedulers.FAIL);
|
||||
}
|
||||
|
||||
private void handleSpeed(long speed) {
|
||||
if (mUpdateInterval != 1000) {
|
||||
speed = speed * 1000 / mUpdateInterval;
|
||||
}
|
||||
if (isConvertSpeed) {
|
||||
mEntity.setConvertSpeed(CommonUtil.formatFileSize(speed < 0 ? 0 : speed) + "/s");
|
||||
}
|
||||
mEntity.setSpeed(speed < 0 ? 0 : speed);
|
||||
mEntity.setPercent((int) (mEntity.getFileSize() <= 0 ? 0
|
||||
: mEntity.getCurrentProgress() * 100 / mEntity.getFileSize()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 将任务状态发送给下载器
|
||||
*
|
||||
* @param state {@link ISchedulers#START}
|
||||
*/
|
||||
private void sendInState2Target(int state) {
|
||||
if (outHandler.get() != null) {
|
||||
outHandler.get().obtainMessage(state, mTask).sendToTarget();
|
||||
}
|
||||
}
|
||||
|
||||
private void saveData(int state, long location) {
|
||||
@Override
|
||||
protected void saveData(int state, long location) {
|
||||
mTaskEntity.setState(state);
|
||||
mEntity.setState(state);
|
||||
mEntity.setComplete(state == IEntity.STATE_COMPLETE);
|
||||
@@ -147,7 +45,7 @@ class BaseUListener<ENTITY extends AbsEntity, TASK_ENTITY extends AbsTaskEntity<
|
||||
TaskRecord record =
|
||||
DbEntity.findFirst(TaskRecord.class, "TaskRecord.filePath=?", mTaskEntity.getKey());
|
||||
if (record != null) {
|
||||
CommonUtil.delTaskRecord(record, mTaskEntity.isRemoveFile(), (UploadEntity) mEntity);
|
||||
CommonUtil.delTaskRecord(record, mTaskEntity.isRemoveFile(), mEntity);
|
||||
}
|
||||
}
|
||||
//else if (mEntity instanceof AbsGroupEntity) {
|
||||
|
||||
@@ -35,7 +35,7 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/7/24.
|
||||
* Created by lyy on 2017/7/24.
|
||||
* sql工具
|
||||
*/
|
||||
final class SqlUtil {
|
||||
|
||||
@@ -21,7 +21,7 @@ import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/6/6.
|
||||
* Created by lyy on 2017/6/6.
|
||||
* Aria下载事件被注解的方法中,参数仅能有一个,参数类型为{@link com.arialyy.aria.core.download.DownloadTask}
|
||||
* <pre>
|
||||
* <code>
|
||||
|
||||
@@ -21,7 +21,7 @@ import java.lang.annotation.RetentionPolicy;
|
||||
import java.lang.annotation.Target;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/6/6.
|
||||
* Created by lyy on 2017/6/6.
|
||||
* Aria下载事件被注解的方法中,参数仅能有一个,参数类型为{@link com.arialyy.aria.core.download.DownloadGroupTask}
|
||||
* <pre>
|
||||
* <code>
|
||||
|
||||
@@ -33,7 +33,7 @@ import javax.lang.model.element.VariableElement;
|
||||
import javax.lang.model.util.Elements;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/9/6.
|
||||
* Created by lyy on 2017/9/6.
|
||||
* 构建代理文件的参数获取工具
|
||||
*/
|
||||
class ParamObtainUtil {
|
||||
|
||||
@@ -20,7 +20,7 @@ import javax.lang.model.element.Element;
|
||||
import javax.tools.Diagnostic;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/6/6.
|
||||
* Created by lyy on 2017/6/6.
|
||||
*/
|
||||
class PrintLog {
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/6/7.
|
||||
* Created by lyy on 2017/6/7.
|
||||
* 代理类参数
|
||||
*/
|
||||
class ProxyClassParam {
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
package com.arialyy.compiler;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/7/10.
|
||||
* Created by lyy on 2017/7/10.
|
||||
* 任务类型枚举
|
||||
*/
|
||||
enum TaskEnum {
|
||||
|
||||
@@ -6,7 +6,9 @@
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/306
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/272 (现在,停止所有任务,未开始的任务状态将变为停止)
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/277
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/303
|
||||
- 优化停止任务的速度
|
||||
- 修复组合任务修改子任务文件名失败的问题
|
||||
+ v_3.4.12
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/286
|
||||
- 优化线程池任务
|
||||
|
||||
17
README.md
17
README.md
@@ -32,8 +32,8 @@ Aria有以下特点:
|
||||
[](https://bintray.com/arialyy/maven/AriaApi/_latestVersion)
|
||||
[](https://bintray.com/arialyy/maven/AriaCompiler/_latestVersion)
|
||||
```java
|
||||
compile 'com.arialyy.aria:aria-core:3.4.16'
|
||||
annotationProcessor 'com.arialyy.aria:aria-compiler:3.4.16'
|
||||
compile 'com.arialyy.aria:aria-core:3.5'
|
||||
annotationProcessor 'com.arialyy.aria:aria-compiler:3.5'
|
||||
```
|
||||
如果出现android support,请将 `compile 'com.arialyy.aria:aria-core:<last-version>'`替换为
|
||||
```
|
||||
@@ -101,9 +101,16 @@ protected void onCreate(Bundle savedInstanceState) {
|
||||
|
||||
|
||||
### 版本日志
|
||||
+ v_3.4.12
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/286
|
||||
- 优化线程池任务
|
||||
+ v_3.5
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/302
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/283
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/305
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/306
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/272 (现在,停止所有任务,未开始的任务状态将变为停止)
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/277
|
||||
- fix bug https://github.com/AriaLyy/Aria/issues/303
|
||||
- 优化停止任务的速度
|
||||
- 修复组合任务修改子任务文件名失败的问题
|
||||
|
||||
[更多版本记录](https://github.com/AriaLyy/Aria/blob/master/DEV_LOG.md)
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
<activity android:name=".download.multi_download.MultiDownloadActivity"/>
|
||||
<activity android:name=".download.HighestPriorityActivity"/>
|
||||
<activity android:name=".test.TestMutilTaskSysDownload"/>
|
||||
<!--<activity android:name=".download.group.DownloadGroupActivity"/>-->
|
||||
<activity android:name=".download.group.DownloadGroupActivity"/>
|
||||
<activity android:name=".download.FtpDownloadActivity"/>
|
||||
<activity android:name=".download.group.FTPDirDownloadActivity"/>
|
||||
<activity android:name=".upload.HttpUploadActivity"/>
|
||||
|
||||
@@ -31,7 +31,7 @@ import com.arialyy.simple.upload.FtpUploadActivity;
|
||||
import com.arialyy.simple.upload.HttpUploadActivity;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/3/1.
|
||||
* Created by lyy on 2017/3/1.
|
||||
*/
|
||||
public class MainActivity extends BaseActivity<ActivityMainBinding> {
|
||||
|
||||
|
||||
@@ -17,7 +17,7 @@ import com.arialyy.simple.base.BaseDialog;
|
||||
import com.arialyy.simple.databinding.DialogFragmentDownloadBinding;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/8/8.
|
||||
* Created by lyy on 2017/8/8.
|
||||
*/
|
||||
@SuppressLint("ValidFragment") public class DownloadDialogFragment
|
||||
extends BaseDialog<DialogFragmentDownloadBinding> {
|
||||
|
||||
@@ -31,7 +31,7 @@ import com.arialyy.simple.databinding.ActivityFtpDownloadBinding;
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/7/25.
|
||||
* Created by lyy on 2017/7/25.
|
||||
* Ftp下载测试
|
||||
*/
|
||||
public class FtpDownloadActivity extends BaseActivity<ActivityFtpDownloadBinding> {
|
||||
|
||||
@@ -12,7 +12,7 @@ import com.arialyy.simple.R
|
||||
import com.arialyy.simple.base.BaseActivity
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/10/23.
|
||||
* Created by lyy on 2017/10/23.
|
||||
*/
|
||||
class KotlinDownloadActivity : AppCompatActivity() {
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
//import com.arialyy.simple.R;
|
||||
//
|
||||
///**
|
||||
// * Created by Aria.Lao on 2017/1/18.
|
||||
// * Created by lyy on 2017/1/18.
|
||||
// */
|
||||
//
|
||||
//public class SimpleNotification {
|
||||
|
||||
@@ -35,7 +35,7 @@ import com.arialyy.simple.databinding.FragmentDownloadBinding;
|
||||
import com.arialyy.simple.widget.HorizontalProgressBarWithNumber;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/1/4.
|
||||
* Created by lyy on 2017/1/4.
|
||||
*/
|
||||
public class DownloadFragment extends AbsFragment<FragmentDownloadBinding> {
|
||||
@Bind(R.id.start) Button mStart;
|
||||
|
||||
@@ -23,7 +23,7 @@ import com.arialyy.simple.base.BaseActivity;
|
||||
import com.arialyy.simple.databinding.FragmentDownloadBinding;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/1/4.
|
||||
* Created by lyy on 2017/1/4.
|
||||
*/
|
||||
|
||||
public class FragmentActivity extends BaseActivity<FragmentDownloadBinding> {
|
||||
|
||||
@@ -39,7 +39,7 @@ import com.arialyy.simple.widget.HorizontalProgressBarWithNumber;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/9/5.
|
||||
* Created by lyy on 2017/9/5.
|
||||
*/
|
||||
@SuppressLint("ValidFragment") public class ChildHandleDialog
|
||||
extends BaseDialog<DialogSubTaskHandlerBinding> {
|
||||
|
||||
@@ -36,7 +36,7 @@ import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/7/6.
|
||||
* Created by lyy on 2017/7/6.
|
||||
*/
|
||||
public class DownloadGroupActivity extends BaseActivity<ActivityDownloadGroupBinding> {
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@ import com.arialyy.simple.databinding.ActivityDownloadGroupBinding;
|
||||
import com.arialyy.simple.widget.SubStateLinearLayout;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/7/6.
|
||||
* Created by lyy on 2017/7/6.
|
||||
*/
|
||||
public class FTPDirDownloadActivity extends BaseActivity<ActivityDownloadGroupBinding> {
|
||||
private static final String dir = "ftp://192.168.1.2:21/upload/测试";
|
||||
|
||||
@@ -23,7 +23,7 @@ import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/7/6.
|
||||
* Created by lyy on 2017/7/6.
|
||||
*/
|
||||
public class GroupModule extends BaseModule {
|
||||
public GroupModule(Context context) {
|
||||
|
||||
@@ -19,7 +19,7 @@ import com.arialyy.aria.core.download.DownloadEntity;
|
||||
import com.arialyy.aria.core.download.DownloadGroupEntity;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/7/14.
|
||||
* Created by lyy on 2017/7/14.
|
||||
*/
|
||||
public class MultiEntity {
|
||||
public static final int SIMPLE_DOWNLOAD = 0xa1;
|
||||
|
||||
@@ -19,7 +19,7 @@ import android.content.Context;
|
||||
import com.arialyy.simple.base.BaseModule;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/7/14.
|
||||
* Created by lyy on 2017/7/14.
|
||||
*/
|
||||
public class MultiModule extends BaseModule{
|
||||
public MultiModule(Context context) {
|
||||
|
||||
@@ -22,7 +22,7 @@ import android.support.v4.app.NotificationCompat;
|
||||
import com.arialyy.simple.R;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/1/18.
|
||||
* Created by lyy on 2017/1/18.
|
||||
*/
|
||||
public class DownloadNotification {
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ import com.arialyy.aria.core.download.DownloadTask;
|
||||
import com.arialyy.frame.util.show.T;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/4/5.
|
||||
* Created by lyy on 2017/4/5.
|
||||
* 在服务中使用 Aria进行下载
|
||||
*/
|
||||
public class DownloadService extends Service {
|
||||
|
||||
@@ -31,7 +31,7 @@ import com.arialyy.simple.databinding.ActivityFtpUploadBinding;
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/7/28.
|
||||
* Created by lyy on 2017/7/28.
|
||||
* Ftp 文件上传demo
|
||||
*/
|
||||
public class FtpUploadActivity extends BaseActivity<ActivityFtpUploadBinding> {
|
||||
|
||||
@@ -32,7 +32,7 @@ import com.arialyy.simple.widget.HorizontalProgressBarWithNumber;
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/2/9.
|
||||
* Created by lyy on 2017/2/9.
|
||||
*/
|
||||
public class HttpUploadActivity extends BaseActivity<ActivityUploadBinding> {
|
||||
private static final String TAG = "HttpUploadActivity";
|
||||
|
||||
@@ -32,7 +32,7 @@ import java.util.Map;
|
||||
import java.util.WeakHashMap;
|
||||
|
||||
/**
|
||||
* Created by Aria.Lao on 2017/7/17.
|
||||
* Created by lyy on 2017/7/17.
|
||||
*/
|
||||
public class SubStateLinearLayout extends LinearLayout implements View.OnClickListener {
|
||||
private final String TAG = "SubStateLinearLayout";
|
||||
|
||||
@@ -31,7 +31,7 @@ public class UploadTask extends AbsNormalTask<UploadEntity, UploadTaskEntity> {
|
||||
private UploadTask(UploadTaskEntity taskEntity, Handler outHandler) {
|
||||
mTaskEntity = taskEntity;
|
||||
mOutHandler = outHandler;
|
||||
mListener = new BaseUListener<>(this, mOutHandler);
|
||||
mListener = new BaseUListener(this, mOutHandler);
|
||||
mUtil = new SimpleUploadUtil(taskEntity, (IUploadListener) mListener);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user