Skip to content

Commit

Permalink
1. new api: error translator set and do
Browse files Browse the repository at this point in the history
2. use errorCode instead errorMessage
3. remove customer headers
4. update readme
  • Loading branch information
SirLYC committed Jun 12, 2019
1 parent 3a151c0 commit d5ccb3c
Show file tree
Hide file tree
Showing 21 changed files with 209 additions and 425 deletions.
9 changes: 4 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ allprojects {

```
dependencies {
implementation 'com.github.SirLYC:Yuchuan-Downloader:latest.release'
implementation 'com.github.SirLYC:Yuchuan-Downloader:latest.release'
}
```

Expand Down Expand Up @@ -104,18 +104,17 @@ private SubmitListener submitListener = new SubmitListener() {
};
// path: parent directory to store your file
// filename: can be null; if not null, downloader will use it to save your file
// customerHeaders: Map<String, String>
YCDownloader.submit(url, path, filename, customerHeaders, submitListener);
YCDownloader.submit(url, path, filename, submitListener);
```

**listen to download progress or state change**
```
DownloadListener downloadListener = ...;
YCDownloader.register(downloadListener);
YCDownloader.registerDownloadListener(downloadListener);
// you should unregister it to avoid memory leak
// such as Activity.OnDestroy
YCDownloader.unregister(downloadListener);
YCDownloader.unregisterDownloadListener(downloadListener);
```

**query download info**
Expand Down
2 changes: 1 addition & 1 deletion config.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ ext {
'targetSdkVersion' : 28,
'minSdkVersion' : 19,
'versionCode' : 1,
'versionName' : '0.1.0-beta'
'versionName' : '0.2.0-beta'
]
deps = [
'kotlin-stdlib' : "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version",
Expand Down
32 changes: 0 additions & 32 deletions downloader/src/androidTest/java/com/lyc/downloader/DBTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@
import android.database.sqlite.SQLiteDatabase;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.runner.AndroidJUnit4;
import com.lyc.downloader.db.CustomerHeader;
import com.lyc.downloader.db.CustomerHeaderDao;
import com.lyc.downloader.db.DaoMaster;
import com.lyc.downloader.db.DaoMaster.DevOpenHelper;
import com.lyc.downloader.db.DaoSession;
Expand Down Expand Up @@ -58,44 +56,18 @@ public void testDB() {
DownloadInfoDao downloadInfoDao = daoSession.getDownloadInfoDao();

DownloadInfo downloadInfo = new DownloadInfo(null, "http", "file", "name", true, 0, 0, 0, null, new Date(), null, null);
List<CustomerHeader> customerHeaders = new ArrayList<>();
customerHeaders.add(new CustomerHeader(null, 0, "A", "A"));
customerHeaders.add(new CustomerHeader(null, 0, "B", "A"));
customerHeaders.add(new CustomerHeader(null, 0, "C", "A"));
customerHeaders.add(new CustomerHeader(null, 0, "D", "A"));
long id = downloadInfoDao.insert(downloadInfo);
Assert.assertEquals(new Long(id), downloadInfo.getId());
Assert.assertEquals(1, downloadInfoDao.loadAll().size());
Assert.assertEquals(0, downloadInfo.getCustomerHeaders().size());
Assert.assertEquals(0, downloadInfo.getDownloadThreadInfos().size());

for (CustomerHeader customerHeader : customerHeaders) {
customerHeader.setDownloadInfoId(id);
}

CustomerHeaderDao customerHeaderDao = daoSession.getCustomerHeaderDao();
customerHeaderDao.saveInTx(customerHeaders);
Assert.assertEquals(customerHeaders.size(), customerHeaderDao.loadAll().size());

for (CustomerHeader customerHeader : customerHeaders) {
Assert.assertNotEquals(null, customerHeader.getDownloadInfoId());
}

for (int i = 1; i < customerHeaders.size(); i++) {
Assert.assertNotEquals(customerHeaders.get(i - 1).getId(), customerHeaders.get(i).getId());
}

Assert.assertEquals(0, downloadInfo.getCustomerHeaders().size());
downloadInfo.resetCustomerHeaders();
Assert.assertEquals(downloadInfo.getCustomerHeaders().size(), customerHeaders.size());

List<DownloadThreadInfo> downloadThreadInfoList = new ArrayList<>();
for (int i = 0; i < 4; i++) {
downloadThreadInfoList.add(new DownloadThreadInfo(null, i, 0, 0, 0, id));
}
DownloadThreadInfoDao downloadThreadInfoDao = daoSession.getDownloadThreadInfoDao();
downloadThreadInfoDao.saveInTx(downloadThreadInfoList);
Assert.assertEquals(downloadThreadInfoList.size(), customerHeaderDao.loadAll().size());

for (int i = 1; i < downloadThreadInfoList.size(); i++) {
Assert.assertNotEquals(downloadThreadInfoList.get(i - 1), downloadThreadInfoList.get(i));
Expand All @@ -106,9 +78,6 @@ public void testDB() {
Assert.assertEquals(downloadThreadInfoList.size(), downloadInfo.getDownloadThreadInfos().size());

daoSession.runInTx(() -> {
for (CustomerHeader customerHeader : downloadInfo.getCustomerHeaders()) {
customerHeaderDao.delete(customerHeader);
}

downloadThreadInfoDao.deleteInTx(downloadThreadInfoList);
for (DownloadThreadInfo downloadThreadInfo : downloadInfo.getDownloadThreadInfos()) {
Expand All @@ -120,6 +89,5 @@ public void testDB() {

Assert.assertEquals(downloadInfoDao.loadAll().size(), 0);
Assert.assertEquals(downloadThreadInfoDao.loadAll().size(), 0);
Assert.assertEquals(customerHeaderDao.loadAll().size(), 0);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ interface IDownloadCallback {

void onUpdateInfo(inout DownloadInfo downloadInfo);

void onDownloadError(long id, String reason, boolean fatal);
void onDownloadError(long id, int code, boolean fatal);

void onDownloadStart(inout DownloadInfo downloadInfo);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ interface IDownloadService {

void removeDownloadCallback(IDownloadCallback callback);

void submit(String url, String path, String filename, in Map customerHeaders, ISubmitCallback callback);
void submit(String url, String path, String filename, ISubmitCallback callback);

DownloadInfo queryDownloadInfo(long id);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
import com.lyc.downloader.utils.Logger;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
Expand Down Expand Up @@ -152,11 +151,11 @@ public void cancel(long id) {
}

@Override
public void submit(String url, String path, String filename, Map<String, String> customerHeaders, SubmitListener listener) {
public void submit(String url, String path, String filename, SubmitListener listener) {
DownloadExecutors.command.execute(() -> {
waitingForConnection();
try {
downloadService.submit(url, path, filename, customerHeaders, new Stub() {
downloadService.submit(url, path, filename, new Stub() {
@Override
public void submitSuccess(DownloadInfo downloadInfo) {
DownloadExecutors.androidMain.execute(() -> listener.submitSuccess(downloadInfo));
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
package com.lyc.downloader;

import java.util.Map;

/**
* Created by Liu Yuchuan on 2019/5/18.
*/
Expand All @@ -17,7 +15,7 @@ public interface DownloadController {

void cancel(long id);

void submit(String url, String path, String filename, Map<String, String> customerHeaders, SubmitListener listener);
void submit(String url, String path, String filename, SubmitListener listener);

void delete(long id, boolean deleteFile);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,15 @@ public class DownloadError {
private DownloadError() {
}

public static DownloadError instance() {
static DownloadError instance() {
return instance;
}

boolean isFatal(int code) {
return code >= 100;
}

public void setTranslator(Translator translator) {
void setTranslator(Translator translator) {
if (translator == null) {
throw new NullPointerException("DownloadError#translator cannot be null");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ public interface DownloadListener {

void onUpdateInfo(DownloadInfo downloadInfo);

void onDownloadError(long id, String reason, boolean fatal);
void onDownloadError(long id, int code, boolean fatal);

void onDownloadStart(DownloadInfo downloadInfo);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@
import android.annotation.SuppressLint;
import com.lyc.downloader.db.DownloadInfo;

import java.util.*;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.LinkedList;
import java.util.Map;
import java.util.Set;

/**
* @author liuyuchuan
Expand Down Expand Up @@ -123,14 +128,14 @@ public void onUpdateInfo(DownloadInfo downloadInfo) {
}

@Override
public void onDownloadError(long id, String reason, boolean fatal) {
public void onDownloadError(long id, int code, boolean fatal) {
Collection<DownloadListener> downloadListeners = getDispatchListeners(id);
if (downloadListeners.isEmpty()) {
return;
}
DownloadExecutors.androidMain.execute(() -> {
for (DownloadListener downloadListener : downloadListeners) {
downloadListener.onDownloadError(id, reason, fatal);
downloadListener.onDownloadError(id, code, fatal);
}
});
}
Expand Down
45 changes: 15 additions & 30 deletions downloader/src/main/java/com/lyc/downloader/DownloadManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,11 @@
import android.database.sqlite.SQLiteDatabase;
import androidx.annotation.WorkerThread;
import androidx.collection.LongSparseArray;
import com.lyc.downloader.db.*;
import com.lyc.downloader.db.DaoMaster;
import com.lyc.downloader.db.DaoMaster.DevOpenHelper;
import com.lyc.downloader.db.DaoSession;
import com.lyc.downloader.db.DownloadInfo;
import com.lyc.downloader.db.DownloadInfoDao;
import com.lyc.downloader.utils.Logger;
import com.lyc.downloader.utils.UniqueDequeue;
import okhttp3.OkHttpClient;
Expand All @@ -15,7 +18,11 @@
import okhttp3.logging.HttpLoggingInterceptor.Level;

import java.lang.ref.WeakReference;
import java.util.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.Deque;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;

Expand Down Expand Up @@ -81,12 +88,6 @@ static DownloadManager instance() {
return instance;
}

void registerTask(DownloadTask downloadTask) {
Long id = downloadTask.downloadInfo.getId();
taskTable.put(id, downloadTask);
infoTable.put(id, downloadTask.downloadInfo);
}

private void pauseAllInner() {
for (Long aLong : waitingTasksId) {
DownloadTask downloadTask = taskTable.get(aLong);
Expand Down Expand Up @@ -254,7 +255,7 @@ public void onUpdateInfo(DownloadInfo downloadInfo) {
}

@Override
public void onDownloadError(long id, String reason, boolean fatal) {
public void onDownloadError(long id, int code, boolean fatal) {
DownloadExecutors.message.execute(() -> {
lastSendMessageTime.remove(id);
DownloadTask downloadTask = taskTable.get(id);
Expand All @@ -265,7 +266,7 @@ public void onDownloadError(long id, String reason, boolean fatal) {
if (userDownloadListener != null) {
DownloadListener downloadListener = userDownloadListener.get();
if (downloadListener != null) {
downloadListener.onDownloadError(id, reason, fatal);
downloadListener.onDownloadError(id, code, fatal);
}
}
});
Expand Down Expand Up @@ -391,11 +392,11 @@ public void onDownloadFinished(DownloadInfo downloadInfo) {
}

@WorkerThread
private void submitInner(String url, String path, String filename, List<CustomerHeader> customerHeaders, SubmitListener listener) {
private void submitInner(String url, String path, String filename, SubmitListener listener) {
DownloadInfo downloadInfo = new DownloadInfo(null, url, path, filename, true, WAITING,
0, 0, null, new Date(), null, null);
try {
Long insertId = PersistUtil.persistDownloadInfo(daoSession, downloadInfo, null, customerHeaders);
Long insertId = PersistUtil.persistDownloadInfo(daoSession, downloadInfo, null);
DownloadExecutors.message.execute(() -> {
if (insertId != null) {
infoTable.put(insertId, downloadInfo);
Expand Down Expand Up @@ -425,13 +426,6 @@ public void startAll() {
DownloadExecutors.message.execute(this::startAllInner);
}

public void end() {
DownloadExecutors.message.execute(() -> {
instance = null;
pauseAll();
});
}

// include re-download
@Override
public void startOrResume(long id, boolean restart) {
Expand Down Expand Up @@ -480,24 +474,15 @@ public void cancel(long id) {
* @param url download url; must started with http/https
* @param path nonnull; parent directory of the file
* @param filename self-defined filename; if null, it will be parsed by url or a pivot request by downloadManager
* @param customerHeaders customer header (`Range` will be removed)
* @param listener listener to inform submit success or fail
*/
@Override
public void submit(String url, String path, String filename, Map<String, String> customerHeaders, SubmitListener listener) {
public void submit(String url, String path, String filename, SubmitListener listener) {
waitForRecovering();
List<CustomerHeader> headers = new ArrayList<>();
if (customerHeaders != null) {
for (String s : customerHeaders.keySet()) {
if (s != null && !s.equalsIgnoreCase("range")) {
headers.add(new CustomerHeader(null, 0, s, customerHeaders.get(s)));
}
}
}
if (path == null) {
throw new NullPointerException("path cannot be null");
}
DownloadExecutors.io.execute(() -> submitInner(url, path, filename, headers, listener));
DownloadExecutors.io.execute(() -> submitInner(url, path, filename, listener));
}

@Override
Expand Down
Loading

0 comments on commit d5ccb3c

Please sign in to comment.