UpdateMangaSyncService.java 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package eu.kanade.mangafeed.data.sync;
  2. import android.app.Service;
  3. import android.content.Context;
  4. import android.content.Intent;
  5. import android.os.IBinder;
  6. import javax.inject.Inject;
  7. import eu.kanade.mangafeed.App;
  8. import eu.kanade.mangafeed.data.database.DatabaseHelper;
  9. import eu.kanade.mangafeed.data.database.models.MangaSync;
  10. import eu.kanade.mangafeed.data.mangasync.MangaSyncManager;
  11. import eu.kanade.mangafeed.data.mangasync.base.MangaSyncService;
  12. import rx.Observable;
  13. import rx.android.schedulers.AndroidSchedulers;
  14. import rx.schedulers.Schedulers;
  15. import rx.subscriptions.CompositeSubscription;
  16. public class UpdateMangaSyncService extends Service {
  17. @Inject MangaSyncManager syncManager;
  18. @Inject DatabaseHelper db;
  19. private CompositeSubscription subscriptions;
  20. private static final String EXTRA_MANGASYNC = "extra_mangasync";
  21. public static void start(Context context, MangaSync mangaSync) {
  22. Intent intent = new Intent(context, UpdateMangaSyncService.class);
  23. intent.putExtra(EXTRA_MANGASYNC, mangaSync);
  24. context.startService(intent);
  25. }
  26. @Override
  27. public void onCreate() {
  28. super.onCreate();
  29. App.get(this).getComponent().inject(this);
  30. subscriptions = new CompositeSubscription();
  31. }
  32. @Override
  33. public int onStartCommand(Intent intent, int flags, int startId) {
  34. MangaSync mangaSync = (MangaSync) intent.getSerializableExtra(EXTRA_MANGASYNC);
  35. updateLastChapterRead(mangaSync, startId);
  36. return START_STICKY;
  37. }
  38. @Override
  39. public void onDestroy() {
  40. subscriptions.unsubscribe();
  41. super.onDestroy();
  42. }
  43. @Override
  44. public IBinder onBind(Intent intent) {
  45. return null;
  46. }
  47. private void updateLastChapterRead(MangaSync mangaSync, int startId) {
  48. MangaSyncService sync = syncManager.getSyncService(mangaSync.sync_id);
  49. subscriptions.add(Observable.defer(() -> sync.update(mangaSync))
  50. .flatMap(response -> {
  51. if (response.isSuccessful()) {
  52. return db.insertMangaSync(mangaSync).createObservable();
  53. }
  54. return Observable.error(new Exception("Could not update MAL"));
  55. })
  56. .subscribeOn(Schedulers.io())
  57. .observeOn(AndroidSchedulers.mainThread())
  58. .subscribe(result -> {
  59. stopSelf(startId);
  60. }, error -> {
  61. stopSelf(startId);
  62. }));
  63. }
  64. }