Fix a big issue with the download threads. Release 0.1.1

This commit is contained in:
inorichi 2016-01-20 14:38:45 +01:00
parent 0332d8dd79
commit 0210fd8828
3 changed files with 16 additions and 12 deletions

View file

@ -39,8 +39,8 @@ android {
minSdkVersion 16
targetSdkVersion 23
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
versionCode 1
versionName "0.1.0"
versionCode 2
versionName "0.1.1"
buildConfigField "String", "COMMIT_COUNT", "\"${getCommitCount()}\""
buildConfigField "String", "COMMIT_SHA", "\"${getGitSha()}\""

View file

@ -41,7 +41,7 @@ public class DownloadManager {
private PreferencesHelper preferences;
private Gson gson;
private PublishSubject<Download> downloadsQueueSubject;
private PublishSubject<List<Download>> downloadsQueueSubject;
private BehaviorSubject<Boolean> runningSubject;
private Subscription downloadsSubscription;
@ -67,7 +67,8 @@ public class DownloadManager {
downloadsSubscription.unsubscribe();
downloadsSubscription = downloadsQueueSubject
.flatMap(this::downloadChapter, preferences.downloadThreads())
.concatMap(downloads -> Observable.from(downloads)
.flatMap(this::downloadChapter, preferences.downloadThreads()))
.onBackpressureBuffer()
.observeOn(AndroidSchedulers.mainThread())
.map(download -> areAllDownloadsFinished())
@ -102,6 +103,7 @@ public class DownloadManager {
// Used to avoid downloading chapters with the same name
final List<String> addedChapters = new ArrayList<>();
final List<Download> pending = new ArrayList<>();
for (Chapter chapter : event.getChapters()) {
if (addedChapters.contains(chapter.name))
@ -112,9 +114,10 @@ public class DownloadManager {
if (!prepareDownload(download)) {
queue.add(download);
if (isRunning) downloadsQueueSubject.onNext(download);
pending.add(download);
}
}
if (isRunning) downloadsQueueSubject.onNext(pending);
}
// Public method to check if a chapter is downloaded
@ -386,18 +389,19 @@ public class DownloadManager {
if (queue.isEmpty())
return false;
boolean hasPendingDownloads = false;
if (downloadsSubscription == null)
initializeSubscriptions();
final List<Download> pending = new ArrayList<>();
for (Download download : queue) {
if (download.getStatus() != Download.DOWNLOADED) {
if (download.getStatus() != Download.QUEUE) download.setStatus(Download.QUEUE);
if (!hasPendingDownloads) hasPendingDownloads = true;
downloadsQueueSubject.onNext(download);
pending.add(download);
}
}
return hasPendingDownloads;
downloadsQueueSubject.onNext(pending);
return !pending.isEmpty();
}
public void stopDownloads() {

View file

@ -72,9 +72,9 @@ public class MainActivity extends BaseActivity {
new PrimaryDrawerItem()
.withName(R.string.label_library)
.withIdentifier(R.id.nav_drawer_library),
new PrimaryDrawerItem()
.withName(R.string.label_recent_updates)
.withIdentifier(R.id.nav_drawer_recent_updates),
// new PrimaryDrawerItem()
// .withName(R.string.label_recent_updates)
// .withIdentifier(R.id.nav_drawer_recent_updates),
new PrimaryDrawerItem()
.withName(R.string.label_catalogues)
.withIdentifier(R.id.nav_drawer_catalogues),