Guest User

Untitled

a guest
Apr 26th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.88 KB | None | 0 0
  1. private int timeDelay;
  2. private int counter;
  3. private boolean isUpdaterRunning;
  4.  
  5. private void resetUpdater(){
  6. isUpdaterRunning = false;
  7. }
  8.  
  9. private void startCheckHomeAlarms() {
  10. if (isUpdaterRunning){
  11. log("Updater is running");
  12. return;
  13. }
  14. isUpdaterRunning = true;
  15. resetDelayAndCounter();
  16. getHomes().doOnSubscribe(compositeDisposable::add)
  17. .subscribeOn(Schedulers.io())
  18. .flatMapIterable(homes -> {
  19. log("Home found: " + homes.size());
  20. return homes;
  21. })
  22. .flatMap(this::checkHome)
  23. .toList()
  24. .toObservable()
  25. .repeatWhen(objectObservable -> objectObservable.flatMap(o -> {
  26. log("Time delay: " + timeDelay);
  27. timeDelay = timeDelay == 13 ? 13 : fibonacciRecursion(counter);
  28. counter++;
  29. return Observable.just(o).delay(timeDelay, TimeUnit.SECONDS);
  30. }))
  31. .takeUntil(homes -> numberOfHomeAlarmRunning(homes) == 0)
  32. .observeOn(AndroidSchedulers.mainThread())
  33. .subscribe(this::showResult, this::logError);
  34. }
  35.  
  36. private Observable<List<Home>> getHomes(){
  37. return thingDataBase.findHomes()
  38. .flatMapIterable(homes -> homes)
  39. .filter(this::filterHome)
  40. .toList()
  41. .toObservable()
  42. .filter(homes -> homes.size() > 0)
  43. .singleOrError()
  44. .onErrorResumeNext(throwable -> Single.error(new Exception("Items not found")))
  45. .toObservable();
  46. }
  47.  
  48. private boolean filterHome(Home home){
  49. return isHomeRunning(home) || home.getStatus().equals(HomeAlarmStatus.ERROR.status());
  50. }
  51.  
  52. private int numberOfHomeAlarmRunning(List<Home> homes){
  53. int running = 0;
  54. for (Home home: homes){
  55. if (isHomeRunning(home))
  56. running++;
  57. }
  58. return running;
  59. }
  60.  
  61. private Observable<Home> checkHome(Home home){
  62. log("checkHome : " + home.getStatus());
  63. return isHomeRunning(home) ? checkHomeAlarmStatus(home) : Observable.fromCallable(() -> home);
  64. }
  65.  
  66. private boolean isHomeRunning(Home home){
  67. return home.getStatus().equals(HomeAlarmStatus.RUNNING.status());
  68. }
  69.  
  70. private Observable<Home> checkHomeAlarmStatus(Home home){
  71. return thingManager.getAlarmState(home.getId(), home.getExecutionId())
  72. .subscribeOn(Schedulers.io())
  73. .doOnSubscribe(compositeDisposable::add)
  74. .map(homeAlarm -> updateHome(home, homeAlarm))
  75. .flatMap(home1 -> updateHomeInLocalDatabase(home1));
  76. }
  77.  
  78. private Home updateHome(Home home, HomeAlarm homeAlarm){
  79. log("updateHome: " + homeAlarm.getState());
  80. home.setStatus(homeAlarm.getState());
  81. home.setHomeAlarm(homeAlarm);
  82. return home;
  83. }
  84.  
  85. private Observable<Home> updateHomeInLocalDatabase(Home home){
  86. log("updateHomeInLocalDatabase " + home.getStatus());
  87. return isHomeRunning(home) ? Observable.fromCallable(() -> home) :
  88. thingDataBase.updateHome(home).toObservable().map(o -> home);
  89. }
  90.  
  91. private void showResult(List<Home> homes){
  92. log("Results finished: " + homes.size());
  93. if (numberOfHomeAlarmRunning(homes) == 0){
  94. thingDataBase.notifyChangesOfHomesToObservers();
  95. resetUpdater();
  96. }
  97. for (Home home: homes){
  98. HomeAlarmStatus status = HomeAlarmStatus.detectHomeStatus(home.getStatus());
  99. log("Home finished " + home.getStatus() + " \n ---------------------------------------------------");
  100. showHomeAlertDialog(home, status);
  101. }
  102. }
  103.  
  104. private void showHomeAlertDialog(Home home, HomeAlarmStatus status){
  105. if (status != HomeAlarmStatus.ERROR)
  106. return;
  107. HomeAlarmDialog dialog = new HomeAlarmDialog(app.getContext(), home.getHomeAlarm());
  108. dialog.show();
  109. }
  110.  
  111. private int fibonacciRecursion(int number) {
  112. if (number == 1 || number == 2)
  113. return 1;
  114. return fibonacciRecursion(number - 1) + fibonacciRecursion(number - 2);
  115. }
Add Comment
Please, Sign In to add comment