diff --git a/PublicComponent/src/main/java/com/arialyy/aria/core/config/DGroupConfig.java b/PublicComponent/src/main/java/com/arialyy/aria/core/config/DGroupConfig.java index 17989d3c..c99ab3e9 100644 --- a/PublicComponent/src/main/java/com/arialyy/aria/core/config/DGroupConfig.java +++ b/PublicComponent/src/main/java/com/arialyy/aria/core/config/DGroupConfig.java @@ -31,6 +31,11 @@ public class DGroupConfig extends BaseTaskConfig implements Serializable { */ int subMaxTaskNum = 3; + /** + * 子任务失败时回调stop,默认true + */ + private boolean subFailAsStop = true; + /** * 子任务重试次数,默认为5 */ @@ -118,4 +123,14 @@ public class DGroupConfig extends BaseTaskConfig implements Serializable { save(); return this; } + + public boolean isSubFailAsStop() { + return subFailAsStop; + } + + public DGroupConfig setSubFailAsStop(boolean subFailAsStop) { + this.subFailAsStop = subFailAsStop; + save(); + return this; + } } \ No newline at end of file diff --git a/PublicComponent/src/main/java/com/arialyy/aria/core/config/XMLReader.java b/PublicComponent/src/main/java/com/arialyy/aria/core/config/XMLReader.java index f4dfbd84..0e25c6f1 100644 --- a/PublicComponent/src/main/java/com/arialyy/aria/core/config/XMLReader.java +++ b/PublicComponent/src/main/java/com/arialyy/aria/core/config/XMLReader.java @@ -144,6 +144,10 @@ public class XMLReader extends DefaultHandler { int subMaxTaskNum = checkInt(value) ? Integer.parseInt(value) : 3; setField("subMaxTaskNum", subMaxTaskNum, ConfigType.D_GROUP); break; + case "subFailAsStop": // 子任务失败时回调stop + setField("subFailAsStop", checkBoolean(value) ? Boolean.valueOf(value) : false, + ConfigType.D_GROUP); + break; case "subReTryNum": // 子任务重试次数 int subReTryNum = checkInt(value) ? Integer.parseInt(value) : 5; setField("subReTryNum", subReTryNum, ConfigType.D_GROUP); diff --git a/PublicComponent/src/main/java/com/arialyy/aria/core/group/SimpleSchedulers.java b/PublicComponent/src/main/java/com/arialyy/aria/core/group/SimpleSchedulers.java index f66da6c4..9daa5765 100644 --- a/PublicComponent/src/main/java/com/arialyy/aria/core/group/SimpleSchedulers.java +++ b/PublicComponent/src/main/java/com/arialyy/aria/core/group/SimpleSchedulers.java @@ -122,7 +122,7 @@ final class SimpleSchedulers implements Handler.Callback { == mGState.getSubSize()) { mQueue.clear(); mGState.isRunning.set(false); - if (mGState.getCompleteNum() > 0) { + if (mGState.getCompleteNum() > 0&&Configuration.getInstance().dGroupCfg.isSubFailAsStop()) { ALog.e(TAG, String.format("任务组【%s】停止", mGState.getGroupHash())); mGState.listener.onStop(mGState.getProgress()); } else { @@ -184,6 +184,9 @@ final class SimpleSchedulers implements Handler.Callback { == mGState.getSubSize()) { if (mGState.getStopNum() == 0 && mGState.getFailNum() == 0) { mGState.listener.onComplete(); + } else if(mGState.getStopNum() == 0&&!Configuration.getInstance().dGroupCfg.isSubFailAsStop() ){ + mGState.listener.onFail(false, new AriaException(TAG, + String.format("任务组【%s】下载失败", mGState.getGroupHash()))); } else { mGState.listener.onStop(mGState.getProgress()); } diff --git a/PublicComponent/src/main/java/com/arialyy/aria/core/listener/DownloadGroupListener.java b/PublicComponent/src/main/java/com/arialyy/aria/core/listener/DownloadGroupListener.java index 511e6916..9af247ec 100644 --- a/PublicComponent/src/main/java/com/arialyy/aria/core/listener/DownloadGroupListener.java +++ b/PublicComponent/src/main/java/com/arialyy/aria/core/listener/DownloadGroupListener.java @@ -30,6 +30,8 @@ import com.arialyy.aria.util.CommonUtil; import com.arialyy.aria.util.ErrorHelp; import com.arialyy.aria.util.RecordUtil; +import static com.arialyy.aria.core.task.AbsTask.ERROR_INFO_KEY; + /** * Created by Aria.Lao on 2017/7/20. 任务组下载事件 */ @@ -85,6 +87,7 @@ public class DownloadGroupListener handleSubSpeed(subEntity, 0); saveSubState(IEntity.STATE_FAIL, subEntity); saveCurrentLocation(); + mSeedEntity.groupTask.putExpand(ERROR_INFO_KEY,e); sendInState2Target(ISchedulers.SUB_FAIL, subEntity); if (e != null) { e.printStackTrace(); diff --git a/PublicComponent/src/main/java/com/arialyy/aria/util/DbDataHelper.java b/PublicComponent/src/main/java/com/arialyy/aria/util/DbDataHelper.java index bf4d306e..8a2fabf1 100644 --- a/PublicComponent/src/main/java/com/arialyy/aria/util/DbDataHelper.java +++ b/PublicComponent/src/main/java/com/arialyy/aria/util/DbDataHelper.java @@ -107,8 +107,8 @@ public class DbDataHelper { int lastIndex = url.lastIndexOf(File.separator); //去除url末尾携带的的参数 int endIndex = url.lastIndexOf("?"); - if(endIndex<0)endIndex=url.length(); + if(endIndex<0||endIndex - + +