Skip to content

Commit ca225a6

Browse files
author
krishna
committed
Support for multiFile download in different directories
1 parent 425931f commit ca225a6

File tree

5 files changed

+105
-24
lines changed

5 files changed

+105
-24
lines changed

app/src/main/java/com/krishna/fileloadersample/MainActivity.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@
1515
import com.krishna.fileloader.listener.MultiFileDownloadListener;
1616
import com.krishna.fileloader.pojo.FileResponse;
1717
import com.krishna.fileloader.request.FileLoadRequest;
18+
import com.krishna.fileloader.request.MultiFileLoadRequest;
1819

1920
import java.io.File;
21+
import java.util.ArrayList;
22+
import java.util.List;
2023

2124
public class MainActivity extends AppCompatActivity {
2225
private static final String TAG = "MainActivity";
@@ -75,14 +78,18 @@ public void onError(FileLoadRequest request, Throwable t) {
7578
//delete all files from directory except files passed in argument
7679
FileLoader.deleteWith(this).fromDirectory("test3", FileLoader.DIR_INTERNAL).deleteAllFilesExcept(uris);
7780

78-
FileLoader.multiFileDownload(this).fromDirectory("test4", FileLoader.DIR_INTERNAL)
81+
List<MultiFileLoadRequest> multiFileLoadRequests = new ArrayList<>();
82+
multiFileLoadRequests.add(new MultiFileLoadRequest(uris[0], "test2", FileLoader.DIR_INTERNAL, true));
83+
multiFileLoadRequests.add(new MultiFileLoadRequest(uris[1], "test4", FileLoader.DIR_INTERNAL, true));
84+
85+
FileLoader.multiFileDownload(this)
7986
.progressListener(new MultiFileDownloadListener() {
8087
@Override
8188
public void onProgress(File downloadedFile, int progress, int totalFiles) {
8289
tvProgress.setText(progress + " of " + totalFiles);
8390
Glide.with(MainActivity.this).load(downloadedFile).into(iv);
8491
}
85-
}).loadMultiple(true, uris);
92+
}).loadMultiple(multiFileLoadRequests, true);
8693
}
8794

8895
private void loadImage(final ImageView iv, String imageUrl) {

fileloader/src/main/java/com/krishna/fileloader/MultiFileDownloadTask.java

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import com.krishna.fileloader.listener.MultiFileDownloadListener;
77
import com.krishna.fileloader.network.FileDownloader;
8+
import com.krishna.fileloader.request.MultiFileLoadRequest;
89
import com.krishna.fileloader.utility.AndroidFileManager;
910

1011
import java.io.File;
@@ -15,37 +16,33 @@
1516
* Created by krishna on 17/10/17.
1617
*/
1718

18-
public class MultiFileDownloadTask extends AsyncTask<String, Integer, Void> {
19+
public class MultiFileDownloadTask extends AsyncTask<MultiFileLoadRequest, Integer, Void> {
1920
private MultiFileDownloadListener listener;
20-
private String dirName;
21-
private int dirType;
2221
private Context context;
2322
private int totalTasks = 0;
2423
private int progress = 0;
2524
private List<File> downloadedFiles;
2625
private boolean forceLoadFromNetwork;
2726

28-
public MultiFileDownloadTask(Context context, String dirName, int dirType, MultiFileDownloadListener listener, boolean forceLoadFromNetwork) {
29-
this.dirName = dirName;
30-
this.dirType = dirType;
27+
public MultiFileDownloadTask(Context context, MultiFileDownloadListener listener, boolean forceLoadFromNetwork) {
3128
this.context = context.getApplicationContext();
3229
this.listener = listener;
3330
this.forceLoadFromNetwork = forceLoadFromNetwork;
3431
downloadedFiles = new ArrayList<>();
3532
}
3633

3734
@Override
38-
protected Void doInBackground(String... urls) {
39-
totalTasks = urls.length;
40-
for (String url : urls) {
35+
protected Void doInBackground(MultiFileLoadRequest... requests) {
36+
totalTasks = requests.length;
37+
for (MultiFileLoadRequest loadRequest : requests) {
4138
try {
4239
File downloadedFile = null;
4340
if (!forceLoadFromNetwork) {
4441
//search file locally
45-
downloadedFile = AndroidFileManager.searchAndGetLocalFile(context, url, dirName, dirType);
42+
downloadedFile = AndroidFileManager.searchAndGetLocalFile(context, loadRequest.getUri(), loadRequest.getDirectoryName(), loadRequest.getDirectoryType());
4643
}
4744
if (downloadedFile == null || !downloadedFile.exists()) {
48-
FileDownloader downloader = new FileDownloader(context, url, dirName, dirType);
45+
FileDownloader downloader = new FileDownloader(context, loadRequest.getUri(), loadRequest.getDirectoryName(), loadRequest.getDirectoryType());
4946
downloadedFile = downloader.download();
5047
}
5148
downloadedFiles.add(downloadedFile);

fileloader/src/main/java/com/krishna/fileloader/builder/MultiFileDownloader.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,11 @@
55
import com.krishna.fileloader.FileLoader;
66
import com.krishna.fileloader.MultiFileDownloadTask;
77
import com.krishna.fileloader.listener.MultiFileDownloadListener;
8+
import com.krishna.fileloader.request.MultiFileLoadRequest;
89
import com.krishna.fileloader.utility.Utils;
910

11+
import java.util.List;
12+
1013
/**
1114
* Created by krishna on 15/10/17.
1215
*/
@@ -35,11 +38,29 @@ public MultiFileDownloader progressListener(MultiFileDownloadListener listener)
3538
}
3639

3740
public void loadMultiple(String... uris) {
38-
new MultiFileDownloadTask(context, directoryName, directoryType, listener, forceLoadFromNetwork).executeOnExecutor(Utils.getThreadPoolExecutor(), uris);
41+
MultiFileLoadRequest[] loadRequestArr = new MultiFileLoadRequest[uris.length];
42+
for (int i = 0; i < uris.length; i++) {
43+
MultiFileLoadRequest loadRequest = new MultiFileLoadRequest(uris[i], directoryName, directoryType, forceLoadFromNetwork);
44+
loadRequestArr[i] = loadRequest;
45+
}
46+
new MultiFileDownloadTask(context, listener, forceLoadFromNetwork).executeOnExecutor(Utils.getThreadPoolExecutor(), loadRequestArr);
3947
}
4048

4149
public void loadMultiple(boolean forceLoadFromNetwork, String... uris) {
4250
this.forceLoadFromNetwork = forceLoadFromNetwork;
4351
loadMultiple(uris);
4452
}
53+
54+
public void loadMultiple(List<MultiFileLoadRequest> multiFileLoadRequestList) {
55+
MultiFileLoadRequest[] loadRequestArr = new MultiFileLoadRequest[multiFileLoadRequestList.size()];
56+
for (int i = 0; i < multiFileLoadRequestList.size(); i++) {
57+
loadRequestArr[i] = multiFileLoadRequestList.get(i);
58+
}
59+
new MultiFileDownloadTask(context, listener, forceLoadFromNetwork).executeOnExecutor(Utils.getThreadPoolExecutor(), loadRequestArr);
60+
}
61+
62+
public void loadMultiple(List<MultiFileLoadRequest> multiFileLoadRequestList, boolean forceLoadFromNetwork) {
63+
this.forceLoadFromNetwork = forceLoadFromNetwork;
64+
loadMultiple(multiFileLoadRequestList);
65+
}
4566
}

fileloader/src/main/java/com/krishna/fileloader/network/FileDownloader.java

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,23 +24,28 @@ public class FileDownloader {
2424
private String uri;
2525
private String dirName;
2626
private int dirType;
27-
private OkHttpClient httpClient;
27+
private static OkHttpClient httpClient;
2828
private Context context;
2929

3030
public FileDownloader(Context context, String uri, String dirName, int dirType) {
3131
this.context = context.getApplicationContext();
3232
this.uri = uri;
3333
this.dirName = dirName;
3434
this.dirType = dirType;
35-
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
36-
37-
if (BuildConfig.DEBUG)
38-
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
39-
else
40-
interceptor.setLevel(HttpLoggingInterceptor.Level.NONE);
41-
this.httpClient = new OkHttpClient.Builder()
42-
.addInterceptor(interceptor)
43-
.build();
35+
initHttpClient();
36+
}
37+
38+
private void initHttpClient() {
39+
if (httpClient == null) {
40+
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
41+
if (BuildConfig.DEBUG)
42+
interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);
43+
else
44+
interceptor.setLevel(HttpLoggingInterceptor.Level.NONE);
45+
httpClient = new OkHttpClient.Builder()
46+
.addInterceptor(interceptor)
47+
.build();
48+
}
4449
}
4550

4651
@WorkerThread
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package com.krishna.fileloader.request;
2+
3+
/**
4+
* Created by krishna on 12/10/17.
5+
*/
6+
7+
public class MultiFileLoadRequest {
8+
private String uri;
9+
private String directoryName;
10+
private int directoryType;
11+
private boolean forceLoadFromNetwork;
12+
13+
public MultiFileLoadRequest(String uri, String directoryName, int directoryType, boolean forceLoadFromNetwork) {
14+
this.uri = uri;
15+
this.directoryName = directoryName;
16+
this.directoryType = directoryType;
17+
this.forceLoadFromNetwork = forceLoadFromNetwork;
18+
}
19+
20+
public String getUri() {
21+
return uri;
22+
}
23+
24+
public void setUri(String uri) {
25+
this.uri = uri;
26+
}
27+
28+
public String getDirectoryName() {
29+
return directoryName;
30+
}
31+
32+
public void setDirectoryName(String directoryName) {
33+
this.directoryName = directoryName;
34+
}
35+
36+
public int getDirectoryType() {
37+
return directoryType;
38+
}
39+
40+
public void setDirectoryType(int directoryType) {
41+
this.directoryType = directoryType;
42+
}
43+
44+
public boolean isForceLoadFromNetwork() {
45+
return forceLoadFromNetwork;
46+
}
47+
48+
public void setForceLoadFromNetwork(boolean forceLoadFromNetwork) {
49+
this.forceLoadFromNetwork = forceLoadFromNetwork;
50+
}
51+
}

0 commit comments

Comments
 (0)