Merge pull request #1276 from nextcloud/conversationActions

Make observer type save
This commit is contained in:
Joas Schilling 2021-05-21 09:49:30 +02:00 committed by GitHub
commit 3ca56793ff
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -51,6 +51,7 @@ import com.nextcloud.talk.models.json.capabilities.Capabilities;
import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall; import com.nextcloud.talk.models.json.capabilities.CapabilitiesOverall;
import com.nextcloud.talk.models.json.conversations.Conversation; import com.nextcloud.talk.models.json.conversations.Conversation;
import com.nextcloud.talk.models.json.conversations.RoomOverall; import com.nextcloud.talk.models.json.conversations.RoomOverall;
import com.nextcloud.talk.models.json.generic.GenericOverall;
import com.nextcloud.talk.models.json.participants.AddParticipantOverall; import com.nextcloud.talk.models.json.participants.AddParticipantOverall;
import com.nextcloud.talk.utils.ApiUtils; import com.nextcloud.talk.utils.ApiUtils;
import com.nextcloud.talk.utils.ConductorRemapping; import com.nextcloud.talk.utils.ConductorRemapping;
@ -75,6 +76,7 @@ import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers; import io.reactivex.schedulers.Schedulers;
import retrofit2.HttpException; import retrofit2.HttpException;
import retrofit2.Response;
@AutoInjector(NextcloudTalkApplication.class) @AutoInjector(NextcloudTalkApplication.class)
public class OperationsMenuController extends BaseController { public class OperationsMenuController extends BaseController {
@ -260,7 +262,8 @@ public class OperationsMenuController extends BaseController {
@SuppressLint("LongLogTag") @SuppressLint("LongLogTag")
private void processOperation() { private void processOperation() {
OperationsObserver operationsObserver = new OperationsObserver(); RoomOperationsObserver roomOperationsObserver = new RoomOperationsObserver();
GenericOperationsObserver genericOperationsObserver = new GenericOperationsObserver();
if (currentUser == null) { if (currentUser == null) {
showResultImage(false, true); showResultImage(false, true);
@ -279,7 +282,7 @@ public class OperationsMenuController extends BaseController {
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.retry(1) .retry(1)
.subscribe(operationsObserver); .subscribe(genericOperationsObserver);
break; break;
case 3: case 3:
ncApi.makeRoomPublic(credentials, ApiUtils.getUrlForRoomPublic(apiVersion, currentUser.getBaseUrl(), ncApi.makeRoomPublic(credentials, ApiUtils.getUrlForRoomPublic(apiVersion, currentUser.getBaseUrl(),
@ -287,7 +290,7 @@ public class OperationsMenuController extends BaseController {
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.retry(1) .retry(1)
.subscribe(operationsObserver); .subscribe(genericOperationsObserver);
break; break;
case 4: case 4:
case 5: case 5:
@ -301,7 +304,7 @@ public class OperationsMenuController extends BaseController {
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.retry(1) .retry(1)
.subscribe(operationsObserver); .subscribe(genericOperationsObserver);
break; break;
case 7: case 7:
// Operation 7 is sharing, so we handle this differently // Operation 7 is sharing, so we handle this differently
@ -313,7 +316,7 @@ public class OperationsMenuController extends BaseController {
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.retry(1) .retry(1)
.subscribe(operationsObserver); .subscribe(genericOperationsObserver);
break; break;
case 10: case 10:
ncApi.getRoom(credentials, ApiUtils.getUrlForRoom(apiVersion, baseUrl, conversationToken)) ncApi.getRoom(credentials, ApiUtils.getUrlForRoom(apiVersion, baseUrl, conversationToken))
@ -477,7 +480,7 @@ public class OperationsMenuController extends BaseController {
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.retry(1) .retry(1)
.subscribe(operationsObserver); .subscribe(genericOperationsObserver);
} else { } else {
ncApi.addConversationToFavorites(credentials, ncApi.addConversationToFavorites(credentials,
ApiUtils.getUrlForRoomFavorite(apiVersion, ApiUtils.getUrlForRoomFavorite(apiVersion,
@ -486,7 +489,7 @@ public class OperationsMenuController extends BaseController {
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.retry(1) .retry(1)
.subscribe(operationsObserver); .subscribe(genericOperationsObserver);
} }
break; break;
case 99: case 99:
@ -497,7 +500,7 @@ public class OperationsMenuController extends BaseController {
.subscribeOn(Schedulers.io()) .subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.retry(1) .retry(1)
.subscribe(operationsObserver); .subscribe(roomOperationsObserver);
break; break;
default: default:
break; break;
@ -690,32 +693,12 @@ public class OperationsMenuController extends BaseController {
} }
} }
private class OperationsObserver implements Observer { private void handleObserverError(@io.reactivex.annotations.NonNull Throwable e) {
@Override
public void onSubscribe(Disposable d) {
disposable = d;
}
@Override
public void onNext(Object o) {
if (operationCode != 99) {
RoomOverall roomOverall = (RoomOverall) o;
conversation = roomOverall.getOcs().getData();
showResultImage(true, false);
} else {
RoomOverall roomOverall = (RoomOverall) o;
conversation = roomOverall.getOcs().getData();
initiateConversation(true);
}
}
@Override
public void onError(Throwable e) {
if (operationCode != 99 || !(e instanceof HttpException)) { if (operationCode != 99 || !(e instanceof HttpException)) {
showResultImage(false, false); showResultImage(false, false);
} else { } else {
if (((HttpException) e).response().code() == 403) { Response<?> response = ((HttpException) e).response();
if (response != null && response.code() == 403) {
eventBus.post(new BottomSheetLockEvent(true, 0, false, eventBus.post(new BottomSheetLockEvent(true, 0, false,
false)); false));
ApplicationWideMessageHolder.getInstance().setMessageType(ApplicationWideMessageHolder.MessageType.CALL_PASSWORD_WRONG); ApplicationWideMessageHolder.getInstance().setMessageType(ApplicationWideMessageHolder.MessageType.CALL_PASSWORD_WRONG);
@ -727,6 +710,56 @@ public class OperationsMenuController extends BaseController {
dispose(); dispose();
} }
private class GenericOperationsObserver implements Observer<GenericOverall> {
@Override
public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {
disposable = d;
}
@Override
public void onNext(@io.reactivex.annotations.NonNull GenericOverall genericOverall) {
if (operationCode != 99) {
showResultImage(true, false);
} else {
throw new IllegalArgumentException("Unsupported operation code observed!");
}
}
@Override
public void onError(@io.reactivex.annotations.NonNull Throwable e) {
handleObserverError(e);
}
@Override
public void onComplete() {
dispose();
}
}
private class RoomOperationsObserver implements Observer<RoomOverall> {
@Override
public void onSubscribe(@io.reactivex.annotations.NonNull Disposable d) {
disposable = d;
}
@Override
public void onNext(@io.reactivex.annotations.NonNull RoomOverall roomOverall) {
conversation = roomOverall.getOcs().getData();
if (operationCode != 99) {
showResultImage(true, false);
} else {
conversation = roomOverall.getOcs().getData();
initiateConversation(true);
}
}
@Override
public void onError(@io.reactivex.annotations.NonNull Throwable e) {
handleObserverError(e);
}
@Override @Override
public void onComplete() { public void onComplete() {
dispose(); dispose();