Update last chapter read in MAL when reaching the last page

This commit is contained in:
inorichi
2015-11-27 00:51:18 +01:00
parent e1a14be2bd
commit 9db81b1832
12 changed files with 183 additions and 20 deletions

View File

@@ -1,5 +1,8 @@
package eu.kanade.mangafeed.data.chaptersync;
import com.squareup.okhttp.Response;
import eu.kanade.mangafeed.data.database.models.ChapterSync;
import rx.Observable;
public abstract class BaseChapterSync {
@@ -13,4 +16,6 @@ public abstract class BaseChapterSync {
public abstract Observable<Boolean> login(String username, String password);
public abstract boolean isLogged();
public abstract Observable<Response> update(ChapterSync chapter);
}

View File

@@ -26,4 +26,12 @@ public class ChapterSyncManager {
return services;
}
public BaseChapterSync getSyncService(int id) {
switch (id) {
case MYANIMELIST:
return myAnimeList;
}
return null;
}
}

View File

@@ -89,7 +89,7 @@ public class MyAnimeList extends BaseChapterSync {
.map(entry -> {
ChapterSync chapter = ChapterSync.create(this);
chapter.title = entry.select("title").first().text();
chapter.remote_id = Long.parseLong(entry.select("id").first().text());
chapter.remote_id = Integer.parseInt(entry.select("id").first().text());
return chapter;
})
.toList();
@@ -111,7 +111,7 @@ public class MyAnimeList extends BaseChapterSync {
.map(entry -> {
ChapterSync chapter = ChapterSync.create(this);
chapter.title = entry.select("series_title").first().text();
chapter.remote_id = Long.parseLong(
chapter.remote_id = Integer.parseInt(
entry.select("series_mangadb_id").first().text());
chapter.last_chapter_read = Integer.parseInt(
entry.select("my_read_chapters").first().text());

View File

@@ -0,0 +1,77 @@
package eu.kanade.mangafeed.data.chaptersync;
import android.app.Service;
import android.content.Context;
import android.content.Intent;
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.ChapterSync;
import eu.kanade.mangafeed.data.network.NetworkHelper;
import eu.kanade.mangafeed.event.UpdateChapterSyncEvent;
import eu.kanade.mangafeed.util.EventBusHook;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import rx.subscriptions.CompositeSubscription;
public class UpdateChapterSyncService extends Service {
@Inject ChapterSyncManager syncManager;
@Inject NetworkHelper networkManager;
@Inject DatabaseHelper db;
private CompositeSubscription subscriptions;
public static void start(Context context) {
context.startService(new Intent(context, UpdateChapterSyncService.class));
}
@Override
public void onCreate() {
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) {
return START_STICKY;
}
@Override
public void onDestroy() {
EventBus.getDefault().unregister(this);
subscriptions.unsubscribe();
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
@EventBusHook
public void onEventMainThread(UpdateChapterSyncEvent event) {
updateLastChapteRead(event.getChapterSync());
}
private void updateLastChapteRead(ChapterSync chapterSync) {
BaseChapterSync sync = syncManager.getSyncService(chapterSync.sync_id);
subscriptions.add(sync.update(chapterSync)
.flatMap(response -> db.insertChapterSync(chapterSync).createObservable())
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(result -> {
stopSelf();
}, error -> {
stopSelf();
}));
}
}

View File

@@ -16,10 +16,10 @@ public class ChapterSync {
public long manga_id;
@StorIOSQLiteColumn(name = ChapterSyncTable.COLUMN_SYNC_ID)
public long sync_id;
public int sync_id;
@StorIOSQLiteColumn(name = ChapterSyncTable.COLUMN_REMOTE_ID)
public long remote_id;
public int remote_id;
@StorIOSQLiteColumn(name = ChapterSyncTable.COLUMN_TITLE)
public String title;