diff --git a/Aria/src/main/java/com/arialyy/aria/core/AriaManager.java b/Aria/src/main/java/com/arialyy/aria/core/AriaManager.java index 5d587e9d..6dbfb75b 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/AriaManager.java +++ b/Aria/src/main/java/com/arialyy/aria/core/AriaManager.java @@ -33,6 +33,7 @@ import com.arialyy.aria.core.download.DownloadReceiver; import com.arialyy.aria.core.inf.ICmd; import com.arialyy.aria.core.inf.IReceiver; import com.arialyy.aria.core.queue.DownloadTaskQueue; +import com.arialyy.aria.core.queue.UploadTaskQueue; import com.arialyy.aria.core.upload.UploadReceiver; import com.arialyy.aria.orm.DbEntity; import com.arialyy.aria.orm.DbUtil; @@ -56,7 +57,6 @@ import java.util.Map; private static final Object LOCK = new Object(); @SuppressLint("StaticFieldLeak") private static volatile AriaManager INSTANCE = null; private Map mReceivers = new HashMap<>(); - private DownloadTaskQueue mDTaskQueue; public static Context APP; private List mCommands = new ArrayList<>(); @@ -84,13 +84,6 @@ import java.util.Map; return DbEntity.findAllData(DownloadEntity.class); } - /** - * 获取任务队列 - */ - public DownloadTaskQueue getTaskQueue() { - return mDTaskQueue; - } - /** * 设置命令 */ @@ -190,7 +183,7 @@ import java.util.Map; Log.w(TAG, "最大任务数不能小于 1"); return this; } - mDTaskQueue.setDownloadNum(maxDownloadNum); + DownloadTaskQueue.getInstance().setDownloadNum(maxDownloadNum); return this; } diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/IDownloadCmd.java b/Aria/src/main/java/com/arialyy/aria/core/command/AbsCmd.java similarity index 69% rename from Aria/src/main/java/com/arialyy/aria/core/command/IDownloadCmd.java rename to Aria/src/main/java/com/arialyy/aria/core/command/AbsCmd.java index 00afc7e2..72a86147 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/command/IDownloadCmd.java +++ b/Aria/src/main/java/com/arialyy/aria/core/command/AbsCmd.java @@ -16,10 +16,13 @@ package com.arialyy.aria.core.command; -import com.arialyy.aria.core.AriaManager; +import com.arialyy.aria.core.download.DownloadTaskEntity; import com.arialyy.aria.core.inf.ITaskEntity; +import com.arialyy.aria.core.queue.DownloadTaskQueue; import com.arialyy.aria.core.queue.ITaskQueue; import com.arialyy.aria.core.inf.ICmd; +import com.arialyy.aria.core.queue.UploadTaskQueue; +import com.arialyy.aria.core.upload.UploadTaskEntity; import com.arialyy.aria.util.CheckUtil; import com.arialyy.aria.util.CommonUtil; @@ -27,7 +30,7 @@ import com.arialyy.aria.util.CommonUtil; * Created by lyy on 2016/8/22. * 下载命令 */ -public abstract class IDownloadCmd implements ICmd { +public abstract class AbsCmd implements ICmd { ITaskQueue mQueue; T mEntity; String TAG; @@ -36,11 +39,15 @@ public abstract class IDownloadCmd implements ICmd { /** * @param targetName 产生任务的对象名 */ - IDownloadCmd(String targetName, T entity) { + AbsCmd(String targetName, T entity) { CheckUtil.checkTaskEntity(entity); mTargetName = targetName; mEntity = entity; TAG = CommonUtil.getClassName(this); - mQueue = AriaManager.getInstance(AriaManager.APP).getTaskQueue(); + if (entity instanceof DownloadTaskEntity) { + mQueue = DownloadTaskQueue.getInstance(); + } else if (entity instanceof UploadTaskEntity) { + mQueue = UploadTaskQueue.getInstance(); + } } } \ No newline at end of file diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/AddCmd.java b/Aria/src/main/java/com/arialyy/aria/core/command/AddCmd.java index f113fb8a..7643e2b2 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/command/AddCmd.java +++ b/Aria/src/main/java/com/arialyy/aria/core/command/AddCmd.java @@ -16,25 +16,27 @@ package com.arialyy.aria.core.command; +import android.util.Log; +import com.arialyy.aria.core.inf.ITask; import com.arialyy.aria.core.inf.ITaskEntity; /** * Created by lyy on 2016/8/22. * 添加任务的命令 */ -class AddCmd extends IDownloadCmd { +class AddCmd extends AbsCmd { AddCmd(String targetName, T entity) { super(targetName, entity); } @Override public void executeCmd() { - // DownloadTask task = mQueue.getTask(mEntity.downloadEntity); - // if (task == null) { - // mQueue.createTask(mTargetName, mEntity); - // } else { - // Log.w(TAG, "添加命令执行失败,【该任务已经存在】"); - // } + ITask task = mQueue.getTask(mEntity.getEntity()); + if (task == null){ + mQueue.createTask(mTargetName, mEntity); + }else { + Log.w(TAG, "添加命令执行失败,【该任务已经存在】"); + } } //AddCmd(DownloadTaskEntity entity) { diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/CancelCmd.java b/Aria/src/main/java/com/arialyy/aria/core/command/CancelCmd.java index 35d80a59..7024143a 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/command/CancelCmd.java +++ b/Aria/src/main/java/com/arialyy/aria/core/command/CancelCmd.java @@ -16,19 +16,29 @@ package com.arialyy.aria.core.command; +import com.arialyy.aria.core.inf.ITask; import com.arialyy.aria.core.inf.ITaskEntity; /** * Created by lyy on 2016/9/20. * 取消命令 */ -class CancelCmd extends IDownloadCmd { +class CancelCmd extends AbsCmd { CancelCmd(String targetName, T entity) { super(targetName, entity); } @Override public void executeCmd() { - + ITask task = mQueue.getTask(mEntity.getEntity()); + if (task == null) { + task = mQueue.createTask(mTargetName, mEntity); + } + if (task != null) { + if (mTargetName != null) { + task.setTargetName(mTargetName); + } + mQueue.cancelTask(task); + } } //CancelCmd(DownloadTaskEntity entity) { diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/CmdFactory.java b/Aria/src/main/java/com/arialyy/aria/core/command/CmdFactory.java index 4c2a2526..a9e7efc9 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/command/CmdFactory.java +++ b/Aria/src/main/java/com/arialyy/aria/core/command/CmdFactory.java @@ -67,7 +67,7 @@ public class CmdFactory { * @param type 命令类型{@link #TASK_CREATE}、{@link #TASK_START}、{@link #TASK_CANCEL}、{@link * #TASK_STOP} */ - public IDownloadCmd createCmd(String target, T entity, int type) { + public AbsCmd createCmd(String target, T entity, int type) { switch (type) { case TASK_CREATE: return createAddCmd(target, entity); diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/StartCmd.java b/Aria/src/main/java/com/arialyy/aria/core/command/StartCmd.java index 7ec000b0..9c2f6124 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/command/StartCmd.java +++ b/Aria/src/main/java/com/arialyy/aria/core/command/StartCmd.java @@ -16,20 +16,28 @@ package com.arialyy.aria.core.command; +import com.arialyy.aria.core.inf.ITask; import com.arialyy.aria.core.inf.ITaskEntity; /** * Created by lyy on 2016/8/22. * 开始命令 */ -class StartCmd extends IDownloadCmd { +class StartCmd extends AbsCmd { StartCmd(String targetName, T entity) { super(targetName, entity); } @Override public void executeCmd() { - + ITask task = mQueue.getTask(mEntity.getEntity()); + if (task == null) { + task = mQueue.createTask(mTargetName, mEntity); + } + if (task != null) { + task.setTargetName(mTargetName); + mQueue.startTask(task); + } } //StartCmd(DownloadTaskEntity entity) { diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/StopCmd.java b/Aria/src/main/java/com/arialyy/aria/core/command/StopCmd.java index 8dbfbc6a..3d617b32 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/command/StopCmd.java +++ b/Aria/src/main/java/com/arialyy/aria/core/command/StopCmd.java @@ -16,20 +16,37 @@ package com.arialyy.aria.core.command; +import android.text.TextUtils; +import android.util.Log; +import com.arialyy.aria.core.inf.IEntity; +import com.arialyy.aria.core.inf.ITask; import com.arialyy.aria.core.inf.ITaskEntity; /** * Created by lyy on 2016/9/20. * 停止命令 */ -class StopCmd extends IDownloadCmd { +class StopCmd extends AbsCmd { StopCmd(String targetName, T entity) { super(targetName, entity); } @Override public void executeCmd() { - + ITask task = mQueue.getTask(mEntity.getEntity()); + if (task == null) { + if (mEntity.getEntity().getState() == IEntity.STATE_RUNNING) { + task = mQueue.createTask(mTargetName, mEntity); + mQueue.stopTask(task); + } else { + Log.w(TAG, "停止命令执行失败,【调度器中没有该任务】"); + } + } else { + if (!TextUtils.isEmpty(mTargetName)) { + task.setTargetName(mTargetName); + } + mQueue.stopTask(task); + } } //StopCmd(DownloadTaskEntity entity) { diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadEntity.java b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadEntity.java index 3f368118..479d2652 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadEntity.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadEntity.java @@ -129,6 +129,7 @@ public class DownloadEntity extends DbEntity implements Parcelable, IEntity{ this.fileSize = fileSize; } + @Override public int getState() { return state; } diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadReceiver.java b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadReceiver.java index d6a42681..0bf74b62 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadReceiver.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadReceiver.java @@ -19,7 +19,7 @@ import android.support.annotation.NonNull; import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.inf.IReceiver; import com.arialyy.aria.core.command.CmdFactory; -import com.arialyy.aria.core.command.IDownloadCmd; +import com.arialyy.aria.core.command.AbsCmd; import com.arialyy.aria.core.scheduler.DownloadSchedulers; import com.arialyy.aria.core.scheduler.OnSchedulerListener; import com.arialyy.aria.util.CheckUtil; @@ -109,7 +109,7 @@ public class DownloadReceiver implements IReceiver { public void stopAllTask() { final AriaManager ariaManager = AriaManager.getInstance(AriaManager.APP); List allEntity = ariaManager.getAllDownloadEntity(); - List stopCmds = new ArrayList<>(); + List stopCmds = new ArrayList<>(); for (DownloadEntity entity : allEntity) { if (entity.getState() == DownloadEntity.STATE_RUNNING) { stopCmds.add(CommonUtil.createDownloadCmd(targetName, new DownloadTaskEntity(entity), @@ -125,7 +125,7 @@ public class DownloadReceiver implements IReceiver { public void cancelAllTask() { final AriaManager ariaManager = AriaManager.getInstance(AriaManager.APP); List allEntity = ariaManager.getAllDownloadEntity(); - List cancelCmds = new ArrayList<>(); + List cancelCmds = new ArrayList<>(); for (DownloadEntity entity : allEntity) { cancelCmds.add(CommonUtil.createDownloadCmd(targetName, new DownloadTaskEntity(entity), CmdFactory.TASK_CANCEL)); diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTarget.java b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTarget.java index 59e19b38..25f19e10 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTarget.java @@ -20,7 +20,7 @@ import android.text.TextUtils; import com.arialyy.aria.core.AriaManager; import com.arialyy.aria.core.RequestEnum; import com.arialyy.aria.core.command.CmdFactory; -import com.arialyy.aria.core.command.IDownloadCmd; +import com.arialyy.aria.core.command.AbsCmd; import com.arialyy.aria.util.CheckUtil; import com.arialyy.aria.util.CommonUtil; import java.util.ArrayList; @@ -141,7 +141,7 @@ public class DownloadTarget { * 开始下载 */ public void start() { - List cmds = new ArrayList<>(); + List cmds = new ArrayList<>(); cmds.add(CommonUtil.createDownloadCmd(targetName, taskEntity, CmdFactory.TASK_CREATE)); cmds.add(CommonUtil.createDownloadCmd(targetName, taskEntity, CmdFactory.TASK_START)); AriaManager.getInstance(AriaManager.APP).setCmds(cmds).exe(); @@ -179,7 +179,7 @@ public class DownloadTarget { * 是否在下载 */ public boolean isDownloading() { - return AriaManager.getInstance(AriaManager.APP).getTaskQueue().getTask(entity).isDownloading(); + return AriaManager.getInstance(AriaManager.APP).getDownloadTaskQueue().getTask(entity).isDownloading(); } /** diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTask.java b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTask.java index 1dcc0454..83fc3d46 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTask.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTask.java @@ -133,6 +133,7 @@ public class DownloadTask implements ITask { return mTargetName; } + @Override public void setTargetName(String targetName) { this.mTargetName = targetName; } diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTaskEntity.java b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTaskEntity.java index 91d15f7b..c5a61b92 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTaskEntity.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/DownloadTaskEntity.java @@ -16,6 +16,7 @@ package com.arialyy.aria.core.download; import com.arialyy.aria.core.RequestEnum; +import com.arialyy.aria.core.inf.IEntity; import com.arialyy.aria.core.inf.ITaskEntity; import java.util.HashMap; import java.util.Map; @@ -33,4 +34,8 @@ public class DownloadTaskEntity implements ITaskEntity { public DownloadTaskEntity(DownloadEntity downloadEntity) { this.downloadEntity = downloadEntity; } + + @Override public IEntity getEntity() { + return downloadEntity; + } } diff --git a/Aria/src/main/java/com/arialyy/aria/core/inf/IEntity.java b/Aria/src/main/java/com/arialyy/aria/core/inf/IEntity.java index 4d4bcbb9..59d3ee4b 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/inf/IEntity.java +++ b/Aria/src/main/java/com/arialyy/aria/core/inf/IEntity.java @@ -1,3 +1,18 @@ +/* + * 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.inf; import com.arialyy.aria.orm.Ignore; @@ -44,4 +59,6 @@ public interface IEntity { */ @Ignore public static final int STATE_CANCEL = 7; + public int getState(); + } diff --git a/Aria/src/main/java/com/arialyy/aria/core/inf/ITask.java b/Aria/src/main/java/com/arialyy/aria/core/inf/ITask.java index aa8436cf..bcf7b025 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/inf/ITask.java +++ b/Aria/src/main/java/com/arialyy/aria/core/inf/ITask.java @@ -33,4 +33,6 @@ public interface ITask { public long getFileSize(); public long getCurrentProgress(); + + public void setTargetName(String targetName); } diff --git a/Aria/src/main/java/com/arialyy/aria/core/inf/ITaskEntity.java b/Aria/src/main/java/com/arialyy/aria/core/inf/ITaskEntity.java index af026170..0780b0bc 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/inf/ITaskEntity.java +++ b/Aria/src/main/java/com/arialyy/aria/core/inf/ITaskEntity.java @@ -1,3 +1,18 @@ +/* + * 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.inf; /** @@ -6,4 +21,6 @@ package com.arialyy.aria.core.inf; public interface ITaskEntity { + public IEntity getEntity(); + } diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadEntity.java b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadEntity.java index 5992a657..051b16d4 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadEntity.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadEntity.java @@ -61,7 +61,7 @@ public class UploadEntity extends DbEntity implements IEntity, Parcelable { this.failNum = failNum; } - public int getState() { + @Override public int getState() { return state; } @@ -114,8 +114,7 @@ public class UploadEntity extends DbEntity implements IEntity, Parcelable { this.failNum = in.readInt(); } - @Ignore - public static final Creator CREATOR = new Creator() { + @Ignore public static final Creator CREATOR = new Creator() { @Override public UploadEntity createFromParcel(Parcel source) { return new UploadEntity(source); } diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadTask.java b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadTask.java index 6ed54b3c..5b79b1ed 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadTask.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadTask.java @@ -36,7 +36,7 @@ public class UploadTask implements ITask { mUtil = new UploadUtil(mTaskEntity, mListener); } - void setTargetName(String targetName) { + @Override public void setTargetName(String targetName) { mTargetName = targetName; } diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadTaskEntity.java b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadTaskEntity.java index c4853d83..030789ea 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadTaskEntity.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadTaskEntity.java @@ -1,6 +1,7 @@ package com.arialyy.aria.core.upload; import com.arialyy.aria.core.RequestEnum; +import com.arialyy.aria.core.inf.IEntity; import com.arialyy.aria.core.inf.ITaskEntity; import java.util.HashMap; import java.util.Map; @@ -28,4 +29,8 @@ public class UploadTaskEntity implements ITaskEntity { public UploadTaskEntity(UploadEntity downloadEntity) { this.uploadEntity = downloadEntity; } + + @Override public IEntity getEntity() { + return uploadEntity; + } } diff --git a/Aria/src/main/java/com/arialyy/aria/util/CommonUtil.java b/Aria/src/main/java/com/arialyy/aria/util/CommonUtil.java index 2da387e1..c15260e5 100644 --- a/Aria/src/main/java/com/arialyy/aria/util/CommonUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/util/CommonUtil.java @@ -21,9 +21,8 @@ import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.util.Log; -import com.arialyy.aria.core.download.DownloadTaskEntity; import com.arialyy.aria.core.command.CmdFactory; -import com.arialyy.aria.core.command.IDownloadCmd; +import com.arialyy.aria.core.command.AbsCmd; import com.arialyy.aria.core.inf.ITaskEntity; import java.io.File; import java.io.FileInputStream; @@ -41,7 +40,7 @@ import java.util.Properties; public class CommonUtil { private static final String TAG = "util"; - public static IDownloadCmd createDownloadCmd(String target, T entity, int cmd) { + public static AbsCmd createDownloadCmd(String target, T entity, int cmd) { return CmdFactory.getInstance().createCmd(target, entity, cmd); }