12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- package eu.kanade.mangafeed.data.sync;
- import android.app.Service;
- import android.content.Context;
- import android.content.Intent;
- import android.os.IBinder;
- import javax.inject.Inject;
- 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.MangaSyncService;
- import rx.Observable;
- import rx.android.schedulers.AndroidSchedulers;
- import rx.schedulers.Schedulers;
- import rx.subscriptions.CompositeSubscription;
- public class UpdateMangaSyncService extends Service {
- @Inject MangaSyncManager syncManager;
- @Inject DatabaseHelper db;
- private CompositeSubscription subscriptions;
- 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
- public void onCreate() {
- super.onCreate();
- App.get(this).getComponent().inject(this);
- subscriptions = new CompositeSubscription();
- }
- @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() {
- subscriptions.unsubscribe();
- super.onDestroy();
- }
- @Override
- public IBinder onBind(Intent intent) {
- return null;
- }
- private void updateLastChapterRead(MangaSync mangaSync, int startId) {
- MangaSyncService sync = syncManager.getSyncService(mangaSync.sync_id);
- subscriptions.add(Observable.defer(() -> sync.update(mangaSync))
- .flatMap(response -> {
- if (response.isSuccessful()) {
- return db.insertMangaSync(mangaSync).createObservable();
- }
- return Observable.error(new Exception("Could not update MAL"));
- })
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(result -> {
- stopSelf(startId);
- }, error -> {
- stopSelf(startId);
- }));
- }
- }
|