mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 14:27:57 +01:00 
			
		
		
		
	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:
		| @@ -17,7 +17,7 @@ import com.pushtorefresh.storio.sqlite.queries.RawQuery; | ||||
| import java.util.List; | ||||
|  | ||||
| import eu.kanade.mangafeed.data.database.models.MangaSync; | ||||
| import eu.kanade.mangafeed.data.mangasync.base.BaseMangaSync; | ||||
| import eu.kanade.mangafeed.data.mangasync.base.MangaSyncService; | ||||
| import eu.kanade.mangafeed.data.database.models.Chapter; | ||||
| import eu.kanade.mangafeed.data.database.models.ChapterStorIOSQLiteDeleteResolver; | ||||
| import eu.kanade.mangafeed.data.database.models.ChapterStorIOSQLiteGetResolver; | ||||
| @@ -303,8 +303,7 @@ public class DatabaseHelper { | ||||
|  | ||||
|     // Manga sync related queries | ||||
|  | ||||
|     public PreparedGetListOfObjects<MangaSync> getMangaSync(Manga manga, BaseMangaSync sync) { | ||||
|  | ||||
|     public PreparedGetListOfObjects<MangaSync> getMangaSync(Manga manga, MangaSyncService sync) { | ||||
|         return db.get() | ||||
|                 .listOfObjects(MangaSync.class) | ||||
|                 .withQuery(Query.builder() | ||||
| @@ -316,6 +315,17 @@ public class DatabaseHelper { | ||||
|                 .prepare(); | ||||
|     } | ||||
|  | ||||
|     public PreparedGetListOfObjects<MangaSync> getMangaSync(Manga manga) { | ||||
|         return db.get() | ||||
|                 .listOfObjects(MangaSync.class) | ||||
|                 .withQuery(Query.builder() | ||||
|                         .table(MangaSyncTable.TABLE) | ||||
|                         .where(MangaSyncTable.COLUMN_MANGA_ID + "=?") | ||||
|                         .whereArgs(manga.id) | ||||
|                         .build()) | ||||
|                 .prepare(); | ||||
|     } | ||||
|  | ||||
|     public PreparedPutObject<MangaSync> insertMangaSync(MangaSync manga) { | ||||
|         return db.put() | ||||
|                 .object(manga) | ||||
|   | ||||
| @@ -3,11 +3,13 @@ package eu.kanade.mangafeed.data.database.models; | ||||
| import com.pushtorefresh.storio.sqlite.annotations.StorIOSQLiteColumn; | ||||
| import com.pushtorefresh.storio.sqlite.annotations.StorIOSQLiteType; | ||||
|  | ||||
| import eu.kanade.mangafeed.data.mangasync.base.BaseMangaSync; | ||||
| import java.io.Serializable; | ||||
|  | ||||
| import eu.kanade.mangafeed.data.mangasync.base.MangaSyncService; | ||||
| import eu.kanade.mangafeed.data.database.tables.MangaSyncTable; | ||||
|  | ||||
| @StorIOSQLiteType(table = MangaSyncTable.TABLE) | ||||
| public class MangaSync { | ||||
| public class MangaSync implements Serializable { | ||||
|  | ||||
|     @StorIOSQLiteColumn(name = MangaSyncTable.COLUMN_ID, key = true) | ||||
|     public Long id; | ||||
| @@ -33,7 +35,7 @@ public class MangaSync { | ||||
|     @StorIOSQLiteColumn(name = MangaSyncTable.COLUMN_STATUS) | ||||
|     public int status; | ||||
|  | ||||
|     public static MangaSync create(BaseMangaSync service) { | ||||
|     public static MangaSync create(MangaSyncService service) { | ||||
|         MangaSync mangasync = new MangaSync(); | ||||
|         mangasync.sync_id = service.getId(); | ||||
|         return mangasync; | ||||
|   | ||||
| @@ -5,12 +5,12 @@ import android.content.Context; | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
|  | ||||
| import eu.kanade.mangafeed.data.mangasync.base.BaseMangaSync; | ||||
| import eu.kanade.mangafeed.data.mangasync.base.MangaSyncService; | ||||
| import eu.kanade.mangafeed.data.mangasync.services.MyAnimeList; | ||||
|  | ||||
| public class MangaSyncManager { | ||||
|  | ||||
|     private List<BaseMangaSync> services; | ||||
|     private List<MangaSyncService> services; | ||||
|     private MyAnimeList myAnimeList; | ||||
|  | ||||
|     public static final int MYANIMELIST = 1; | ||||
| @@ -25,11 +25,11 @@ public class MangaSyncManager { | ||||
|         return myAnimeList; | ||||
|     } | ||||
|  | ||||
|     public List<BaseMangaSync> getSyncServices() { | ||||
|     public List<MangaSyncService> getSyncServices() { | ||||
|         return services; | ||||
|     } | ||||
|  | ||||
|     public BaseMangaSync getSyncService(int id) { | ||||
|     public MangaSyncService getSyncService(int id) { | ||||
|         switch (id) { | ||||
|             case MYANIMELIST: | ||||
|                 return myAnimeList; | ||||
|   | ||||
| @@ -5,7 +5,7 @@ import com.squareup.okhttp.Response; | ||||
| import eu.kanade.mangafeed.data.database.models.MangaSync; | ||||
| import rx.Observable; | ||||
| 
 | ||||
| public abstract class BaseMangaSync { | ||||
| public abstract class MangaSyncService { | ||||
| 
 | ||||
|     // Name of the manga sync service to display | ||||
|     public abstract String getName(); | ||||
| @@ -22,12 +22,12 @@ import javax.inject.Inject; | ||||
| import eu.kanade.mangafeed.App; | ||||
| import eu.kanade.mangafeed.data.database.models.MangaSync; | ||||
| import eu.kanade.mangafeed.data.mangasync.MangaSyncManager; | ||||
| import eu.kanade.mangafeed.data.mangasync.base.BaseMangaSync; | ||||
| import eu.kanade.mangafeed.data.mangasync.base.MangaSyncService; | ||||
| import eu.kanade.mangafeed.data.network.NetworkHelper; | ||||
| import eu.kanade.mangafeed.data.preference.PreferencesHelper; | ||||
| import rx.Observable; | ||||
|  | ||||
| public class MyAnimeList extends BaseMangaSync { | ||||
| public class MyAnimeList extends MangaSyncService { | ||||
|  | ||||
|     @Inject PreferencesHelper preferences; | ||||
|     @Inject NetworkHelper networkService; | ||||
|   | ||||
| @@ -11,7 +11,7 @@ import com.f2prateek.rx.preferences.RxSharedPreferences; | ||||
| import java.io.File; | ||||
|  | ||||
| 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.source.base.Source; | ||||
| import rx.Observable; | ||||
|  | ||||
| @@ -106,15 +106,15 @@ public class PreferencesHelper { | ||||
|                 .apply(); | ||||
|     } | ||||
|  | ||||
|     public String getMangaSyncUsername(BaseMangaSync sync) { | ||||
|     public String getMangaSyncUsername(MangaSyncService sync) { | ||||
|         return prefs.getString(MANGASYNC_ACCOUNT_USERNAME + sync.getId(), ""); | ||||
|     } | ||||
|  | ||||
|     public String getMangaSyncPassword(BaseMangaSync sync) { | ||||
|     public String getMangaSyncPassword(MangaSyncService sync) { | ||||
|         return prefs.getString(MANGASYNC_ACCOUNT_PASSWORD + sync.getId(), ""); | ||||
|     } | ||||
|  | ||||
|     public void setMangaSyncCredentials(BaseMangaSync sync, String username, String password) { | ||||
|     public void setMangaSyncCredentials(MangaSyncService sync, String username, String password) { | ||||
|         prefs.edit() | ||||
|                 .putString(MANGASYNC_ACCOUNT_USERNAME + sync.getId(), username) | ||||
|                 .putString(MANGASYNC_ACCOUNT_PASSWORD + sync.getId(), password) | ||||
|   | ||||
| @@ -7,14 +7,12 @@ import android.os.IBinder; | ||||
|  | ||||
| import javax.inject.Inject; | ||||
|  | ||||
| import de.greenrobot.event.EventBus; | ||||
| import eu.kanade.mangafeed.App; | ||||
| import eu.kanade.mangafeed.data.database.DatabaseHelper; | ||||
| import eu.kanade.mangafeed.data.database.models.MangaSync; | ||||
| import eu.kanade.mangafeed.data.mangasync.MangaSyncManager; | ||||
| import eu.kanade.mangafeed.data.mangasync.base.BaseMangaSync; | ||||
| import eu.kanade.mangafeed.event.UpdateMangaSyncEvent; | ||||
| import eu.kanade.mangafeed.util.EventBusHook; | ||||
| import eu.kanade.mangafeed.data.mangasync.base.MangaSyncService; | ||||
| import rx.Observable; | ||||
| import rx.android.schedulers.AndroidSchedulers; | ||||
| import rx.schedulers.Schedulers; | ||||
| import rx.subscriptions.CompositeSubscription; | ||||
| @@ -26,8 +24,12 @@ public class UpdateMangaSyncService extends Service { | ||||
|  | ||||
|     private CompositeSubscription subscriptions; | ||||
|  | ||||
|     public static void start(Context context) { | ||||
|         context.startService(new Intent(context, UpdateMangaSyncService.class)); | ||||
|     private static final String EXTRA_MANGASYNC = "extra_mangasync"; | ||||
|  | ||||
|     public static void start(Context context, MangaSync mangaSync) { | ||||
|         Intent intent = new Intent(context, UpdateMangaSyncService.class); | ||||
|         intent.putExtra(EXTRA_MANGASYNC, mangaSync); | ||||
|         context.startService(intent); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
| @@ -35,17 +37,17 @@ public class UpdateMangaSyncService extends Service { | ||||
|         super.onCreate(); | ||||
|         App.get(this).getComponent().inject(this); | ||||
|         subscriptions = new CompositeSubscription(); | ||||
|         EventBus.getDefault().registerSticky(this); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public int onStartCommand(Intent intent, int flags, int startId) { | ||||
|         MangaSync mangaSync = (MangaSync) intent.getSerializableExtra(EXTRA_MANGASYNC); | ||||
|         updateLastChapterRead(mangaSync, startId); | ||||
|         return START_STICKY; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void onDestroy() { | ||||
|         EventBus.getDefault().unregister(this); | ||||
|         subscriptions.unsubscribe(); | ||||
|         super.onDestroy(); | ||||
|     } | ||||
| @@ -55,22 +57,17 @@ public class UpdateMangaSyncService extends Service { | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     @EventBusHook | ||||
|     public void onEventMainThread(UpdateMangaSyncEvent event) { | ||||
|         updateLastChapteRead(event.getMangaSync()); | ||||
|     } | ||||
|     private void updateLastChapterRead(MangaSync mangaSync, int startId) { | ||||
|         MangaSyncService sync = syncManager.getSyncService(mangaSync.sync_id); | ||||
|  | ||||
|     private void updateLastChapteRead(MangaSync mangaSync) { | ||||
|         BaseMangaSync sync = syncManager.getSyncService(mangaSync.sync_id); | ||||
|  | ||||
|         subscriptions.add(sync.update(mangaSync) | ||||
|         subscriptions.add(Observable.fromCallable(() -> sync.update(mangaSync)) | ||||
|                 .flatMap(response -> db.insertMangaSync(mangaSync).createObservable()) | ||||
|                 .subscribeOn(Schedulers.io()) | ||||
|                 .observeOn(AndroidSchedulers.mainThread()) | ||||
|                 .subscribe(result -> { | ||||
|                     stopSelf(); | ||||
|                     stopSelf(startId); | ||||
|                 }, error -> { | ||||
|                     stopSelf(); | ||||
|                     stopSelf(startId); | ||||
|                 })); | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -1,17 +0,0 @@ | ||||
| package eu.kanade.mangafeed.event; | ||||
|  | ||||
| import eu.kanade.mangafeed.data.database.models.MangaSync; | ||||
|  | ||||
| public class UpdateMangaSyncEvent { | ||||
|  | ||||
|     private MangaSync mangaSync; | ||||
|  | ||||
|     public UpdateMangaSyncEvent(MangaSync mangaSync) { | ||||
|         this.mangaSync = mangaSync; | ||||
|     } | ||||
|  | ||||
|     public MangaSync getMangaSync() { | ||||
|         return mangaSync; | ||||
|     } | ||||
|  | ||||
| } | ||||
| @@ -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; | ||||
|     } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user