19
19
import android .os .Process ;
20
20
21
21
import com .liulishuo .filedownloader .connection .FileDownloadConnection ;
22
+ import com .liulishuo .filedownloader .database .FileDownloadDatabase ;
22
23
import com .liulishuo .filedownloader .exception .FileDownloadGiveUpRetryException ;
24
+ import com .liulishuo .filedownloader .model .ConnectionModel ;
23
25
import com .liulishuo .filedownloader .model .FileDownloadHeader ;
26
+ import com .liulishuo .filedownloader .model .FileDownloadModel ;
24
27
import com .liulishuo .filedownloader .util .FileDownloadLog ;
25
28
import com .liulishuo .filedownloader .util .FileDownloadUtils ;
26
29
27
30
import java .io .IOException ;
28
31
import java .net .HttpURLConnection ;
29
32
import java .net .SocketException ;
33
+ import java .util .List ;
30
34
31
35
/**
32
36
* The single download runnable used for establish one connection and fetch data from it.
@@ -131,7 +135,10 @@ public void run() {
131
135
} else {
132
136
if (fetchDataTask != null ) {
133
137
//update currentOffset in ConnectionProfile
134
- connectTask .updateConnectionProfile (fetchDataTask .currentOffset );
138
+ final long downloadedOffset = getDownloadedOffset ();
139
+ if (downloadedOffset > 0 ) {
140
+ connectTask .updateConnectionProfile (fetchDataTask .currentOffset );
141
+ }
135
142
}
136
143
callback .onRetry (e );
137
144
}
@@ -147,6 +154,24 @@ public void run() {
147
154
148
155
}
149
156
157
+ private long getDownloadedOffset () {
158
+ final FileDownloadDatabase database = CustomComponentHolder .getImpl ().getDatabaseInstance ();
159
+ if (connectionIndex >= 0 ) {
160
+ // is multi connection
161
+ List <ConnectionModel > connectionModels = database .findConnectionModel (downloadId );
162
+ for (ConnectionModel connectionModel : connectionModels ) {
163
+ if (connectionModel .getIndex () == connectionIndex ) {
164
+ return connectionModel .getCurrentOffset ();
165
+ }
166
+ }
167
+ } else {
168
+ // is single connection
169
+ FileDownloadModel downloadModel = database .find (downloadId );
170
+ return downloadModel .getSoFar ();
171
+ }
172
+ return 0 ;
173
+ }
174
+
150
175
public static class Builder {
151
176
private final ConnectTask .Builder connectTaskBuilder = new ConnectTask .Builder ();
152
177
private ProcessCallback callback ;
0 commit comments