Update dependencies. Update last chapter read in MAL only when the reader is left, instead of on every chapter change. Other minor improvements.

This commit is contained in:
inorichi
2015-12-16 15:37:00 +01:00
parent 273527e7fb
commit 04d9176c3c
13 changed files with 82 additions and 106 deletions
@@ -8,25 +8,22 @@ import java.util.List;
import javax.inject.Inject;
import de.greenrobot.event.EventBus;
import eu.kanade.mangafeed.data.mangasync.MangaSyncManager;
import eu.kanade.mangafeed.data.mangasync.services.MyAnimeList;
import eu.kanade.mangafeed.data.sync.UpdateMangaSyncService;
import eu.kanade.mangafeed.data.database.DatabaseHelper;
import eu.kanade.mangafeed.data.database.models.Chapter;
import eu.kanade.mangafeed.data.database.models.MangaSync;
import eu.kanade.mangafeed.data.database.models.Manga;
import eu.kanade.mangafeed.data.download.DownloadManager;
import eu.kanade.mangafeed.data.mangasync.MangaSyncManager;
import eu.kanade.mangafeed.data.mangasync.base.MangaSyncService;
import eu.kanade.mangafeed.data.preference.PreferencesHelper;
import eu.kanade.mangafeed.data.source.SourceManager;
import eu.kanade.mangafeed.data.source.base.Source;
import eu.kanade.mangafeed.data.source.model.Page;
import eu.kanade.mangafeed.data.sync.UpdateMangaSyncService;
import eu.kanade.mangafeed.event.ReaderEvent;
import eu.kanade.mangafeed.event.UpdateMangaSyncEvent;
import eu.kanade.mangafeed.ui.base.presenter.BasePresenter;
import eu.kanade.mangafeed.util.EventBusHook;
import icepick.State;
import rx.Observable;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import rx.subjects.PublishSubject;
@@ -53,9 +50,6 @@ public class ReaderPresenter extends BasePresenter<ReaderActivity> {
private PublishSubject<Page> retryPageSubject;
private Subscription nextChapterSubscription;
private Subscription previousChapterSubscription;
private static final int GET_PAGE_LIST = 1;
private static final int GET_PAGE_IMAGES = 2;
private static final int RETRY_IMAGES = 3;
@@ -110,6 +104,9 @@ public class ReaderPresenter extends BasePresenter<ReaderActivity> {
@Override
protected void onDestroy() {
unregisterForEvents();
if (pageList != null && isChapterFinished()) {
updateMangaSyncLastChapterRead();
}
onChapterLeft();
super.onDestroy();
}
@@ -231,13 +228,11 @@ public class ReaderPresenter extends BasePresenter<ReaderActivity> {
source.savePageList(chapter.url, pageList);
// Save current progress of the chapter. Mark as read if the chapter is finished
// and update progress in remote services (like MyAnimeList)
chapter.last_page_read = currentPage;
if (isChapterFinished()) {
chapter.read = true;
updateMangaSyncLastChapterRead();
}
db.insertChapter(chapter).executeAsBlocking();
db.insertChapter(chapter).createObservable().subscribe();
}
// Check whether the chapter has been read
@@ -246,26 +241,23 @@ public class ReaderPresenter extends BasePresenter<ReaderActivity> {
}
private void updateMangaSyncLastChapterRead() {
// TODO don't use MAL methods for possible alternatives to MAL
MyAnimeList mal = syncManager.getMyAnimeList();
db.getMangaSync(manga).createObservable()
.take(1)
.flatMap(Observable::from)
.doOnNext(mangaSync -> {
MangaSyncService service = syncManager.getSyncService(mangaSync.sync_id);
if (!service.isLogged())
return;
if (!mal.isLogged())
return;
int lastChapterReadLocal = (int) Math.floor(chapter.chapter_number);
int lastChapterReadRemote = mangaSync.last_chapter_read;
List<MangaSync> result = db.getMangaSync(manga, mal).executeAsBlocking();
if (result.isEmpty())
return;
MangaSync mangaSync = result.get(0);
int lastChapterReadLocal = (int) Math.floor(chapter.chapter_number);
int lastChapterReadRemote = mangaSync.last_chapter_read;
if (lastChapterReadLocal > lastChapterReadRemote) {
mangaSync.last_chapter_read = lastChapterReadLocal;
EventBus.getDefault().postSticky(new UpdateMangaSyncEvent(mangaSync));
UpdateMangaSyncService.start(getContext());
}
if (lastChapterReadLocal > lastChapterReadRemote) {
mangaSync.last_chapter_read = lastChapterReadLocal;
UpdateMangaSyncService.start(getContext(), mangaSync);
}
})
.subscribe();
}
public void setCurrentPage(int currentPage) {
@@ -273,20 +265,14 @@ public class ReaderPresenter extends BasePresenter<ReaderActivity> {
}
private void getAdjacentChapters() {
if (nextChapterSubscription != null)
remove(nextChapterSubscription);
add(nextChapterSubscription = db.getNextChapter(chapter).createObservable()
add(db.getNextChapter(chapter).createObservable()
.take(1)
.flatMap(Observable::from)
.subscribeOn(Schedulers.io())
.subscribe(result -> nextChapter = result));
if (previousChapterSubscription != null)
remove(previousChapterSubscription);
add(previousChapterSubscription = db.getPreviousChapter(chapter).createObservable()
add(db.getPreviousChapter(chapter).createObservable()
.take(1)
.flatMap(Observable::from)
.subscribeOn(Schedulers.io())
.subscribe(result -> previousChapter = result));
}
@@ -12,7 +12,7 @@ import java.util.List;
import javax.inject.Inject;
import eu.kanade.mangafeed.App;
import eu.kanade.mangafeed.data.mangasync.base.BaseMangaSync;
import eu.kanade.mangafeed.data.mangasync.base.MangaSyncService;
import eu.kanade.mangafeed.data.mangasync.MangaSyncManager;
import eu.kanade.mangafeed.data.source.SourceManager;
import eu.kanade.mangafeed.data.source.base.Source;
@@ -60,7 +60,7 @@ public class SettingsAccountsFragment extends SettingsNestedFragment {
mangaSyncCategory.setTitle("Sync");
screen.addPreference(mangaSyncCategory);
for (BaseMangaSync sync : syncManager.getSyncServices()) {
for (MangaSyncService sync : syncManager.getSyncServices()) {
MangaSyncLoginDialog dialog = new MangaSyncLoginDialog(
screen.getContext(), preferences, sync);
dialog.setTitle(sync.getName());
@@ -5,7 +5,7 @@ import android.content.DialogInterface;
import android.view.View;
import eu.kanade.mangafeed.R;
import eu.kanade.mangafeed.data.mangasync.base.BaseMangaSync;
import eu.kanade.mangafeed.data.mangasync.base.MangaSyncService;
import eu.kanade.mangafeed.data.preference.PreferencesHelper;
import eu.kanade.mangafeed.util.ToastUtil;
import rx.android.schedulers.AndroidSchedulers;
@@ -13,9 +13,9 @@ import rx.schedulers.Schedulers;
public class MangaSyncLoginDialog extends LoginDialogPreference {
private BaseMangaSync sync;
private MangaSyncService sync;
public MangaSyncLoginDialog(Context context, PreferencesHelper preferences, BaseMangaSync sync) {
public MangaSyncLoginDialog(Context context, PreferencesHelper preferences, MangaSyncService sync) {
super(context, preferences);
this.sync = sync;
}