Нет, всё очень плохо, так Rx использовать нельзя.
Внутри цепочки сайдэффекты нужно минимизировать, они у тебя на любой чих.
Внутри цепочки не должно быть никаких "освобождений ресурсов" в виде disposables.dispose(). dispose должен быть только вне цепочки. Тем более, что неизвестно, что ты напихал ещё в этот disposable. Зафейлилась одна цепочка - и всё, работа встала
полностью, потому что больше ничего ты в этот disposables запихать не сможешь. clear() надо вызывать в случае, когда тебе нужно очистить CompositeDisposable.
.flatMap{ Observable.fromIterable(it)}
это вообще что за дичь бессмысленная? просто удали эту строку и ничего не изменится.
Обычно методы типа getVideos что-то возвращают. В твоем случае это должен быть по ситуации Observable/Single.
.onErrorReturnItem(mutableListOf(Video("ErrorId")))
Дичь. Мутабельные данные в стриме - путь в никуда. Только иммутабельные. ErrorId? Orly? Сделай ты sealed класс, в конце концов.
Почитай про SOLID, этот твой метод делает слишком много всего.