diff --git a/Aria/build.gradle b/Aria/build.gradle index 81393a41..9eeea133 100644 --- a/Aria/build.gradle +++ b/Aria/build.gradle @@ -7,8 +7,8 @@ android { defaultConfig { minSdkVersion 9 targetSdkVersion 23 - versionCode 101 - versionName "3.0.2" + versionCode 102 + versionName "3.0.3" } buildTypes { release { 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 c896c415..98cf7a27 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/AriaManager.java +++ b/Aria/src/main/java/com/arialyy/aria/core/AriaManager.java @@ -28,17 +28,14 @@ import android.support.v4.app.Fragment; import android.text.TextUtils; import android.util.Log; import android.widget.PopupWindow; -import com.arialyy.aria.core.download.DownloadEntity; 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; import com.arialyy.aria.util.CAConfiguration; -import com.arialyy.aria.util.Configuration; +import com.arialyy.aria.util.Configuration_1; import com.arialyy.aria.util.Speed; import java.util.ArrayList; import java.util.HashMap; @@ -60,6 +57,7 @@ import java.util.Map; private Map mReceivers = new HashMap<>(); public static Context APP; private List mCommands = new ArrayList<>(); + private Configuration mConfig; private AriaManager(Context context) { DbUtil.init(context.getApplicationContext()); @@ -84,7 +82,7 @@ import java.util.Map; * 设置最大下载速度 */ public void setMaxSpeed(Speed speed) { - Configuration.getInstance().setMaxSpeed(speed); + Configuration_1.getInstance().setMaxSpeed(speed); } /** @@ -159,7 +157,7 @@ import java.util.Map; * 设置下载超时时间 */ @Deprecated private AriaManager setTimeOut(int timeOut) { - Configuration.getInstance().setTimeOut(timeOut); + Configuration_1.getInstance().setTimeOut(timeOut); return this; } @@ -167,7 +165,7 @@ import java.util.Map; * 设置失败重试次数 */ public AriaManager setReTryNum(int reTryNum) { - Configuration.getInstance().setReTryNum(reTryNum); + Configuration_1.getInstance().setReTryNum(reTryNum); return this; } @@ -175,7 +173,7 @@ import java.util.Map; * 设置失败重试间隔 */ public AriaManager setReTryInterval(int interval) { - Configuration.getInstance().setReTryInterval(interval); + Configuration_1.getInstance().setReTryInterval(interval); return this; } @@ -183,7 +181,7 @@ import java.util.Map; * 是否打开下载广播 */ public AriaManager openBroadcast(boolean open) { - Configuration.getInstance().setOpenBroadcast(open); + Configuration_1.getInstance().setOpenBroadcast(open); return this; } diff --git a/Aria/src/main/java/com/arialyy/aria/core/Configuration.java b/Aria/src/main/java/com/arialyy/aria/core/Configuration.java new file mode 100644 index 00000000..1c11d5f6 --- /dev/null +++ b/Aria/src/main/java/com/arialyy/aria/core/Configuration.java @@ -0,0 +1,78 @@ +/* + * 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; + +/** + * Created by AriaL on 2016/12/8. + * 信息配置 + */ +class Configuration { + private static final String TAG = "Configuration"; + private static final String CONFIG_FILE = "/Aria/ADConfig.properties"; + private static final String CONFIG_KEY = "ARIA_CONFIG"; + + /** + * 通用配置 + */ + static class BaseConfig { + public boolean isOpenBreadCast = false; + /** + * 任务队列最大任务数, 默认为2 + */ + public int maxQueueNum = 2; + /** + * 下载失败,重试次数,默认为10 + */ + public int reTryNum = 10; + /** + * 设置重试间隔,单位为毫秒,默认2000毫秒 + */ + public long reTryInterval = 2000; + /** + * 设置url连接超时时间,单位为毫秒,默认5000毫秒 + */ + public long connectTimeOut = 5000; + } + + /** + * 下载配置 + */ + public static class DownloadConfig extends BaseConfig { + /** + * 设置IO流读取时间,单位为毫秒,默认20000毫秒,该时间不能少于10000毫秒 + */ + public long readTimeout = 20 * 1000; + /** + * 设置写文件buff大小,该数值大小不能小于2048,数值变小,下载速度会变慢 + */ + public int buffSize = 8192; + /** + * 设置https ca 证书信息;path 为assets目录下的CA证书完整路径 + */ + public String caPath; + /** + * name 为CA证书名 + */ + public String caName; + } + + /** + * 上传配置 + */ + public static class UploadConfig extends BaseConfig { + + } +} diff --git a/Aria/src/main/java/com/arialyy/aria/core/command/AbsCmd.java b/Aria/src/main/java/com/arialyy/aria/core/command/AbsCmd.java index 452b0a34..79f9b104 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/command/AbsCmd.java +++ b/Aria/src/main/java/com/arialyy/aria/core/command/AbsCmd.java @@ -35,12 +35,17 @@ public abstract class AbsCmd implements ICmd { T mEntity; String TAG; String mTargetName; + /** + * 能否执行命令 + */ + boolean cancelExe = true; /** * @param targetName 产生任务的对象名 */ AbsCmd(String targetName, T entity) { - CheckUtil.checkCmdEntity(entity); + cancelExe = CheckUtil.checkCmdEntity(entity, + !(this instanceof CancelCmd) || !(this instanceof StopCmd)); mTargetName = targetName; mEntity = entity; TAG = CommonUtil.getClassName(this); 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 06c12003..6db19781 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 @@ -31,6 +31,7 @@ class AddCmd extends AbsCmd { } @Override public void executeCmd() { + if (!cancelExe) return; ITask task = mQueue.getTask(mEntity.getEntity()); if (task == null) { mQueue.createTask(mTargetName, mEntity); @@ -39,20 +40,4 @@ class AddCmd extends AbsCmd { } } - //AddCmd(DownloadTaskEntity entity) { - // super(entity); - //} - // - //AddCmd(String targetName, DownloadTaskEntity 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, "添加命令执行失败,【该任务已经存在】"); - // } - //} } \ No newline at end of file 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 7024143a..92ea7b42 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 @@ -29,6 +29,7 @@ class CancelCmd extends AbsCmd { } @Override public void executeCmd() { + if (!cancelExe) return; ITask task = mQueue.getTask(mEntity.getEntity()); if (task == null) { task = mQueue.createTask(mTargetName, mEntity); @@ -40,25 +41,4 @@ class CancelCmd extends AbsCmd { mQueue.cancelTask(task); } } - - //CancelCmd(DownloadTaskEntity entity) { - // super(entity); - //} - // - //CancelCmd(String targetName, DownloadTaskEntity entity) { - // super(targetName, entity); - //} - // - //@Override public void executeCmd() { - // DownloadTask task = mQueue.getTask(mEntity.downloadEntity); - // if (task == null) { - // task = mQueue.createTask(mTargetName, mEntity); - // } - // if (task != null) { - // if (mTargetName != null) { - // task.setTargetName(mTargetName); - // } - // mQueue.cancelTask(task); - // } - //} } \ No newline at end of file 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 bec05307..f6598e03 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 @@ -31,6 +31,7 @@ class StartCmd extends AbsCmd { } @Override public void executeCmd() { + if (!cancelExe) return; ITask task = mQueue.getTask(mEntity.getEntity()); if (task == null) { task = mQueue.createTask(mTargetName, mEntity); @@ -41,22 +42,4 @@ class StartCmd extends AbsCmd { } } - //StartCmd(DownloadTaskEntity entity) { - // super(entity); - //} - // - //StartCmd(String targetName, DownloadTaskEntity entity) { - // super(targetName, entity); - //} - // - //@Override public void executeCmd() { - // DownloadTask task = mQueue.getTask(mEntity.downloadEntity); - // if (task == null) { - // task = mQueue.createTask(mTargetName, mEntity); - // } - // if (task != null) { - // task.setTargetName(mTargetName); - // mQueue.startTask(task); - // } - //} } \ No newline at end of file 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 3d617b32..9594381e 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 @@ -33,6 +33,7 @@ class StopCmd extends AbsCmd { } @Override public void executeCmd() { + if (!cancelExe) return; ITask task = mQueue.getTask(mEntity.getEntity()); if (task == null) { if (mEntity.getEntity().getState() == IEntity.STATE_RUNNING) { @@ -48,29 +49,4 @@ class StopCmd extends AbsCmd { mQueue.stopTask(task); } } - - //StopCmd(DownloadTaskEntity entity) { - // super(entity); - //} - // - //StopCmd(String targetName, DownloadTaskEntity entity) { - // super(targetName, entity); - //} - // - //@Override public void executeCmd() { - // DownloadTask task = mQueue.getTask(mEntity.downloadEntity); - // if (task == null) { - // if (mEntity.downloadEntity.getState() == DownloadEntity.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); - // } - //} } \ No newline at end of file diff --git a/Aria/src/main/java/com/arialyy/aria/core/download/ConnectionHelp.java b/Aria/src/main/java/com/arialyy/aria/core/download/ConnectionHelp.java index 0476ce8f..ca2cb6b5 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/download/ConnectionHelp.java +++ b/Aria/src/main/java/com/arialyy/aria/core/download/ConnectionHelp.java @@ -43,7 +43,7 @@ class ConnectionHelp { if (urlConn instanceof HttpsURLConnection) { conn = (HttpsURLConnection) urlConn; SSLContext sslContext = - SSLContextUtil.getSSLContext(CAConfiguration.CA_ALIAS, CAConfiguration.CA_ALIAS); + SSLContextUtil.getSSLContext(CAConfiguration.CA_ALIAS, CAConfiguration.CA_PATH); if (sslContext == null) { sslContext = SSLContextUtil.getDefaultSLLContext(); } 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 e23acbe5..0d18ce41 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 @@ -48,8 +48,9 @@ public class DownloadTarget extends AbsTarget taskEntity.redirectUrlKey = redirectUrlKey; } + /** + * 删除记录 + */ + public void removeRecord() { + if (entity instanceof DownloadEntity) { + ((DownloadEntity) entity).deleteData(); + } else if (entity instanceof UploadEntity) { + ((UploadEntity) entity).deleteData(); + } + } + /** * 获取任务文件大小 * @@ -74,6 +86,13 @@ public class AbsTarget return -1; } + /** + * 下载任务是否存在 + */ + public boolean taskExists(String downloadUrl) { + return false; + } + /** * 获取当前任务进度,如果任务存在,则返回当前进度 * 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 9e464224..e9b75864 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 @@ -51,4 +51,6 @@ public interface ITask { public long getCurrentProgress(); public void setTargetName(String targetName); + + public void removeRecord(); } diff --git a/Aria/src/main/java/com/arialyy/aria/core/queue/DownloadTaskQueue.java b/Aria/src/main/java/com/arialyy/aria/core/queue/DownloadTaskQueue.java index 7288fde6..7bb7eba8 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/queue/DownloadTaskQueue.java +++ b/Aria/src/main/java/com/arialyy/aria/core/queue/DownloadTaskQueue.java @@ -25,7 +25,7 @@ import com.arialyy.aria.core.inf.IEntity; import com.arialyy.aria.core.queue.pool.CachePool; import com.arialyy.aria.core.queue.pool.ExecutePool; import com.arialyy.aria.core.scheduler.DownloadSchedulers; -import com.arialyy.aria.util.Configuration; +import com.arialyy.aria.util.Configuration_1; /** * Created by lyy on 2016/8/17. @@ -121,7 +121,7 @@ public class DownloadTaskQueue @Override public void setDownloadNum(int downloadNum) { //原始长度 - int size = Configuration.getInstance().getDownloadNum(); + int size = Configuration_1.getInstance().getDownloadNum(); int diff = downloadNum - size; if (size == downloadNum) { Log.d(TAG, "设置的下载任务数和配置文件的下载任务数一直,跳过"); @@ -160,9 +160,13 @@ public class DownloadTaskQueue } @Override public DownloadTask getTask(DownloadEntity entity) { - DownloadTask task = mExecutePool.getTask(entity.getDownloadUrl()); + return getTask(entity.getDownloadUrl()); + } + + @Override public DownloadTask getTask(String url) { + DownloadTask task = mExecutePool.getTask(url); if (task == null) { - task = mCachePool.getTask(entity.getDownloadUrl()); + task = mCachePool.getTask(url); } return task; } diff --git a/Aria/src/main/java/com/arialyy/aria/core/queue/ITaskQueue.java b/Aria/src/main/java/com/arialyy/aria/core/queue/ITaskQueue.java index 0b9b18af..7f05cbff 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/queue/ITaskQueue.java +++ b/Aria/src/main/java/com/arialyy/aria/core/queue/ITaskQueue.java @@ -89,6 +89,14 @@ public interface ITaskQueue implements IPool { private int mSize; public ExecutePool() { - mSize = Configuration.getInstance().getDownloadNum(); + mSize = Configuration_1.getInstance().getDownloadNum(); mExecuteQueue = new ArrayBlockingQueue<>(mSize); mExecuteArray = new HashMap<>(); } @@ -81,7 +81,7 @@ public class ExecutePool implements IPool { } mExecuteQueue = temp; mSize = downloadNum; - Configuration.getInstance().setDownloadNum(mSize); + Configuration_1.getInstance().setDownloadNum(mSize); } catch (InterruptedException e) { e.printStackTrace(); } diff --git a/Aria/src/main/java/com/arialyy/aria/core/scheduler/DownloadSchedulers.java b/Aria/src/main/java/com/arialyy/aria/core/scheduler/DownloadSchedulers.java index 2ef63d82..21bb1189 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/scheduler/DownloadSchedulers.java +++ b/Aria/src/main/java/com/arialyy/aria/core/scheduler/DownloadSchedulers.java @@ -22,7 +22,7 @@ import android.util.Log; import com.arialyy.aria.core.queue.DownloadTaskQueue; import com.arialyy.aria.core.download.DownloadEntity; import com.arialyy.aria.core.download.DownloadTask; -import com.arialyy.aria.util.Configuration; +import com.arialyy.aria.util.Configuration_1; import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -86,7 +86,7 @@ public class DownloadSchedulers implements ISchedulers { case STOP: case CANCEL: mQueue.removeTask(entity); - if (mQueue.size() < Configuration.getInstance().getDownloadNum()) { + if (mQueue.size() < Configuration_1.getInstance().getDownloadNum()) { startNextTask(); } break; @@ -163,7 +163,7 @@ public class DownloadSchedulers implements ISchedulers { * @param task 下载任务 */ private void handleFailTask(final DownloadTask task) { - final Configuration config = Configuration.getInstance(); + final Configuration_1 config = Configuration_1.getInstance(); CountDownTimer timer = new CountDownTimer(config.getReTryInterval(), 1000) { @Override public void onTick(long millisUntilFinished) { diff --git a/Aria/src/main/java/com/arialyy/aria/core/scheduler/UploadSchedulers.java b/Aria/src/main/java/com/arialyy/aria/core/scheduler/UploadSchedulers.java index b5108f6b..8c2777d2 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/scheduler/UploadSchedulers.java +++ b/Aria/src/main/java/com/arialyy/aria/core/scheduler/UploadSchedulers.java @@ -22,7 +22,7 @@ import com.arialyy.aria.core.inf.IEntity; import com.arialyy.aria.core.queue.UploadTaskQueue; import com.arialyy.aria.core.upload.UploadEntity; import com.arialyy.aria.core.upload.UploadTask; -import com.arialyy.aria.util.Configuration; +import com.arialyy.aria.util.Configuration_1; import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -69,7 +69,7 @@ public class UploadSchedulers implements ISchedulers { } private void handleFailTask(final UploadTask task) { - final Configuration config = Configuration.getInstance(); + final Configuration_1 config = Configuration_1.getInstance(); CountDownTimer timer = new CountDownTimer(config.getReTryInterval(), 1000) { @Override public void onTick(long millisUntilFinished) { @@ -169,7 +169,7 @@ public class UploadSchedulers implements ISchedulers { case STOP: case CANCEL: mQueue.removeTask(entity); - if (mQueue.size() < Configuration.getInstance().getDownloadNum()) { + if (mQueue.size() < Configuration_1.getInstance().getDownloadNum()) { startNextTask(); } break; diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadTarget.java b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadTarget.java index 1276d1d2..58296f38 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadTarget.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadTarget.java @@ -100,6 +100,13 @@ public class UploadTarget extends AbsTarget { return this; } + /** + * 下载任务是否存在 + */ + @Override public boolean taskExists(String downloadUrl) { + return UploadTaskQueue.getInstance().getTask(downloadUrl) != null; + } + /** * 设置请求类型 * 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 d35109b8..9ae43bcb 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 @@ -26,7 +26,7 @@ import com.arialyy.aria.core.inf.ITask; import com.arialyy.aria.core.scheduler.DownloadSchedulers; import com.arialyy.aria.core.scheduler.ISchedulers; import com.arialyy.aria.util.CommonUtil; -import com.arialyy.aria.util.Configuration; +import com.arialyy.aria.util.Configuration_1; import java.lang.ref.WeakReference; /** @@ -55,6 +55,10 @@ public class UploadTask implements ITask { mTargetName = targetName; } + @Override public void removeRecord() { + mUploadEntity.deleteData(); + } + @Override public String getKey() { return mUploadEntity.getFilePath(); } @@ -87,9 +91,8 @@ public class UploadTask implements ITask { } @Override public void cancel() { - if (mUtil.isRunning()) { - mUtil.cancel(); - } else { + + if (!mUploadEntity.isComplete()) { // 如果任务不是下载状态 mUtil.cancel(); mUploadEntity.deleteData(); @@ -101,6 +104,21 @@ public class UploadTask implements ITask { intent.putExtra(Aria.ENTITY, mUploadEntity); AriaManager.APP.sendBroadcast(intent); } + + //if (mUtil.isRunning()) { + // mUtil.cancel(); + //} else { + // // 如果任务不是下载状态 + // mUtil.cancel(); + // mUploadEntity.deleteData(); + // if (mOutHandler != null) { + // mOutHandler.obtainMessage(DownloadSchedulers.CANCEL, this).sendToTarget(); + // } + // //发送取消下载的广播 + // Intent intent = CommonUtil.createIntent(AriaManager.APP.getPackageName(), Aria.ACTION_CANCEL); + // intent.putExtra(Aria.ENTITY, mUploadEntity); + // AriaManager.APP.sendBroadcast(intent); + //} } public String getTargetName() { @@ -220,7 +238,7 @@ public class UploadTask implements ITask { entity.setComplete(action.equals(Aria.ACTION_COMPLETE)); entity.setCurrentProgress(location); entity.update(); - if (!Configuration.isOpenBreadCast) return; + if (!Configuration_1.isOpenBreadCast) return; Intent intent = CommonUtil.createIntent(AriaManager.APP.getPackageName(), action); intent.putExtra(Aria.ENTITY, entity); if (location != -1) { diff --git a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadUtil.java b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadUtil.java index 1b05b200..5126660d 100644 --- a/Aria/src/main/java/com/arialyy/aria/core/upload/UploadUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/core/upload/UploadUtil.java @@ -50,7 +50,7 @@ final class UploadUtil implements Runnable { UploadUtil(UploadTaskEntity taskEntity, IUploadListener listener) { mTaskEntity = taskEntity; - CheckUtil.checkUploadTaskEntity(taskEntity.uploadEntity); + CheckUtil.checkTaskEntity(taskEntity); mUploadEntity = taskEntity.uploadEntity; if (listener == null) { throw new IllegalArgumentException("上传监听不能为空"); diff --git a/Aria/src/main/java/com/arialyy/aria/orm/DbUtil.java b/Aria/src/main/java/com/arialyy/aria/orm/DbUtil.java index 0e14dea1..79a94c20 100644 --- a/Aria/src/main/java/com/arialyy/aria/orm/DbUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/orm/DbUtil.java @@ -21,13 +21,9 @@ import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.support.annotation.NonNull; -import android.text.TextUtils; import android.util.Log; import com.arialyy.aria.util.CheckUtil; import com.arialyy.aria.util.CommonUtil; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Date; import java.util.List; /** @@ -73,7 +69,7 @@ public class DbUtil { */ synchronized void delData(Class clazz, String... expression) { CheckUtil.checkSqlExpression(expression); - mDb = mHelper.getWritableDatabase(); + checkDb(); SqlHelper.delData(mDb, clazz, expression); } @@ -81,7 +77,7 @@ public class DbUtil { * 修改某行数据 */ synchronized void modifyData(DbEntity dbEntity) { - mDb = mHelper.getWritableDatabase(); + checkDb(); SqlHelper.modifyData(mDb, dbEntity); } @@ -89,9 +85,7 @@ public class DbUtil { * 遍历所有数据 */ synchronized List findAllData(Class clazz) { - if (mDb == null || !mDb.isOpen()) { - mDb = mHelper.getReadableDatabase(); - } + checkDb(); return SqlHelper.findAllData(mDb, clazz); } @@ -99,7 +93,7 @@ public class DbUtil { * 条件查寻数据 */ synchronized List findData(Class clazz, String... expression) { - mDb = mHelper.getReadableDatabase(); + checkDb(); return SqlHelper.findData(mDb, clazz, expression); } @@ -108,7 +102,7 @@ public class DbUtil { */ @Deprecated synchronized List findData(Class clazz, @NonNull String[] wheres, @NonNull String[] values) { - mDb = mHelper.getReadableDatabase(); + checkDb(); return SqlHelper.findData(mDb, clazz, wheres, values); } @@ -116,9 +110,7 @@ public class DbUtil { * 插入数据 */ synchronized void insertData(DbEntity dbEntity) { - if (mDb == null || !mDb.isOpen()) { - mDb = mHelper.getReadableDatabase(); - } + checkDb(); SqlHelper.insertData(mDb, dbEntity); } @@ -126,17 +118,19 @@ public class DbUtil { * 查找某张表是否存在 */ synchronized boolean tableExists(Class clazz) { - if (mDb == null || !mDb.isOpen()) { - mDb = mHelper.getReadableDatabase(); - } + checkDb(); return SqlHelper.tableExists(mDb, clazz); } synchronized void createTable(Class clazz, String tableName) { + checkDb(); + SqlHelper.createTable(mDb, clazz, tableName); + } + + private void checkDb(){ if (mDb == null || !mDb.isOpen()) { - mDb = mHelper.getWritableDatabase(); + mDb = mHelper.getReadableDatabase(); } - SqlHelper.createTable(mDb, clazz, tableName); } /** @@ -159,7 +153,7 @@ public class DbUtil { * 获取所在行Id */ synchronized int[] getRowId(Class clazz) { - mDb = mHelper.getReadableDatabase(); + checkDb(); Cursor cursor = mDb.rawQuery("SELECT rowid, * FROM " + CommonUtil.getClassName(clazz), null); int[] ids = new int[cursor.getCount()]; int i = 0; @@ -176,7 +170,7 @@ public class DbUtil { * 获取行Id */ synchronized int getRowId(Class clazz, Object[] wheres, Object[] values) { - mDb = mHelper.getReadableDatabase(); + checkDb(); if (wheres.length <= 0 || values.length <= 0) { Log.e(TAG, "请输入删除条件"); return -1; diff --git a/Aria/src/main/java/com/arialyy/aria/util/CheckUtil.java b/Aria/src/main/java/com/arialyy/aria/util/CheckUtil.java index 2ac140af..ec382c7b 100644 --- a/Aria/src/main/java/com/arialyy/aria/util/CheckUtil.java +++ b/Aria/src/main/java/com/arialyy/aria/util/CheckUtil.java @@ -17,6 +17,7 @@ package com.arialyy.aria.util; import android.text.TextUtils; +import android.util.Log; import com.arialyy.aria.core.download.DownloadEntity; import com.arialyy.aria.core.download.DownloadTaskEntity; import com.arialyy.aria.core.inf.ITaskEntity; @@ -95,31 +96,39 @@ public class CheckUtil { /** * 检查命令实体 + * + * @param checkPath 删除命令不需要检查下载路径和文件名 */ - public static void checkCmdEntity(ITaskEntity entity) { + public static boolean checkCmdEntity(ITaskEntity entity, boolean checkPath) { + boolean b = false; if (entity instanceof DownloadTaskEntity) { DownloadEntity entity1 = ((DownloadTaskEntity) entity).downloadEntity; if (entity1 == null) { - throw new NullPointerException("下载实体不能为空"); - } else if (TextUtils.isEmpty(entity1.getDownloadUrl())) { - throw new IllegalArgumentException("下载链接不能为空"); - } else if (TextUtils.isEmpty(entity1.getDownloadPath())) { - throw new IllegalArgumentException("保存路径不能为空"); + Log.e(TAG, "下载实体不能为空"); + } else if (checkPath && TextUtils.isEmpty(entity1.getDownloadUrl())) { + Log.e(TAG, "下载链接不能为空"); + } else if (checkPath && TextUtils.isEmpty(entity1.getDownloadPath())) { + Log.e(TAG, "保存路径不能为空"); + } else { + b = true; } } else if (entity instanceof UploadTaskEntity) { UploadEntity entity1 = ((UploadTaskEntity) entity).uploadEntity; if (entity1 == null) { - throw new NullPointerException("上传实体不能为空"); + Log.e(TAG, "上传实体不能为空"); } else if (TextUtils.isEmpty(entity1.getFilePath())) { - throw new IllegalArgumentException("上传文件路径不能为空"); + Log.e(TAG, "上传文件路径不能为空"); + } else { + b = true; } } + return b; } /** * 检查上传实体是否合法 */ - public static void checkUploadTaskEntity(UploadEntity entity) { + private static void checkUploadTaskEntity(UploadEntity entity) { if (entity == null) { throw new NullPointerException("上传实体不能为空"); } else if (TextUtils.isEmpty(entity.getFilePath())) { @@ -135,7 +144,7 @@ public class CheckUtil { * * @param entity 下载实体 */ - public static void checkDownloadTaskEntity(DownloadEntity entity) { + private static void checkDownloadTaskEntity(DownloadEntity entity) { if (entity == null) { throw new NullPointerException("下载实体不能为空"); } else if (TextUtils.isEmpty(entity.getDownloadUrl())) { diff --git a/Aria/src/main/java/com/arialyy/aria/util/Configuration.java b/Aria/src/main/java/com/arialyy/aria/util/Configuration_1.java similarity index 95% rename from Aria/src/main/java/com/arialyy/aria/util/Configuration.java rename to Aria/src/main/java/com/arialyy/aria/util/Configuration_1.java index 05081d1f..d89ffed4 100644 --- a/Aria/src/main/java/com/arialyy/aria/util/Configuration.java +++ b/Aria/src/main/java/com/arialyy/aria/util/Configuration_1.java @@ -28,8 +28,8 @@ import java.util.WeakHashMap; * Created by AriaL on 2016/12/8. * 信息配置 */ -public class Configuration { - private static final String TAG = "Configuration"; +public class Configuration_1 { + private static final String TAG = "Configuration_1"; private static final String CONFIG_FILE = "/Aria/ADConfig.properties"; /** * 当前调度器最大下载数,默认最大下载数为 “2” @@ -58,20 +58,20 @@ public class Configuration { public static boolean isOpenBreadCast = false; - private static Configuration INSTANCE = null; + private static Configuration_1 INSTANCE = null; private File mConfigFile = null; private static final Object LOCK = new Object(); - public static Configuration getInstance() { + public static Configuration_1 getInstance() { if (INSTANCE == null) { synchronized (LOCK) { - INSTANCE = new Configuration(); + INSTANCE = new Configuration_1(); } } return INSTANCE; } - private Configuration() { + private Configuration_1() { mConfigFile = new File(AriaManager.APP.getFilesDir().getPath() + CONFIG_FILE); try { if (!mConfigFile.exists()) { diff --git a/README.md b/README.md index 45447553..26a1b209 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Aria怎样使用? ## 下载 [![Download](https://api.bintray.com/packages/arialyy/maven/Aria/images/download.svg)](https://bintray.com/arialyy/maven/Aria/_latestVersion)
```java -compile 'com.arialyy.aria:Aria:3.0.2' +compile 'com.arialyy.aria:Aria:3.0.3' ``` ## 示例 @@ -149,6 +149,7 @@ compile 'com.arialyy.aria:Aria:3.0.2' *** ## 开发日志 + + v_3.0.3 修复暂停后删除任务,闪退问题,添加删除记录的api + v_3.0.2 支持30x重定向链接下载 + v_3.0.0 添加上传任务支持,修复一些已发现的bug + v_2.4.4 修复不支持断点的下载链接拿不到文件大小的问题 diff --git a/app/src/main/assets/aria_config.xml b/app/src/main/assets/aria_config.xml new file mode 100644 index 00000000..a87a1297 --- /dev/null +++ b/app/src/main/assets/aria_config.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/arialyy/simple/download/SingleTaskActivity.java b/app/src/main/java/com/arialyy/simple/download/SingleTaskActivity.java index a1228987..42319695 100644 --- a/app/src/main/java/com/arialyy/simple/download/SingleTaskActivity.java +++ b/app/src/main/java/com/arialyy/simple/download/SingleTaskActivity.java @@ -55,10 +55,11 @@ public class SingleTaskActivity extends BaseActivity { private static final String DOWNLOAD_URL = //"http://kotlinlang.org/docs/kotlin-docs.pdf"; //"https://atom-installer.github.com/v1.13.0/AtomSetup.exe?s=1484074138&ext=.exe"; - //"http://static.gaoshouyou.com/d/22/94/822260b849944492caadd2983f9bb624.apk"; - //不支持断点的链接 - //"http://ox.konsung.net:5555/ksdc-web/download/downloadFile/?fileName=ksdc_1.0.2.apk&rRange=0-"; - "http://172.18.104.50:8080/download/_302turn"; + "http://static.gaoshouyou.com/d/22/94/822260b849944492caadd2983f9bb624.apk"; + //"http://static.gaoshouyou.com/d/36/69/2d3699acfa69e9632262442c46516ad8.apk"; + //不支持断点的链接 + //"http://ox.konsung.net:5555/ksdc-web/download/downloadFile/?fileName=ksdc_1.0.2.apk&rRange=0-"; + //"http://172.18.104.50:8080/download/_302turn"; @Bind(R.id.progressBar) HorizontalProgressBarWithNumber mPb; @Bind(R.id.start) Button mStart; @Bind(R.id.stop) Button mStop; @@ -233,6 +234,7 @@ public class SingleTaskActivity extends BaseActivity { private void stop() { Aria.download(this).load(DOWNLOAD_URL).pause(); + //Aria.download(this).load(DOWNLOAD_URL).removeRecord(); } private void cancel() {