diff --git a/library/src/main/java/com/liulishuo/filedownloader/FileDownloadMessageStation.java b/library/src/main/java/com/liulishuo/filedownloader/FileDownloadMessageStation.java index 09c9f8ca..62016e38 100644 --- a/library/src/main/java/com/liulishuo/filedownloader/FileDownloadMessageStation.java +++ b/library/src/main/java/com/liulishuo/filedownloader/FileDownloadMessageStation.java @@ -22,6 +22,7 @@ import com.liulishuo.filedownloader.util.FileDownloadExecutors; +import java.io.File; import java.util.ArrayList; import java.util.concurrent.Executor; import java.util.concurrent.LinkedBlockingQueue; @@ -63,10 +64,19 @@ void requestEnqueue(final IFileDownloadMessenger messenger, return; } - if (interceptBlockCompleteMessage(messenger)) { + // check if messenger.mTask is null + // if null, return; according to filedownloader/FileDownloadMessenger.java -> process() + // line 200 to 210 + if (messenger instanceof FileDownloadMessenger + && ((FileDownloadMessenger) messenger).hasTask()) { + if (interceptBlockCompleteMessage(messenger)) { + return; + } + } else { return; } + if (!isIntervalValid()) { // invalid // clear all waiting queue. @@ -179,10 +189,13 @@ public boolean handleMessage(Message msg) { private void dispose(final ArrayList disposingList) { // dispose Sub-package-size each time. for (IFileDownloadMessenger iFileDownloadMessenger : disposingList) { - if (interceptBlockCompleteMessage(iFileDownloadMessenger)) { - continue; + if (iFileDownloadMessenger instanceof FileDownloadMessenger && + ((FileDownloadMessenger) iFileDownloadMessenger).hasTask()) { + if (interceptBlockCompleteMessage(iFileDownloadMessenger)) { + continue; + } + iFileDownloadMessenger.handoverMessage(); } - iFileDownloadMessenger.handoverMessage(); } disposingList.clear(); diff --git a/library/src/main/java/com/liulishuo/filedownloader/FileDownloadMessenger.java b/library/src/main/java/com/liulishuo/filedownloader/FileDownloadMessenger.java index 80fce2f0..2cbf73a4 100644 --- a/library/src/main/java/com/liulishuo/filedownloader/FileDownloadMessenger.java +++ b/library/src/main/java/com/liulishuo/filedownloader/FileDownloadMessenger.java @@ -400,4 +400,8 @@ public String toString() { return FileDownloadUtils.formatString("%d:%s", mTask == null ? -1 : mTask.getOrigin().getId(), super.toString()); } + + public boolean hasTask() { + return mTask != null; + } } diff --git a/library/src/main/java/com/liulishuo/filedownloader/download/ConnectTask.java b/library/src/main/java/com/liulishuo/filedownloader/download/ConnectTask.java index 4c528bfc..79d926bf 100644 --- a/library/src/main/java/com/liulishuo/filedownloader/download/ConnectTask.java +++ b/library/src/main/java/com/liulishuo/filedownloader/download/ConnectTask.java @@ -31,6 +31,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.Stack; /** * The connect task which used for connect to the backend. @@ -116,18 +117,32 @@ private void addUserRequiredHeader(FileDownloadConnection connection) { String name; List list; + Stack names = new Stack<>(); + Stack> lists = new Stack<>(); + // add addition headers which is provided by the user Set>> entries = additionHeaders.entrySet(); for (Map.Entry> e : entries) { name = e.getKey(); list = e.getValue(); + names.push(name); + lists.push(list); + /*if (list != null) { + for (String value : list) { + connection.addHeader(name, value); + } + }*/ + } + + while (lists.size() > 0) { + list = lists.pop(); + name = names.pop(); if (list != null) { for (String value : list) { connection.addHeader(name, value); } } } - } } }