diff --git a/README.md b/README.md index 02ac436..97bc8e5 100644 --- a/README.md +++ b/README.md @@ -149,6 +149,10 @@ void DownloadManagerPro.StartQueueDownload(int downloadTaskPerTime, int sortType Example: ``` java +int taskTokenOne = dm.addTask("save_name", "http://www.site.com/video/ss.mp4", false, false); +int taskTokenTwo = dm.addTask("save_name", "http://www.site.com/video/ss_1.mp4", false, false); +int taskTokenThree = dm.addTask("save_name", "http://www.site.com/video/ss_2.mp4", false, false); + try { dm.startQueueDownload(3, QueueSort.oldestFirst); diff --git a/com/golshadi/majid/core/DownloadManagerPro.java b/com/golshadi/majid/core/DownloadManagerPro.java index 1bae313..9cab682 100644 --- a/com/golshadi/majid/core/DownloadManagerPro.java +++ b/com/golshadi/majid/core/DownloadManagerPro.java @@ -352,6 +352,24 @@ public boolean delete(int token, boolean deleteTaskFile){ return false; } + /** + * delete all uncompleted downloads tasks from db and files + */ + public void deleteAllUnCompleteds() { + List task = tasksDataSource.allUnCompleteds(); + if (task != null) { + for (Task tsk : task) { + + List taskChunks = + chunksDataSource.chunksRelatedTask(tsk.id); + for (Chunk chunk : taskChunks) { + FileUtils.delete(tsk.save_address, String.valueOf(chunk.id)); + chunksDataSource.delete(chunk.id); + } + delete(tsk.id, true); + } + } + } /** * close db connection diff --git a/com/golshadi/majid/core/mainWorker/QueueModerator.java b/com/golshadi/majid/core/mainWorker/QueueModerator.java index bc182be..f136ae6 100644 --- a/com/golshadi/majid/core/mainWorker/QueueModerator.java +++ b/com/golshadi/majid/core/mainWorker/QueueModerator.java @@ -37,36 +37,43 @@ public QueueModerator(TasksDataSource tasksDataSource, ChunksDataSource chunksDa this.moderator = localModerator; this.moderator.setQueueObserver(this); this.listener = downloadManagerListener; + this.downloadTaskPerTime = downloadPerTime; + if (tasks.size() < downloadPerTime) { + this.downloadTaskPerTime = tasks.size(); + } + this.uncompletedTasks = tasks; - downloaderList = - new HashMap(downloadTaskPerTime); + downloaderList =new HashMap<>(downloadTaskPerTime); } public void startQueue() { - if (uncompletedTasks != null) { - - int location = 0; - while (uncompletedTasks.size() > 0 && - !pauseFlag && - downloadTaskPerTime >= downloaderList.size()) { - Task task = uncompletedTasks.get(location); - Thread downloader = - new AsyncStartDownload(tasksDataSource, chunksDataSource, moderator, listener, task); - - downloaderList.put(task.id, downloader); - uncompletedTasks.remove(location); - - downloader.start(); - - - location++; - } - - } + if (uncompletedTasks != null) { + + int location = 0; + while (uncompletedTasks.size() > 0 && + !pauseFlag && + downloadTaskPerTime >= downloaderList.size()) { + try { + Task task = uncompletedTasks.get(location); + Thread downloader = + new AsyncStartDownload(tasksDataSource, chunksDataSource, moderator, listener, task); + + downloaderList.put(task.id, downloader); + uncompletedTasks.remove(location); + + downloader.start(); + + location++; + } catch (IndexOutOfBoundsException e) { + e.printStackTrace(); + Log.e("QueueModerator", e.getMessage()); + } + } + } } public void wakeUp(int taskID){ diff --git a/com/golshadi/majid/database/TasksDataSource.java b/com/golshadi/majid/database/TasksDataSource.java index 9ada974..2febf59 100644 --- a/com/golshadi/majid/database/TasksDataSource.java +++ b/com/golshadi/majid/database/TasksDataSource.java @@ -152,6 +152,31 @@ public Task getTaskInfo(int id) { return task; } + public List allUnCompleteds() { + List unCompleted = new ArrayList<>(); + + String query = "SELECT * FROM " + TABLES.TASKS + + " WHERE " + TASKS.COLUMN_STATE + "!=" + SqlString.Int(TaskStates.END); + + Cursor cr = database.rawQuery(query, null); + + if (cr != null) { + cr.moveToFirst(); + + while (!cr.isAfterLast()) { + Task task = new Task(); + task.cursorToTask(cr); + unCompleted.add(task); + + cr.moveToNext(); + } + + cr.close(); + } + + return unCompleted; + } + public Task getTaskInfoWithName(String name) { String query = "SELECT * FROM "+TABLES.TASKS+" WHERE "+TASKS.COLUMN_NAME+"="+SqlString.String(name); Cursor cr = database.rawQuery(query, null);